From 8c176ef431001fbc723a4afe48a2fa1c471a670b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Raimund=20And=C3=A9e?= Date: Sun, 29 Jan 2017 23:54:43 +0100 Subject: [PATCH] cleanup before full new upload --- AlphaFS/AlphaFS.csproj | 393 - AlphaFS/AlphaFS.ruleset | 7 - AlphaFS/AssemblyVersionInfo.cs | 35 - AlphaFS/Filesystem/AlternateDataStreamInfo.cs | 138 - AlphaFS/Filesystem/BackupFileStream.cs | 650 - AlphaFS/Filesystem/BackupStreamInfo.cs | 84 - AlphaFS/Filesystem/ByHandleFileInfo.cs | 177 - AlphaFS/Filesystem/ChangeErrorMode.cs | 56 - AlphaFS/Filesystem/CopyMoveProgressRoutine.cs | 28 - AlphaFS/Filesystem/CopyMoveResult.cs | 82 - AlphaFS/Filesystem/Device.cs | 459 - AlphaFS/Filesystem/DeviceInfo.cs | 141 - .../Directory Class/Directory.Compression.cs | 484 - .../Directory Class/Directory.CopyMove.cs | 969 - .../Directory.CountFileSystemObjects.cs | 195 - .../Directory.CreateDirectory.cs | 800 - .../Directory.CurrentDirectory.cs | 126 - .../Directory Class/Directory.Delete.cs | 417 - .../Directory.DeleteEmptySubdirectories.cs | 211 - .../Directory.EncryptedDirectoryRaw.cs | 154 - .../Directory Class/Directory.Encryption.cs | 272 - ...Directory.EnumerateAlternateDataStreams.cs | 69 - .../Directory.EnumerateDirectories.cs | 500 - ...ectory.EnumerateFileIdBothDirectoryInfo.cs | 230 - .../Directory.EnumerateFileSystemEntries.cs | 472 - ...Directory.EnumerateFileSystemEntryInfos.cs | 670 - .../Directory.EnumerateFiles.cs | 502 - .../Directory Class/Directory.Exists.cs | 110 - .../Directory.GetAccessControl.cs | 113 - .../Directory.GetChangeTime.cs | 138 - .../Directory.GetCreationTime.cs | 124 - .../Directory.GetDirectories.cs | 210 - .../Directory.GetDirectoryRoot.cs | 115 - .../Directory.GetFileSystemEntries.cs | 210 - .../Directory Class/Directory.GetFiles.cs | 216 - .../Directory.GetLastAccessTime.cs | 121 - .../Directory.GetLastWriteTime.cs | 123 - .../Directory.GetLogicalDrives.cs | 150 - .../Directory Class/Directory.GetParent.cs | 92 - .../Directory.GetProperties.cs | 286 - .../Directory.HasInheritedPermissions.cs | 58 - .../Directory.SetAccessControl.cs | 104 - .../Directory.SetCreationTime.cs | 169 - .../Directory.SetLastAccessTime.cs | 169 - .../Directory.SetLastWriteTime.cs | 167 - .../Directory.SetTimestamps.cs | 187 - .../Directory.TransferTimestamps.cs | 76 - .../Filesystem/Directory Class/Directory.cs | 31 - .../DirectoryInfo.Compression.cs | 128 - .../DirectoryInfo.CopyToMoveTo.cs | 459 - .../DirectoryInfo.CountFileSystemObjects.cs | 70 - .../DirectoryInfo.Create.cs | 81 - .../DirectoryInfo.CreateSubdirectory.cs | 165 - .../DirectoryInfo.Decrypt.cs | 28 - .../DirectoryInfo.Delete.cs | 88 - ...DirectoryInfo.DeleteEmptySubdirectories.cs | 57 - .../DirectoryInfo.Encryption.cs | 122 - ...ctoryInfo.EnumerateAlternateDataStreams.cs | 37 - .../DirectoryInfo.EnumerateDirectories.cs | 138 - .../DirectoryInfo.EnumerateFileSystemInfos.cs | 136 - .../DirectoryInfo.EnumerateFiles.cs | 138 - .../DirectoryInfo.GetAccessControl.cs | 52 - .../DirectoryInfo.GetDirectories.cs | 110 - .../DirectoryInfo.GetFileSystemInfos.cs | 124 - .../DirectoryInfo.GetFiles.cs | 114 - .../DirectoryInfo.Refresh.cs | 39 - .../DirectoryInfo.RefreshEntryInfo.cs | 39 - .../DirectoryInfo.SetAccessControl.cs | 49 - .../DirectoryInfo.ToString.cs | 33 - .../DirectoryInfo Class/DirectoryInfo.cs | 203 - AlphaFS/Filesystem/DiskSpaceInfo.cs | 265 - AlphaFS/Filesystem/DriveInfo.cs | 422 - .../Enumerations/BackupStreamType.cs | 84 - .../CopyMoveProgressCallbackReason.cs | 37 - .../Enumerations/CopyMoveProgressResult.cs | 47 - .../Filesystem/Enumerations/CopyOptions.cs | 69 - AlphaFS/Filesystem/Enumerations/DeviceGuid.cs | 200 - .../Enumerations/DiGetClassFlags.cs | 61 - .../DirectoryEnumerationOptions.cs | 62 - .../Enumerations/DosDeviceAttributes.cs | 60 - .../Enumerations/EncryptedFileRawMode.cs | 45 - AlphaFS/Filesystem/Enumerations/ErrorMode.cs | 48 - .../Enumerations/ExtendedFileAttributes.cs | 143 - .../Enumerations/FINDEX_INFO_LEVELS.cs | 44 - .../Enumerations/FileEncryptionStatus.cs | 58 - .../Enumerations/FileInfoByHandleClass.cs | 270 - .../Enumerations/FinalPathFormats.cs | 45 - .../Enumerations/FindExAdditionalFlags.cs | 43 - .../Enumerations/FindExSearchOps.cs | 57 - .../Enumerations/GetFileExInfoLevels.cs | 33 - .../Enumerations/GetFullPathOptions.cs | 60 - .../Filesystem/Enumerations/MoveOptions.cs | 83 - AlphaFS/Filesystem/Enumerations/PathFormat.cs | 59 - .../Enumerations/ReparsePointTag.cs | 106 - .../Enumerations/STREAM_INFO_LEVELS.cs | 40 - .../SetupDiGetDeviceRegistryPropertyEnum.cs | 169 - .../Enumerations/StreamAttributes.cs | 56 - .../Enumerations/SymbolicLinkTarget.cs | 34 - .../Enumerations/SymbolicLinkType.cs | 33 - .../Enumerations/VolumeInfoAttributes.cs | 144 - .../Exceptions/AlreadyExistsException.cs | 58 - .../Exceptions/DeviceNotReadyException.cs | 62 - .../Exceptions/DirectoryNotEmptyException.cs | 59 - .../Exceptions/DirectoryReadOnlyException.cs | 59 - .../Exceptions/FileReadOnlyException.cs | 57 - .../Exceptions/InvalidTransactionException.cs | 59 - .../Exceptions/NotAReparsePointException.cs | 62 - .../TransactionAlreadyAbortedException.cs | 59 - .../TransactionAlreadyCommittedException.cs | 59 - .../Exceptions/TransactionException.cs | 59 - .../TransactionalConflictException.cs | 59 - .../UnrecognizedReparsePointException.cs | 59 - .../UnsupportedRemoteTransactionException.cs | 59 - .../Filesystem/File Class/File.AppendText.cs | 194 - .../Filesystem/File Class/File.Compress.cs | 109 - .../Filesystem/File Class/File.CopyMove.cs | 1332 - AlphaFS/Filesystem/File Class/File.Create.cs | 427 - .../File Class/File.CreateHardlink.cs | 129 - .../File Class/File.CreateSymbolicLink.cs | 141 - .../Filesystem/File Class/File.CreateText.cs | 110 - AlphaFS/Filesystem/File Class/File.Delete.cs | 238 - .../File Class/File.EncryptDecrypt.cs | 120 - .../File Class/File.EncryptedFileRaw.cs | 291 - .../File.EnumerateAlternateDataStreams.cs | 121 - .../File Class/File.EnumerateHardlinks.cs | 170 - AlphaFS/Filesystem/File Class/File.Exists.cs | 228 - .../File Class/File.GetAccessControl.cs | 255 - .../File Class/File.GetAttributes.cs | 227 - .../File Class/File.GetChangeTime.cs | 203 - .../File Class/File.GetCompressedSize.cs | 134 - .../File Class/File.GetCreationTime.cs | 184 - .../File Class/File.GetEncryptionStatus.cs | 76 - .../File Class/File.GetFileInfoByHandleC.cs | 46 - .../File Class/File.GetFileSystemEntryInfo.cs | 100 - AlphaFS/Filesystem/File Class/File.GetHash.cs | 159 - .../File Class/File.GetLastAccessTime.cs | 180 - .../File Class/File.GetLastWriteTime.cs | 188 - .../File Class/File.GetLinkTargetInfo.cs | 105 - AlphaFS/Filesystem/File Class/File.GetSize.cs | 125 - .../Filesystem/File Class/File.IsLocked.cs | 118 - AlphaFS/Filesystem/File Class/File.Open.cs | 1016 - .../File Class/File.OpenBackupRead.cs | 70 - .../Filesystem/File Class/File.OpenRead.cs | 86 - .../Filesystem/File Class/File.OpenText.cs | 128 - .../Filesystem/File Class/File.OpenWrite.cs | 73 - .../File Class/File.ReadAllBytes.cs | 117 - .../File Class/File.ReadAllLines.cs | 148 - .../Filesystem/File Class/File.ReadAllText.cs | 143 - .../Filesystem/File Class/File.ReadLines.cs | 148 - AlphaFS/Filesystem/File Class/File.Replace.cs | 182 - .../File Class/File.SetAccessControl.cs | 264 - .../File Class/File.SetAttributes.cs | 172 - .../Filesystem/File Class/File.SetFileTime.cs | 886 - .../File Class/File.TransferTimestamps.cs | 100 - .../File Class/File.WriteAllBytes.cs | 119 - .../Filesystem/File Class/File.WriteText.cs | 1009 - AlphaFS/Filesystem/File Class/File.cs | 34 - AlphaFS/Filesystem/FileIdBothDirectoryInfo.cs | 204 - .../FileInfo Class/FileInfo.AppendText.cs | 51 - .../FileInfo Class/FileInfo.Compress.cs | 39 - .../FileInfo Class/FileInfo.CopyToMoveTo.cs | 631 - .../FileInfo Class/FileInfo.Create.cs | 41 - .../FileInfo Class/FileInfo.CreateText.cs | 43 - .../FileInfo Class/FileInfo.Decompress.cs | 39 - .../FileInfo Class/FileInfo.Decrypt.cs | 39 - .../FileInfo Class/FileInfo.Delete.cs | 53 - .../FileInfo Class/FileInfo.Encrypt.cs | 39 - .../FileInfo.EnumerateAlternateDataStreams.cs | 37 - .../FileInfo.GetAccessControl.cs | 50 - .../FileInfo Class/FileInfo.GetHash.cs | 39 - .../FileInfo Class/FileInfo.Open.cs | 89 - .../FileInfo Class/FileInfo.OpenRead.cs | 38 - .../FileInfo Class/FileInfo.OpenText.cs | 52 - .../FileInfo Class/FileInfo.OpenWrite.cs | 41 - .../FileInfo Class/FileInfo.Refresh.cs | 39 - .../FileInfo.RefreshEntryInfo.cs | 39 - .../FileInfo Class/FileInfo.Replace.cs | 122 - .../FileInfo.SetAccessControl.cs | 57 - .../FileInfo Class/FileInfo.ToString.cs | 33 - AlphaFS/Filesystem/FileInfo Class/FileInfo.cs | 250 - AlphaFS/Filesystem/FileSystemEntryInfo.cs | 254 - AlphaFS/Filesystem/FileSystemInfo.cs | 643 - AlphaFS/Filesystem/FindFileSystemEntryInfo.cs | 387 - AlphaFS/Filesystem/KernelTransaction.cs | 159 - AlphaFS/Filesystem/LinkTargetInfo.cs | 39 - .../NativeMethods.BackupStreams.cs | 121 - .../Native Methods/NativeMethods.Constants.cs | 67 - .../NativeMethods.DeviceManagement.cs | 291 - .../NativeMethods.DirectoryManagement.cs | 208 - .../NativeMethods.DiskManagement.cs | 84 - .../NativeMethods.EncryptedFileRaw.cs | 62 - .../NativeMethods.FileManagement.cs | 760 - .../Native Methods/NativeMethods.Handles.cs | 52 - .../NativeMethods.KernelTransactions.cs | 77 - .../NativeMethods.PathManagement.cs | 86 - .../Native Methods/NativeMethods.Shell32.cs | 197 - .../Native Methods/NativeMethods.Utilities.cs | 136 - .../NativeMethods.VolumeManagement.cs | 285 - .../BY_HANDLE_FILE_INFORMATION.cs | 74 - .../Filesystem/Native Structures/FILETIME.cs | 123 - .../Native Structures/FILE_BASIC_INFO.cs | 58 - .../FILE_ID_BOTH_DIR_INFO.cs | 95 - .../MountPointReparseBuffer.cs | 38 - .../ReparseDataBufferHeader.cs | 37 - .../SP_DEVICE_INTERFACE_DATA.cs | 46 - .../SP_DEVICE_INTERFACE_DETAIL_DATA.cs | 39 - .../Native Structures/SP_DEVINFO_DATA.cs | 46 - .../SymbolicLinkReparseBuffer.cs | 39 - .../WIN32_FILE_ATTRIBUTE_DATA.cs | 86 - .../Native Structures/WIN32_FIND_DATA.cs | 93 - .../WIN32_FIND_STREAM_DATA.cs | 37 - .../Native Structures/WIN32_STREAM_ID.cs | 51 - AlphaFS/Filesystem/Path Class/Path.Combine.cs | 105 - .../Filesystem/Path Class/Path.Constants.cs | 124 - .../Path Class/Path.GetComponents.cs | 368 - .../Path.GetFinalPathNameByHandle.cs | 166 - .../Filesystem/Path Class/Path.GetFullPath.cs | 305 - .../Path Class/Path.SeparatorManipulation.cs | 202 - .../Path Class/Path.ShortLongConversions.cs | 273 - .../Filesystem/Path Class/Path.Temporary.cs | 77 - .../Filesystem/Path Class/Path.UncPaths.cs | 234 - .../Path Class/Path.ValidationAndChecks.cs | 614 - AlphaFS/Filesystem/Path Class/Path.cs | 29 - .../SafeCmConnectMachineHandle.cs | 49 - .../SafeEncryptedFileRawHandle.cs | 35 - .../Safe Handles/SafeFindFileHandle.cs | 52 - .../Safe Handles/SafeFindVolumeHandle.cs | 54 - .../SafeFindVolumeMountPointHandle.cs | 54 - .../SafeKernelTransactionHandle.cs | 44 - .../SafeLocalMemoryBufferHandle.cs | 104 - .../SafeSetupDiClassDevsExHandle.cs | 45 - AlphaFS/Filesystem/Shell32.cs | 845 - AlphaFS/Filesystem/Shell32Info.cs | 337 - AlphaFS/Filesystem/SymbolicLinkTargetInfo.cs | 36 - AlphaFS/Filesystem/Volume.cs | 1146 - AlphaFS/Filesystem/VolumeInfo.cs | 462 - AlphaFS/GlobalSuppressions.cs | 34 - AlphaFS/NativeError.cs | 159 - AlphaFS/Network/DfsInfo.cs | 148 - AlphaFS/Network/DfsStorageInfo.cs | 84 - .../Network/Enumerations/AccessPermissions.cs | 74 - AlphaFS/Network/Enumerations/Connect.cs | 57 - .../Enumerations/DfsNamespaceFlavors.cs | 55 - .../Network/Enumerations/DfsPropertyFlags.cs | 104 - .../Network/Enumerations/DfsStorageStates.cs | 51 - .../Enumerations/DfsTargetPriorityClass.cs | 54 - .../Network/Enumerations/DfsVolumeStates.cs | 72 - .../Enumerations/ResourceDisplayType.cs | 90 - AlphaFS/Network/Enumerations/ResourceScope.cs | 58 - AlphaFS/Network/Enumerations/ResourceType.cs | 55 - AlphaFS/Network/Enumerations/ResourceUsage.cs | 72 - .../Network/Enumerations/ShareInfoLevel.cs | 46 - .../Enumerations/ShareResourceTypes.cs | 91 - AlphaFS/Network/Enumerations/ShareType.cs | 79 - AlphaFS/Network/Host Class/Connect.cs | 507 - .../Host Class/DistributedFileSystem.cs | 294 - AlphaFS/Network/Host Class/DriveConnection.cs | 151 - AlphaFS/Network/Host Class/EnumerateDrives.cs | 87 - .../Host Class/EnumerateOpenResources.cs | 114 - AlphaFS/Network/Host Class/Host.cs | 244 - .../Network/Host Class/ServerMessageBlock.cs | 395 - .../NativeMethods.DistributedFileSystem.cs | 78 - .../NativeMethods.NetworkManagement.cs | 46 - .../NativeMethods.NetworkShareManagement.cs | 117 - .../NativeMethods.WindowsNetworking.cs | 78 - .../Network/Native Methods/NativeMethods.cs | 66 - .../Native Structures/CONNECTION_INFO_1.cs | 57 - .../Network/Native Structures/DFS_INFO_200.cs | 39 - .../Network/Native Structures/DFS_INFO_300.cs | 53 - .../Network/Native Structures/DFS_INFO_9.cs | 77 - .../Native Structures/DFS_STORAGE_INFO_1.cs | 47 - .../Native Structures/DFS_TARGET_PRIORITY.cs | 44 - .../Network/Native Structures/FILE_INFO_3.cs | 51 - .../Network/Native Structures/NETRESOURCE.cs | 71 - .../Native Structures/REMOTE_NAME_INFO.cs | 43 - .../Network/Native Structures/SHARE_INFO_1.cs | 44 - .../Native Structures/SHARE_INFO_1005.cs | 39 - .../Network/Native Structures/SHARE_INFO_2.cs | 65 - .../Native Structures/SHARE_INFO_503.cs | 75 - AlphaFS/Network/OpenConnectionInfo.cs | 88 - AlphaFS/Network/OpenResourceInfo.cs | 88 - AlphaFS/Network/ShareInfo.cs | 247 - AlphaFS/OperatingSystem.cs | 507 - AlphaFS/Properties/AssemblyInfo.cs | 40 - AlphaFS/Resources.Designer.cs | 442 - AlphaFS/Resources.resx | 247 - AlphaFS/SafeGlobalMemoryBufferHandle.cs | 78 - AlphaFS/SafeNativeMemoryBufferHandle.cs | 301 - AlphaFS/Security/Crc32.cs | 165 - AlphaFS/Security/Crc64.cs | 166 - AlphaFS/Security/Enumerations/HashType.cs | 61 - AlphaFS/Security/Enumerations/ObjectType.cs | 76 - .../Enumerations/SecurityDescriptorControl.cs | 76 - .../Enumerations/SecurityInformation.cs | 87 - AlphaFS/Security/InternalPrivilegeEnabler.cs | 101 - AlphaFS/Security/NativeMethods.cs | 275 - AlphaFS/Security/Privilege.cs | 494 - AlphaFS/Security/PrivilegeEnabler.cs | 85 - AlphaFS/Security/SecurityAttributes.cs | 80 - AlphaFS/Security/Structures/Luid.cs | 32 - .../Security/Structures/TokenPrivileges.cs | 33 - AlphaFS/Utils.cs | 131 - AlphaFS/Win32Errors.cs | 4262 --- AlphaFS/app.config | 3 - AlphaFS/obj/Debug/AlphaFS.pdb | Bin 947712 -> 0 bytes ...gnTimeResolveAssemblyReferencesInput.cache | Bin 6500 -> 0 bytes AlphaFS/packages.config | 4 - Log/Log.cs | 253 - Log/Log.csproj | 59 - Log/Log.csproj.vspscc | 10 - Log/Properties/AssemblyInfo.cs | 36 - Log/bin/Debug/Log.dll | Bin 9216 -> 0 bytes Log/bin/Debug/Log.pdb | Bin 17920 -> 0 bytes ...gnTimeResolveAssemblyReferencesInput.cache | Bin 7017 -> 0 bytes Log/obj/Debug/Log.csproj.FileListAbsolute.txt | 9 - Log/obj/Debug/Log.dll | Bin 9216 -> 0 bytes Log/obj/Debug/Log.pdb | Bin 17920 -> 0 bytes NTFSSecurity.sln | 122 - NTFSSecurity.vssscc | 10 - NTFSSecurity/AccessCmdlets/AddAccess.cs | 184 - NTFSSecurity/AccessCmdlets/ClearAccess.cs | 118 - NTFSSecurity/AccessCmdlets/GetAccess.cs | 155 - .../AccessCmdlets/GetEffectiveAccess.cs | 194 - .../AccessCmdlets/GetOrphanedAccess.cs | 80 - NTFSSecurity/AccessCmdlets/RemoveAccess.cs | 189 - NTFSSecurity/AuditCmdlets/AddAudit.cs | 183 - NTFSSecurity/AuditCmdlets/ClearAudit.cs | 118 - .../AuditCmdlets/Get-OrphanedAudit.cs | 56 - NTFSSecurity/AuditCmdlets/GetAudit.cs | 155 - NTFSSecurity/AuditCmdlets/RemoveAudit.cs | 188 - NTFSSecurity/BaseCmdlets.cs | 321 - NTFSSecurity/CodeMembers.cs | 64 - NTFSSecurity/Extensions.cs | 56 - NTFSSecurity/Help/NTFSSecurity.Help.pshproj | 2786 -- .../DisableAccessInheritance.cs | 128 - .../DisableAuditInheritance.cs | 129 - .../EnableAccessInheritance.cs | 128 - .../EnableAuditInheritance.cs | 128 - .../InheritanceCmdlets/GetInheritance.cs | 119 - .../InheritanceCmdlets/SetInheritance.cs | 238 - NTFSSecurity/ItemCmdlets/CopyItem2.cs | 132 - NTFSSecurity/ItemCmdlets/GetChildItem2.cs | 331 - NTFSSecurity/ItemCmdlets/GetDiskSpace.cs | 58 - NTFSSecurity/ItemCmdlets/GetItem2.cs | 61 - NTFSSecurity/ItemCmdlets/MoveItem2.cs | 132 - NTFSSecurity/ItemCmdlets/RemoveItem2.cs | 108 - NTFSSecurity/LinkCmdlets/GetHardLink.cs | 74 - NTFSSecurity/LinkCmdlets/NewHardLink.cs | 96 - NTFSSecurity/LinkCmdlets/NewSymbolicLink.cs | 87 - NTFSSecurity/MiscCmdlets/GetFileHash2.cs | 99 - NTFSSecurity/NTFSSecurity-Help.xml | 2331 -- NTFSSecurity/NTFSSecurity.Init.ps1 | 81 - NTFSSecurity/NTFSSecurity.csproj | 178 - NTFSSecurity/NTFSSecurity.csproj.user | 6 - NTFSSecurity/NTFSSecurity.csproj.vspscc | 10 - NTFSSecurity/NTFSSecurity.format.ps1xml | 500 - NTFSSecurity/NTFSSecurity.psd1 | 98 - NTFSSecurity/NTFSSecurity.psm1 | 52 - NTFSSecurity/NTFSSecurity.types.ps1xml | 155 - NTFSSecurity/OtherCmdlets.cs | 138 - NTFSSecurity/OwnerCmdlets/GetOwner.cs | 99 - NTFSSecurity/OwnerCmdlets/SetOwner.cs | 108 - NTFSSecurity/PathCmdlets/TestPath2.cs | 85 - NTFSSecurity/Properties/AssemblyInfo.cs | 36 - NTFSSecurity/Properties/Resources.Designer.cs | 82 - NTFSSecurity/Properties/Resources.resx | 127 - NTFSSecurity/Resources/IconContainer.bmp | Bin 3382 -> 0 bytes NTFSSecurity/Resources/User.jpg | Bin 13928 -> 0 bytes NTFSSecurity/Resources/container.jpg | Bin 9248 -> 0 bytes .../GetSecurityDescriptor.cs | 81 - .../SetSecurityDescriptor.cs | 75 - NTFSSecurity/ShowSimpleAccess.Designer.cs | 309 - NTFSSecurity/ShowSimpleAccess.cs | 271 - NTFSSecurity/ShowSimpleAccess.resx | 168 - .../ShowSimpleEffectiveAccess.Designer.cs | 234 - NTFSSecurity/ShowSimpleEffectiveAccess.cs | 222 - NTFSSecurity/ShowSimpleEffectiveAccess.resx | 165 - NTFSSecurity/SimpleAccessCmdlets.cs | 298 - ...gnTimeResolveAssemblyReferencesInput.cache | Bin 8768 -> 0 bytes ...TFSSecurity.Properties.Resources.resources | Bin 3909 -> 0 bytes ...TFSSecurity.ShowSimpleAccessForm.resources | Bin 2639 -> 0 bytes ...ty.ShowSimpleEffectiveAccessForm.resources | Bin 2639 -> 0 bytes .../NTFSSecurity.csproj.FileListAbsolute.txt | 38 - ...NTFSSecurity.csproj.GenerateResource.Cache | Bin 983 -> 0 bytes ...urity.csprojResolveAssemblyReference.cache | Bin 29286 -> 0 bytes NTFSSecurity/obj/Debug/NTFSSecurity.dll | Bin 109056 -> 0 bytes NTFSSecurity/obj/Debug/NTFSSecurity.pdb | Bin 282112 -> 0 bytes .../Properties.Resources.Designer.cs.dll | Bin 3584 -> 0 bytes NTFSSecurityTest/IdentityReference2Tests.cs | 190 - NTFSSecurityTest/NTFSSecurityTest.csproj | 105 - .../NTFSSecurityTest.csproj.vspscc | 10 - NTFSSecurityTest/Properties/AssemblyInfo.cs | 36 - .../Properties/Settings.Designer.cs | 38 - NTFSSecurityTest/Properties/Settings.settings | 9 - NTFSSecurityTest/UnitTest1.cs | 30 - NTFSSecurityTest/app.config | 15 - NTFSSecurityTest/bin/Debug/AlphaFS.dll | Bin 312320 -> 0 bytes NTFSSecurityTest/bin/Debug/AlphaFS.pdb | Bin 947712 -> 0 bytes NTFSSecurityTest/bin/Debug/AlphaFS.xml | 21563 ---------------- ...lStudio.QualityTools.UnitTestFramework.dll | Bin 98448 -> 0 bytes ...lStudio.QualityTools.UnitTestFramework.xml | 2504 -- .../bin/Debug/NTFSSecurityTest.dll | Bin 8704 -> 0 bytes .../bin/Debug/NTFSSecurityTest.dll.config | 15 - .../bin/Debug/NTFSSecurityTest.pdb | Bin 22016 -> 0 bytes NTFSSecurityTest/bin/Debug/Security2.dll | Bin 54784 -> 0 bytes NTFSSecurityTest/bin/Debug/Security2.pdb | Bin 163328 -> 0 bytes ...gnTimeResolveAssemblyReferencesInput.cache | Bin 6659 -> 0 bytes ...FSSecurityTest.csproj.FileListAbsolute.txt | 26 - ...yTest.csprojResolveAssemblyReference.cache | Bin 15192 -> 0 bytes .../obj/Debug/NTFSSecurityTest.dll | Bin 8704 -> 0 bytes .../obj/Debug/NTFSSecurityTest.pdb | Bin 22016 -> 0 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 PrivilegeControl/PrivilegeControl.cs | 71 - PrivilegeControl/PrivilegeControl.csproj | 65 - .../PrivilegeControl.csproj.vspscc | 10 - PrivilegeControl/Properties/AssemblyInfo.cs | 36 - .../bin/Debug/PrivilegeControl.dll | Bin 5120 -> 0 bytes .../bin/Debug/PrivilegeControl.pdb | Bin 13824 -> 0 bytes .../bin/Debug/ProcessPrivileges.dll | Bin 24064 -> 0 bytes .../bin/Debug/ProcessPrivileges.pdb | Bin 44544 -> 0 bytes ...gnTimeResolveAssemblyReferencesInput.cache | Bin 6906 -> 0 bytes ...ivilegeControl.csproj.FileListAbsolute.txt | 14 - ...ntrol.csprojResolveAssemblyReference.cache | Bin 9112 -> 0 bytes .../obj/Debug/PrivilegeControl.dll | Bin 5120 -> 0 bytes .../obj/Debug/PrivilegeControl.pdb | Bin 13824 -> 0 bytes ProcessPrivileges/AccessTokenHandle.cs | 40 - ProcessPrivileges/AllocatedMemory.cs | 54 - ProcessPrivileges/Enums.cs | 154 - ProcessPrivileges/NativeEnums.cs | 180 - ProcessPrivileges/NativeMethods.cs | 78 - ProcessPrivileges/NativeStructs.cs | 35 - ProcessPrivileges/PrivilegeAndAttributes.cs | 102 - .../PrivilegeAndAttributesCollection.cs | 49 - ProcessPrivileges/PrivilegeEnabler.cs | 220 - ProcessPrivileges/Privileges.cs | 319 - ProcessPrivileges/ProcessExtensions.cs | 423 - ProcessPrivileges/ProcessHandle.cs | 35 - ProcessPrivileges/ProcessPrivileges.csproj | 79 - .../ProcessPrivileges.csproj.vspscc | 10 - ProcessPrivileges/Properties/AssemblyInfo.cs | 45 - .../bin/Debug/ProcessPrivileges.dll | Bin 24064 -> 0 bytes .../bin/Debug/ProcessPrivileges.pdb | Bin 44544 -> 0 bytes ...gnTimeResolveAssemblyReferencesInput.cache | Bin 6291 -> 0 bytes ...cessPrivileges.csproj.FileListAbsolute.txt | 9 - .../obj/Debug/ProcessPrivileges.dll | Bin 24064 -> 0 bytes .../obj/Debug/ProcessPrivileges.pdb | Bin 44544 -> 0 bytes Security2/EffectiveAccess.cs | 66 - Security2/Enums.cs | 82 - Security2/Exceptions/Exceptions.cs | 9 - Security2/Extensions.cs | 25 - Security2/FileSystem/FileInfo/Extensions.cs | 62 - ...temAccessRule2.AddFileSystemAccessRules.cs | 122 - ...temAccessRule2.GetFileSystemAccessRules.cs | 59 - ...AccessRule2.RemoveFileSystemAccessRules.cs | 146 - ...essRule2.RemoveFileSystemAccessRulesAll.cs | 35 - .../FileSystemAccessRule2.cs | 74 - ...ystemAuditRule2.AddFileSystemAuditRules.cs | 110 - ...ystemAuditRule2.GetFileSystemAuditRules.cs | 61 - ...temAuditRule2.RemoveFileSystemAuditRule.cs | 115 - ...AuditRule2.RemoveFileSystemAuditRuleAll.cs | 35 - .../FileSystemAuditRule2.cs | 70 - .../FileSystemEffectivePermissionEntry.cs | 65 - Security2/FileSystem/FileSystemFlags.cs | 10 - .../FileSystem/FileSystemInheritanceInfo.cs | 289 - Security2/FileSystem/FileSystemOwner.cs | 58 - Security2/FileSystem/FileSystemSecurity2.cs | 314 - .../FileSystem/SimpleFileSystemAccessRule.cs | 134 - .../FileSystem/SimpleFileSystemAuditRule.cs | 134 - Security2/IdentityReference2.cs | 264 - Security2/Properties/AssemblyInfo.cs | 36 - Security2/Registry/RegistrySecurity.cs | 499 - Security2/Security2.csproj | 98 - Security2/Security2.csproj.vspscc | 10 - Security2/Win32/Enums.cs | 116 - Security2/Win32/Errors.cs | 96 - Security2/Win32/Functions.cs | 103 - Security2/Win32/Lib.cs | 322 - Security2/Win32/SafeHandleEx.cs | 334 - Security2/Win32/Structs.cs | 83 - Security2/Win32/Win32Functions.cs | 32 - Security2/Win32/Win32Lib.cs | 66 - Security2/bin/Debug/AlphaFS.dll | Bin 312320 -> 0 bytes Security2/bin/Debug/AlphaFS.xml | 21563 ---------------- Security2/bin/Debug/Security2.dll | Bin 54784 -> 0 bytes Security2/bin/Debug/Security2.pdb | Bin 163328 -> 0 bytes ...gnTimeResolveAssemblyReferencesInput.cache | Bin 6869 -> 0 bytes .../Security2.csproj.FileListAbsolute.txt | 16 - ...rity2.csprojResolveAssemblyReference.cache | Bin 10338 -> 0 bytes Security2/obj/Debug/Security2.dll | Bin 54784 -> 0 bytes Security2/obj/Debug/Security2.pdb | Bin 163328 -> 0 bytes TestClient/Program.cs | 85 - TestClient/Properties/AssemblyInfo.cs | 36 - TestClient/TestClient.csproj | 86 - TestClient/TestClient.csproj.vspscc | 10 - TestClient/bin/Debug/AlphaFS.dll | Bin 312320 -> 0 bytes TestClient/bin/Debug/AlphaFS.xml | 21563 ---------------- TestClient/bin/Debug/NTFSSecurity-Help.xml | 2331 -- TestClient/bin/Debug/NTFSSecurity.Init.ps1 | 81 - TestClient/bin/Debug/NTFSSecurity.dll | Bin 109056 -> 0 bytes .../bin/Debug/NTFSSecurity.format.ps1xml | 500 - TestClient/bin/Debug/NTFSSecurity.pdb | Bin 282112 -> 0 bytes TestClient/bin/Debug/NTFSSecurity.psd1 | 97 - TestClient/bin/Debug/NTFSSecurity.psm1 | 52 - .../bin/Debug/NTFSSecurity.types.ps1xml | 155 - TestClient/bin/Debug/PrivilegeControl.dll | Bin 5120 -> 0 bytes TestClient/bin/Debug/PrivilegeControl.pdb | Bin 13824 -> 0 bytes TestClient/bin/Debug/ProcessPrivileges.dll | Bin 24064 -> 0 bytes TestClient/bin/Debug/ProcessPrivileges.pdb | Bin 44544 -> 0 bytes TestClient/bin/Debug/Security2.dll | Bin 54784 -> 0 bytes TestClient/bin/Debug/Security2.pdb | Bin 163328 -> 0 bytes TestClient/bin/Debug/TestClient.exe | Bin 7168 -> 0 bytes TestClient/bin/Debug/TestClient.pdb | Bin 13824 -> 0 bytes ...gnTimeResolveAssemblyReferencesInput.cache | Bin 6993 -> 0 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 .../TestClient.csproj.FileListAbsolute.txt | 44 - ...lient.csprojResolveAssemblyReference.cache | Bin 37814 -> 0 bytes TestClient/obj/x86/Debug/TestClient.exe | Bin 7168 -> 0 bytes TestClient/obj/x86/Debug/TestClient.pdb | Bin 13824 -> 0 bytes .../NuGet.CommandLine.3.4.4-rtm-final.nupkg | Bin 1211859 -> 0 bytes .../tools/NuGet.exe | Bin 3957976 -> 0 bytes 524 files changed, 143444 deletions(-) delete mode 100644 AlphaFS/AlphaFS.csproj delete mode 100644 AlphaFS/AlphaFS.ruleset delete mode 100644 AlphaFS/AssemblyVersionInfo.cs delete mode 100644 AlphaFS/Filesystem/AlternateDataStreamInfo.cs delete mode 100644 AlphaFS/Filesystem/BackupFileStream.cs delete mode 100644 AlphaFS/Filesystem/BackupStreamInfo.cs delete mode 100644 AlphaFS/Filesystem/ByHandleFileInfo.cs delete mode 100644 AlphaFS/Filesystem/ChangeErrorMode.cs delete mode 100644 AlphaFS/Filesystem/CopyMoveProgressRoutine.cs delete mode 100644 AlphaFS/Filesystem/CopyMoveResult.cs delete mode 100644 AlphaFS/Filesystem/Device.cs delete mode 100644 AlphaFS/Filesystem/DeviceInfo.cs delete mode 100644 AlphaFS/Filesystem/Directory Class/Directory.Compression.cs delete mode 100644 AlphaFS/Filesystem/Directory Class/Directory.CopyMove.cs delete mode 100644 AlphaFS/Filesystem/Directory Class/Directory.CountFileSystemObjects.cs delete mode 100644 AlphaFS/Filesystem/Directory Class/Directory.CreateDirectory.cs delete mode 100644 AlphaFS/Filesystem/Directory Class/Directory.CurrentDirectory.cs delete mode 100644 AlphaFS/Filesystem/Directory Class/Directory.Delete.cs delete mode 100644 AlphaFS/Filesystem/Directory Class/Directory.DeleteEmptySubdirectories.cs delete mode 100644 AlphaFS/Filesystem/Directory Class/Directory.EncryptedDirectoryRaw.cs delete mode 100644 AlphaFS/Filesystem/Directory Class/Directory.Encryption.cs delete mode 100644 AlphaFS/Filesystem/Directory Class/Directory.EnumerateAlternateDataStreams.cs delete mode 100644 AlphaFS/Filesystem/Directory Class/Directory.EnumerateDirectories.cs delete mode 100644 AlphaFS/Filesystem/Directory Class/Directory.EnumerateFileIdBothDirectoryInfo.cs delete mode 100644 AlphaFS/Filesystem/Directory Class/Directory.EnumerateFileSystemEntries.cs delete mode 100644 AlphaFS/Filesystem/Directory Class/Directory.EnumerateFileSystemEntryInfos.cs delete mode 100644 AlphaFS/Filesystem/Directory Class/Directory.EnumerateFiles.cs delete mode 100644 AlphaFS/Filesystem/Directory Class/Directory.Exists.cs delete mode 100644 AlphaFS/Filesystem/Directory Class/Directory.GetAccessControl.cs delete mode 100644 AlphaFS/Filesystem/Directory Class/Directory.GetChangeTime.cs delete mode 100644 AlphaFS/Filesystem/Directory Class/Directory.GetCreationTime.cs delete mode 100644 AlphaFS/Filesystem/Directory Class/Directory.GetDirectories.cs delete mode 100644 AlphaFS/Filesystem/Directory Class/Directory.GetDirectoryRoot.cs delete mode 100644 AlphaFS/Filesystem/Directory Class/Directory.GetFileSystemEntries.cs delete mode 100644 AlphaFS/Filesystem/Directory Class/Directory.GetFiles.cs delete mode 100644 AlphaFS/Filesystem/Directory Class/Directory.GetLastAccessTime.cs delete mode 100644 AlphaFS/Filesystem/Directory Class/Directory.GetLastWriteTime.cs delete mode 100644 AlphaFS/Filesystem/Directory Class/Directory.GetLogicalDrives.cs delete mode 100644 AlphaFS/Filesystem/Directory Class/Directory.GetParent.cs delete mode 100644 AlphaFS/Filesystem/Directory Class/Directory.GetProperties.cs delete mode 100644 AlphaFS/Filesystem/Directory Class/Directory.HasInheritedPermissions.cs delete mode 100644 AlphaFS/Filesystem/Directory Class/Directory.SetAccessControl.cs delete mode 100644 AlphaFS/Filesystem/Directory Class/Directory.SetCreationTime.cs delete mode 100644 AlphaFS/Filesystem/Directory Class/Directory.SetLastAccessTime.cs delete mode 100644 AlphaFS/Filesystem/Directory Class/Directory.SetLastWriteTime.cs delete mode 100644 AlphaFS/Filesystem/Directory Class/Directory.SetTimestamps.cs delete mode 100644 AlphaFS/Filesystem/Directory Class/Directory.TransferTimestamps.cs delete mode 100644 AlphaFS/Filesystem/Directory Class/Directory.cs delete mode 100644 AlphaFS/Filesystem/DirectoryInfo Class/DirectoryInfo.Compression.cs delete mode 100644 AlphaFS/Filesystem/DirectoryInfo Class/DirectoryInfo.CopyToMoveTo.cs delete mode 100644 AlphaFS/Filesystem/DirectoryInfo Class/DirectoryInfo.CountFileSystemObjects.cs delete mode 100644 AlphaFS/Filesystem/DirectoryInfo Class/DirectoryInfo.Create.cs delete mode 100644 AlphaFS/Filesystem/DirectoryInfo Class/DirectoryInfo.CreateSubdirectory.cs delete mode 100644 AlphaFS/Filesystem/DirectoryInfo Class/DirectoryInfo.Decrypt.cs delete mode 100644 AlphaFS/Filesystem/DirectoryInfo Class/DirectoryInfo.Delete.cs delete mode 100644 AlphaFS/Filesystem/DirectoryInfo Class/DirectoryInfo.DeleteEmptySubdirectories.cs delete mode 100644 AlphaFS/Filesystem/DirectoryInfo Class/DirectoryInfo.Encryption.cs delete mode 100644 AlphaFS/Filesystem/DirectoryInfo Class/DirectoryInfo.EnumerateAlternateDataStreams.cs delete mode 100644 AlphaFS/Filesystem/DirectoryInfo Class/DirectoryInfo.EnumerateDirectories.cs delete mode 100644 AlphaFS/Filesystem/DirectoryInfo Class/DirectoryInfo.EnumerateFileSystemInfos.cs delete mode 100644 AlphaFS/Filesystem/DirectoryInfo Class/DirectoryInfo.EnumerateFiles.cs delete mode 100644 AlphaFS/Filesystem/DirectoryInfo Class/DirectoryInfo.GetAccessControl.cs delete mode 100644 AlphaFS/Filesystem/DirectoryInfo Class/DirectoryInfo.GetDirectories.cs delete mode 100644 AlphaFS/Filesystem/DirectoryInfo Class/DirectoryInfo.GetFileSystemInfos.cs delete mode 100644 AlphaFS/Filesystem/DirectoryInfo Class/DirectoryInfo.GetFiles.cs delete mode 100644 AlphaFS/Filesystem/DirectoryInfo Class/DirectoryInfo.Refresh.cs delete mode 100644 AlphaFS/Filesystem/DirectoryInfo Class/DirectoryInfo.RefreshEntryInfo.cs delete mode 100644 AlphaFS/Filesystem/DirectoryInfo Class/DirectoryInfo.SetAccessControl.cs delete mode 100644 AlphaFS/Filesystem/DirectoryInfo Class/DirectoryInfo.ToString.cs delete mode 100644 AlphaFS/Filesystem/DirectoryInfo Class/DirectoryInfo.cs delete mode 100644 AlphaFS/Filesystem/DiskSpaceInfo.cs delete mode 100644 AlphaFS/Filesystem/DriveInfo.cs delete mode 100644 AlphaFS/Filesystem/Enumerations/BackupStreamType.cs delete mode 100644 AlphaFS/Filesystem/Enumerations/CopyMoveProgressCallbackReason.cs delete mode 100644 AlphaFS/Filesystem/Enumerations/CopyMoveProgressResult.cs delete mode 100644 AlphaFS/Filesystem/Enumerations/CopyOptions.cs delete mode 100644 AlphaFS/Filesystem/Enumerations/DeviceGuid.cs delete mode 100644 AlphaFS/Filesystem/Enumerations/DiGetClassFlags.cs delete mode 100644 AlphaFS/Filesystem/Enumerations/DirectoryEnumerationOptions.cs delete mode 100644 AlphaFS/Filesystem/Enumerations/DosDeviceAttributes.cs delete mode 100644 AlphaFS/Filesystem/Enumerations/EncryptedFileRawMode.cs delete mode 100644 AlphaFS/Filesystem/Enumerations/ErrorMode.cs delete mode 100644 AlphaFS/Filesystem/Enumerations/ExtendedFileAttributes.cs delete mode 100644 AlphaFS/Filesystem/Enumerations/FINDEX_INFO_LEVELS.cs delete mode 100644 AlphaFS/Filesystem/Enumerations/FileEncryptionStatus.cs delete mode 100644 AlphaFS/Filesystem/Enumerations/FileInfoByHandleClass.cs delete mode 100644 AlphaFS/Filesystem/Enumerations/FinalPathFormats.cs delete mode 100644 AlphaFS/Filesystem/Enumerations/FindExAdditionalFlags.cs delete mode 100644 AlphaFS/Filesystem/Enumerations/FindExSearchOps.cs delete mode 100644 AlphaFS/Filesystem/Enumerations/GetFileExInfoLevels.cs delete mode 100644 AlphaFS/Filesystem/Enumerations/GetFullPathOptions.cs delete mode 100644 AlphaFS/Filesystem/Enumerations/MoveOptions.cs delete mode 100644 AlphaFS/Filesystem/Enumerations/PathFormat.cs delete mode 100644 AlphaFS/Filesystem/Enumerations/ReparsePointTag.cs delete mode 100644 AlphaFS/Filesystem/Enumerations/STREAM_INFO_LEVELS.cs delete mode 100644 AlphaFS/Filesystem/Enumerations/SetupDiGetDeviceRegistryPropertyEnum.cs delete mode 100644 AlphaFS/Filesystem/Enumerations/StreamAttributes.cs delete mode 100644 AlphaFS/Filesystem/Enumerations/SymbolicLinkTarget.cs delete mode 100644 AlphaFS/Filesystem/Enumerations/SymbolicLinkType.cs delete mode 100644 AlphaFS/Filesystem/Enumerations/VolumeInfoAttributes.cs delete mode 100644 AlphaFS/Filesystem/Exceptions/AlreadyExistsException.cs delete mode 100644 AlphaFS/Filesystem/Exceptions/DeviceNotReadyException.cs delete mode 100644 AlphaFS/Filesystem/Exceptions/DirectoryNotEmptyException.cs delete mode 100644 AlphaFS/Filesystem/Exceptions/DirectoryReadOnlyException.cs delete mode 100644 AlphaFS/Filesystem/Exceptions/FileReadOnlyException.cs delete mode 100644 AlphaFS/Filesystem/Exceptions/InvalidTransactionException.cs delete mode 100644 AlphaFS/Filesystem/Exceptions/NotAReparsePointException.cs delete mode 100644 AlphaFS/Filesystem/Exceptions/TransactionAlreadyAbortedException.cs delete mode 100644 AlphaFS/Filesystem/Exceptions/TransactionAlreadyCommittedException.cs delete mode 100644 AlphaFS/Filesystem/Exceptions/TransactionException.cs delete mode 100644 AlphaFS/Filesystem/Exceptions/TransactionalConflictException.cs delete mode 100644 AlphaFS/Filesystem/Exceptions/UnrecognizedReparsePointException.cs delete mode 100644 AlphaFS/Filesystem/Exceptions/UnsupportedRemoteTransactionException.cs delete mode 100644 AlphaFS/Filesystem/File Class/File.AppendText.cs delete mode 100644 AlphaFS/Filesystem/File Class/File.Compress.cs delete mode 100644 AlphaFS/Filesystem/File Class/File.CopyMove.cs delete mode 100644 AlphaFS/Filesystem/File Class/File.Create.cs delete mode 100644 AlphaFS/Filesystem/File Class/File.CreateHardlink.cs delete mode 100644 AlphaFS/Filesystem/File Class/File.CreateSymbolicLink.cs delete mode 100644 AlphaFS/Filesystem/File Class/File.CreateText.cs delete mode 100644 AlphaFS/Filesystem/File Class/File.Delete.cs delete mode 100644 AlphaFS/Filesystem/File Class/File.EncryptDecrypt.cs delete mode 100644 AlphaFS/Filesystem/File Class/File.EncryptedFileRaw.cs delete mode 100644 AlphaFS/Filesystem/File Class/File.EnumerateAlternateDataStreams.cs delete mode 100644 AlphaFS/Filesystem/File Class/File.EnumerateHardlinks.cs delete mode 100644 AlphaFS/Filesystem/File Class/File.Exists.cs delete mode 100644 AlphaFS/Filesystem/File Class/File.GetAccessControl.cs delete mode 100644 AlphaFS/Filesystem/File Class/File.GetAttributes.cs delete mode 100644 AlphaFS/Filesystem/File Class/File.GetChangeTime.cs delete mode 100644 AlphaFS/Filesystem/File Class/File.GetCompressedSize.cs delete mode 100644 AlphaFS/Filesystem/File Class/File.GetCreationTime.cs delete mode 100644 AlphaFS/Filesystem/File Class/File.GetEncryptionStatus.cs delete mode 100644 AlphaFS/Filesystem/File Class/File.GetFileInfoByHandleC.cs delete mode 100644 AlphaFS/Filesystem/File Class/File.GetFileSystemEntryInfo.cs delete mode 100644 AlphaFS/Filesystem/File Class/File.GetHash.cs delete mode 100644 AlphaFS/Filesystem/File Class/File.GetLastAccessTime.cs delete mode 100644 AlphaFS/Filesystem/File Class/File.GetLastWriteTime.cs delete mode 100644 AlphaFS/Filesystem/File Class/File.GetLinkTargetInfo.cs delete mode 100644 AlphaFS/Filesystem/File Class/File.GetSize.cs delete mode 100644 AlphaFS/Filesystem/File Class/File.IsLocked.cs delete mode 100644 AlphaFS/Filesystem/File Class/File.Open.cs delete mode 100644 AlphaFS/Filesystem/File Class/File.OpenBackupRead.cs delete mode 100644 AlphaFS/Filesystem/File Class/File.OpenRead.cs delete mode 100644 AlphaFS/Filesystem/File Class/File.OpenText.cs delete mode 100644 AlphaFS/Filesystem/File Class/File.OpenWrite.cs delete mode 100644 AlphaFS/Filesystem/File Class/File.ReadAllBytes.cs delete mode 100644 AlphaFS/Filesystem/File Class/File.ReadAllLines.cs delete mode 100644 AlphaFS/Filesystem/File Class/File.ReadAllText.cs delete mode 100644 AlphaFS/Filesystem/File Class/File.ReadLines.cs delete mode 100644 AlphaFS/Filesystem/File Class/File.Replace.cs delete mode 100644 AlphaFS/Filesystem/File Class/File.SetAccessControl.cs delete mode 100644 AlphaFS/Filesystem/File Class/File.SetAttributes.cs delete mode 100644 AlphaFS/Filesystem/File Class/File.SetFileTime.cs delete mode 100644 AlphaFS/Filesystem/File Class/File.TransferTimestamps.cs delete mode 100644 AlphaFS/Filesystem/File Class/File.WriteAllBytes.cs delete mode 100644 AlphaFS/Filesystem/File Class/File.WriteText.cs delete mode 100644 AlphaFS/Filesystem/File Class/File.cs delete mode 100644 AlphaFS/Filesystem/FileIdBothDirectoryInfo.cs delete mode 100644 AlphaFS/Filesystem/FileInfo Class/FileInfo.AppendText.cs delete mode 100644 AlphaFS/Filesystem/FileInfo Class/FileInfo.Compress.cs delete mode 100644 AlphaFS/Filesystem/FileInfo Class/FileInfo.CopyToMoveTo.cs delete mode 100644 AlphaFS/Filesystem/FileInfo Class/FileInfo.Create.cs delete mode 100644 AlphaFS/Filesystem/FileInfo Class/FileInfo.CreateText.cs delete mode 100644 AlphaFS/Filesystem/FileInfo Class/FileInfo.Decompress.cs delete mode 100644 AlphaFS/Filesystem/FileInfo Class/FileInfo.Decrypt.cs delete mode 100644 AlphaFS/Filesystem/FileInfo Class/FileInfo.Delete.cs delete mode 100644 AlphaFS/Filesystem/FileInfo Class/FileInfo.Encrypt.cs delete mode 100644 AlphaFS/Filesystem/FileInfo Class/FileInfo.EnumerateAlternateDataStreams.cs delete mode 100644 AlphaFS/Filesystem/FileInfo Class/FileInfo.GetAccessControl.cs delete mode 100644 AlphaFS/Filesystem/FileInfo Class/FileInfo.GetHash.cs delete mode 100644 AlphaFS/Filesystem/FileInfo Class/FileInfo.Open.cs delete mode 100644 AlphaFS/Filesystem/FileInfo Class/FileInfo.OpenRead.cs delete mode 100644 AlphaFS/Filesystem/FileInfo Class/FileInfo.OpenText.cs delete mode 100644 AlphaFS/Filesystem/FileInfo Class/FileInfo.OpenWrite.cs delete mode 100644 AlphaFS/Filesystem/FileInfo Class/FileInfo.Refresh.cs delete mode 100644 AlphaFS/Filesystem/FileInfo Class/FileInfo.RefreshEntryInfo.cs delete mode 100644 AlphaFS/Filesystem/FileInfo Class/FileInfo.Replace.cs delete mode 100644 AlphaFS/Filesystem/FileInfo Class/FileInfo.SetAccessControl.cs delete mode 100644 AlphaFS/Filesystem/FileInfo Class/FileInfo.ToString.cs delete mode 100644 AlphaFS/Filesystem/FileInfo Class/FileInfo.cs delete mode 100644 AlphaFS/Filesystem/FileSystemEntryInfo.cs delete mode 100644 AlphaFS/Filesystem/FileSystemInfo.cs delete mode 100644 AlphaFS/Filesystem/FindFileSystemEntryInfo.cs delete mode 100644 AlphaFS/Filesystem/KernelTransaction.cs delete mode 100644 AlphaFS/Filesystem/LinkTargetInfo.cs delete mode 100644 AlphaFS/Filesystem/Native Methods/NativeMethods.BackupStreams.cs delete mode 100644 AlphaFS/Filesystem/Native Methods/NativeMethods.Constants.cs delete mode 100644 AlphaFS/Filesystem/Native Methods/NativeMethods.DeviceManagement.cs delete mode 100644 AlphaFS/Filesystem/Native Methods/NativeMethods.DirectoryManagement.cs delete mode 100644 AlphaFS/Filesystem/Native Methods/NativeMethods.DiskManagement.cs delete mode 100644 AlphaFS/Filesystem/Native Methods/NativeMethods.EncryptedFileRaw.cs delete mode 100644 AlphaFS/Filesystem/Native Methods/NativeMethods.FileManagement.cs delete mode 100644 AlphaFS/Filesystem/Native Methods/NativeMethods.Handles.cs delete mode 100644 AlphaFS/Filesystem/Native Methods/NativeMethods.KernelTransactions.cs delete mode 100644 AlphaFS/Filesystem/Native Methods/NativeMethods.PathManagement.cs delete mode 100644 AlphaFS/Filesystem/Native Methods/NativeMethods.Shell32.cs delete mode 100644 AlphaFS/Filesystem/Native Methods/NativeMethods.Utilities.cs delete mode 100644 AlphaFS/Filesystem/Native Methods/NativeMethods.VolumeManagement.cs delete mode 100644 AlphaFS/Filesystem/Native Structures/BY_HANDLE_FILE_INFORMATION.cs delete mode 100644 AlphaFS/Filesystem/Native Structures/FILETIME.cs delete mode 100644 AlphaFS/Filesystem/Native Structures/FILE_BASIC_INFO.cs delete mode 100644 AlphaFS/Filesystem/Native Structures/FILE_ID_BOTH_DIR_INFO.cs delete mode 100644 AlphaFS/Filesystem/Native Structures/MountPointReparseBuffer.cs delete mode 100644 AlphaFS/Filesystem/Native Structures/ReparseDataBufferHeader.cs delete mode 100644 AlphaFS/Filesystem/Native Structures/SP_DEVICE_INTERFACE_DATA.cs delete mode 100644 AlphaFS/Filesystem/Native Structures/SP_DEVICE_INTERFACE_DETAIL_DATA.cs delete mode 100644 AlphaFS/Filesystem/Native Structures/SP_DEVINFO_DATA.cs delete mode 100644 AlphaFS/Filesystem/Native Structures/SymbolicLinkReparseBuffer.cs delete mode 100644 AlphaFS/Filesystem/Native Structures/WIN32_FILE_ATTRIBUTE_DATA.cs delete mode 100644 AlphaFS/Filesystem/Native Structures/WIN32_FIND_DATA.cs delete mode 100644 AlphaFS/Filesystem/Native Structures/WIN32_FIND_STREAM_DATA.cs delete mode 100644 AlphaFS/Filesystem/Native Structures/WIN32_STREAM_ID.cs delete mode 100644 AlphaFS/Filesystem/Path Class/Path.Combine.cs delete mode 100644 AlphaFS/Filesystem/Path Class/Path.Constants.cs delete mode 100644 AlphaFS/Filesystem/Path Class/Path.GetComponents.cs delete mode 100644 AlphaFS/Filesystem/Path Class/Path.GetFinalPathNameByHandle.cs delete mode 100644 AlphaFS/Filesystem/Path Class/Path.GetFullPath.cs delete mode 100644 AlphaFS/Filesystem/Path Class/Path.SeparatorManipulation.cs delete mode 100644 AlphaFS/Filesystem/Path Class/Path.ShortLongConversions.cs delete mode 100644 AlphaFS/Filesystem/Path Class/Path.Temporary.cs delete mode 100644 AlphaFS/Filesystem/Path Class/Path.UncPaths.cs delete mode 100644 AlphaFS/Filesystem/Path Class/Path.ValidationAndChecks.cs delete mode 100644 AlphaFS/Filesystem/Path Class/Path.cs delete mode 100644 AlphaFS/Filesystem/Safe Handles/SafeCmConnectMachineHandle.cs delete mode 100644 AlphaFS/Filesystem/Safe Handles/SafeEncryptedFileRawHandle.cs delete mode 100644 AlphaFS/Filesystem/Safe Handles/SafeFindFileHandle.cs delete mode 100644 AlphaFS/Filesystem/Safe Handles/SafeFindVolumeHandle.cs delete mode 100644 AlphaFS/Filesystem/Safe Handles/SafeFindVolumeMountPointHandle.cs delete mode 100644 AlphaFS/Filesystem/Safe Handles/SafeKernelTransactionHandle.cs delete mode 100644 AlphaFS/Filesystem/Safe Handles/SafeLocalMemoryBufferHandle.cs delete mode 100644 AlphaFS/Filesystem/Safe Handles/SafeSetupDiClassDevsExHandle.cs delete mode 100644 AlphaFS/Filesystem/Shell32.cs delete mode 100644 AlphaFS/Filesystem/Shell32Info.cs delete mode 100644 AlphaFS/Filesystem/SymbolicLinkTargetInfo.cs delete mode 100644 AlphaFS/Filesystem/Volume.cs delete mode 100644 AlphaFS/Filesystem/VolumeInfo.cs delete mode 100644 AlphaFS/GlobalSuppressions.cs delete mode 100644 AlphaFS/NativeError.cs delete mode 100644 AlphaFS/Network/DfsInfo.cs delete mode 100644 AlphaFS/Network/DfsStorageInfo.cs delete mode 100644 AlphaFS/Network/Enumerations/AccessPermissions.cs delete mode 100644 AlphaFS/Network/Enumerations/Connect.cs delete mode 100644 AlphaFS/Network/Enumerations/DfsNamespaceFlavors.cs delete mode 100644 AlphaFS/Network/Enumerations/DfsPropertyFlags.cs delete mode 100644 AlphaFS/Network/Enumerations/DfsStorageStates.cs delete mode 100644 AlphaFS/Network/Enumerations/DfsTargetPriorityClass.cs delete mode 100644 AlphaFS/Network/Enumerations/DfsVolumeStates.cs delete mode 100644 AlphaFS/Network/Enumerations/ResourceDisplayType.cs delete mode 100644 AlphaFS/Network/Enumerations/ResourceScope.cs delete mode 100644 AlphaFS/Network/Enumerations/ResourceType.cs delete mode 100644 AlphaFS/Network/Enumerations/ResourceUsage.cs delete mode 100644 AlphaFS/Network/Enumerations/ShareInfoLevel.cs delete mode 100644 AlphaFS/Network/Enumerations/ShareResourceTypes.cs delete mode 100644 AlphaFS/Network/Enumerations/ShareType.cs delete mode 100644 AlphaFS/Network/Host Class/Connect.cs delete mode 100644 AlphaFS/Network/Host Class/DistributedFileSystem.cs delete mode 100644 AlphaFS/Network/Host Class/DriveConnection.cs delete mode 100644 AlphaFS/Network/Host Class/EnumerateDrives.cs delete mode 100644 AlphaFS/Network/Host Class/EnumerateOpenResources.cs delete mode 100644 AlphaFS/Network/Host Class/Host.cs delete mode 100644 AlphaFS/Network/Host Class/ServerMessageBlock.cs delete mode 100644 AlphaFS/Network/Native Methods/NativeMethods.DistributedFileSystem.cs delete mode 100644 AlphaFS/Network/Native Methods/NativeMethods.NetworkManagement.cs delete mode 100644 AlphaFS/Network/Native Methods/NativeMethods.NetworkShareManagement.cs delete mode 100644 AlphaFS/Network/Native Methods/NativeMethods.WindowsNetworking.cs delete mode 100644 AlphaFS/Network/Native Methods/NativeMethods.cs delete mode 100644 AlphaFS/Network/Native Structures/CONNECTION_INFO_1.cs delete mode 100644 AlphaFS/Network/Native Structures/DFS_INFO_200.cs delete mode 100644 AlphaFS/Network/Native Structures/DFS_INFO_300.cs delete mode 100644 AlphaFS/Network/Native Structures/DFS_INFO_9.cs delete mode 100644 AlphaFS/Network/Native Structures/DFS_STORAGE_INFO_1.cs delete mode 100644 AlphaFS/Network/Native Structures/DFS_TARGET_PRIORITY.cs delete mode 100644 AlphaFS/Network/Native Structures/FILE_INFO_3.cs delete mode 100644 AlphaFS/Network/Native Structures/NETRESOURCE.cs delete mode 100644 AlphaFS/Network/Native Structures/REMOTE_NAME_INFO.cs delete mode 100644 AlphaFS/Network/Native Structures/SHARE_INFO_1.cs delete mode 100644 AlphaFS/Network/Native Structures/SHARE_INFO_1005.cs delete mode 100644 AlphaFS/Network/Native Structures/SHARE_INFO_2.cs delete mode 100644 AlphaFS/Network/Native Structures/SHARE_INFO_503.cs delete mode 100644 AlphaFS/Network/OpenConnectionInfo.cs delete mode 100644 AlphaFS/Network/OpenResourceInfo.cs delete mode 100644 AlphaFS/Network/ShareInfo.cs delete mode 100644 AlphaFS/OperatingSystem.cs delete mode 100644 AlphaFS/Properties/AssemblyInfo.cs delete mode 100644 AlphaFS/Resources.Designer.cs delete mode 100644 AlphaFS/Resources.resx delete mode 100644 AlphaFS/SafeGlobalMemoryBufferHandle.cs delete mode 100644 AlphaFS/SafeNativeMemoryBufferHandle.cs delete mode 100644 AlphaFS/Security/Crc32.cs delete mode 100644 AlphaFS/Security/Crc64.cs delete mode 100644 AlphaFS/Security/Enumerations/HashType.cs delete mode 100644 AlphaFS/Security/Enumerations/ObjectType.cs delete mode 100644 AlphaFS/Security/Enumerations/SecurityDescriptorControl.cs delete mode 100644 AlphaFS/Security/Enumerations/SecurityInformation.cs delete mode 100644 AlphaFS/Security/InternalPrivilegeEnabler.cs delete mode 100644 AlphaFS/Security/NativeMethods.cs delete mode 100644 AlphaFS/Security/Privilege.cs delete mode 100644 AlphaFS/Security/PrivilegeEnabler.cs delete mode 100644 AlphaFS/Security/SecurityAttributes.cs delete mode 100644 AlphaFS/Security/Structures/Luid.cs delete mode 100644 AlphaFS/Security/Structures/TokenPrivileges.cs delete mode 100644 AlphaFS/Utils.cs delete mode 100644 AlphaFS/Win32Errors.cs delete mode 100644 AlphaFS/app.config delete mode 100644 AlphaFS/obj/Debug/AlphaFS.pdb delete mode 100644 AlphaFS/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache delete mode 100644 AlphaFS/packages.config delete mode 100644 Log/Log.cs delete mode 100644 Log/Log.csproj delete mode 100644 Log/Log.csproj.vspscc delete mode 100644 Log/Properties/AssemblyInfo.cs delete mode 100644 Log/bin/Debug/Log.dll delete mode 100644 Log/bin/Debug/Log.pdb delete mode 100644 Log/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache delete mode 100644 Log/obj/Debug/Log.csproj.FileListAbsolute.txt delete mode 100644 Log/obj/Debug/Log.dll delete mode 100644 Log/obj/Debug/Log.pdb delete mode 100644 NTFSSecurity.sln delete mode 100644 NTFSSecurity.vssscc delete mode 100644 NTFSSecurity/AccessCmdlets/AddAccess.cs delete mode 100644 NTFSSecurity/AccessCmdlets/ClearAccess.cs delete mode 100644 NTFSSecurity/AccessCmdlets/GetAccess.cs delete mode 100644 NTFSSecurity/AccessCmdlets/GetEffectiveAccess.cs delete mode 100644 NTFSSecurity/AccessCmdlets/GetOrphanedAccess.cs delete mode 100644 NTFSSecurity/AccessCmdlets/RemoveAccess.cs delete mode 100644 NTFSSecurity/AuditCmdlets/AddAudit.cs delete mode 100644 NTFSSecurity/AuditCmdlets/ClearAudit.cs delete mode 100644 NTFSSecurity/AuditCmdlets/Get-OrphanedAudit.cs delete mode 100644 NTFSSecurity/AuditCmdlets/GetAudit.cs delete mode 100644 NTFSSecurity/AuditCmdlets/RemoveAudit.cs delete mode 100644 NTFSSecurity/BaseCmdlets.cs delete mode 100644 NTFSSecurity/CodeMembers.cs delete mode 100644 NTFSSecurity/Extensions.cs delete mode 100644 NTFSSecurity/Help/NTFSSecurity.Help.pshproj delete mode 100644 NTFSSecurity/InheritanceCmdlets/DisableAccessInheritance.cs delete mode 100644 NTFSSecurity/InheritanceCmdlets/DisableAuditInheritance.cs delete mode 100644 NTFSSecurity/InheritanceCmdlets/EnableAccessInheritance.cs delete mode 100644 NTFSSecurity/InheritanceCmdlets/EnableAuditInheritance.cs delete mode 100644 NTFSSecurity/InheritanceCmdlets/GetInheritance.cs delete mode 100644 NTFSSecurity/InheritanceCmdlets/SetInheritance.cs delete mode 100644 NTFSSecurity/ItemCmdlets/CopyItem2.cs delete mode 100644 NTFSSecurity/ItemCmdlets/GetChildItem2.cs delete mode 100644 NTFSSecurity/ItemCmdlets/GetDiskSpace.cs delete mode 100644 NTFSSecurity/ItemCmdlets/GetItem2.cs delete mode 100644 NTFSSecurity/ItemCmdlets/MoveItem2.cs delete mode 100644 NTFSSecurity/ItemCmdlets/RemoveItem2.cs delete mode 100644 NTFSSecurity/LinkCmdlets/GetHardLink.cs delete mode 100644 NTFSSecurity/LinkCmdlets/NewHardLink.cs delete mode 100644 NTFSSecurity/LinkCmdlets/NewSymbolicLink.cs delete mode 100644 NTFSSecurity/MiscCmdlets/GetFileHash2.cs delete mode 100644 NTFSSecurity/NTFSSecurity-Help.xml delete mode 100644 NTFSSecurity/NTFSSecurity.Init.ps1 delete mode 100644 NTFSSecurity/NTFSSecurity.csproj delete mode 100644 NTFSSecurity/NTFSSecurity.csproj.user delete mode 100644 NTFSSecurity/NTFSSecurity.csproj.vspscc delete mode 100644 NTFSSecurity/NTFSSecurity.format.ps1xml delete mode 100644 NTFSSecurity/NTFSSecurity.psd1 delete mode 100644 NTFSSecurity/NTFSSecurity.psm1 delete mode 100644 NTFSSecurity/NTFSSecurity.types.ps1xml delete mode 100644 NTFSSecurity/OtherCmdlets.cs delete mode 100644 NTFSSecurity/OwnerCmdlets/GetOwner.cs delete mode 100644 NTFSSecurity/OwnerCmdlets/SetOwner.cs delete mode 100644 NTFSSecurity/PathCmdlets/TestPath2.cs delete mode 100644 NTFSSecurity/Properties/AssemblyInfo.cs delete mode 100644 NTFSSecurity/Properties/Resources.Designer.cs delete mode 100644 NTFSSecurity/Properties/Resources.resx delete mode 100644 NTFSSecurity/Resources/IconContainer.bmp delete mode 100644 NTFSSecurity/Resources/User.jpg delete mode 100644 NTFSSecurity/Resources/container.jpg delete mode 100644 NTFSSecurity/SecurityDescriptorCmdlets/GetSecurityDescriptor.cs delete mode 100644 NTFSSecurity/SecurityDescriptorCmdlets/SetSecurityDescriptor.cs delete mode 100644 NTFSSecurity/ShowSimpleAccess.Designer.cs delete mode 100644 NTFSSecurity/ShowSimpleAccess.cs delete mode 100644 NTFSSecurity/ShowSimpleAccess.resx delete mode 100644 NTFSSecurity/ShowSimpleEffectiveAccess.Designer.cs delete mode 100644 NTFSSecurity/ShowSimpleEffectiveAccess.cs delete mode 100644 NTFSSecurity/ShowSimpleEffectiveAccess.resx delete mode 100644 NTFSSecurity/SimpleAccessCmdlets.cs delete mode 100644 NTFSSecurity/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache delete mode 100644 NTFSSecurity/obj/Debug/NTFSSecurity.Properties.Resources.resources delete mode 100644 NTFSSecurity/obj/Debug/NTFSSecurity.ShowSimpleAccessForm.resources delete mode 100644 NTFSSecurity/obj/Debug/NTFSSecurity.ShowSimpleEffectiveAccessForm.resources delete mode 100644 NTFSSecurity/obj/Debug/NTFSSecurity.csproj.FileListAbsolute.txt delete mode 100644 NTFSSecurity/obj/Debug/NTFSSecurity.csproj.GenerateResource.Cache delete mode 100644 NTFSSecurity/obj/Debug/NTFSSecurity.csprojResolveAssemblyReference.cache delete mode 100644 NTFSSecurity/obj/Debug/NTFSSecurity.dll delete mode 100644 NTFSSecurity/obj/Debug/NTFSSecurity.pdb delete mode 100644 NTFSSecurity/obj/Debug/TempPE/Properties.Resources.Designer.cs.dll delete mode 100644 NTFSSecurityTest/IdentityReference2Tests.cs delete mode 100644 NTFSSecurityTest/NTFSSecurityTest.csproj delete mode 100644 NTFSSecurityTest/NTFSSecurityTest.csproj.vspscc delete mode 100644 NTFSSecurityTest/Properties/AssemblyInfo.cs delete mode 100644 NTFSSecurityTest/Properties/Settings.Designer.cs delete mode 100644 NTFSSecurityTest/Properties/Settings.settings delete mode 100644 NTFSSecurityTest/UnitTest1.cs delete mode 100644 NTFSSecurityTest/app.config delete mode 100644 NTFSSecurityTest/bin/Debug/AlphaFS.dll delete mode 100644 NTFSSecurityTest/bin/Debug/AlphaFS.pdb delete mode 100644 NTFSSecurityTest/bin/Debug/AlphaFS.xml delete mode 100644 NTFSSecurityTest/bin/Debug/Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll delete mode 100644 NTFSSecurityTest/bin/Debug/Microsoft.VisualStudio.QualityTools.UnitTestFramework.xml delete mode 100644 NTFSSecurityTest/bin/Debug/NTFSSecurityTest.dll delete mode 100644 NTFSSecurityTest/bin/Debug/NTFSSecurityTest.dll.config delete mode 100644 NTFSSecurityTest/bin/Debug/NTFSSecurityTest.pdb delete mode 100644 NTFSSecurityTest/bin/Debug/Security2.dll delete mode 100644 NTFSSecurityTest/bin/Debug/Security2.pdb delete mode 100644 NTFSSecurityTest/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache delete mode 100644 NTFSSecurityTest/obj/Debug/NTFSSecurityTest.csproj.FileListAbsolute.txt delete mode 100644 NTFSSecurityTest/obj/Debug/NTFSSecurityTest.csprojResolveAssemblyReference.cache delete mode 100644 NTFSSecurityTest/obj/Debug/NTFSSecurityTest.dll delete mode 100644 NTFSSecurityTest/obj/Debug/NTFSSecurityTest.pdb delete mode 100644 NTFSSecurityTest/obj/Debug/TemporaryGeneratedFile_036C0B5B-1481-4323-8D20-8F5ADCB23D92.cs delete mode 100644 NTFSSecurityTest/obj/Debug/TemporaryGeneratedFile_5937a670-0e60-4077-877b-f7221da3dda1.cs delete mode 100644 NTFSSecurityTest/obj/Debug/TemporaryGeneratedFile_E7A71F73-0F8D-4B9B-B56E-8E70B10BC5D3.cs delete mode 100644 PrivilegeControl/PrivilegeControl.cs delete mode 100644 PrivilegeControl/PrivilegeControl.csproj delete mode 100644 PrivilegeControl/PrivilegeControl.csproj.vspscc delete mode 100644 PrivilegeControl/Properties/AssemblyInfo.cs delete mode 100644 PrivilegeControl/bin/Debug/PrivilegeControl.dll delete mode 100644 PrivilegeControl/bin/Debug/PrivilegeControl.pdb delete mode 100644 PrivilegeControl/bin/Debug/ProcessPrivileges.dll delete mode 100644 PrivilegeControl/bin/Debug/ProcessPrivileges.pdb delete mode 100644 PrivilegeControl/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache delete mode 100644 PrivilegeControl/obj/Debug/PrivilegeControl.csproj.FileListAbsolute.txt delete mode 100644 PrivilegeControl/obj/Debug/PrivilegeControl.csprojResolveAssemblyReference.cache delete mode 100644 PrivilegeControl/obj/Debug/PrivilegeControl.dll delete mode 100644 PrivilegeControl/obj/Debug/PrivilegeControl.pdb delete mode 100644 ProcessPrivileges/AccessTokenHandle.cs delete mode 100644 ProcessPrivileges/AllocatedMemory.cs delete mode 100644 ProcessPrivileges/Enums.cs delete mode 100644 ProcessPrivileges/NativeEnums.cs delete mode 100644 ProcessPrivileges/NativeMethods.cs delete mode 100644 ProcessPrivileges/NativeStructs.cs delete mode 100644 ProcessPrivileges/PrivilegeAndAttributes.cs delete mode 100644 ProcessPrivileges/PrivilegeAndAttributesCollection.cs delete mode 100644 ProcessPrivileges/PrivilegeEnabler.cs delete mode 100644 ProcessPrivileges/Privileges.cs delete mode 100644 ProcessPrivileges/ProcessExtensions.cs delete mode 100644 ProcessPrivileges/ProcessHandle.cs delete mode 100644 ProcessPrivileges/ProcessPrivileges.csproj delete mode 100644 ProcessPrivileges/ProcessPrivileges.csproj.vspscc delete mode 100644 ProcessPrivileges/Properties/AssemblyInfo.cs delete mode 100644 ProcessPrivileges/bin/Debug/ProcessPrivileges.dll delete mode 100644 ProcessPrivileges/bin/Debug/ProcessPrivileges.pdb delete mode 100644 ProcessPrivileges/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache delete mode 100644 ProcessPrivileges/obj/Debug/ProcessPrivileges.csproj.FileListAbsolute.txt delete mode 100644 ProcessPrivileges/obj/Debug/ProcessPrivileges.dll delete mode 100644 ProcessPrivileges/obj/Debug/ProcessPrivileges.pdb delete mode 100644 Security2/EffectiveAccess.cs delete mode 100644 Security2/Enums.cs delete mode 100644 Security2/Exceptions/Exceptions.cs delete mode 100644 Security2/Extensions.cs delete mode 100644 Security2/FileSystem/FileInfo/Extensions.cs delete mode 100644 Security2/FileSystem/FileSystemAccessRule2 Class/FileSystemAccessRule2.AddFileSystemAccessRules.cs delete mode 100644 Security2/FileSystem/FileSystemAccessRule2 Class/FileSystemAccessRule2.GetFileSystemAccessRules.cs delete mode 100644 Security2/FileSystem/FileSystemAccessRule2 Class/FileSystemAccessRule2.RemoveFileSystemAccessRules.cs delete mode 100644 Security2/FileSystem/FileSystemAccessRule2 Class/FileSystemAccessRule2.RemoveFileSystemAccessRulesAll.cs delete mode 100644 Security2/FileSystem/FileSystemAccessRule2 Class/FileSystemAccessRule2.cs delete mode 100644 Security2/FileSystem/FileSystemAuditRule2 Class/FileSystemAuditRule2.AddFileSystemAuditRules.cs delete mode 100644 Security2/FileSystem/FileSystemAuditRule2 Class/FileSystemAuditRule2.GetFileSystemAuditRules.cs delete mode 100644 Security2/FileSystem/FileSystemAuditRule2 Class/FileSystemAuditRule2.RemoveFileSystemAuditRule.cs delete mode 100644 Security2/FileSystem/FileSystemAuditRule2 Class/FileSystemAuditRule2.RemoveFileSystemAuditRuleAll.cs delete mode 100644 Security2/FileSystem/FileSystemAuditRule2 Class/FileSystemAuditRule2.cs delete mode 100644 Security2/FileSystem/FileSystemEffectivePermissionEntry.cs delete mode 100644 Security2/FileSystem/FileSystemFlags.cs delete mode 100644 Security2/FileSystem/FileSystemInheritanceInfo.cs delete mode 100644 Security2/FileSystem/FileSystemOwner.cs delete mode 100644 Security2/FileSystem/FileSystemSecurity2.cs delete mode 100644 Security2/FileSystem/SimpleFileSystemAccessRule.cs delete mode 100644 Security2/FileSystem/SimpleFileSystemAuditRule.cs delete mode 100644 Security2/IdentityReference2.cs delete mode 100644 Security2/Properties/AssemblyInfo.cs delete mode 100644 Security2/Registry/RegistrySecurity.cs delete mode 100644 Security2/Security2.csproj delete mode 100644 Security2/Security2.csproj.vspscc delete mode 100644 Security2/Win32/Enums.cs delete mode 100644 Security2/Win32/Errors.cs delete mode 100644 Security2/Win32/Functions.cs delete mode 100644 Security2/Win32/Lib.cs delete mode 100644 Security2/Win32/SafeHandleEx.cs delete mode 100644 Security2/Win32/Structs.cs delete mode 100644 Security2/Win32/Win32Functions.cs delete mode 100644 Security2/Win32/Win32Lib.cs delete mode 100644 Security2/bin/Debug/AlphaFS.dll delete mode 100644 Security2/bin/Debug/AlphaFS.xml delete mode 100644 Security2/bin/Debug/Security2.dll delete mode 100644 Security2/bin/Debug/Security2.pdb delete mode 100644 Security2/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache delete mode 100644 Security2/obj/Debug/Security2.csproj.FileListAbsolute.txt delete mode 100644 Security2/obj/Debug/Security2.csprojResolveAssemblyReference.cache delete mode 100644 Security2/obj/Debug/Security2.dll delete mode 100644 Security2/obj/Debug/Security2.pdb delete mode 100644 TestClient/Program.cs delete mode 100644 TestClient/Properties/AssemblyInfo.cs delete mode 100644 TestClient/TestClient.csproj delete mode 100644 TestClient/TestClient.csproj.vspscc delete mode 100644 TestClient/bin/Debug/AlphaFS.dll delete mode 100644 TestClient/bin/Debug/AlphaFS.xml delete mode 100644 TestClient/bin/Debug/NTFSSecurity-Help.xml delete mode 100644 TestClient/bin/Debug/NTFSSecurity.Init.ps1 delete mode 100644 TestClient/bin/Debug/NTFSSecurity.dll delete mode 100644 TestClient/bin/Debug/NTFSSecurity.format.ps1xml delete mode 100644 TestClient/bin/Debug/NTFSSecurity.pdb delete mode 100644 TestClient/bin/Debug/NTFSSecurity.psd1 delete mode 100644 TestClient/bin/Debug/NTFSSecurity.psm1 delete mode 100644 TestClient/bin/Debug/NTFSSecurity.types.ps1xml delete mode 100644 TestClient/bin/Debug/PrivilegeControl.dll delete mode 100644 TestClient/bin/Debug/PrivilegeControl.pdb delete mode 100644 TestClient/bin/Debug/ProcessPrivileges.dll delete mode 100644 TestClient/bin/Debug/ProcessPrivileges.pdb delete mode 100644 TestClient/bin/Debug/Security2.dll delete mode 100644 TestClient/bin/Debug/Security2.pdb delete mode 100644 TestClient/bin/Debug/TestClient.exe delete mode 100644 TestClient/bin/Debug/TestClient.pdb delete mode 100644 TestClient/obj/x86/Debug/DesignTimeResolveAssemblyReferencesInput.cache delete mode 100644 TestClient/obj/x86/Debug/TemporaryGeneratedFile_036C0B5B-1481-4323-8D20-8F5ADCB23D92.cs delete mode 100644 TestClient/obj/x86/Debug/TemporaryGeneratedFile_5937a670-0e60-4077-877b-f7221da3dda1.cs delete mode 100644 TestClient/obj/x86/Debug/TemporaryGeneratedFile_E7A71F73-0F8D-4B9B-B56E-8E70B10BC5D3.cs delete mode 100644 TestClient/obj/x86/Debug/TestClient.csproj.FileListAbsolute.txt delete mode 100644 TestClient/obj/x86/Debug/TestClient.csprojResolveAssemblyReference.cache delete mode 100644 TestClient/obj/x86/Debug/TestClient.exe delete mode 100644 TestClient/obj/x86/Debug/TestClient.pdb delete mode 100644 packages/NuGet.CommandLine.3.4.4-rtm-final/NuGet.CommandLine.3.4.4-rtm-final.nupkg delete mode 100644 packages/NuGet.CommandLine.3.4.4-rtm-final/tools/NuGet.exe diff --git a/AlphaFS/AlphaFS.csproj b/AlphaFS/AlphaFS.csproj deleted file mode 100644 index 8268e49..0000000 --- a/AlphaFS/AlphaFS.csproj +++ /dev/null @@ -1,393 +0,0 @@ - - - - Debug - AnyCPU - 2.0 - {F0F9AF1E-D5B5-4D72-804A-5380622FBDEA} - Library - Properties - Alphaleonis.Win32 - AlphaFS - 512 - false - ..\AlphaFS.snk - AlphaFS.ruleset - false - Client - - - true - full - false - ..\Bin\Debug\Net35 - DEBUG;TRACE;NET35 - prompt - 4 - true - ..\Bin\Debug\Net35\AlphaFS.XML - false - false - true - AnyCPU - false - false - AlphaFS.ruleset - v3.5 - - - pdbonly - true - ..\Bin\Release\Net35 - TRACE;NET35 - prompt - 4 - ..\Bin\Release\Net35\AlphaFS.XML - false - false - v3.5 - true - AlphaFS.ruleset - false - - - - - - - - True - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - True - True - Resources.resx - - - Code - - - - - - - - - - - - - Code - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ResXFileCodeGenerator - Resources.Designer.cs - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/AlphaFS/AlphaFS.ruleset b/AlphaFS/AlphaFS.ruleset deleted file mode 100644 index 37302d4..0000000 --- a/AlphaFS/AlphaFS.ruleset +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/AlphaFS/AssemblyVersionInfo.cs b/AlphaFS/AssemblyVersionInfo.cs deleted file mode 100644 index 3881818..0000000 --- a/AlphaFS/AssemblyVersionInfo.cs +++ /dev/null @@ -1,35 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; -using System.Resources; - -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("AlphaFS")] -[assembly: AssemblyCopyright("© 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov")] -[assembly: AssemblyTrademark("")] - -[assembly: AssemblyVersion("2.1.0.0")] -[assembly: AssemblyFileVersion("2.1.0.0")] -[assembly: AssemblyInformationalVersion("2.0")] -[assembly: NeutralResourcesLanguageAttribute("en-US")] - diff --git a/AlphaFS/Filesystem/AlternateDataStreamInfo.cs b/AlphaFS/Filesystem/AlternateDataStreamInfo.cs deleted file mode 100644 index d4416c5..0000000 --- a/AlphaFS/Filesystem/AlternateDataStreamInfo.cs +++ /dev/null @@ -1,138 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System; -using System.Text; - -namespace Alphaleonis.Win32.Filesystem -{ - /// Information about an alternate data stream. - /// - public struct AlternateDataStreamInfo - { - #region Constructor - - internal AlternateDataStreamInfo(string fullPath, NativeMethods.WIN32_FIND_STREAM_DATA findData) : this() - { - StreamName = ParseStreamName(findData.cStreamName); - Size = findData.StreamSize; - _fullPath = fullPath; - } - - #endregion // Constructor - - #region Public Properties - - /// Gets the name of the alternate data stream. - /// This value is an empty string for the default stream (:$DATA), and for any other data stream it contains the name of the stream. - /// The name of the stream. - public string StreamName { get; private set; } - - /// Gets the size of the stream. - public long Size { get; private set; } - - - private readonly string _fullPath; - - /// Gets the full path to the stream. - /// - /// This is a path in long path format that can be passed to to open the stream if - /// or - /// is specified. - /// - /// The full path to the stream in long path format. - public string FullPath - { - get { return _fullPath + Path.StreamSeparator + StreamName + Path.StreamDataLabel; } - } - - #endregion // Public Properties - - #region Public Methods - - /// Returns the hash code for this instance. - /// A 32-bit signed integer that is the hash code for this instance. - public override int GetHashCode() - { - return StreamName.GetHashCode(); - } - - /// Indicates whether this instance and a specified object are equal. - /// The object to compare with the current instance. - /// - /// true if and this instance are the same type and represent the same value; otherwise, false. - /// - public override bool Equals(object obj) - { - if (obj is AlternateDataStreamInfo) - { - AlternateDataStreamInfo other = (AlternateDataStreamInfo) obj; - return StreamName.Equals(other.StreamName, StringComparison.OrdinalIgnoreCase) && Size.Equals(other.Size); - } - - return false; - } - - /// Equality operator. - /// The first operand. - /// The second operand. - /// The result of the operation. - public static bool operator ==(AlternateDataStreamInfo first, AlternateDataStreamInfo second) - { - return first.Equals(second); - } - - /// Inequality operator. - /// The first operand. - /// The second operand. - /// The result of the operation. - public static bool operator !=(AlternateDataStreamInfo first, AlternateDataStreamInfo second) - { - return !first.Equals(second); - } - - #endregion // Public Methods - - #region Private Methods - - private static string ParseStreamName(string input) - { - if (input == null || input.Length < 2) - return string.Empty; - - if (input[0] != Path.StreamSeparatorChar) - throw new ArgumentException(Resources.Invalid_Stream_Name); - - var sb = new StringBuilder(); - for (int i = 1; i < input.Length; i++) - { - if (input[i] == Path.StreamSeparatorChar) - break; - - sb.Append(input[i]); - } - - return sb.ToString(); - } - - #endregion // Private Methods - } -} diff --git a/AlphaFS/Filesystem/BackupFileStream.cs b/AlphaFS/Filesystem/BackupFileStream.cs deleted file mode 100644 index 3a03001..0000000 --- a/AlphaFS/Filesystem/BackupFileStream.cs +++ /dev/null @@ -1,650 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using Alphaleonis.Win32.Security; -using Microsoft.Win32.SafeHandles; -using System; -using System.Diagnostics.CodeAnalysis; -using System.IO; -using System.Runtime.InteropServices; -using System.Security; -using System.Security.AccessControl; -using SecurityNativeMethods = Alphaleonis.Win32.Security.NativeMethods; - -namespace Alphaleonis.Win32.Filesystem -{ - /// The provides access to data associated with a specific file or directory, including security information and alternative data streams, for backup and restore operations. - /// This class uses the BackupRead, - /// BackupSeek and - /// BackupWrite functions from the Win32 API to provide access to the file or directory. - /// - public sealed class BackupFileStream : Stream - { - #region Private Fields - - private readonly bool _canRead; - private readonly bool _canWrite; - private readonly bool _processSecurity; - - [SuppressMessage("Microsoft.Reliability", "CA2006:UseSafeHandleToEncapsulateNativeResources")] - private IntPtr _context = IntPtr.Zero; - - #endregion // Private Fields - - #region Construction and Destruction - - /// Initializes a new instance of the class with the specified path and creation mode. - /// A relative or absolute path for the file that the current object will encapsulate. - /// A constant that determines how to open or create the file. - /// The file will be opened for exclusive access for both reading and writing. - [SuppressMessage("Microsoft.Reliability", "CA2000:Dispose objects before losing scope")] - [SecurityCritical] - public BackupFileStream(string path, FileMode mode) - : this(File.CreateFileCore(null, path, ExtendedFileAttributes.Normal, null, mode, FileSystemRights.Read | FileSystemRights.Write, FileShare.None, true, PathFormat.RelativePath), FileSystemRights.Read | FileSystemRights.Write) - { - } - - /// Initializes a new instance of the class with the specified path, creation mode and access rights. - /// A relative or absolute path for the file that the current object will encapsulate. - /// A constant that determines how to open or create the file. - /// A constant that determines the access rights to use when creating access and audit rules for the file. - /// The file will be opened for exclusive access. - [SuppressMessage("Microsoft.Reliability", "CA2000:Dispose objects before losing scope")] - [SecurityCritical] - public BackupFileStream(string path, FileMode mode, FileSystemRights access) - : this(File.CreateFileCore(null, path, ExtendedFileAttributes.Normal, null, mode, access, FileShare.None, true, PathFormat.RelativePath), access) - { - } - - /// Initializes a new instance of the class with the specified path, creation mode, access rights and sharing permission. - /// A relative or absolute path for the file that the current object will encapsulate. - /// A constant that determines how to open or create the file. - /// A constant that determines the access rights to use when creating access and audit rules for the file. - /// A constant that determines how the file will be shared by processes. - [SuppressMessage("Microsoft.Reliability", "CA2000:Dispose objects before losing scope")] - [SecurityCritical] - public BackupFileStream(string path, FileMode mode, FileSystemRights access, FileShare share) - : this(File.CreateFileCore(null, path, ExtendedFileAttributes.Normal, null, mode, access, share, true, PathFormat.RelativePath), access) - { - } - - /// Initializes a new instance of the class with the specified path, creation mode, access rights and sharing permission, and additional file attributes. - /// A relative or absolute path for the file that the current object will encapsulate. - /// A constant that determines how to open or create the file. - /// A constant that determines the access rights to use when creating access and audit rules for the file. - /// A constant that determines how the file will be shared by processes. - /// A constant that specifies additional file attributes. - [SuppressMessage("Microsoft.Reliability", "CA2000:Dispose objects before losing scope")] - [SecurityCritical] - public BackupFileStream(string path, FileMode mode, FileSystemRights access, FileShare share, ExtendedFileAttributes attributes) - : this(File.CreateFileCore(null, path, attributes, null, mode, access, share, true, PathFormat.RelativePath), access) - { - } - - /// Initializes a new instance of the class with the specified path, creation mode, access rights and sharing permission, additional file attributes, access control and audit security. - /// A relative or absolute path for the file that the current object will encapsulate. - /// A constant that determines how to open or create the file. - /// A constant that determines the access rights to use when creating access and audit rules for the file. - /// A constant that determines how the file will be shared by processes. - /// A constant that specifies additional file attributes. - /// A constant that determines the access control and audit security for the file. This parameter This parameter may be . - [SuppressMessage("Microsoft.Reliability", "CA2000:Dispose objects before losing scope")] - [SecurityCritical] - public BackupFileStream(string path, FileMode mode, FileSystemRights access, FileShare share, ExtendedFileAttributes attributes, FileSecurity security) - : this(File.CreateFileCore(null, path, attributes, security, mode, access, share, true, PathFormat.RelativePath), access) - { - } - - #region Transactional - - /// Initializes a new instance of the class with the specified path and creation mode. - /// The transaction. - /// A relative or absolute path for the file that the current object will encapsulate. - /// A constant that determines how to open or create the file. - /// The file will be opened for exclusive access for both reading and writing. - [SuppressMessage("Microsoft.Reliability", "CA2000:Dispose objects before losing scope")] - [SecurityCritical] - public BackupFileStream(KernelTransaction transaction, string path, FileMode mode) - : this(File.CreateFileCore(transaction, path, ExtendedFileAttributes.Normal, null, mode, FileSystemRights.Read | FileSystemRights.Write, FileShare.None, true, PathFormat.RelativePath), FileSystemRights.Read | FileSystemRights.Write) - { - } - - /// Initializes a new instance of the class with the specified path, creation mode and access rights. - /// The transaction. - /// A relative or absolute path for the file that the current object will encapsulate. - /// A constant that determines how to open or create the file. - /// A constant that determines the access rights to use when creating access and audit rules for the file. - /// The file will be opened for exclusive access. - [SuppressMessage("Microsoft.Reliability", "CA2000:Dispose objects before losing scope")] - [SecurityCritical] - public BackupFileStream(KernelTransaction transaction, string path, FileMode mode, FileSystemRights access) - : this(File.CreateFileCore(transaction, path, ExtendedFileAttributes.Normal, null, mode, access, FileShare.None, true, PathFormat.RelativePath), access) - { - } - - /// Initializes a new instance of the class with the specified path, creation mode, access rights and sharing permission. - /// The transaction. - /// A relative or absolute path for the file that the current object will encapsulate. - /// A constant that determines how to open or create the file. - /// A constant that determines the access rights to use when creating access and audit rules for the file. - /// A constant that determines how the file will be shared by processes. - [SuppressMessage("Microsoft.Reliability", "CA2000:Dispose objects before losing scope")] - [SecurityCritical] - public BackupFileStream(KernelTransaction transaction, string path, FileMode mode, FileSystemRights access, FileShare share) - : this(File.CreateFileCore(transaction, path, ExtendedFileAttributes.Normal, null, mode, access, share, true, PathFormat.RelativePath), access) - { - } - - /// Initializes a new instance of the class with the specified path, creation mode, access rights and sharing permission, and additional file attributes. - /// The transaction. - /// A relative or absolute path for the file that the current object will encapsulate. - /// A constant that determines how to open or create the file. - /// A constant that determines the access rights to use when creating access and audit rules for the file. - /// A constant that determines how the file will be shared by processes. - /// A constant that specifies additional file attributes. - [SuppressMessage("Microsoft.Reliability", "CA2000:Dispose objects before losing scope")] - [SecurityCritical] - public BackupFileStream(KernelTransaction transaction, string path, FileMode mode, FileSystemRights access, FileShare share, ExtendedFileAttributes attributes) - : this(File.CreateFileCore(transaction, path, attributes, null, mode, access, share, true, PathFormat.RelativePath), access) - { - } - - /// Initializes a new instance of the class with the specified path, creation mode, access rights and sharing permission, additional file attributes, access control and audit security. - /// The transaction. - /// A relative or absolute path for the file that the current object will encapsulate. - /// A constant that determines how to open or create the file. - /// A constant that determines the access rights to use when creating access and audit rules for the file. - /// A constant that determines how the file will be shared by processes. - /// A constant that specifies additional file attributes. - /// A constant that determines the access control and audit security for the file. This parameter This parameter may be . - [SuppressMessage("Microsoft.Reliability", "CA2000:Dispose objects before losing scope")] - [SecurityCritical] - public BackupFileStream(KernelTransaction transaction, string path, FileMode mode, FileSystemRights access, FileShare share, ExtendedFileAttributes attributes, FileSecurity security) - : this(File.CreateFileCore(transaction, path, attributes, security, mode, access, share, true, PathFormat.RelativePath), access) - { - } - - #endregion // Transacted - - - #region Stream - - /// Initializes a new instance of the class for the specified file handle, with the specified read/write permission. - /// A file handle for the file that this object will encapsulate. - /// A constant that gets the and properties of the object. - - [SecurityCritical] - public BackupFileStream(SafeFileHandle handle, FileSystemRights access) - { - if (handle == null) - throw new ArgumentNullException("handle", Resources.Handle_Is_Invalid); - - if (handle.IsInvalid) - { - handle.Close(); - throw new ArgumentException(Resources.Handle_Is_Invalid); - } - - if (handle.IsClosed) - throw new ArgumentException(Resources.Handle_Is_Closed); - - - SafeFileHandle = handle; - - _canRead = (access & FileSystemRights.ReadData) != 0; - _canWrite = (access & FileSystemRights.WriteData) != 0; - _processSecurity = true; - } - - #endregion // Stream - - #endregion // Construction and Destruction - - #region NotSupportedException - - /// When overridden in a derived class, gets the length in bytes of the stream. - /// This method always throws an exception. - /// - public override long Length - { - get { throw new NotSupportedException(Resources.No_Stream_Seeking_Support); } - } - - /// When overridden in a derived class, gets or sets the position within the current stream. - /// This method always throws an exception. - /// - public override long Position - { - get { throw new NotSupportedException(Resources.No_Stream_Seeking_Support); } - set { throw new NotSupportedException(Resources.No_Stream_Seeking_Support); } - } - - - /// When overridden in a derived class, sets the position within the current stream. - /// A byte offset relative to the parameter. - /// A value of type indicating the reference point used to obtain the new position. - /// The new position within the current stream. - /// This stream does not support seeking using this method, and calling this method will always throw . See for an alternative way of seeking forward. - /// - public override long Seek(long offset, SeekOrigin origin) - { - throw new NotSupportedException(Resources.No_Stream_Seeking_Support); - } - - - /// When overridden in a derived class, sets the length of the current stream. - /// The desired length of the current stream in bytes. - /// This method is not supported by the class, and calling it will always generate a . - /// - public override void SetLength(long value) - { - throw new NotSupportedException(Resources.No_Stream_Seeking_Support); - } - - #endregion // NotSupportedException - - #region Properties - - /// Gets a value indicating whether the current stream supports reading. - /// if the stream supports reading, otherwise. - public override bool CanRead - { - get { return _canRead; } - } - - /// Gets a value indicating whether the current stream supports seeking. - /// This method always returns . - public override bool CanSeek - { - get { return false; } - } - - /// Gets a value indicating whether the current stream supports writing. - /// if the stream supports writing, otherwise. - public override bool CanWrite - { - get { return _canWrite; } - } - - /// Gets a object that represents the operating system file handle for the file that the current object encapsulates. - /// A object that represents the operating system file handle for the file that - /// the current object encapsulates. - private SafeFileHandle SafeFileHandle { get; set; } - - #endregion // Properties - - #region Methods - - /// Reads a sequence of bytes from the current stream and advances the position within the stream by the number of bytes read. - /// This method will not backup the access-control list (ACL) data for the file or directory. - /// - /// An array of bytes. When this method returns, the buffer contains the specified byte array with the values between - /// and ( + - 1) replaced by the bytes read from the - /// current source. - /// - /// - /// The zero-based byte offset in at which to begin storing the data read from the current stream. - /// - /// The maximum number of bytes to be read from the current stream. - /// - /// The total number of bytes read into the buffer. This can be less than the number of bytes requested if that many bytes are not - /// currently available, or zero (0) if the end of the stream has been reached. - /// - /// - /// - /// - /// - /// - /// - public override int Read(byte[] buffer, int offset, int count) - { - return Read(buffer, offset, count, false); - } - - /// When overridden in a derived class, reads a sequence of bytes from the current stream and advances the position within the stream by the number of bytes read. - /// An array of bytes. When this method returns, the buffer contains the specified byte array with the values - /// between and ( + - 1) replaced by the bytes read from the current source. - /// The zero-based byte offset in at which to begin storing the data read from the current stream. - /// The maximum number of bytes to be read from the current stream. - /// Indicates whether the function will backup the access-control list (ACL) data for the file or directory. - /// - /// The total number of bytes read into the buffer. This can be less than the number of bytes requested if that many bytes are not - /// currently available, or zero (0) if the end of the stream has been reached. - /// - /// - /// - /// - /// - /// - [SuppressMessage("Microsoft.Security", "CA2122:DoNotIndirectlyExposeMethodsWithLinkDemands")] - [SecurityCritical] - public int Read(byte[] buffer, int offset, int count, bool processSecurity) - { - if (buffer == null) - throw new ArgumentNullException("buffer"); - - if (!CanRead) - throw new NotSupportedException("Stream does not support reading"); - - if (offset + count > buffer.Length) - throw new ArgumentException("The sum of offset and count is larger than the size of the buffer."); - - if (offset < 0) - throw new ArgumentOutOfRangeException("offset", offset, Resources.Negative_Offset); - - if (count < 0) - throw new ArgumentOutOfRangeException("count", count, Resources.Negative_Count); - - - using (var safeBuffer = new SafeGlobalMemoryBufferHandle(count)) - { - uint numberOfBytesRead; - - if (!NativeMethods.BackupRead(SafeFileHandle, safeBuffer, (uint)safeBuffer.Capacity, out numberOfBytesRead, false, processSecurity, ref _context)) - NativeError.ThrowException(Marshal.GetLastWin32Error()); - - // See File.GetAccessControlCore(): .CopyTo() does not work there? - safeBuffer.CopyTo(buffer, offset, count); - - return (int)numberOfBytesRead; - } - } - - - /// Writes a sequence of bytes to the current stream and advances the current position within this stream by the number of bytes written. - /// - /// Writes a sequence of bytes to the current stream and advances the current position within this stream by the number of bytes written. - /// - /// An array of bytes. This method copies bytes from to the current stream. - /// The zero-based byte offset in at which to begin copying bytes to the current stream. - /// The number of bytes to be written to the current stream. - /// - /// - /// - /// - /// - /// This method will not process the access-control list (ACL) data for the file or directory. - public override void Write(byte[] buffer, int offset, int count) - { - Write(buffer, offset, count, false); - } - - /// When overridden in a derived class, writes a sequence of bytes to the current stream and advances the current position within this stream by the number of bytes written. - /// An array of bytes. This method copies bytes from to the current stream. - /// The zero-based byte offset in at which to begin copying bytes to the current stream. - /// The number of bytes to be written to the current stream. - /// Specifies whether the function will restore the access-control list (ACL) data for the file or directory. - /// If this is you need to specify and access when - /// opening the file or directory handle. If the handle does not have those access rights, the operating system denies - /// access to the ACL data, and ACL data restoration will not occur. - /// - /// - /// - /// - /// - [SuppressMessage("Microsoft.Security", "CA2122:DoNotIndirectlyExposeMethodsWithLinkDemands")] - [SecurityCritical] - public void Write(byte[] buffer, int offset, int count, bool processSecurity) - { - if (buffer == null) - throw new ArgumentNullException("buffer"); - - if (offset < 0) - throw new ArgumentOutOfRangeException("offset", offset, Resources.Negative_Offset); - - if (count < 0) - throw new ArgumentOutOfRangeException("count", count, Resources.Negative_Count); - - if (offset + count > buffer.Length) - throw new ArgumentException(Resources.Buffer_Not_Large_Enough); - - - using (var safeBuffer = new SafeGlobalMemoryBufferHandle(count)) - { - safeBuffer.CopyFrom(buffer, offset, count); - - uint bytesWritten; - - if (!NativeMethods.BackupWrite(SafeFileHandle, safeBuffer, (uint)safeBuffer.Capacity, out bytesWritten, false, processSecurity, ref _context)) - NativeError.ThrowException(Marshal.GetLastWin32Error()); - } - } - - - /// Clears all buffers for this stream and causes any buffered data to be written to the underlying device. - public override void Flush() - { - if (!NativeMethods.FlushFileBuffers(SafeFileHandle)) - NativeError.ThrowException(Marshal.GetLastWin32Error()); - } - - - /// Skips ahead the specified number of bytes from the current stream. - /// This method represents the Win32 API implementation of BackupSeek. - /// - /// Applications use the method to skip portions of a data stream that cause errors. This function does not - /// seek across stream headers. For example, this function cannot be used to skip the stream name. If an application - /// attempts to seek past the end of a substream, the function fails, the return value indicates the actual number of bytes - /// the function seeks, and the file position is placed at the start of the next stream header. - /// - /// - /// The number of bytes to skip. - /// The number of bytes actually skipped. - [SecurityCritical] - public long Skip(long bytes) - { - uint lowSought, highSought; - if (!NativeMethods.BackupSeek(SafeFileHandle, NativeMethods.GetLowOrderDword(bytes), NativeMethods.GetHighOrderDword(bytes), out lowSought, out highSought, ref _context)) - { - int lastError = Marshal.GetLastWin32Error(); - - // Error Code 25 indicates a seek error, we just skip that here. - if (lastError != Win32Errors.NO_ERROR && lastError != Win32Errors.ERROR_SEEK) - NativeError.ThrowException(lastError); - } - - return NativeMethods.ToLong(highSought, lowSought); - } - - - /// Gets a object that encapsulates the access control list (ACL) entries for the file described by the current object. - /// - /// - /// A object that encapsulates the access control list (ACL) entries for the file described by the current - /// object. - /// - [SuppressMessage("Microsoft.Design", "CA1024:UsePropertiesWhereAppropriate")] - [SecurityCritical] - public FileSecurity GetAccessControl() - { - IntPtr pSidOwner, pSidGroup, pDacl, pSacl; - SafeGlobalMemoryBufferHandle pSecurityDescriptor; - - uint lastError = SecurityNativeMethods.GetSecurityInfo(SafeFileHandle, ObjectType.FileObject, - SecurityInformation.Group | SecurityInformation.Owner | SecurityInformation.Label | SecurityInformation.Dacl | SecurityInformation.Sacl, - out pSidOwner, out pSidGroup, out pDacl, out pSacl, out pSecurityDescriptor); - - try - { - if (lastError != Win32Errors.ERROR_SUCCESS) - NativeError.ThrowException((int)lastError); - - if (pSecurityDescriptor != null && pSecurityDescriptor.IsInvalid) - { - pSecurityDescriptor.Close(); - throw new IOException(Resources.Returned_Invalid_Security_Descriptor); - } - - uint length = SecurityNativeMethods.GetSecurityDescriptorLength(pSecurityDescriptor); - - byte[] managedBuffer = new byte[length]; - - - // .CopyTo() does not work there? - if (pSecurityDescriptor != null) - pSecurityDescriptor.CopyTo(managedBuffer, 0, (int) length); - - - var fs = new FileSecurity(); - fs.SetSecurityDescriptorBinaryForm(managedBuffer); - - return fs; - } - finally - { - if (pSecurityDescriptor != null) - pSecurityDescriptor.Close(); - } - } - - - /// Applies access control list (ACL) entries described by a object to the file described by the current object. - /// A object that describes an ACL entry to apply to the current file. - [SecurityCritical] - public void SetAccessControl(ObjectSecurity fileSecurity) - { - File.SetAccessControlCore(null, SafeFileHandle, fileSecurity, AccessControlSections.All, PathFormat.LongFullPath); - } - - - /// Prevents other processes from changing the while permitting read access. - /// The beginning of the range to lock. The value of this parameter must be equal to or greater than zero (0). - /// The range to be locked. - /// - /// - [SecurityCritical] - public void Lock(long position, long length) - { - if (position < 0) - throw new ArgumentOutOfRangeException("position", position, Resources.Unlock_Position_Negative); - - if (length < 0) - throw new ArgumentOutOfRangeException("length", length, Resources.Negative_Lock_Length); - - if (!NativeMethods.LockFile(SafeFileHandle, NativeMethods.GetLowOrderDword(position), NativeMethods.GetHighOrderDword(position), NativeMethods.GetLowOrderDword(length), NativeMethods.GetHighOrderDword(length))) - NativeError.ThrowException(Marshal.GetLastWin32Error()); - } - - - /// Allows access by other processes to all or part of a file that was previously locked. - /// The beginning of the range to unlock. - /// The range to be unlocked. - /// - /// - /// - [SecurityCritical] - public void Unlock(long position, long length) - { - if (position < 0) - throw new ArgumentOutOfRangeException("position", position, Resources.Unlock_Position_Negative); - - if (length < 0) - throw new ArgumentOutOfRangeException("length", length, Resources.Negative_Lock_Length); - - if (!NativeMethods.UnlockFile(SafeFileHandle, NativeMethods.GetLowOrderDword(position), NativeMethods.GetHighOrderDword(position), NativeMethods.GetLowOrderDword(length), NativeMethods.GetHighOrderDword(length))) - NativeError.ThrowException(Marshal.GetLastWin32Error()); - } - - - /// Reads a stream header from the current . - /// The stream header read from the current , or if the end-of-file - /// was reached before the required number of bytes of a header could be read. - /// - /// The stream must be positioned at where an actual header starts for the returned object to represent valid - /// information. - [SecurityCritical] - public BackupStreamInfo ReadStreamInfo() - { - var sizeOf = Marshal.SizeOf(typeof(NativeMethods.WIN32_STREAM_ID)); - - using (var hBuf = new SafeGlobalMemoryBufferHandle(sizeOf)) - { - uint numberOfBytesRead; - - if (!NativeMethods.BackupRead(SafeFileHandle, hBuf, (uint) sizeOf, out numberOfBytesRead, false, _processSecurity, ref _context)) - NativeError.ThrowException(); - - - if (numberOfBytesRead == 0) - return null; - - - if (numberOfBytesRead < sizeOf) - throw new IOException(Resources.Read_Incomplete_Header); - - var streamID = hBuf.PtrToStructure(0); - - uint nameLength = (uint) Math.Min(streamID.dwStreamNameSize, hBuf.Capacity); - - - if (!NativeMethods.BackupRead(SafeFileHandle, hBuf, nameLength, out numberOfBytesRead, false, _processSecurity, ref _context)) - NativeError.ThrowException(); - - string name = hBuf.PtrToStringUni(0, (int) nameLength/2); - - return new BackupStreamInfo(streamID, name); - } - } - - #endregion // Methods - - #region Disposable Members - - /// Releases the unmanaged resources used by the and optionally releases the managed resources. - /// to release both managed and unmanaged resources; to release only unmanaged resources. - [SuppressMessage("Microsoft.Reliability", "CA2000:Dispose objects before losing scope")] - protected override void Dispose(bool disposing) - { - // If one of the constructors previously threw an exception, - // than the object hasn't been initialized properly and call from finalize will fail. - - if (SafeFileHandle != null && !SafeFileHandle.IsInvalid) - { - if (_context != IntPtr.Zero) - { - try - { - uint temp; - - // MSDN: To release the memory used by the data structure, call BackupRead with the bAbort parameter set to TRUE when the backup operation is complete. - if (!NativeMethods.BackupRead(SafeFileHandle, new SafeGlobalMemoryBufferHandle(), 0, out temp, true, false, ref _context)) - NativeError.ThrowException(Marshal.GetLastWin32Error()); - } - finally - { - _context = IntPtr.Zero; - SafeFileHandle.Close(); - } - } - } - - base.Dispose(disposing); - } - - /// Releases unmanaged resources and performs other cleanup operations before the is reclaimed by garbage collection. - ~BackupFileStream() - { - Dispose(false); - } - - #endregion // Disposable Members - } -} diff --git a/AlphaFS/Filesystem/BackupStreamInfo.cs b/AlphaFS/Filesystem/BackupStreamInfo.cs deleted file mode 100644 index 2bc85a5..0000000 --- a/AlphaFS/Filesystem/BackupStreamInfo.cs +++ /dev/null @@ -1,84 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -namespace Alphaleonis.Win32.Filesystem -{ - /// The structure contains stream header data. - /// - public sealed class BackupStreamInfo - { - #region Private Fields - - private readonly long m_size; - private readonly string m_name; - private readonly BackupStreamType m_streamType; - private readonly StreamAttributes m_attributes; - - #endregion - - #region Constructor - - /// Initializes a new instance of the class. - /// The stream ID. - /// The name. - internal BackupStreamInfo(NativeMethods.WIN32_STREAM_ID streamID, string name) - { - m_name = name; - m_size = (long) streamID.Size; - m_attributes = streamID.dwStreamAttributes; - m_streamType = streamID.dwStreamId; - } - - #endregion - - #region Public Properties - - /// Gets the size of the data in the substream, in bytes. - /// The size of the data in the substream, in bytes. - public long Size - { - get { return m_size; } - } - - /// Gets a string that specifies the name of the alternative data stream. - /// A string that specifies the name of the alternative data stream. - public string Name - { - get { return m_name; } - } - - /// Gets the type of the data in the stream. - /// The type of the data in the stream. - public BackupStreamType StreamType - { - get { return m_streamType; } - } - - /// Gets the attributes of the data to facilitate cross-operating system transfer. - /// Attributes of the data to facilitate cross-operating system transfer. - public StreamAttributes Attributes - { - get { return m_attributes; } - } - - #endregion // Public Properties - } -} diff --git a/AlphaFS/Filesystem/ByHandleFileInfo.cs b/AlphaFS/Filesystem/ByHandleFileInfo.cs deleted file mode 100644 index e46dbcd..0000000 --- a/AlphaFS/Filesystem/ByHandleFileInfo.cs +++ /dev/null @@ -1,177 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System; -using System.IO; -using System.Security; - -namespace Alphaleonis.Win32.Filesystem -{ - #region ByHandleFileInfo - - /// Contains information that the GetFileInformationByHandle function retrieves. - [SerializableAttribute] - [SecurityCritical] - public sealed class ByHandleFileInfo - { - #region Constructor - - internal ByHandleFileInfo(NativeMethods.BY_HANDLE_FILE_INFORMATION fibh) - { - CreationTimeUtc = DateTime.FromFileTimeUtc(fibh.ftCreationTime); - LastAccessTimeUtc = DateTime.FromFileTimeUtc(fibh.ftLastAccessTime); - LastWriteTimeUtc = DateTime.FromFileTimeUtc(fibh.ftLastWriteTime); - - Attributes = fibh.dwFileAttributes; - FileIndex = NativeMethods.ToLong(fibh.nFileIndexHigh, fibh.nFileIndexLow); - FileSize = NativeMethods.ToLong(fibh.nFileSizeHigh, fibh.nFileSizeLow); - NumberOfLinks = fibh.nNumberOfLinks; - VolumeSerialNumber = fibh.dwVolumeSerialNumber; - } - - #endregion // Constructor - - #region Properties - - #region Attributes - - /// Gets the file attributes. - /// The file attributes. - public FileAttributes Attributes { get; private set; } - - #endregion // Attributes - - #region CreationTime - - /// Gets the time this entry was created. - /// The time this entry was created. - public DateTime CreationTime - { - get { return CreationTimeUtc.ToLocalTime(); } - } - - #endregion // CreationTime - - #region CreationTimeUtc - - /// Gets the time, in coordinated universal time (UTC), this entry was created. - /// The time, in coordinated universal time (UTC), this entry was created. - public DateTime CreationTimeUtc { get; private set; } - - #endregion // CreationTimeUtc - - #region LastAccessTime - - /// Gets the time this entry was last accessed. - /// For a file, the structure specifies the last time that a file is read from or written to. - /// For a directory, the structure specifies when the directory is created. - /// For both files and directories, the specified date is correct, but the time of day is always set to midnight. - /// If the underlying file system does not support the last access time, this member is zero (0). - /// - /// The time this entry was last accessed. - public DateTime LastAccessTime - { - get { return LastAccessTimeUtc.ToLocalTime(); } - } - - #endregion // LastAccessTime - - #region LastAccessTimeUtc - - /// Gets the time, in coordinated universal time (UTC), this entry was last accessed. - /// For a file, the structure specifies the last time that a file is read from or written to. - /// For a directory, the structure specifies when the directory is created. - /// For both files and directories, the specified date is correct, but the time of day is always set to midnight. - /// If the underlying file system does not support the last access time, this member is zero (0). - /// - /// The time, in coordinated universal time (UTC), this entry was last accessed. - public DateTime LastAccessTimeUtc { get; private set; } - - #endregion // LastAccessTimeUtc - - #region LastWriteTime - - /// Gets the time this entry was last modified. - /// For a file, the structure specifies the last time that a file is written to. - /// For a directory, the structure specifies when the directory is created. - /// If the underlying file system does not support the last access time, this member is zero (0). - /// - /// The time this entry was last modified. - public DateTime LastWriteTime - { - get { return LastWriteTimeUtc.ToLocalTime(); } - } - - #endregion // LastWriteTime - - #region LastWriteTimeUtc - - /// Gets the time, in coordinated universal time (UTC), this entry was last modified. - /// For a file, the structure specifies the last time that a file is written to. - /// For a directory, the structure specifies when the directory is created. - /// If the underlying file system does not support the last access time, this member is zero (0). - /// - /// The time, in coordinated universal time (UTC), this entry was last modified. - public DateTime LastWriteTimeUtc { get; private set; } - - #endregion // LastWriteTimeUtc - - #region VolumeSerialNumber - - /// Gets the serial number of the volume that contains a file. - /// The serial number of the volume that contains a file. - public int VolumeSerialNumber { get; private set; } - - #endregion // VolumeSerialNumber - - #region FileSize - - /// Gets the size of the file. - /// The size of the file. - public long FileSize { get; private set; } - - #endregion // FileSize - - #region NumberOfLinks - - /// Gets the number of links to this file. For the FAT file system this member is always 1. For the NTFS file system, it can be more than 1. - /// The number of links to this file. - public int NumberOfLinks { get; private set; } - - #endregion // NumberOfLinks - - #region FileIndex - - /// - /// Gets the unique identifier associated with the file. The identifier and the volume serial number uniquely identify a - /// file on a single computer. To determine whether two open handles represent the same file, combine the identifier - /// and the volume serial number for each file and compare them. - /// - /// The unique identifier of the file. - public long FileIndex { get; private set; } - - #endregion // FileIndex - - #endregion // Properties - } - - #endregion // ByHandleFileInfo -} diff --git a/AlphaFS/Filesystem/ChangeErrorMode.cs b/AlphaFS/Filesystem/ChangeErrorMode.cs deleted file mode 100644 index 035d52b..0000000 --- a/AlphaFS/Filesystem/ChangeErrorMode.cs +++ /dev/null @@ -1,56 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System; - -namespace Alphaleonis.Win32.Filesystem -{ - internal static partial class NativeMethods - { - /// Controls whether the system will handle the specified types of serious errors or whether the process will handle them. - /// Minimum supported client: Windows 2000 Professional - /// Minimum supported server: Windows 2000 Server - public sealed class ChangeErrorMode : IDisposable - { - private readonly ErrorMode _oldMode; - - /// ChangeErrorMode is for the Win32 SetThreadErrorMode() method, used to suppress possible pop-ups. - /// One of the values. - public ChangeErrorMode(ErrorMode mode) - { - if (IsAtLeastWindows7) - SetThreadErrorMode(mode, out _oldMode); - else - _oldMode = SetErrorMode(mode); - } - - void IDisposable.Dispose() - { - ErrorMode oldMode; - - if (IsAtLeastWindows7) - SetThreadErrorMode(_oldMode, out oldMode); - else - SetErrorMode(_oldMode); - } - } - } -} diff --git a/AlphaFS/Filesystem/CopyMoveProgressRoutine.cs b/AlphaFS/Filesystem/CopyMoveProgressRoutine.cs deleted file mode 100644 index 648bd9d..0000000 --- a/AlphaFS/Filesystem/CopyMoveProgressRoutine.cs +++ /dev/null @@ -1,28 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System; - -namespace Alphaleonis.Win32.Filesystem -{ - /// Callback used by CopyFileXxx and MoveFileXxx to report progress about the copy/move operation. - public delegate CopyMoveProgressResult CopyMoveProgressRoutine(long totalFileSize, long totalBytesTransferred, long streamSize, long streamBytesTransferred, int streamNumber, CopyMoveProgressCallbackReason callbackReason, object userData); -} diff --git a/AlphaFS/Filesystem/CopyMoveResult.cs b/AlphaFS/Filesystem/CopyMoveResult.cs deleted file mode 100644 index 4e8cfe9..0000000 --- a/AlphaFS/Filesystem/CopyMoveResult.cs +++ /dev/null @@ -1,82 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System.ComponentModel; -using System.Diagnostics.CodeAnalysis; - -namespace Alphaleonis.Win32.Filesystem -{ - /// Class for CopyMoveResult that contains the results for the Copy or Move action. - public sealed class CopyMoveResult - { - /// Create a CopyMoveResult class instance for the Copy or Move action. - /// Indicates the source file or directory. - /// Indicates the destination file or directory. - /// Indicates if the action was canceled. - /// The error code encountered during the Copy or Move action. - public CopyMoveResult(string source, string destination, bool isCanceled, int errorCode) - { - Source = source; - Destination = destination; - IsCanceled = isCanceled; - ErrorCode = errorCode; - } - - - /// The error code encountered during the Copy or Move action. - /// 0 (zero) indicates success. - public int ErrorCode { get; internal set; } - - - /// The error message from the that was encountered during the Copy or Move action. - /// A message describing the error. - [SuppressMessage("Microsoft.Design", "CA1065:DoNotRaiseExceptionsInUnexpectedLocations")] - public string ErrorMessage - { - get { return new Win32Exception(ErrorCode).Message; } - } - - - /// When true indicates that the Copy or Move action was canceled. - /// when the Copy/Move action was canceled. Otherwise . - public bool IsCanceled { get; internal set; } - - - /// Indicates the source file or directory. - public string Source { get; private set; } - - - /// Indicates the destination file or directory. - public string Destination { get; private set; } - - - /// The total number of folders copied. - public long TotalFolders { get; internal set; } - - - /// The total number of files copied. - public long TotalFiles { get; internal set; } - - - /// The total number of bytes copied. - public long TotalBytes { get; internal set; } - } -} diff --git a/AlphaFS/Filesystem/Device.cs b/AlphaFS/Filesystem/Device.cs deleted file mode 100644 index 0d3318b..0000000 --- a/AlphaFS/Filesystem/Device.cs +++ /dev/null @@ -1,459 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using Alphaleonis.Win32.Network; -using Microsoft.Win32.SafeHandles; -using System; -using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; -using System.IO; -using System.Runtime.InteropServices; -using System.Security; -using System.Security.AccessControl; -using System.Text; - -namespace Alphaleonis.Win32.Filesystem -{ - /// Provides static methods to retrieve device resource information from a local or remote host. - public static class Device - { - #region EnumerateDevices - - /// Enumerates all available devices on the local host. - /// instances of type from the local host. - /// One of the devices. - [SecurityCritical] - public static IEnumerable EnumerateDevices(DeviceGuid deviceGuid) - { - return EnumerateDevices(null, deviceGuid); - } - - /// Enumerates all available devices of type on the local or remote host. - /// instances of type for the specified . - /// The name of the local or remote host on which the device resides. refers to the local host. - /// One of the devices. - [SecurityCritical] - public static IEnumerable EnumerateDevices(string hostName, DeviceGuid deviceGuid) - { - return EnumerateDevicesCore(null, hostName, deviceGuid); - } - - #endregion // EnumerateDevices - - #region Internal Methods - - #region EnumerateDevicesCore - - /// Enumerates all available devices on the local or remote host. - [SecurityCritical] - internal static IEnumerable EnumerateDevicesCore(SafeHandle safeHandle, string hostName, DeviceGuid deviceInterfaceGuid) - { - var callerHandle = safeHandle != null; - var deviceGuid = new Guid(Utils.GetEnumDescription(deviceInterfaceGuid)); - - - // CM_Connect_Machine() - // MSDN Note: Beginning in Windows 8 and Windows Server 2012 functionality to access remote machines has been removed. - // You cannot access remote machines when running on these versions of Windows. - // http://msdn.microsoft.com/en-us/library/windows/hardware/ff537948%28v=vs.85%29.aspx - - SafeCmConnectMachineHandle safeMachineHandle; - var lastError = NativeMethods.CM_Connect_Machine(Path.LocalToUncCore(Host.GetUncName(hostName), false, false, false), out safeMachineHandle); - - if (safeMachineHandle != null && safeMachineHandle.IsInvalid) - { - safeMachineHandle.Close(); - NativeError.ThrowException(lastError, Resources.Handle_Is_Invalid); - } - - using (safeMachineHandle) - { - // Start at the "Root" of the device tree of the specified machine. - if (!callerHandle) - safeHandle = NativeMethods.SetupDiGetClassDevsEx(ref deviceGuid, IntPtr.Zero, IntPtr.Zero, - NativeMethods.SetupDiGetClassDevsExFlags.Present | - NativeMethods.SetupDiGetClassDevsExFlags.DeviceInterface, - IntPtr.Zero, hostName, IntPtr.Zero); - - if (safeHandle != null && safeHandle.IsInvalid) - { - safeHandle.Close(); - NativeError.ThrowException(Marshal.GetLastWin32Error(), Resources.Handle_Is_Invalid); - } - - - try - { - uint memberInterfaceIndex = 0; - var deviceInterfaceData = CreateDeviceInterfaceDataInstance(); - - // Start enumerating Device Interfaces. - while (NativeMethods.SetupDiEnumDeviceInterfaces(safeHandle, IntPtr.Zero, ref deviceGuid, memberInterfaceIndex++, ref deviceInterfaceData)) - { - lastError = Marshal.GetLastWin32Error(); - if (lastError != Win32Errors.NO_ERROR) - NativeError.ThrowException(lastError, hostName); - - - var deviceInfoData = CreateDeviceInfoDataInstance(); - var deviceInterfaceDetailData = GetDeviceInterfaceDetailDataInstance(safeHandle, deviceInterfaceData, deviceInfoData); - - // Get device interace details. - if (!NativeMethods.SetupDiGetDeviceInterfaceDetail(safeHandle, ref deviceInterfaceData, ref deviceInterfaceDetailData, NativeMethods.DefaultFileBufferSize, IntPtr.Zero, ref deviceInfoData)) - { - lastError = Marshal.GetLastWin32Error(); - if (lastError != Win32Errors.NO_ERROR) - NativeError.ThrowException(lastError, hostName); - } - - // Create DeviceInfo instance. - // Set DevicePath property of DeviceInfo instance. - var deviceInfo = new DeviceInfo(hostName) { DevicePath = deviceInterfaceDetailData.DevicePath }; - - - // Current InstanceId is at the "USBSTOR" level, so we - // need up "move up" one level to get to the "USB" level. - uint ptrPrevious; - - // CM_Get_Parent_Ex() - // Note: Using this function to access remote machines is not supported - // beginning with Windows 8 and Windows Server 2012, as this functionality has been removed. - // http://msdn.microsoft.com/en-us/library/windows/hardware/ff538615%28v=vs.85%29.aspx - - lastError = NativeMethods.CM_Get_Parent_Ex(out ptrPrevious, deviceInfoData.DevInst, 0, safeMachineHandle); - if (lastError != Win32Errors.CR_SUCCESS) - NativeError.ThrowException(lastError, hostName); - - - // Now we get the InstanceID of the USB level device. - using (var safeBuffer = new SafeGlobalMemoryBufferHandle(NativeMethods.DefaultFileBufferSize)) - { - // CM_Get_Device_ID_Ex() - // Note: Using this function to access remote machines is not supported beginning with Windows 8 and Windows Server 2012, - // as this functionality has been removed. - // http://msdn.microsoft.com/en-us/library/windows/hardware/ff538411%28v=vs.85%29.aspx - - lastError = NativeMethods.CM_Get_Device_ID_Ex(deviceInfoData.DevInst, safeBuffer, (uint)safeBuffer.Capacity, 0, safeMachineHandle); - if (lastError != Win32Errors.CR_SUCCESS) - NativeError.ThrowException(lastError, hostName); - - // Add to instance. - deviceInfo.InstanceId = safeBuffer.PtrToStringUni(); - } - - #region Get Registry Properties - - using (var safeBuffer = new SafeGlobalMemoryBufferHandle(NativeMethods.DefaultFileBufferSize)) - { - uint regType; - string dataString; - var safeBufferCapacity = (uint) safeBuffer.Capacity; - - - if (NativeMethods.SetupDiGetDeviceRegistryProperty(safeHandle, ref deviceInfoData, NativeMethods.SetupDiGetDeviceRegistryPropertyEnum.BaseContainerId, out regType, safeBuffer, safeBufferCapacity, IntPtr.Zero)) - { - dataString = safeBuffer.PtrToStringUni(); - if (!Utils.IsNullOrWhiteSpace(dataString)) - deviceInfo.BaseContainerId = new Guid(dataString); - } - - if (NativeMethods.SetupDiGetDeviceRegistryProperty(safeHandle, ref deviceInfoData, NativeMethods.SetupDiGetDeviceRegistryPropertyEnum.ClassGuid, out regType, safeBuffer, safeBufferCapacity, IntPtr.Zero)) - { - dataString = safeBuffer.PtrToStringUni(); - if (!Utils.IsNullOrWhiteSpace(dataString)) - deviceInfo.ClassGuid = new Guid(dataString); - } - - - if (NativeMethods.SetupDiGetDeviceRegistryProperty(safeHandle, ref deviceInfoData, NativeMethods.SetupDiGetDeviceRegistryPropertyEnum.Class, out regType, safeBuffer, safeBufferCapacity, IntPtr.Zero)) - deviceInfo.Class = safeBuffer.PtrToStringUni(); - - if (NativeMethods.SetupDiGetDeviceRegistryProperty(safeHandle, ref deviceInfoData, NativeMethods.SetupDiGetDeviceRegistryPropertyEnum.CompatibleIds, out regType, safeBuffer, safeBufferCapacity, IntPtr.Zero)) - deviceInfo.CompatibleIds = safeBuffer.PtrToStringUni(); - - if (NativeMethods.SetupDiGetDeviceRegistryProperty(safeHandle, ref deviceInfoData, NativeMethods.SetupDiGetDeviceRegistryPropertyEnum.DeviceDescription, out regType, safeBuffer, safeBufferCapacity, IntPtr.Zero)) - deviceInfo.DeviceDescription = safeBuffer.PtrToStringUni(); - - if (NativeMethods.SetupDiGetDeviceRegistryProperty(safeHandle, ref deviceInfoData, NativeMethods.SetupDiGetDeviceRegistryPropertyEnum.Driver, out regType, safeBuffer, safeBufferCapacity, IntPtr.Zero)) - deviceInfo.Driver = safeBuffer.PtrToStringUni(); - - if (NativeMethods.SetupDiGetDeviceRegistryProperty(safeHandle, ref deviceInfoData, NativeMethods.SetupDiGetDeviceRegistryPropertyEnum.EnumeratorName, out regType, safeBuffer, safeBufferCapacity, IntPtr.Zero)) - deviceInfo.EnumeratorName = safeBuffer.PtrToStringUni(); - - if (NativeMethods.SetupDiGetDeviceRegistryProperty(safeHandle, ref deviceInfoData, NativeMethods.SetupDiGetDeviceRegistryPropertyEnum.FriendlyName, out regType, safeBuffer, safeBufferCapacity, IntPtr.Zero)) - deviceInfo.FriendlyName = safeBuffer.PtrToStringUni(); - - if (NativeMethods.SetupDiGetDeviceRegistryProperty(safeHandle, ref deviceInfoData, NativeMethods.SetupDiGetDeviceRegistryPropertyEnum.HardwareId, out regType, safeBuffer, safeBufferCapacity, IntPtr.Zero)) - deviceInfo.HardwareId = safeBuffer.PtrToStringUni(); - - if (NativeMethods.SetupDiGetDeviceRegistryProperty(safeHandle, ref deviceInfoData, NativeMethods.SetupDiGetDeviceRegistryPropertyEnum.LocationInformation, out regType, safeBuffer, safeBufferCapacity, IntPtr.Zero)) - deviceInfo.LocationInformation = safeBuffer.PtrToStringUni(); - - if (NativeMethods.SetupDiGetDeviceRegistryProperty(safeHandle, ref deviceInfoData, NativeMethods.SetupDiGetDeviceRegistryPropertyEnum.LocationPaths, out regType, safeBuffer, safeBufferCapacity, IntPtr.Zero)) - deviceInfo.LocationPaths = safeBuffer.PtrToStringUni(); - - if (NativeMethods.SetupDiGetDeviceRegistryProperty(safeHandle, ref deviceInfoData, NativeMethods.SetupDiGetDeviceRegistryPropertyEnum.Manufacturer, out regType, safeBuffer, safeBufferCapacity, IntPtr.Zero)) - deviceInfo.Manufacturer = safeBuffer.PtrToStringUni(); - - if (NativeMethods.SetupDiGetDeviceRegistryProperty(safeHandle, ref deviceInfoData, NativeMethods.SetupDiGetDeviceRegistryPropertyEnum.PhysicalDeviceObjectName, out regType, safeBuffer, safeBufferCapacity, IntPtr.Zero)) - deviceInfo.PhysicalDeviceObjectName = safeBuffer.PtrToStringUni(); - - if (NativeMethods.SetupDiGetDeviceRegistryProperty(safeHandle, ref deviceInfoData, NativeMethods.SetupDiGetDeviceRegistryPropertyEnum.Service, out regType, safeBuffer, safeBufferCapacity, IntPtr.Zero)) - deviceInfo.Service = safeBuffer.PtrToStringUni(); - } - - #endregion // Get Registry Properties - - yield return deviceInfo; - - // Get new structure instance. - deviceInterfaceData = CreateDeviceInterfaceDataInstance(); - } - } - finally - { - // Handle is ours, dispose. - if (!callerHandle && safeHandle != null) - safeHandle.Close(); - } - } - } - - #endregion // EnumerateDevicesCore - - #region GetLinkTargetInfoCore - - /// Get information about the target of a mount point or symbolic link on an NTFS file system. - [SuppressMessage("Microsoft.Usage", "CA2202:Do not dispose objects multiple times", Justification = "Disposing is controlled.")] - [SecurityCritical] - internal static LinkTargetInfo GetLinkTargetInfoCore(SafeFileHandle safeHandle) - { - // Start with a large buffer to prevent a 2nd call. - // MAXIMUM_REPARSE_DATA_BUFFER_SIZE = 16384 - uint bytesReturned = 4*NativeMethods.DefaultFileBufferSize; - - using (var safeBuffer = new SafeGlobalMemoryBufferHandle((int) bytesReturned)) - { - while (true) - { - // DeviceIoControlMethod.Buffered = 0, - // DeviceIoControlFileDevice.FileSystem = 9 - // FsctlGetReparsePoint = (DeviceIoControlFileDevice.FileSystem << 16) | (42 << 2) | DeviceIoControlMethod.Buffered | (0 << 14) - - if (!NativeMethods.DeviceIoControl(safeHandle, ((9 << 16) | (42 << 2) | 0 | (0 << 14)), IntPtr.Zero, 0, safeBuffer, (uint) safeBuffer.Capacity, out bytesReturned, IntPtr.Zero)) - { - var lastError = Marshal.GetLastWin32Error(); - switch ((uint) lastError) - { - case Win32Errors.ERROR_MORE_DATA: - case Win32Errors.ERROR_INSUFFICIENT_BUFFER: - if (safeBuffer.Capacity < bytesReturned) - { - safeBuffer.Close(); - break; - } - - NativeError.ThrowException(lastError); - break; - } - } - else - break; - } - - - var marshalReparseBuffer = (int) Marshal.OffsetOf(typeof(NativeMethods.ReparseDataBufferHeader), "data"); - - var header = safeBuffer.PtrToStructure(0); - - var dataOffset = (int) (marshalReparseBuffer + (header.ReparseTag == ReparsePointTag.MountPoint - ? Marshal.OffsetOf(typeof (NativeMethods.MountPointReparseBuffer), "data") - : Marshal.OffsetOf(typeof (NativeMethods.SymbolicLinkReparseBuffer), "data")).ToInt64()); - - var dataBuffer = new byte[bytesReturned - dataOffset]; - - - switch (header.ReparseTag) - { - case ReparsePointTag.MountPoint: - var mountPoint = safeBuffer.PtrToStructure(marshalReparseBuffer); - - safeBuffer.CopyTo(dataOffset, dataBuffer, 0, dataBuffer.Length); - - return new LinkTargetInfo( - Encoding.Unicode.GetString(dataBuffer, mountPoint.SubstituteNameOffset, mountPoint.SubstituteNameLength), - Encoding.Unicode.GetString(dataBuffer, mountPoint.PrintNameOffset, mountPoint.PrintNameLength)); - - - case ReparsePointTag.SymLink: - var symLink = safeBuffer.PtrToStructure(marshalReparseBuffer); - - safeBuffer.CopyTo(dataOffset, dataBuffer, 0, dataBuffer.Length); - - return new SymbolicLinkTargetInfo( - Encoding.Unicode.GetString(dataBuffer, symLink.SubstituteNameOffset, symLink.SubstituteNameLength), - Encoding.Unicode.GetString(dataBuffer, symLink.PrintNameOffset, symLink.PrintNameLength), symLink.Flags); - - - default: - throw new UnrecognizedReparsePointException(); - } - } - } - - #endregion // GetLinkTargetInfoCore - - #region ToggleCompressionCore - - /// Sets the NTFS compression state of a file or directory on a volume whose file system supports per-file and per-directory compression. - /// Specifies that is a file or directory. - /// The transaction. - /// A path that describes a folder or file to compress or decompress. - /// = compress, = decompress - /// Indicates the format of the path parameter(s). - - [SecurityCritical] - internal static void ToggleCompressionCore(bool isFolder, KernelTransaction transaction, string path, bool compress, PathFormat pathFormat) - { - using (var handle = File.CreateFileCore(transaction, path, isFolder ? ExtendedFileAttributes.BackupSemantics : ExtendedFileAttributes.Normal, null, FileMode.Open, FileSystemRights.Modify, FileShare.None, true, pathFormat)) - { - // DeviceIoControlMethod.Buffered = 0, - // DeviceIoControlFileDevice.FileSystem = 9 - // FsctlSetCompression = (DeviceIoControlFileDevice.FileSystem << 16) | (16 << 2) | DeviceIoControlMethod.Buffered | ((FileAccess.Read | FileAccess.Write) << 14) - - // 0 = Decompress, 1 = Compress. - InvokeIoControlUnknownSize(handle, ((9 << 16) | (16 << 2) | 0 | ((uint)(FileAccess.Read | FileAccess.Write) << 14)), (compress) ? 1 : 0); - } - } - - #endregion // ToggleCompressionCore - - - #region Private - - #region CreateDeviceInfoDataInstance - - /// Builds a DeviceInfo Data structure. - /// An initialized NativeMethods.SP_DEVINFO_DATA instance. - [SecurityCritical] - private static NativeMethods.SP_DEVINFO_DATA CreateDeviceInfoDataInstance() - { - var did = new NativeMethods.SP_DEVINFO_DATA(); - did.cbSize = (uint) Marshal.SizeOf(did); - - return did; - } - - #endregion // CreateDeviceInfoDataInstance - - #region CreateDeviceInterfaceDataInstance - - /// Builds a Device Interface Data structure. - /// An initialized NativeMethods.SP_DEVICE_INTERFACE_DATA instance. - [SecurityCritical] - private static NativeMethods.SP_DEVICE_INTERFACE_DATA CreateDeviceInterfaceDataInstance() - { - var did = new NativeMethods.SP_DEVICE_INTERFACE_DATA(); - did.cbSize = (uint) Marshal.SizeOf(did); - - return did; - } - - #endregion // CreateDeviceInterfaceDataInstance - - #region GetDeviceInterfaceDetailDataInstance - - /// Builds a Device Interface Detail Data structure. - /// An initialized NativeMethods.SP_DEVICE_INTERFACE_DETAIL_DATA instance. - [SecurityCritical] - private static NativeMethods.SP_DEVICE_INTERFACE_DETAIL_DATA GetDeviceInterfaceDetailDataInstance(SafeHandle safeHandle, NativeMethods.SP_DEVICE_INTERFACE_DATA deviceInterfaceData, NativeMethods.SP_DEVINFO_DATA deviceInfoData) - { - // Build a Device Interface Detail Data structure. - var didd = new NativeMethods.SP_DEVICE_INTERFACE_DETAIL_DATA - { - cbSize = (IntPtr.Size == 4) ? (uint) (Marshal.SystemDefaultCharSize + 4) : 8 - }; - - // Get device interace details. - if (!NativeMethods.SetupDiGetDeviceInterfaceDetail(safeHandle, ref deviceInterfaceData, ref didd, NativeMethods.DefaultFileBufferSize, IntPtr.Zero, ref deviceInfoData)) - { - var lastError = Marshal.GetLastWin32Error(); - if (lastError != Win32Errors.NO_ERROR) - NativeError.ThrowException(lastError); - } - - return didd; - } - - #endregion // GetDeviceInterfaceDetailDataInstance - - #region InvokeIoControlUnknownSize - - /// Repeatedly invokes InvokeIoControl with the specified input until enough memory has been allocated. - [SecurityCritical] - private static byte[] InvokeIoControlUnknownSize(SafeFileHandle handle, uint controlCode, TV input, uint increment = 128) - { - byte[] output; - uint bytesReturned; - - var inputSize = (uint) Marshal.SizeOf(input); - var outputLength = increment; - - do - { - output = new byte[outputLength]; - if (!NativeMethods.DeviceIoControl(handle, controlCode, input, inputSize, output, outputLength, out bytesReturned, IntPtr.Zero)) - { - var lastError = Marshal.GetLastWin32Error(); - switch ((uint)lastError) - { - case Win32Errors.ERROR_MORE_DATA: - case Win32Errors.ERROR_INSUFFICIENT_BUFFER: - outputLength += increment; - break; - - default: - NativeError.ThrowException(lastError); - break; - } - } - else - break; - - } while (true); - - // Return the result - if (output.Length == bytesReturned) - return output; - - var res = new byte[bytesReturned]; - Array.Copy(output, res, bytesReturned); - - return res; - } - - #endregion // InvokeIoControlUnknownSize - - #endregion // Private - - #endregion // Internal Methods - } -} diff --git a/AlphaFS/Filesystem/DeviceInfo.cs b/AlphaFS/Filesystem/DeviceInfo.cs deleted file mode 100644 index 82e0946..0000000 --- a/AlphaFS/Filesystem/DeviceInfo.cs +++ /dev/null @@ -1,141 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using Alphaleonis.Win32.Network; -using System; -using System.Collections.Generic; -using System.Security; -using System.Security.Permissions; - -namespace Alphaleonis.Win32.Filesystem -{ - /// Provides access to information of a device, on a local or remote host. - [SecurityPermission(SecurityAction.InheritanceDemand, UnmanagedCode = true)] - [SerializableAttribute] - [SecurityCritical] - public sealed class DeviceInfo - { - #region Constructors - - /// Initializes a DeviceInfo class. - [SecurityCritical] - public DeviceInfo() - { - HostName = Host.GetUncName(); - } - - /// Initializes a DeviceInfo class. - /// The DNS or NetBIOS name of the remote server. refers to the local host. - [SecurityCritical] - public DeviceInfo(string host) - { - HostName = Host.GetUncName(host).Replace(Path.UncPrefix, string.Empty); - } - - #endregion // Constructors - - - #region Methods - - /// Enumerates all available devices on the local host. - /// One of the devices. - /// instances of type from the local host. - [SecurityCritical] - public IEnumerable EnumerateDevices(DeviceGuid deviceGuid) - { - return Device.EnumerateDevicesCore(null, HostName, deviceGuid); - } - - #endregion // Methods - - - #region Properties - - /// Represents the value of the base container identifier (ID) .The Windows Plug and Play (PnP) manager assigns this value to the device node (devnode). - public Guid BaseContainerId { get; internal set; } - - - /// Represents the name of the device setup class that a device instance belongs to. - public string Class { get; internal set; } - - - /// Represents the of the device setup class that a device instance belongs to. - public Guid ClassGuid { get; internal set; } - - - /// Represents the list of compatible identifiers for a device instance. - public string CompatibleIds { get; internal set; } - - - /// Represents a description of a device instance. - public string DeviceDescription { get; internal set; } - - - /// The device interface path. - public string DevicePath { get; internal set; } - - - /// Represents the registry entry name of the driver key for a device instance. - public string Driver { get; internal set; } - - - /// Represents the name of the enumerator for a device instance. - public string EnumeratorName { get; internal set; } - - - /// Represents the friendly name of a device instance. - public string FriendlyName { get; internal set; } - - - /// Represents the list of hardware identifiers for a device instance. - public string HardwareId { get; internal set; } - - - /// The host name that was passed to the class constructor. - public string HostName { get; internal set; } - - - /// Gets the instance Id of the device. - public string InstanceId { get; internal set; } - - - /// Represents the bus-specific physical location of a device instance. - public string LocationInformation { get; internal set; } - - - /// Represents the location of a device instance in the device tree. - public string LocationPaths { get; internal set; } - - - /// Represents the name of the manufacturer of a device instance. - public string Manufacturer { get; internal set; } - - - /// Encapsulates the physical device location information provided by a device's firmware to Windows. - public string PhysicalDeviceObjectName { get; internal set; } - - - /// Represents the name of the service that is installed for a device instance. - public string Service { get; internal set; } - - #endregion // Properties - } -} diff --git a/AlphaFS/Filesystem/Directory Class/Directory.Compression.cs b/AlphaFS/Filesystem/Directory Class/Directory.Compression.cs deleted file mode 100644 index 13fb15f..0000000 --- a/AlphaFS/Filesystem/Directory Class/Directory.Compression.cs +++ /dev/null @@ -1,484 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System; -using System.IO; -using System.Security; - -namespace Alphaleonis.Win32.Filesystem -{ - partial class Directory - { - #region Compress - - /// [AlphaFS] Compresses a directory using NTFS compression. - /// This will only compress the root items (non recursive). - /// - /// - /// - /// - /// - /// - /// A path that describes a directory to compress. - [SecurityCritical] - public static void Compress(string path) - { - CompressDecompressCore(null, path, Path.WildcardStarMatchAll, DirectoryEnumerationOptions.FilesAndFolders, true, PathFormat.RelativePath); - } - - /// [AlphaFS] Compresses a directory using NTFS compression. - /// This will only compress the root items (non recursive). - /// - /// - /// - /// - /// - /// - /// A path that describes a directory to compress. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static void Compress(string path, PathFormat pathFormat) - { - CompressDecompressCore(null, path, Path.WildcardStarMatchAll, DirectoryEnumerationOptions.FilesAndFolders, true, pathFormat); - } - - - - /// [AlphaFS] Compresses a directory using NTFS compression. - /// - /// - /// - /// - /// - /// - /// A path that describes a directory to compress. - /// flags that specify how the directory is to be enumerated. - [SecurityCritical] - public static void Compress(string path, DirectoryEnumerationOptions options) - { - CompressDecompressCore(null, path, Path.WildcardStarMatchAll, options, true, PathFormat.RelativePath); - } - - /// [AlphaFS] Compresses a directory using NTFS compression. - /// - /// - /// - /// - /// - /// - /// A path that describes a directory to compress. - /// flags that specify how the directory is to be enumerated. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static void Compress(string path, DirectoryEnumerationOptions options, PathFormat pathFormat) - { - CompressDecompressCore(null, path, Path.WildcardStarMatchAll, options, true, pathFormat); - } - - #region Transactional - - /// [AlphaFS] Compresses a directory using NTFS compression. - /// This will only compress the root items (non recursive). - /// - /// - /// - /// - /// - /// - /// The transaction. - /// A path that describes a directory to compress. - [SecurityCritical] - public static void CompressTransacted(KernelTransaction transaction, string path) - { - CompressDecompressCore(transaction, path, Path.WildcardStarMatchAll, DirectoryEnumerationOptions.FilesAndFolders, true, PathFormat.RelativePath); - } - - /// [AlphaFS] Compresses a directory using NTFS compression. - /// This will only compress the root items (non recursive). - /// - /// - /// - /// - /// - /// - /// The transaction. - /// A path that describes a directory to compress. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static void CompressTransacted(KernelTransaction transaction, string path, PathFormat pathFormat) - { - CompressDecompressCore(transaction, path, Path.WildcardStarMatchAll, DirectoryEnumerationOptions.FilesAndFolders, true, pathFormat); - } - - - - /// [AlphaFS] Compresses a directory using NTFS compression. - /// - /// - /// - /// - /// - /// - /// The transaction. - /// A path that describes a directory to compress. - /// flags that specify how the directory is to be enumerated. - [SecurityCritical] - public static void CompressTransacted(KernelTransaction transaction, string path, DirectoryEnumerationOptions options) - { - CompressDecompressCore(transaction, path, Path.WildcardStarMatchAll, options, true, PathFormat.RelativePath); - } - - /// [AlphaFS] Compresses a directory using NTFS compression. - /// - /// - /// - /// - /// - /// - /// The transaction. - /// A path that describes a directory to compress. - /// flags that specify how the directory is to be enumerated. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static void CompressTransacted(KernelTransaction transaction, string path, DirectoryEnumerationOptions options, PathFormat pathFormat) - { - CompressDecompressCore(transaction, path, Path.WildcardStarMatchAll, options, true, pathFormat); - } - - #endregion // Transactional - - #endregion // Compress - - #region Decompress - - /// [AlphaFS] Decompresses an NTFS compressed directory. - /// This will only decompress the root items (non recursive). - /// - /// - /// - /// - /// - /// - /// A path that describes a directory to decompress. - [SecurityCritical] - public static void Decompress(string path) - { - CompressDecompressCore(null, path, Path.WildcardStarMatchAll, DirectoryEnumerationOptions.FilesAndFolders, false, PathFormat.RelativePath); - } - - /// [AlphaFS] Decompresses an NTFS compressed directory. - /// This will only decompress the root items (non recursive). - /// - /// - /// - /// - /// - /// - /// A path that describes a directory to decompress. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static void Decompress(string path, PathFormat pathFormat) - { - CompressDecompressCore(null, path, Path.WildcardStarMatchAll, DirectoryEnumerationOptions.FilesAndFolders, false, pathFormat); - } - - - - /// [AlphaFS] Decompresses an NTFS compressed directory. - /// - /// - /// - /// - /// - /// - /// A path that describes a directory to decompress. - /// flags that specify how the directory is to be enumerated. - [SecurityCritical] - public static void Decompress(string path, DirectoryEnumerationOptions options) - { - CompressDecompressCore(null, path, Path.WildcardStarMatchAll, options, false, PathFormat.RelativePath); - } - - /// [AlphaFS] Decompresses an NTFS compressed directory. - /// - /// - /// - /// - /// - /// - /// A path that describes a directory to decompress. - /// flags that specify how the directory is to be enumerated. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static void Decompress(string path, DirectoryEnumerationOptions options, PathFormat pathFormat) - { - CompressDecompressCore(null, path, Path.WildcardStarMatchAll, options, false, pathFormat); - } - - #region Transactional - - /// [AlphaFS] Decompresses an NTFS compressed directory. - /// This will only decompress the root items (non recursive). - /// - /// - /// - /// - /// - /// - /// The transaction. - /// A path that describes a directory to decompress. - [SecurityCritical] - public static void DecompressTransacted(KernelTransaction transaction, string path) - { - CompressDecompressCore(transaction, path, Path.WildcardStarMatchAll, DirectoryEnumerationOptions.FilesAndFolders, false, PathFormat.RelativePath); - } - - /// [AlphaFS] Decompresses an NTFS compressed directory. - /// This will only decompress the root items (non recursive). - /// - /// - /// - /// - /// - /// - /// The transaction. - /// A path that describes a directory to decompress. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static void DecompressTransacted(KernelTransaction transaction, string path, PathFormat pathFormat) - { - CompressDecompressCore(transaction, path, Path.WildcardStarMatchAll, DirectoryEnumerationOptions.FilesAndFolders, false, pathFormat); - } - - - - /// [AlphaFS] Decompresses an NTFS compressed directory. - /// - /// - /// - /// - /// - /// - /// The transaction. - /// A path that describes a directory to decompress. - /// flags that specify how the directory is to be enumerated. - [SecurityCritical] - public static void DecompressTransacted(KernelTransaction transaction, string path, DirectoryEnumerationOptions options) - { - CompressDecompressCore(transaction, path, Path.WildcardStarMatchAll, options, false, PathFormat.RelativePath); - } - - /// [AlphaFS] Decompresses an NTFS compressed directory. - /// - /// - /// - /// - /// - /// - /// The transaction. - /// A path that describes a directory to decompress. - /// flags that specify how the directory is to be enumerated. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static void DecompressTransacted(KernelTransaction transaction, string path, DirectoryEnumerationOptions options, PathFormat pathFormat) - { - CompressDecompressCore(transaction, path, Path.WildcardStarMatchAll, options, false, pathFormat); - } - - #endregion // Transactional - - #endregion // Decompress - - #region DisableCompression - - /// [AlphaFS] Disables NTFS compression of the specified directory and the files in it. - /// This method disables the directory-compression attribute. It will not decompress the current contents of the directory. However, newly created files and directories will be uncompressed. - /// - /// - /// - /// - /// - /// - /// A path to a directory to decompress. - [SecurityCritical] - public static void DisableCompression(string path) - { - Device.ToggleCompressionCore(true, null, path, false, PathFormat.RelativePath); - } - - /// [AlphaFS] Disables NTFS compression of the specified directory and the files in it. - /// This method disables the directory-compression attribute. It will not decompress the current contents of the directory. However, newly created files and directories will be uncompressed. - /// - /// - /// - /// - /// - /// - /// A path to a directory to decompress. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static void DisableCompression(string path, PathFormat pathFormat) - { - Device.ToggleCompressionCore(true, null, path, false, pathFormat); - } - - - - /// [AlphaFS] Disables NTFS compression of the specified directory and the files in it. - /// This method disables the directory-compression attribute. It will not decompress the current contents of the directory. However, newly created files and directories will be uncompressed. - /// - /// - /// - /// - /// - /// - /// The transaction. - /// A path to a directory to decompress. - [SecurityCritical] - public static void DisableCompressionTransacted(KernelTransaction transaction, string path) - { - Device.ToggleCompressionCore(true, transaction, path, false, PathFormat.RelativePath); - } - - /// [AlphaFS] Disables NTFS compression of the specified directory and the files in it. - /// This method disables the directory-compression attribute. It will not decompress the current contents of the directory. However, newly created files and directories will be uncompressed. - /// - /// - /// - /// - /// - /// - /// The transaction. - /// Indicates the format of the path parameter(s). - /// A path to a directory to decompress. - [SecurityCritical] - public static void DisableCompressionTransacted(KernelTransaction transaction, string path, PathFormat pathFormat) - { - Device.ToggleCompressionCore(true, transaction, path, false, pathFormat); - } - - #endregion // DisableCompression - - #region EnableCompression - - /// [AlphaFS] Enables NTFS compression of the specified directory and the files in it. - /// This method enables the directory-compression attribute. It will not compress the current contents of the directory. However, newly created files and directories will be compressed. - /// - /// - /// - /// - /// - /// - /// A path to a directory to compress. - [SecurityCritical] - public static void EnableCompression(string path) - { - Device.ToggleCompressionCore(true, null, path, true, PathFormat.RelativePath); - } - - /// [AlphaFS] Enables NTFS compression of the specified directory and the files in it. - /// This method enables the directory-compression attribute. It will not compress the current contents of the directory. However, newly created files and directories will be compressed. - /// - /// - /// - /// - /// - /// - /// A path to a directory to compress. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static void EnableCompression(string path, PathFormat pathFormat) - { - Device.ToggleCompressionCore(true, null, path, true, pathFormat); - } - - - - /// [AlphaFS] Enables NTFS compression of the specified directory and the files in it. - /// This method enables the directory-compression attribute. It will not compress the current contents of the directory. However, newly created files and directories will be compressed. - /// - /// - /// - /// - /// - /// - /// The transaction. - /// A path to a directory to compress. - [SecurityCritical] - public static void EnableCompressionTransacted(KernelTransaction transaction, string path) - { - Device.ToggleCompressionCore(true, transaction, path, true, PathFormat.RelativePath); - } - - /// [AlphaFS] Enables NTFS compression of the specified directory and the files in it. - /// This method enables the directory-compression attribute. It will not compress the current contents of the directory. However, newly created files and directories will be compressed. - /// - /// - /// - /// - /// - /// - /// The transaction. - /// A path to a directory to compress. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static void EnableCompressionTransacted(KernelTransaction transaction, string path, PathFormat pathFormat) - { - Device.ToggleCompressionCore(true, transaction, path, true, pathFormat); - } - - #endregion // EnableCompression - - #region Internal Methods - - /// Compress/decompress Non-/Transacted files/directories. - /// - /// - /// - /// - /// - /// - /// The transaction. - /// A path that describes a directory to compress. - /// - /// The search string to match against the names of directories in . - /// This parameter can contain a combination of valid literal path and wildcard - /// ( and ) characters, but does not support regular expressions. - /// - /// flags that specify how the directory is to be enumerated. - /// compress, when decompress. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - internal static void CompressDecompressCore(KernelTransaction transaction, string path, string searchPattern, DirectoryEnumerationOptions options, bool compress, PathFormat pathFormat) - { - string pathLp = Path.GetExtendedLengthPathCore(transaction, path, pathFormat, GetFullPathOptions.RemoveTrailingDirectorySeparator | GetFullPathOptions.FullCheck); - - // Process directories and files. - foreach (var fsei in EnumerateFileSystemEntryInfosCore(transaction, pathLp, searchPattern, options | DirectoryEnumerationOptions.AsLongPath, PathFormat.LongFullPath)) - Device.ToggleCompressionCore(true, transaction, fsei, compress, PathFormat.LongFullPath); - - // Compress the root directory, the given path. - Device.ToggleCompressionCore(true, transaction, pathLp, compress, PathFormat.LongFullPath); - } - - #endregion // Internal Methods - } -} diff --git a/AlphaFS/Filesystem/Directory Class/Directory.CopyMove.cs b/AlphaFS/Filesystem/Directory Class/Directory.CopyMove.cs deleted file mode 100644 index 946ceec..0000000 --- a/AlphaFS/Filesystem/Directory Class/Directory.CopyMove.cs +++ /dev/null @@ -1,969 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System; -using System.Diagnostics.CodeAnalysis; -using System.IO; -using System.Security; - -namespace Alphaleonis.Win32.Filesystem -{ - partial class Directory - { - #region Copy - - // .NET: Directory class does not contain the Copy() method. - // Mimic .NET File.Copy() methods. - - /// [AlphaFS] Copies an existing directory to a new directory. Overwriting a directory of the same name is not allowed. - /// - /// Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - /// If two directories have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - /// - /// - /// A class with details of the Copy action. - /// - /// - /// - /// - /// - /// - /// The source directory path. - /// The destination directory path. - [SecurityCritical] - public static CopyMoveResult Copy(string sourcePath, string destinationPath) - { - return CopyMoveCore(null, sourcePath, destinationPath, CopyOptions.FailIfExists, null, null, null, null, PathFormat.RelativePath); - } - - /// [AlphaFS] Copies an existing directory to a new directory. Overwriting a directory of the same name is not allowed. - /// - /// Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - /// If two directories have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - /// - /// - /// A class with details of the Copy action. - /// - /// - /// - /// - /// - /// - /// The source directory path. - /// The destination directory path. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static CopyMoveResult Copy(string sourcePath, string destinationPath, PathFormat pathFormat) - { - return CopyMoveCore(null, sourcePath, destinationPath, CopyOptions.FailIfExists, null, null, null, null, pathFormat); - } - - - - /// [AlphaFS] Copies an existing directory to a new directory. Overwriting a directory of the same name is allowed. - /// - /// Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - /// If two directories have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - /// - /// - /// A class with details of the Copy action. - /// - /// - /// - /// - /// - /// - /// The source directory path. - /// The destination directory path. - /// if the destination directory should ignoring the read-only and hidden attributes and overwrite; otherwise, . - [SecurityCritical] - public static CopyMoveResult Copy(string sourcePath, string destinationPath, bool overwrite) - { - return CopyMoveCore(null, sourcePath, destinationPath, overwrite ? CopyOptions.None : CopyOptions.FailIfExists, null, null, null, null, PathFormat.RelativePath); - } - - /// [AlphaFS] Copies an existing directory to a new directory. Overwriting a directory of the same name is allowed. - /// - /// Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - /// If two directories have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - /// - /// - /// A class with details of the Copy action. - /// - /// - /// - /// - /// - /// - /// The source directory path. - /// The destination directory path. - /// if the destination directory should ignoring the read-only and hidden attributes and overwrite; otherwise, . - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static CopyMoveResult Copy(string sourcePath, string destinationPath, bool overwrite, PathFormat pathFormat) - { - return CopyMoveCore(null, sourcePath, destinationPath, overwrite ? CopyOptions.None : CopyOptions.FailIfExists, null, null, null, null, pathFormat); - } - - - #region Transactional - - /// [AlphaFS] Copies an existing directory to a new directory. Overwriting a directory of the same name is not allowed. - /// - /// Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - /// If two directories have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - /// - /// - /// A class with details of the Copy action. - /// - /// - /// - /// - /// - /// - /// The transaction. - /// The source directory path. - /// The destination directory path. - [SecurityCritical] - public static CopyMoveResult CopyTransacted(KernelTransaction transaction, string sourcePath, string destinationPath) - { - return CopyMoveCore(transaction, sourcePath, destinationPath, CopyOptions.FailIfExists, null, null, null, null, PathFormat.RelativePath); - } - - /// [AlphaFS] Copies an existing directory to a new directory. Overwriting a directory of the same name is not allowed. - /// - /// Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - /// If two directories have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - /// - /// - /// A class with details of the Copy action. - /// - /// - /// - /// - /// - /// - /// The transaction. - /// The source directory path. - /// The destination directory path. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static CopyMoveResult CopyTransacted(KernelTransaction transaction, string sourcePath, string destinationPath, PathFormat pathFormat) - { - return CopyMoveCore(transaction, sourcePath, destinationPath, CopyOptions.FailIfExists, null, null, null, null, pathFormat); - } - - - - /// [AlphaFS] Copies an existing directory to a new directory. Overwriting a directory of the same name is allowed. - /// - /// Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - /// If two directories have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - /// - /// - /// A class with details of the Copy action. - /// - /// - /// - /// - /// - /// - /// The transaction. - /// The source directory path. - /// The destination directory path. - /// if the destination directory should ignoring the read-only and hidden attributes and overwrite; otherwise, . - [SecurityCritical] - public static CopyMoveResult CopyTransacted(KernelTransaction transaction, string sourcePath, string destinationPath, bool overwrite) - { - return CopyMoveCore(transaction, sourcePath, destinationPath, overwrite ? CopyOptions.None : CopyOptions.FailIfExists, null, null, null, null, PathFormat.RelativePath); - } - - /// [AlphaFS] Copies an existing directory to a new directory. Overwriting a directory of the same name is allowed. - /// - /// Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - /// If two directories have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - /// - /// - /// A class with details of the Copy action. - /// - /// - /// - /// - /// - /// - /// The transaction. - /// The source directory path. - /// The destination directory path. - /// if the destination directory should ignoring the read-only and hidden attributes and overwrite; otherwise, . - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static CopyMoveResult CopyTransacted(KernelTransaction transaction, string sourcePath, string destinationPath, bool overwrite, PathFormat pathFormat) - { - return CopyMoveCore(transaction, sourcePath, destinationPath, overwrite ? CopyOptions.None : CopyOptions.FailIfExists, null, null, null, null, pathFormat); - } - - #endregion // Transactional - - #endregion // Copy - - - #region Copy (CopyOptions) - - /// [AlphaFS] Copies a directory and its contents to a new location, can be specified. - /// - /// Option is recommended for very large file transfers. - /// Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - /// If two directories have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - /// - /// - /// A class with details of the Copy action. - /// - /// - /// - /// - /// - /// - /// The source directory path. - /// The destination directory path. - /// that specify how the directory is to be copied. This parameter can be . - [SecurityCritical] - public static CopyMoveResult Copy(string sourcePath, string destinationPath, CopyOptions copyOptions) - { - return CopyMoveCore(null, sourcePath, destinationPath, copyOptions, null, null, null, null, PathFormat.RelativePath); - } - - /// [AlphaFS] Copies a directory and its contents to a new location, can be specified. - /// - /// Option is recommended for very large file transfers. - /// Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - /// If two directories have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - /// - /// - /// A class with details of the Copy action. - /// - /// - /// - /// - /// - /// - /// The source directory path. - /// The destination directory path. - /// that specify how the directory is to be copied. This parameter can be . - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static CopyMoveResult Copy(string sourcePath, string destinationPath, CopyOptions copyOptions, PathFormat pathFormat) - { - return CopyMoveCore(null, sourcePath, destinationPath, copyOptions, null, null, null, null, pathFormat); - } - - - - /// [AlphaFS] Copies a directory and its contents to a new location, can be specified, - /// and the possibility of notifying the application of its progress through a callback function. - /// - /// Option is recommended for very large file transfers. - /// Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - /// If two directories have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - /// - /// - /// A class with details of the Copy action. - /// - /// - /// - /// - /// - /// - /// The source directory path. - /// The destination directory path. - /// that specify how the directory is to be copied. This parameter can be . - /// A callback function that is called each time another portion of the directory has been copied. This parameter can be . - /// The argument to be passed to the callback function. This parameter can be . - [SecurityCritical] - public static CopyMoveResult Copy(string sourcePath, string destinationPath, CopyOptions copyOptions, CopyMoveProgressRoutine progressHandler, object userProgressData) - { - return CopyMoveCore(null, sourcePath, destinationPath, copyOptions, null, progressHandler, userProgressData, null, PathFormat.RelativePath); - } - - /// [AlphaFS] Copies a directory and its contents to a new location, can be specified, - /// and the possibility of notifying the application of its progress through a callback function. - /// - /// Option is recommended for very large file transfers. - /// Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - /// If two directories have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - /// - /// - /// A class with details of the Copy action. - /// - /// - /// - /// - /// - /// - /// The source directory path. - /// The destination directory path. - /// that specify how the directory is to be copied. This parameter can be . - /// A callback function that is called each time another portion of the directory has been copied. This parameter can be . - /// The argument to be passed to the callback function. This parameter can be . - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static CopyMoveResult Copy(string sourcePath, string destinationPath, CopyOptions copyOptions, CopyMoveProgressRoutine progressHandler, object userProgressData, PathFormat pathFormat) - { - return CopyMoveCore(null, sourcePath, destinationPath, copyOptions, null, progressHandler, userProgressData, null, pathFormat); - } - - - #region Transactional - - /// [AlphaFS] Copies a directory and its contents to a new location, can be specified. - /// - /// Option is recommended for very large file transfers. - /// Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - /// If two directories have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - /// - /// - /// A class with details of the Copy action. - /// - /// - /// - /// - /// - /// - /// The transaction. - /// The source directory path. - /// The destination directory path. - /// that specify how the directory is to be copied. This parameter can be . - [SecurityCritical] - public static CopyMoveResult CopyTransacted(KernelTransaction transaction, string sourcePath, string destinationPath, CopyOptions copyOptions) - { - return CopyMoveCore(transaction, sourcePath, destinationPath, copyOptions, null, null, null, null, PathFormat.RelativePath); - } - - /// [AlphaFS] Copies a directory and its contents to a new location, can be specified. - /// - /// Option is recommended for very large file transfers. - /// Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - /// If two directories have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - /// - /// - /// A class with details of the Copy action. - /// - /// - /// - /// - /// - /// - /// The transaction. - /// The source directory path. - /// The destination directory path. - /// that specify how the directory is to be copied. This parameter can be . - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static CopyMoveResult CopyTransacted(KernelTransaction transaction, string sourcePath, string destinationPath, CopyOptions copyOptions, PathFormat pathFormat) - { - return CopyMoveCore(transaction, sourcePath, destinationPath, copyOptions, null, null, null, null, pathFormat); - } - - - - /// [AlphaFS] Copies a directory and its contents to a new location, can be specified, - /// and the possibility of notifying the application of its progress through a callback function. - /// - /// Option is recommended for very large file transfers. - /// Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - /// If two directories have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - /// - /// - /// A class with details of the Copy action. - /// - /// - /// - /// - /// - /// - /// The transaction. - /// The source directory path. - /// The destination directory path. - /// that specify how the directory is to be copied. This parameter can be . - /// A callback function that is called each time another portion of the directory has been copied. This parameter can be . - /// The argument to be passed to the callback function. This parameter can be . - [SecurityCritical] - public static CopyMoveResult CopyTransacted(KernelTransaction transaction, string sourcePath, string destinationPath, CopyOptions copyOptions, CopyMoveProgressRoutine progressHandler, object userProgressData) - { - return CopyMoveCore(transaction, sourcePath, destinationPath, copyOptions, null, progressHandler, userProgressData, null, PathFormat.RelativePath); - } - - /// [AlphaFS] Copies a directory and its contents to a new location, can be specified, - /// and the possibility of notifying the application of its progress through a callback function. - /// - /// Option is recommended for very large file transfers. - /// Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - /// If two directories have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - /// - /// - /// A class with details of the Copy action. - /// - /// - /// - /// - /// - /// - /// The transaction. - /// The source directory path. - /// The destination directory path. - /// that specify how the directory is to be copied. This parameter can be . - /// A callback function that is called each time another portion of the directory has been copied. This parameter can be . - /// The argument to be passed to the callback function. This parameter can be . - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static CopyMoveResult CopyTransacted(KernelTransaction transaction, string sourcePath, string destinationPath, CopyOptions copyOptions, CopyMoveProgressRoutine progressHandler, object userProgressData, PathFormat pathFormat) - { - return CopyMoveCore(transaction, sourcePath, destinationPath, copyOptions, null, progressHandler, userProgressData, null, pathFormat); - } - - #endregion // Transactional - - #endregion // Copy (CopyOptions) - - - #region Move - - #region .NET - - /// Moves a file or a directory and its contents to a new location. - /// - /// This method does not work across disk volumes. - /// Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - /// If two directories have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - /// - /// - /// A class with details of the Move action. - /// - /// - /// - /// - /// - /// - /// The source directory path. - /// The destination directory path. - [SecurityCritical] - public static CopyMoveResult Move(string sourcePath, string destinationPath) - { - return CopyMoveCore(null, sourcePath, destinationPath, null, MoveOptions.None, null, null, null, PathFormat.RelativePath); - } - - #endregion // .NET - - /// [AlphaFS] Moves a file or a directory and its contents to a new location. - /// - /// This method does not work across disk volumes. - /// Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - /// If two directories have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - /// - /// - /// A class with details of the Move action. - /// - /// - /// - /// - /// - /// - /// The source directory path. - /// The destination directory path. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static CopyMoveResult Move(string sourcePath, string destinationPath, PathFormat pathFormat) - { - return CopyMoveCore(null, sourcePath, destinationPath, null, MoveOptions.None, null, null, null, pathFormat); - } - - - - #region Transactional - - /// [AlphaFS] Moves a file or a directory and its contents to a new location. - /// - /// This method does not work across disk volumes. - /// Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - /// If two directories have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - /// - /// - /// A class with details of the Move action. - /// - /// - /// - /// - /// - /// - /// The transaction. - /// The source directory path. - /// The destination directory path. - [SecurityCritical] - public static CopyMoveResult MoveTransacted(KernelTransaction transaction, string sourcePath, string destinationPath) - { - return CopyMoveCore(transaction, sourcePath, destinationPath, null, MoveOptions.None, null, null, null, PathFormat.RelativePath); - } - - /// [AlphaFS] Moves a file or a directory and its contents to a new location. - /// - /// This method does not work across disk volumes. - /// Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - /// If two directories have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - /// - /// - /// A class with details of the Move action. - /// - /// - /// - /// - /// - /// - /// The transaction. - /// The source directory path. - /// The destination directory path. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static CopyMoveResult MoveTransacted(KernelTransaction transaction, string sourcePath, string destinationPath, PathFormat pathFormat) - { - return CopyMoveCore(transaction, sourcePath, destinationPath, null, MoveOptions.None, null, null, null, pathFormat); - } - - #endregion // Transactional - - #endregion // Move - - - #region Move (MoveOptions) - - /// [AlphaFS] Moves a file or a directory and its contents to a new location, can be specified. - /// - /// This method does not work across disk volumes unless contains . - /// Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - /// If two directories have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - /// - /// - /// A class with details of the Move action. - /// - /// - /// - /// - /// - /// - /// The source directory path. - /// The destination directory path. - /// that specify how the directory is to be moved. This parameter can be . - [SecurityCritical] - public static CopyMoveResult Move(string sourcePath, string destinationPath, MoveOptions moveOptions) - { - return CopyMoveCore(null, sourcePath, destinationPath, null, moveOptions, null, null, null, PathFormat.RelativePath); - } - - /// [AlphaFS] Moves a file or a directory and its contents to a new location, can be specified. - /// - /// This method does not work across disk volumes unless contains . - /// Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - /// If two directories have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - /// - /// - /// A class with details of the Move action. - /// - /// - /// - /// - /// - /// - /// The source directory path. - /// The destination directory path. - /// that specify how the directory is to be moved. This parameter can be . - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static CopyMoveResult Move(string sourcePath, string destinationPath, MoveOptions moveOptions, PathFormat pathFormat) - { - return CopyMoveCore(null, sourcePath, destinationPath, null, moveOptions, null, null, null, pathFormat); - } - - - - /// [AlphaFS] Moves a file or a directory and its contents to a new location, can be specified, - /// and the possibility of notifying the application of its progress through a callback function. - /// - /// This method does not work across disk volumes unless contains . - /// Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - /// If two directories have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - /// - /// - /// A class with details of the Move action. - /// - /// - /// - /// - /// - /// - /// The source directory path. - /// The destination directory path. - /// that specify how the directory is to be moved. This parameter can be . - /// A callback function that is called each time another portion of the directory has been moved. This parameter can be . - /// The argument to be passed to the callback function. This parameter can be . - [SecurityCritical] - public static CopyMoveResult Move(string sourcePath, string destinationPath, MoveOptions moveOptions, CopyMoveProgressRoutine progressHandler, object userProgressData) - { - return CopyMoveCore(null, sourcePath, destinationPath, null, moveOptions, progressHandler, userProgressData, null, PathFormat.RelativePath); - } - - /// [AlphaFS] Moves a file or a directory and its contents to a new location, can be specified, - /// and the possibility of notifying the application of its progress through a callback function. - /// - /// This method does not work across disk volumes unless contains . - /// Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - /// If two directories have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - /// - /// - /// A class with details of the Move action. - /// - /// - /// - /// - /// - /// - /// The source directory path. - /// The destination directory path. - /// that specify how the directory is to be moved. This parameter can be . - /// A callback function that is called each time another portion of the directory has been moved. This parameter can be . - /// The argument to be passed to the callback function. This parameter can be . - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static CopyMoveResult Move(string sourcePath, string destinationPath, MoveOptions moveOptions, CopyMoveProgressRoutine progressHandler, object userProgressData, PathFormat pathFormat) - { - return CopyMoveCore(null, sourcePath, destinationPath, null, moveOptions, progressHandler, userProgressData, null, pathFormat); - } - - - #region Transactional - - /// [AlphaFS] Moves a file or a directory and its contents to a new location, can be specified. - /// - /// This method does not work across disk volumes unless contains . - /// Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - /// If two directories have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - /// - /// - /// A class with details of the Move action. - /// - /// - /// - /// - /// - /// - /// The transaction. - /// The source directory path. - /// The destination directory path. - /// that specify how the directory is to be moved. This parameter can be . - [SecurityCritical] - public static CopyMoveResult MoveTransacted(KernelTransaction transaction, string sourcePath, string destinationPath, MoveOptions moveOptions) - { - return CopyMoveCore(transaction, sourcePath, destinationPath, null, moveOptions, null, null, null, PathFormat.RelativePath); - } - - /// [AlphaFS] Moves a file or a directory and its contents to a new location, can be specified. - /// - /// This method does not work across disk volumes unless contains . - /// Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - /// If two directories have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - /// - /// - /// A class with details of the Move action. - /// - /// - /// - /// - /// - /// - /// The transaction. - /// The source directory path. - /// The destination directory path. - /// that specify how the directory is to be moved. This parameter can be . - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static CopyMoveResult MoveTransacted(KernelTransaction transaction, string sourcePath, string destinationPath, MoveOptions moveOptions, PathFormat pathFormat) - { - return CopyMoveCore(transaction, sourcePath, destinationPath, null, moveOptions, null, null, null, pathFormat); - } - - - - /// [AlphaFS] Moves a file or a directory and its contents to a new location, can be specified, - /// and the possibility of notifying the application of its progress through a callback function. - /// - /// This method does not work across disk volumes unless contains . - /// Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - /// If two directories have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - /// - /// - /// A class with details of the Move action. - /// - /// - /// - /// - /// - /// - /// The transaction. - /// The source directory path. - /// The destination directory path. - /// that specify how the directory is to be moved. This parameter can be . - /// A callback function that is called each time another portion of the directory has been moved. This parameter can be . - /// The argument to be passed to the callback function. This parameter can be . - [SecurityCritical] - public static CopyMoveResult MoveTransacted(KernelTransaction transaction, string sourcePath, string destinationPath, MoveOptions moveOptions, CopyMoveProgressRoutine progressHandler, object userProgressData) - { - return CopyMoveCore(transaction, sourcePath, destinationPath, null, moveOptions, progressHandler, userProgressData, null, PathFormat.RelativePath); - } - - /// [AlphaFS] Moves a file or a directory and its contents to a new location, can be specified, - /// and the possibility of notifying the application of its progress through a callback function. - /// A class with the status of the Move action. - /// - /// This method does not work across disk volumes unless contains . - /// Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - /// If two directories have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - /// - /// - /// A class with details of the Move action. - /// - /// - /// - /// - /// - /// - /// The transaction. - /// The source directory path. - /// The destination directory path. - /// that specify how the directory is to be moved. This parameter can be . - /// A callback function that is called each time another portion of the directory has been moved. This parameter can be . - /// The argument to be passed to the callback function. This parameter can be . - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static CopyMoveResult MoveTransacted(KernelTransaction transaction, string sourcePath, string destinationPath, MoveOptions moveOptions, CopyMoveProgressRoutine progressHandler, object userProgressData, PathFormat pathFormat) - { - return CopyMoveCore(transaction, sourcePath, destinationPath, null, moveOptions, progressHandler, userProgressData, null, pathFormat); - } - - #endregion // Transactional - - #endregion // Move (MoveOptions) - - - #region Internal Methods - - /// Copy/move a Non-/Transacted file or directory including its children to a new location, - /// or can be specified, - /// and the possibility of notifying the application of its progress through a callback function. - /// - /// Option is recommended for very large file transfers. - /// You cannot use the Move method to overwrite an existing file, unless contains . - /// Note that if you attempt to replace a file by moving a file of the same name into that directory, you get an IOException. - /// - /// - /// A class with the status of the Copy or Move action. - /// - /// - /// - /// - /// - /// - /// The transaction. - /// The source directory path. - /// The destination directory path. - /// that specify how the directory is to be copied. This parameter can be . - /// that specify how the directory is to be moved. This parameter can be . - /// A callback function that is called each time another portion of the file has been copied/moved. This parameter can be . - /// The argument to be passed to the callback function. This parameter can be . - /// - /// Indicates the format of the path parameter(s). - [SuppressMessage("Microsoft.Maintainability", "CA1502:AvoidExcessiveComplexity")] - [SecurityCritical] - internal static CopyMoveResult CopyMoveCore(KernelTransaction transaction, string sourcePath, string destinationPath, CopyOptions? copyOptions, MoveOptions? moveOptions, CopyMoveProgressRoutine progressHandler, object userProgressData, CopyMoveResult copyMoveResult, PathFormat pathFormat) - { - #region Setup - - var sourcePathLp = sourcePath; - var destinationPathLp = destinationPath; - var skipPathChecks = pathFormat == PathFormat.LongFullPath; - - - if (!skipPathChecks) - { - Path.CheckSupportedPathFormat(sourcePathLp, true, true); - Path.CheckSupportedPathFormat(destinationPathLp, true, true); - - - // MSDN: .NET 4+ Trailing spaces are removed from the end of the path parameters before moving the directory. - // TrimEnd() is also applied for AlphaFS implementation of method Directory.Copy(), .NET does not have this method. - - const GetFullPathOptions fullPathOptions = GetFullPathOptions.TrimEnd | GetFullPathOptions.RemoveTrailingDirectorySeparator; - - sourcePathLp = Path.GetExtendedLengthPathCore(transaction, sourcePath, pathFormat, fullPathOptions); - destinationPathLp = Path.GetExtendedLengthPathCore(transaction, destinationPath, pathFormat, fullPathOptions); - - - // MSDN: .NET3.5+: IOException: The sourceDirName and destDirName parameters refer to the same file or directory. - if (sourcePathLp.Equals(destinationPathLp, StringComparison.OrdinalIgnoreCase)) - NativeError.ThrowException(Win32Errors.ERROR_SAME_DRIVE, destinationPathLp); - } - - - var emulateMove = false; - - // Determine Copy or Move action. - var isCopy = File.DetermineIsCopy(copyOptions, moveOptions); - var isMove = !isCopy; - - var cmr = copyMoveResult ?? new CopyMoveResult(sourcePathLp, destinationPathLp, false, (int) Win32Errors.ERROR_SUCCESS); - - - // Execute once only. - if (!skipPathChecks && isMove) - { - // Compare the root part of both paths. - var equalRootPaths = Path.GetPathRoot(sourcePathLp, false).Equals(Path.GetPathRoot(destinationPathLp, false), StringComparison.OrdinalIgnoreCase); - - // Method Volume.IsSameVolume() returns true when both paths refer to the same volume, even if one of the paths is a UNC path. - // For example, src = C:\TempSrc and dst = \\localhost\C$\TempDst - var isSameVolume = equalRootPaths || Volume.IsSameVolume(sourcePathLp, destinationPathLp); - - isMove = isSameVolume && equalRootPaths; - - - if (!isMove) - { - // A Move() can be emulated by using Copy() and Delete(), but only if the CopyAllowed flag is set. - isMove = ((MoveOptions) moveOptions & MoveOptions.CopyAllowed) != 0; - - // MSDN: .NET3.5+: IOException: An attempt was made to move a directory to a different volume. - if (!isMove) - NativeError.ThrowException(Win32Errors.ERROR_NOT_SAME_DEVICE, sourcePathLp, destinationPathLp); - } - - - // The NativeMethod.MoveFileXxx() methods fail when: - // - A directory is being moved; - // - One of the paths is a UNC path, even though both paths refer to the same volume. - // For example, src = C:\TempSrc and dst = \\localhost\C$\TempDst - if (isMove) - { - var srcIsUncPath = Path.IsUncPathCore(sourcePathLp, false, false); - var dstIsUncPath = Path.IsUncPathCore(destinationPathLp, false, false); - - isMove = srcIsUncPath && dstIsUncPath; - if (!isMove) - isMove = !srcIsUncPath && !dstIsUncPath; - } - - - isMove = isMove && isSameVolume && equalRootPaths; - - - // Emulate Move(). - if (!isMove) - { - emulateMove = true; - - moveOptions = null; - - isCopy = true; - copyOptions = CopyOptions.FailIfExists; - } - } - - #endregion // Setup - - - #region Copy - - if (isCopy) - { - CreateDirectoryCore(transaction, destinationPathLp, null, null, false, PathFormat.LongFullPath); - - foreach (var fsei in EnumerateFileSystemEntryInfosCore(transaction, sourcePathLp, Path.WildcardStarMatchAll, DirectoryEnumerationOptions.FilesAndFolders, PathFormat.LongFullPath)) - { - var newDestinationPathLp = Path.CombineCore(false, destinationPathLp, fsei.FileName); - - cmr = fsei.IsDirectory - ? CopyMoveCore(transaction, fsei.LongFullPath, newDestinationPathLp, copyOptions, moveOptions, progressHandler, userProgressData, cmr, PathFormat.LongFullPath) - : File.CopyMoveCore(false, transaction, fsei.LongFullPath, newDestinationPathLp, false, copyOptions, moveOptions, progressHandler, userProgressData, cmr, PathFormat.LongFullPath); - - - if (cmr.ErrorCode == Win32Errors.ERROR_SUCCESS) - { - if (fsei.IsDirectory) - cmr.TotalFolders++; - else - { - cmr.TotalFiles++; - cmr.TotalBytes += fsei.FileSize; - } - - - // Remove the folder or file when copying was successful. - if (emulateMove) - { - if (fsei.IsDirectory) - DeleteDirectoryCore(fsei, transaction, null, true, true, false, true, PathFormat.LongFullPath); - else - File.DeleteFileCore(transaction, fsei.LongFullPath, true, PathFormat.LongFullPath); - } - } - - - if (cmr.IsCanceled) - return cmr; - } - - - // Remove source folder. - if (emulateMove && cmr.ErrorCode == Win32Errors.ERROR_SUCCESS) - DeleteDirectoryCore(null, transaction, sourcePathLp, true, true, false, true, PathFormat.LongFullPath); - } - - #endregion // Copy - - - #region Move - - else - { - // MoveOptions.ReplaceExisting: This value cannot be used if lpNewFileName or lpExistingFileName names a directory. - if (((MoveOptions) moveOptions & MoveOptions.ReplaceExisting) != 0) - DeleteDirectoryCore(null, transaction, destinationPathLp, true, true, false, true, PathFormat.LongFullPath); - - - // Moves a file or directory, including its children. - // Copies an existing directory, including its children to a new directory. - cmr = File.CopyMoveCore(true, transaction, sourcePathLp, destinationPathLp, false, copyOptions, moveOptions, progressHandler, userProgressData, cmr, PathFormat.LongFullPath); - } - - #endregion // Move - - - return cmr; - } - - #endregion // Internal Methods - } -} diff --git a/AlphaFS/Filesystem/Directory Class/Directory.CountFileSystemObjects.cs b/AlphaFS/Filesystem/Directory Class/Directory.CountFileSystemObjects.cs deleted file mode 100644 index 9bbb8af..0000000 --- a/AlphaFS/Filesystem/Directory Class/Directory.CountFileSystemObjects.cs +++ /dev/null @@ -1,195 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System; -using System.IO; -using System.Linq; -using System.Security; - -namespace Alphaleonis.Win32.Filesystem -{ - partial class Directory - { - /// [AlphaFS] Counts file system objects: files, folders or both) in a given directory. - /// The counted number of file system objects. - /// - /// - /// - /// - /// - /// - /// The directory path. - /// flags that specify how the directory is to be enumerated. - [SecurityCritical] - public static long CountFileSystemObjects(string path, DirectoryEnumerationOptions options) - { - return EnumerateFileSystemEntryInfosCore(null, path, Path.WildcardStarMatchAll, options, PathFormat.RelativePath).Count(); - } - - /// [AlphaFS] Counts file system objects: files, folders or both) in a given directory. - /// The counted number of file system objects. - /// - /// - /// - /// - /// - /// - /// The directory path. - /// flags that specify how the directory is to be enumerated. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static long CountFileSystemObjects(string path, DirectoryEnumerationOptions options, PathFormat pathFormat) - { - return EnumerateFileSystemEntryInfosCore(null, path, Path.WildcardStarMatchAll, options, pathFormat).Count(); - } - - - - /// [AlphaFS] Counts file system objects: files, folders or both) in a given directory. - /// The counted number of file system objects. - /// - /// - /// - /// - /// - /// - /// The directory path. - /// - /// The search string to match against the names of directories in . - /// This parameter can contain a combination of valid literal path and wildcard - /// ( and ) characters, but does not support regular expressions. - /// - /// flags that specify how the directory is to be enumerated. - [SecurityCritical] - public static long CountFileSystemObjects(string path, string searchPattern, DirectoryEnumerationOptions options) - { - return EnumerateFileSystemEntryInfosCore(null, path, searchPattern, options, PathFormat.RelativePath).Count(); - } - - /// [AlphaFS] Counts file system objects: files, folders or both) in a given directory. - /// The counted number of file system objects. - /// - /// - /// - /// - /// - /// - /// The directory path. - /// - /// The search string to match against the names of directories in . - /// This parameter can contain a combination of valid literal path and wildcard - /// ( and ) characters, but does not support regular expressions. - /// - /// flags that specify how the directory is to be enumerated. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static long CountFileSystemObjects(string path, string searchPattern, DirectoryEnumerationOptions options, PathFormat pathFormat) - { - return EnumerateFileSystemEntryInfosCore(null, path, searchPattern, options, pathFormat).Count(); - } - - #region Transactional - - /// [AlphaFS] Counts file system objects: files, folders or both) in a given directory. - /// The counted number of file system objects. - /// - /// - /// - /// - /// - /// - /// The transaction. - /// The directory path. - /// flags that specify how the directory is to be enumerated. - [SecurityCritical] - public static long CountFileSystemObjectsTransacted(KernelTransaction transaction, string path, DirectoryEnumerationOptions options) - { - return EnumerateFileSystemEntryInfosCore(transaction, path, Path.WildcardStarMatchAll, options, PathFormat.RelativePath).Count(); - } - - /// [AlphaFS] Counts file system objects: files, folders or both) in a given directory. - /// The counted number of file system objects. - /// - /// - /// - /// - /// - /// - /// The transaction. - /// The directory path. - /// flags that specify how the directory is to be enumerated. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static long CountFileSystemObjectsTransacted(KernelTransaction transaction, string path, DirectoryEnumerationOptions options, PathFormat pathFormat) - { - return EnumerateFileSystemEntryInfosCore(transaction, path, Path.WildcardStarMatchAll, options, pathFormat).Count(); - } - - - - /// [AlphaFS] Counts file system objects: files, folders or both) in a given directory. - /// The counted number of file system objects. - /// - /// - /// - /// - /// - /// - /// The transaction. - /// The directory path. - /// - /// The search string to match against the names of directories in . - /// This parameter can contain a combination of valid literal path and wildcard - /// ( and ) characters, but does not support regular expressions. - /// - /// flags that specify how the directory is to be enumerated. - [SecurityCritical] - public static long CountFileSystemObjectsTransacted(KernelTransaction transaction, string path, string searchPattern, DirectoryEnumerationOptions options) - { - return EnumerateFileSystemEntryInfosCore(transaction, path, searchPattern, options, PathFormat.RelativePath).Count(); - } - - /// [AlphaFS] Counts file system objects: files, folders or both) in a given directory. - /// The counted number of file system objects. - /// - /// - /// - /// - /// - /// - /// The transaction. - /// The directory path. - /// - /// The search string to match against the names of directories in . - /// This parameter can contain a combination of valid literal path and wildcard - /// ( and ) characters, but does not support regular expressions. - /// - /// flags that specify how the directory is to be enumerated. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static long CountFileSystemObjectsTransacted(KernelTransaction transaction, string path, string searchPattern, DirectoryEnumerationOptions options, PathFormat pathFormat) - { - return EnumerateFileSystemEntryInfosCore(transaction, path, searchPattern, options, pathFormat).Count(); - } - - #endregion // Transactional - } -} diff --git a/AlphaFS/Filesystem/Directory Class/Directory.CreateDirectory.cs b/AlphaFS/Filesystem/Directory Class/Directory.CreateDirectory.cs deleted file mode 100644 index 4637e2c..0000000 --- a/AlphaFS/Filesystem/Directory Class/Directory.CreateDirectory.cs +++ /dev/null @@ -1,800 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System; -using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; -using System.Globalization; -using System.IO; -using System.Runtime.InteropServices; -using System.Security; -using System.Security.AccessControl; - -namespace Alphaleonis.Win32.Filesystem -{ - partial class Directory - { - #region .NET - - /// Creates all directories and subdirectories in the specified path unless they already exist. - /// An object that represents the directory at the specified path. This object is returned regardless of whether a directory at the specified path already exists. - /// - /// - /// - /// - /// - /// - /// The directory to create. - [SecurityCritical] - public static DirectoryInfo CreateDirectory(string path) - { - return CreateDirectoryCore(null, path, null, null, false, PathFormat.RelativePath); - } - - #endregion // .NET - - /// [AlphaFS] Creates all the directories in the specified path, applying the specified Windows security. - /// An object that represents the directory at the specified path. This object is returned regardless of whether a directory at the specified path already exists. - /// - /// - /// - /// - /// - /// - /// The directory to create. - /// Indicates the format of the path parameter(s). - [SuppressMessage("Microsoft.Design", "CA1011:ConsiderPassingBaseTypesAsParameters")] - [SecurityCritical] - public static DirectoryInfo CreateDirectory(string path, PathFormat pathFormat) - { - return CreateDirectoryCore(null, path, null, null, false, pathFormat); - } - - - - /// [AlphaFS] Creates all the directories in the specified path, applying the specified Windows security. - /// An object that represents the directory at the specified path. This object is returned regardless of whether a directory at the specified path already exists. - /// - /// - /// - /// - /// - /// - /// The directory to create. - /// When compresses the directory. - [SuppressMessage("Microsoft.Design", "CA1011:ConsiderPassingBaseTypesAsParameters")] - [SecurityCritical] - public static DirectoryInfo CreateDirectory(string path, bool compress) - { - return CreateDirectoryCore(null, path, null, null, compress, PathFormat.RelativePath); - } - - /// [AlphaFS] Creates all the directories in the specified path, applying the specified Windows security. - /// An object that represents the directory at the specified path. This object is returned regardless of whether a directory at the specified path already exists. - /// - /// - /// - /// - /// - /// - /// The directory to create. - /// When compresses the directory. - /// Indicates the format of the path parameter(s). - [SuppressMessage("Microsoft.Design", "CA1011:ConsiderPassingBaseTypesAsParameters")] - [SecurityCritical] - public static DirectoryInfo CreateDirectory(string path, bool compress, PathFormat pathFormat) - { - return CreateDirectoryCore(null, path, null, null, compress, pathFormat); - } - - - - /// Creates all the directories in the specified path, unless the already exist, applying the specified Windows security. - /// An object that represents the directory at the specified path. This object is returned regardless of whether a directory at the specified path already exists. - /// - /// - /// - /// - /// - /// - /// The directory to create. - /// The access control to apply to the directory. - [SuppressMessage("Microsoft.Design", "CA1011:ConsiderPassingBaseTypesAsParameters")] - [SecurityCritical] - public static DirectoryInfo CreateDirectory(string path, DirectorySecurity directorySecurity) - { - return CreateDirectoryCore(null, path, null, directorySecurity, false, PathFormat.RelativePath); - } - - /// [AlphaFS] Creates all the directories in the specified path, applying the specified Windows security. - /// An object that represents the directory at the specified path. This object is returned regardless of whether a directory at the specified path already exists. - /// - /// - /// - /// - /// - /// - /// The directory to create. - /// The access control to apply to the directory. - /// Indicates the format of the path parameter(s). - [SuppressMessage("Microsoft.Design", "CA1011:ConsiderPassingBaseTypesAsParameters")] - [SecurityCritical] - public static DirectoryInfo CreateDirectory(string path, DirectorySecurity directorySecurity, PathFormat pathFormat) - { - return CreateDirectoryCore(null, path, null, directorySecurity, false, pathFormat); - } - - - - /// [AlphaFS] Creates all the directories in the specified path, applying the specified Windows security. - /// An object that represents the directory at the specified path. This object is returned regardless of whether a directory at the specified path already exists. - /// - /// - /// - /// - /// - /// - /// The directory to create. - /// The access control to apply to the directory. - /// When compresses the directory. - [SuppressMessage("Microsoft.Design", "CA1011:ConsiderPassingBaseTypesAsParameters")] - [SecurityCritical] - public static DirectoryInfo CreateDirectory(string path, DirectorySecurity directorySecurity, bool compress) - { - return CreateDirectoryCore(null, path, null, directorySecurity, compress, PathFormat.RelativePath); - } - - /// [AlphaFS] Creates all the directories in the specified path, applying the specified Windows security. - /// An object that represents the directory at the specified path. This object is returned regardless of whether a directory at the specified path already exists. - /// - /// - /// - /// - /// - /// - /// The directory to create. - /// The access control to apply to the directory. - /// When compresses the directory. - /// Indicates the format of the path parameter(s). - [SuppressMessage("Microsoft.Design", "CA1011:ConsiderPassingBaseTypesAsParameters")] - [SecurityCritical] - public static DirectoryInfo CreateDirectory(string path, DirectorySecurity directorySecurity, bool compress, PathFormat pathFormat) - { - return CreateDirectoryCore(null, path, null, directorySecurity, compress, pathFormat); - } - - - - /// [AlphaFS] Creates a new directory, with the attributes of a specified template directory. - /// An object that represents the directory at the specified path. This object is returned regardless of whether a directory at the specified path already exists. - /// - /// - /// - /// - /// - /// - /// The directory to create. - /// The path of the directory to use as a template when creating the new directory. - [SuppressMessage("Microsoft.Design", "CA1011:ConsiderPassingBaseTypesAsParameters")] - [SecurityCritical] - public static DirectoryInfo CreateDirectory(string path, string templatePath) - { - return CreateDirectoryCore(null, path, templatePath, null, false, PathFormat.RelativePath); - } - - /// [AlphaFS] Creates a new directory, with the attributes of a specified template directory. - /// An object that represents the directory at the specified path. This object is returned regardless of whether a directory at the specified path already exists. - /// - /// - /// - /// - /// - /// - /// The directory to create. - /// The path of the directory to use as a template when creating the new directory. - /// Indicates the format of the path parameter(s). - [SuppressMessage("Microsoft.Design", "CA1011:ConsiderPassingBaseTypesAsParameters")] - [SecurityCritical] - public static DirectoryInfo CreateDirectory(string path, string templatePath, PathFormat pathFormat) - { - return CreateDirectoryCore(null, path, templatePath, null, false, pathFormat); - } - - - - /// [AlphaFS] Creates a new directory, with the attributes of a specified template directory. - /// An object that represents the directory at the specified path. This object is returned regardless of whether a directory at the specified path already exists. - /// - /// - /// - /// - /// - /// - /// The directory to create. - /// The path of the directory to use as a template when creating the new directory. - /// When compresses the directory. - [SuppressMessage("Microsoft.Design", "CA1011:ConsiderPassingBaseTypesAsParameters")] - [SecurityCritical] - public static DirectoryInfo CreateDirectory(string path, string templatePath, bool compress) - { - return CreateDirectoryCore(null, path, templatePath, null, compress, PathFormat.RelativePath); - } - - /// [AlphaFS] Creates a new directory, with the attributes of a specified template directory. - /// An object that represents the directory at the specified path. This object is returned regardless of whether a directory at the specified path already exists. - /// - /// - /// - /// - /// - /// - /// The directory to create. - /// The path of the directory to use as a template when creating the new directory. - /// When compresses the directory. - /// Indicates the format of the path parameter(s). - [SuppressMessage("Microsoft.Design", "CA1011:ConsiderPassingBaseTypesAsParameters")] - [SecurityCritical] - public static DirectoryInfo CreateDirectory(string path, string templatePath, bool compress, PathFormat pathFormat) - { - return CreateDirectoryCore(null, path, templatePath, null, compress, pathFormat); - } - - - - /// [AlphaFS] Creates all the directories in the specified path of a specified template directory and applies the specified Windows security. - /// An object that represents the directory at the specified path. This object is returned regardless of whether a directory at the specified path already exists. - /// - /// - /// - /// - /// - /// - /// The directory to create. - /// The path of the directory to use as a template when creating the new directory. - /// The access control to apply to the directory. - [SuppressMessage("Microsoft.Design", "CA1011:ConsiderPassingBaseTypesAsParameters")] - [SecurityCritical] - public static DirectoryInfo CreateDirectory(string path, string templatePath, DirectorySecurity directorySecurity) - { - return CreateDirectoryCore(null, path, templatePath, directorySecurity, false, PathFormat.RelativePath); - } - - /// [AlphaFS] Creates all the directories in the specified path of a specified template directory and applies the specified Windows security. - /// An object that represents the directory at the specified path. This object is returned regardless of whether a directory at the specified path already exists. - /// - /// - /// - /// - /// - /// - /// The directory to create. - /// The path of the directory to use as a template when creating the new directory. - /// The access control to apply to the directory. - /// Indicates the format of the path parameter(s). - [SuppressMessage("Microsoft.Design", "CA1011:ConsiderPassingBaseTypesAsParameters")] - [SecurityCritical] - public static DirectoryInfo CreateDirectory(string path, string templatePath, DirectorySecurity directorySecurity, PathFormat pathFormat) - { - return CreateDirectoryCore(null, path, templatePath, directorySecurity, false, pathFormat); - } - - - - /// [AlphaFS] Creates all the directories in the specified path of a specified template directory and applies the specified Windows security. - /// An object that represents the directory at the specified path. This object is returned regardless of whether a directory at the specified path already exists. - /// - /// - /// - /// - /// - /// - /// The directory to create. - /// The path of the directory to use as a template when creating the new directory. - /// The access control to apply to the directory. - /// When compresses the directory. - [SuppressMessage("Microsoft.Design", "CA1011:ConsiderPassingBaseTypesAsParameters")] - [SecurityCritical] - public static DirectoryInfo CreateDirectory(string path, string templatePath, DirectorySecurity directorySecurity, bool compress) - { - return CreateDirectoryCore(null, path, templatePath, directorySecurity, compress, PathFormat.RelativePath); - } - - /// [AlphaFS] Creates all the directories in the specified path of a specified template directory and applies the specified Windows security. - /// An object that represents the directory at the specified path. This object is returned regardless of whether a directory at the specified path already exists. - /// - /// - /// - /// - /// - /// - /// The directory to create. - /// The path of the directory to use as a template when creating the new directory. - /// The access control to apply to the directory. - /// When compresses the directory. - /// Indicates the format of the path parameter(s). - [SuppressMessage("Microsoft.Design", "CA1011:ConsiderPassingBaseTypesAsParameters")] - [SecurityCritical] - public static DirectoryInfo CreateDirectory(string path, string templatePath, DirectorySecurity directorySecurity, bool compress, PathFormat pathFormat) - { - return CreateDirectoryCore(null, path, templatePath, directorySecurity, compress, pathFormat); - } - - #region Transactional - - /// Creates all directories and subdirectories in the specified path unless they already exist. - /// An object that represents the directory at the specified path. This object is returned regardless of whether a directory at the specified path already exists. - /// - /// - /// - /// - /// - /// - /// The transaction. - /// The directory to create. - [SecurityCritical] - public static DirectoryInfo CreateDirectoryTransacted(KernelTransaction transaction, string path) - { - return CreateDirectoryCore(transaction, path, null, null, false, PathFormat.RelativePath); - } - - /// [AlphaFS] Creates all the directories in the specified path, applying the specified Windows security. - /// An object that represents the directory at the specified path. This object is returned regardless of whether a directory at the specified path already exists. - /// - /// - /// - /// - /// - /// - /// The transaction. - /// The directory to create. - /// Indicates the format of the path parameter(s). - [SuppressMessage("Microsoft.Design", "CA1011:ConsiderPassingBaseTypesAsParameters")] - [SecurityCritical] - public static DirectoryInfo CreateDirectoryTransacted(KernelTransaction transaction, string path, PathFormat pathFormat) - { - return CreateDirectoryCore(transaction, path, null, null, false, pathFormat); - } - - - - /// [AlphaFS] Creates all the directories in the specified path, applying the specified Windows security. - /// An object that represents the directory at the specified path. This object is returned regardless of whether a directory at the specified path already exists. - /// - /// - /// - /// - /// - /// - /// The transaction. - /// The directory to create. - /// When compresses the directory. - [SuppressMessage("Microsoft.Design", "CA1011:ConsiderPassingBaseTypesAsParameters")] - [SecurityCritical] - public static DirectoryInfo CreateDirectoryTransacted(KernelTransaction transaction, string path, bool compress) - { - return CreateDirectoryCore(transaction, path, null, null, compress, PathFormat.RelativePath); - } - - /// [AlphaFS] Creates all the directories in the specified path, applying the specified Windows security. - /// An object that represents the directory at the specified path. This object is returned regardless of whether a directory at the specified path already exists. - /// - /// - /// - /// - /// - /// - /// The transaction. - /// The directory to create. - /// When compresses the directory. - /// Indicates the format of the path parameter(s). - [SuppressMessage("Microsoft.Design", "CA1011:ConsiderPassingBaseTypesAsParameters")] - [SecurityCritical] - public static DirectoryInfo CreateDirectoryTransacted(KernelTransaction transaction, string path, bool compress, PathFormat pathFormat) - { - return CreateDirectoryCore(transaction, path, null, null, compress, pathFormat); - } - - - - /// Creates all the directories in the specified path, unless the already exist, applying the specified Windows security. - /// An object that represents the directory at the specified path. This object is returned regardless of whether a directory at the specified path already exists. - /// - /// - /// - /// - /// - /// - /// The transaction. - /// The directory to create. - /// The access control to apply to the directory. - [SuppressMessage("Microsoft.Design", "CA1011:ConsiderPassingBaseTypesAsParameters")] - [SecurityCritical] - public static DirectoryInfo CreateDirectoryTransacted(KernelTransaction transaction, string path, DirectorySecurity directorySecurity) - { - return CreateDirectoryCore(transaction, path, null, directorySecurity, false, PathFormat.RelativePath); - } - - /// [AlphaFS] Creates all the directories in the specified path, applying the specified Windows security. - /// An object that represents the directory at the specified path. This object is returned regardless of whether a directory at the specified path already exists. - /// - /// - /// - /// - /// - /// - /// The transaction. - /// The directory to create. - /// The access control to apply to the directory. - /// Indicates the format of the path parameter(s). - [SuppressMessage("Microsoft.Design", "CA1011:ConsiderPassingBaseTypesAsParameters")] - [SecurityCritical] - public static DirectoryInfo CreateDirectoryTransacted(KernelTransaction transaction, string path, DirectorySecurity directorySecurity, PathFormat pathFormat) - { - return CreateDirectoryCore(transaction, path, null, directorySecurity, false, pathFormat); - } - - - - /// [AlphaFS] Creates all the directories in the specified path, applying the specified Windows security. - /// An object that represents the directory at the specified path. This object is returned regardless of whether a directory at the specified path already exists. - /// - /// - /// - /// - /// - /// - /// The transaction. - /// The directory to create. - /// The access control to apply to the directory. - /// When compresses the directory. - [SuppressMessage("Microsoft.Design", "CA1011:ConsiderPassingBaseTypesAsParameters")] - [SecurityCritical] - public static DirectoryInfo CreateDirectoryTransacted(KernelTransaction transaction, string path, DirectorySecurity directorySecurity, bool compress) - { - return CreateDirectoryCore(transaction, path, null, directorySecurity, compress, PathFormat.RelativePath); - } - - /// [AlphaFS] Creates all the directories in the specified path, applying the specified Windows security. - /// An object that represents the directory at the specified path. This object is returned regardless of whether a directory at the specified path already exists. - /// - /// - /// - /// - /// - /// - /// The transaction. - /// The directory to create. - /// The access control to apply to the directory. - /// When compresses the directory. - /// Indicates the format of the path parameter(s). - [SuppressMessage("Microsoft.Design", "CA1011:ConsiderPassingBaseTypesAsParameters")] - [SecurityCritical] - public static DirectoryInfo CreateDirectoryTransacted(KernelTransaction transaction, string path, DirectorySecurity directorySecurity, bool compress, PathFormat pathFormat) - { - return CreateDirectoryCore(transaction, path, null, directorySecurity, compress, pathFormat); - } - - - - /// [AlphaFS] Creates a new directory, with the attributes of a specified template directory. - /// An object that represents the directory at the specified path. This object is returned regardless of whether a directory at the specified path already exists. - /// - /// - /// - /// - /// - /// - /// The transaction. - /// The directory to create. - /// The path of the directory to use as a template when creating the new directory. - [SuppressMessage("Microsoft.Design", "CA1011:ConsiderPassingBaseTypesAsParameters")] - [SecurityCritical] - public static DirectoryInfo CreateDirectoryTransacted(KernelTransaction transaction, string path, string templatePath) - { - return CreateDirectoryCore(transaction, path, templatePath, null, false, PathFormat.RelativePath); - } - - /// [AlphaFS] Creates a new directory, with the attributes of a specified template directory. - /// An object that represents the directory at the specified path. This object is returned regardless of whether a directory at the specified path already exists. - /// - /// - /// - /// - /// - /// - /// The transaction. - /// The directory to create. - /// The path of the directory to use as a template when creating the new directory. - /// Indicates the format of the path parameter(s). - [SuppressMessage("Microsoft.Design", "CA1011:ConsiderPassingBaseTypesAsParameters")] - [SecurityCritical] - public static DirectoryInfo CreateDirectoryTransacted(KernelTransaction transaction, string path, string templatePath, PathFormat pathFormat) - { - return CreateDirectoryCore(transaction, path, templatePath, null, false, pathFormat); - } - - - - /// [AlphaFS] Creates a new directory, with the attributes of a specified template directory. - /// An object that represents the directory at the specified path. This object is returned regardless of whether a directory at the specified path already exists. - /// - /// - /// - /// - /// - /// - /// The transaction. - /// The directory to create. - /// The path of the directory to use as a template when creating the new directory. - /// When compresses the directory. - [SuppressMessage("Microsoft.Design", "CA1011:ConsiderPassingBaseTypesAsParameters")] - [SecurityCritical] - public static DirectoryInfo CreateDirectoryTransacted(KernelTransaction transaction, string path, string templatePath, bool compress) - { - return CreateDirectoryCore(transaction, path, templatePath, null, compress, PathFormat.RelativePath); - } - - /// [AlphaFS] Creates a new directory, with the attributes of a specified template directory. - /// An object that represents the directory at the specified path. This object is returned regardless of whether a directory at the specified path already exists. - /// - /// - /// - /// - /// - /// - /// The transaction. - /// The directory to create. - /// The path of the directory to use as a template when creating the new directory. - /// When compresses the directory. - /// Indicates the format of the path parameter(s). - [SuppressMessage("Microsoft.Design", "CA1011:ConsiderPassingBaseTypesAsParameters")] - [SecurityCritical] - public static DirectoryInfo CreateDirectoryTransacted(KernelTransaction transaction, string path, string templatePath, bool compress, PathFormat pathFormat) - { - return CreateDirectoryCore(transaction, path, templatePath, null, compress, pathFormat); - } - - - - /// [AlphaFS] Creates all the directories in the specified path of a specified template directory and applies the specified Windows security. - /// An object that represents the directory at the specified path. This object is returned regardless of whether a directory at the specified path already exists. - /// - /// - /// - /// - /// - /// - /// The transaction. - /// The directory to create. - /// The path of the directory to use as a template when creating the new directory. - /// The access control to apply to the directory. - [SuppressMessage("Microsoft.Design", "CA1011:ConsiderPassingBaseTypesAsParameters")] - [SecurityCritical] - public static DirectoryInfo CreateDirectoryTransacted(KernelTransaction transaction, string path, string templatePath, DirectorySecurity directorySecurity) - { - return CreateDirectoryCore(transaction, path, templatePath, directorySecurity, false, PathFormat.RelativePath); - } - - /// [AlphaFS] Creates all the directories in the specified path of a specified template directory and applies the specified Windows security. - /// An object that represents the directory at the specified path. This object is returned regardless of whether a directory at the specified path already exists. - /// - /// - /// - /// - /// - /// - /// The transaction. - /// The directory to create. - /// The path of the directory to use as a template when creating the new directory. - /// The access control to apply to the directory. - /// Indicates the format of the path parameter(s). - [SuppressMessage("Microsoft.Design", "CA1011:ConsiderPassingBaseTypesAsParameters")] - [SecurityCritical] - public static DirectoryInfo CreateDirectoryTransacted(KernelTransaction transaction, string path, string templatePath, DirectorySecurity directorySecurity, PathFormat pathFormat) - { - return CreateDirectoryCore(transaction, path, templatePath, directorySecurity, false, pathFormat); - } - - - - /// [AlphaFS] Creates all the directories in the specified path of a specified template directory and applies the specified Windows security. - /// An object that represents the directory at the specified path. This object is returned regardless of whether a directory at the specified path already exists. - /// - /// - /// - /// - /// - /// - /// The transaction. - /// The directory to create. - /// The path of the directory to use as a template when creating the new directory. - /// The access control to apply to the directory. - /// When compresses the directory. - [SuppressMessage("Microsoft.Design", "CA1011:ConsiderPassingBaseTypesAsParameters")] - [SecurityCritical] - public static DirectoryInfo CreateDirectoryTransacted(KernelTransaction transaction, string path, string templatePath, DirectorySecurity directorySecurity, bool compress) - { - return CreateDirectoryCore(transaction, path, templatePath, directorySecurity, compress, PathFormat.RelativePath); - } - - /// [AlphaFS] Creates all the directories in the specified path of a specified template directory and applies the specified Windows security. - /// An object that represents the directory at the specified path. This object is returned regardless of whether a directory at the specified path already exists. - /// - /// - /// - /// - /// - /// - /// The transaction. - /// The directory to create. - /// The path of the directory to use as a template when creating the new directory. - /// The access control to apply to the directory. - /// When compresses the directory. - /// Indicates the format of the path parameter(s). - [SuppressMessage("Microsoft.Design", "CA1011:ConsiderPassingBaseTypesAsParameters")] - [SecurityCritical] - public static DirectoryInfo CreateDirectoryTransacted(KernelTransaction transaction, string path, string templatePath, DirectorySecurity directorySecurity, bool compress, PathFormat pathFormat) - { - return CreateDirectoryCore(transaction, path, templatePath, directorySecurity, compress, pathFormat); - } - - #endregion // Transactional - - #region Internal Methods - - /// Creates a new directory with the attributes of a specified template directory (if one is specified). - /// If the underlying file system supports security on files and directories, the function applies the specified security descriptor to the new directory. - /// The new directory retains the other attributes of the specified template directory. - /// - /// - /// Returns an object that represents the directory at the specified path. - /// This object is returned regardless of whether a directory at the specified path already exists. - /// - /// - /// - /// - /// - /// - /// - /// The transaction. - /// The directory to create. - /// The path of the directory to use as a template when creating the new directory. May be to indicate that no template should be used. - /// The access control to apply to the directory, may be null. - /// When compresses the directory. - /// Indicates the format of the path parameter(s). - [SuppressMessage("Microsoft.Maintainability", "CA1502:AvoidExcessiveComplexity")] - [SecurityCritical] - internal static DirectoryInfo CreateDirectoryCore(KernelTransaction transaction, string path, string templatePath, ObjectSecurity directorySecurity, bool compress, PathFormat pathFormat) - { - bool fullCheck = pathFormat == PathFormat.RelativePath; - - Path.CheckSupportedPathFormat(path, fullCheck, fullCheck); - Path.CheckSupportedPathFormat(templatePath, fullCheck, fullCheck); - - - string pathLp = Path.GetExtendedLengthPathCore(transaction, path, pathFormat, GetFullPathOptions.TrimEnd | GetFullPathOptions.RemoveTrailingDirectorySeparator); - - // Return DirectoryInfo instance if the directory specified by path already exists. - if (File.ExistsCore(true, transaction, pathLp, PathFormat.LongFullPath)) - return new DirectoryInfo(transaction, pathLp, PathFormat.LongFullPath); - - // MSDN: .NET 3.5+: IOException: The directory specified by path is a file or the network name was not found. - if (File.ExistsCore(false, transaction, pathLp, PathFormat.LongFullPath)) - NativeError.ThrowException(Win32Errors.ERROR_ALREADY_EXISTS, pathLp); - - - string templatePathLp = Utils.IsNullOrWhiteSpace(templatePath) - ? null - : Path.GetExtendedLengthPathCore(transaction, templatePath, pathFormat, GetFullPathOptions.TrimEnd | GetFullPathOptions.RemoveTrailingDirectorySeparator); - - - #region Construct Full Path - - string longPathPrefix = Path.IsUncPathCore(path, false, false) ? Path.LongPathUncPrefix : Path.LongPathPrefix; - path = Path.GetRegularPathCore(pathLp, GetFullPathOptions.None, false); - - int length = path.Length; - if (length >= 2 && Path.IsDVsc(path[length - 1], false)) - --length; - - int rootLength = Path.GetRootLength(path, false); - if (length == 2 && Path.IsDVsc(path[1], false)) - throw new ArgumentException(Resources.Cannot_Create_Directory, path); - - - // Check if directories are missing. - var list = new Stack(100); - - if (length > rootLength) - { - for (int index = length - 1; index >= rootLength; --index) - { - string path1 = path.Substring(0, index + 1); - string path2 = longPathPrefix + path1.TrimStart('\\'); - - if (!File.ExistsCore(true, transaction, path2, PathFormat.LongFullPath)) - list.Push(path2); - - while (index > rootLength && !Path.IsDVsc(path[index], false)) - --index; - } - } - - #endregion // Construct Full Path - - - // Directory security. - using (var securityAttributes = new Security.NativeMethods.SecurityAttributes(directorySecurity)) - { - // Create the directory paths. - while (list.Count > 0) - { - string folderLp = list.Pop(); - - // In the ANSI version of this function, the name is limited to 248 characters. - // To extend this limit to 32,767 wide characters, call the Unicode version of the function and prepend "\\?\" to the path. - // 2013-01-13: MSDN confirms LongPath usage. - - if (!(transaction == null || !NativeMethods.IsAtLeastWindowsVista - ? (templatePathLp == null - ? NativeMethods.CreateDirectory(folderLp, securityAttributes) - : NativeMethods.CreateDirectoryEx(templatePathLp, folderLp, securityAttributes)) - : NativeMethods.CreateDirectoryTransacted(templatePathLp, folderLp, securityAttributes, transaction.SafeHandle))) - { - int lastError = Marshal.GetLastWin32Error(); - - switch ((uint) lastError) - { - // MSDN: .NET 3.5+: If the directory already exists, this method does nothing. - // MSDN: .NET 3.5+: IOException: The directory specified by path is a file. - case Win32Errors.ERROR_ALREADY_EXISTS: - if (File.ExistsCore(false, transaction, pathLp, PathFormat.LongFullPath)) - NativeError.ThrowException(lastError, pathLp); - - if (File.ExistsCore(false, transaction, folderLp, PathFormat.LongFullPath)) - NativeError.ThrowException(Win32Errors.ERROR_PATH_NOT_FOUND, folderLp); - break; - - case Win32Errors.ERROR_BAD_NET_NAME: - NativeError.ThrowException(lastError, pathLp); - break; - - case Win32Errors.ERROR_DIRECTORY: - // MSDN: .NET 3.5+: NotSupportedException: path contains a colon character (:) that is not part of a drive label ("C:\"). - throw new NotSupportedException(string.Format(CultureInfo.CurrentCulture, Resources.Unsupported_Path_Format, path)); - - default: - NativeError.ThrowException(lastError, folderLp); - break; - } - } - - else if (compress) - Device.ToggleCompressionCore(true, transaction, folderLp, true, PathFormat.LongFullPath); - } - - return new DirectoryInfo(transaction, pathLp, PathFormat.LongFullPath); - } - } - - #endregion // Internal Methods - } -} diff --git a/AlphaFS/Filesystem/Directory Class/Directory.CurrentDirectory.cs b/AlphaFS/Filesystem/Directory Class/Directory.CurrentDirectory.cs deleted file mode 100644 index df427f3..0000000 --- a/AlphaFS/Filesystem/Directory Class/Directory.CurrentDirectory.cs +++ /dev/null @@ -1,126 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System; -using System.Diagnostics.CodeAnalysis; -using System.Globalization; -using System.IO; -using System.Runtime.InteropServices; -using System.Security; -using System.Text; - -namespace Alphaleonis.Win32.Filesystem -{ - partial class Directory - { - /// - /// Gets the current working directory of the application. - /// - /// MSDN: Multithreaded applications and shared library code should not use the GetCurrentDirectory function and should avoid using relative path names. - /// The current directory state written by the SetCurrentDirectory function is stored as a global variable in each process, - /// therefore multithreaded applications cannot reliably use this value without possible data corruption from other threads that may also be reading or setting this value. - /// This limitation also applies to the SetCurrentDirectory and GetFullPathName functions. The exception being when the application is guaranteed to be running in a single thread, - /// for example parsing file names from the command line argument string in the main thread prior to creating any additional threads. - /// Using relative path names in multithreaded applications or shared library code can yield unpredictable results and is not supported. - /// - /// - /// The path of the current working directory without a trailing directory separator. - [SuppressMessage("Microsoft.Design", "CA1024:UsePropertiesWhereAppropriate"), SecurityCritical] - public static string GetCurrentDirectory() - { - var nameBuffer = new StringBuilder(NativeMethods.MaxPathUnicode); - - // SetCurrentDirectory() - // In the ANSI version of this function, the name is limited to 248 characters. - // To extend this limit to 32,767 wide characters, call the Unicode version of the function and prepend "\\?\" to the path. - // 2016-09-29: MSDN does not confirm LongPath usage but a Unicode version of this function exists. - - var folderNameLength = NativeMethods.GetCurrentDirectory((uint) nameBuffer.Capacity, nameBuffer); - var lastError = Marshal.GetLastWin32Error(); - - if (folderNameLength == 0) - NativeError.ThrowException(lastError); - - if (folderNameLength > NativeMethods.MaxPathUnicode) - throw new PathTooLongException(string.Format(CultureInfo.InvariantCulture, "Path is greater than {0} characters: {1}", NativeMethods.MaxPathUnicode, folderNameLength)); - - return nameBuffer.ToString(); - } - - - /// - /// Sets the application's current working directory to the specified directory. - /// - /// MSDN: Multithreaded applications and shared library code should not use the GetCurrentDirectory function and should avoid using relative path names. - /// The current directory state written by the SetCurrentDirectory function is stored as a global variable in each process, - /// therefore multithreaded applications cannot reliably use this value without possible data corruption from other threads that may also be reading or setting this value. - /// This limitation also applies to the SetCurrentDirectory and GetFullPathName functions. The exception being when the application is guaranteed to be running in a single thread, - /// for example parsing file names from the command line argument string in the main thread prior to creating any additional threads. - /// Using relative path names in multithreaded applications or shared library code can yield unpredictable results and is not supported. - /// - /// - /// The path to which the current working directory is set. - [SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "0", Justification = "Utils.IsNullOrWhiteSpace validates arguments.")] - [SecurityCritical] - public static void SetCurrentDirectory(string path) - { - SetCurrentDirectory(path, PathFormat.RelativePath); - } - - - /// - /// Sets the application's current working directory to the specified directory. - /// - /// MSDN: Multithreaded applications and shared library code should not use the GetCurrentDirectory function and should avoid using relative path names. - /// The current directory state written by the SetCurrentDirectory function is stored as a global variable in each process, - /// therefore multithreaded applications cannot reliably use this value without possible data corruption from other threads that may also be reading or setting this value. - /// This limitation also applies to the SetCurrentDirectory and GetFullPathName functions. The exception being when the application is guaranteed to be running in a single thread, - /// for example parsing file names from the command line argument string in the main thread prior to creating any additional threads. - /// Using relative path names in multithreaded applications or shared library code can yield unpredictable results and is not supported. - /// - /// - /// The path to which the current working directory is set. - /// Indicates the format of the path parameter. - [SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "0", Justification = "Utils.IsNullOrWhiteSpace validates arguments.")] - [SecurityCritical] - public static void SetCurrentDirectory(string path, PathFormat pathFormat) - { - if (Utils.IsNullOrWhiteSpace(path)) - throw new ArgumentNullException("path"); - - var fullCheck = pathFormat == PathFormat.RelativePath; - Path.CheckSupportedPathFormat(path, fullCheck, fullCheck); - var pathLp = Path.GetExtendedLengthPathCore(null, path, pathFormat, GetFullPathOptions.AddTrailingDirectorySeparator); - - if (pathFormat == PathFormat.FullPath) - pathLp = Path.GetRegularPathCore(pathLp, GetFullPathOptions.None, false); - - - // SetCurrentDirectory() - // In the ANSI version of this function, the name is limited to 248 characters. - // To extend this limit to 32,767 wide characters, call the Unicode version of the function and prepend "\\?\" to the path. - // 2016-09-29: MSDN confirms LongPath usage starting with Windows 10, version 1607. - - if (!NativeMethods.SetCurrentDirectory(pathLp)) - NativeError.ThrowException(Marshal.GetLastWin32Error(), pathLp); - } - } -} diff --git a/AlphaFS/Filesystem/Directory Class/Directory.Delete.cs b/AlphaFS/Filesystem/Directory Class/Directory.Delete.cs deleted file mode 100644 index 8581e27..0000000 --- a/AlphaFS/Filesystem/Directory Class/Directory.Delete.cs +++ /dev/null @@ -1,417 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System; -using System.Diagnostics.CodeAnalysis; -using System.Globalization; -using System.IO; -using System.Runtime.InteropServices; -using System.Security; - -namespace Alphaleonis.Win32.Filesystem -{ - partial class Directory - { - #region .NET - - /// Deletes an empty directory from a specified path. - /// - /// - /// - /// - /// - /// - /// - /// The name of the empty directory to remove. This directory must be writable and empty. - [SecurityCritical] - public static void Delete(string path) - { - DeleteDirectoryCore(null, null, path, false, false, true, false, PathFormat.RelativePath); - } - - /// Deletes the specified directory and, if indicated, any subdirectories in the directory. - /// - /// - /// - /// - /// - /// - /// - /// The name of the directory to remove. - /// to remove directories, subdirectories, and files in . otherwise. - [SecurityCritical] - public static void Delete(string path, bool recursive) - { - DeleteDirectoryCore(null, null, path, recursive, false, !recursive, false, PathFormat.RelativePath); - } - - #endregion // .NET - - /// [AlphaFS] Deletes an empty directory from a specified path. - /// - /// - /// - /// - /// - /// - /// - /// The name of the empty directory to remove. This directory must be writable and empty. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static void Delete(string path, PathFormat pathFormat) - { - DeleteDirectoryCore(null, null, path, false, false, true, false, pathFormat); - } - - - - /// [AlphaFS] Deletes the specified directory and, if indicated, any subdirectories in the directory. - /// - /// - /// - /// - /// - /// - /// - /// The name of the directory to remove. - /// to remove directories, subdirectories, and files in . otherwise. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static void Delete(string path, bool recursive, PathFormat pathFormat) - { - DeleteDirectoryCore(null, null, path, recursive, false, !recursive, false, pathFormat); - } - - - - /// [AlphaFS] Deletes the specified directory and, if indicated, any subdirectories in the directory. - /// - /// - /// - /// - /// - /// - /// - /// The name of the directory to remove. - /// to remove directories, subdirectories, and files in . otherwise. - /// overrides read only of files and directories. - [SecurityCritical] - public static void Delete(string path, bool recursive, bool ignoreReadOnly) - { - DeleteDirectoryCore(null, null, path, recursive, ignoreReadOnly, !recursive, false, PathFormat.RelativePath); - } - - /// [AlphaFS] Deletes the specified directory and, if indicated, any subdirectories in the directory. - /// - /// - /// - /// - /// - /// - /// - /// The name of the directory to remove. - /// to remove directories, subdirectories, and files in . otherwise. - /// overrides read only of files and directories. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static void Delete(string path, bool recursive, bool ignoreReadOnly, PathFormat pathFormat) - { - DeleteDirectoryCore(null, null, path, recursive, ignoreReadOnly, !recursive, false, pathFormat); - } - - #region Transactional - - /// [AlphaFS] Deletes an empty directory from a specified path. - /// - /// - /// - /// - /// - /// - /// - /// The transaction. - /// The name of the empty directory to remove. This directory must be writable and empty. - [SecurityCritical] - public static void DeleteTransacted(KernelTransaction transaction, string path) - { - DeleteDirectoryCore(null, transaction, path, false, false, true, false, PathFormat.RelativePath); - } - - /// [AlphaFS] Deletes an empty directory from a specified path. - /// - /// - /// - /// - /// - /// - /// - /// The transaction. - /// The name of the empty directory to remove. This directory must be writable and empty. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static void DeleteTransacted(KernelTransaction transaction, string path, PathFormat pathFormat) - { - DeleteDirectoryCore(null, transaction, path, false, false, true, false, pathFormat); - } - - - - /// [AlphaFS] Deletes the specified directory and, if indicated, any subdirectories in the directory. - /// - /// - /// - /// - /// - /// - /// - /// The transaction. - /// The name of the directory to remove. - /// to remove directories, subdirectories, and files in . otherwise. - [SecurityCritical] - public static void DeleteTransacted(KernelTransaction transaction, string path, bool recursive) - { - DeleteDirectoryCore(null, transaction, path, recursive, false, !recursive, false, PathFormat.RelativePath); - } - - /// [AlphaFS] Deletes the specified directory and, if indicated, any subdirectories in the directory. - /// - /// - /// - /// - /// - /// - /// - /// The transaction. - /// The name of the directory to remove. - /// to remove directories, subdirectories, and files in . otherwise. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static void DeleteTransacted(KernelTransaction transaction, string path, bool recursive, PathFormat pathFormat) - { - DeleteDirectoryCore(null, transaction, path, recursive, false, !recursive, false, pathFormat); - } - - - - /// [AlphaFS] Deletes the specified directory and, if indicated, any subdirectories in the directory. - /// - /// - /// - /// - /// - /// - /// - /// The transaction. - /// The name of the directory to remove. - /// to remove directories, subdirectories, and files in . otherwise. - /// overrides read only of files and directories. - [SecurityCritical] - public static void DeleteTransacted(KernelTransaction transaction, string path, bool recursive, bool ignoreReadOnly) - { - DeleteDirectoryCore(null, transaction, path, recursive, ignoreReadOnly, !recursive, false, PathFormat.RelativePath); - } - - /// [AlphaFS] Deletes the specified directory and, if indicated, any subdirectories in the directory. - /// - /// - /// - /// - /// - /// - /// - /// The transaction. - /// The name of the directory to remove. - /// to remove directories, subdirectories, and files in . otherwise. - /// overrides read only of files and directories. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static void DeleteTransacted(KernelTransaction transaction, string path, bool recursive, bool ignoreReadOnly, PathFormat pathFormat) - { - DeleteDirectoryCore(null, transaction, path, recursive, ignoreReadOnly, !recursive, false, pathFormat); - } - - #endregion // Transactional - - #region Internal Methods - - /// Deletes the specified directory and, if indicated, any subdirectories in the directory. - /// The RemoveDirectory function marks a directory for deletion on close. Therefore, the directory is not removed until the last handle to the directory is closed. - /// - /// - /// - /// - /// - /// - /// - /// A FileSystemEntryInfo instance. Use either or , not both. - /// The transaction. - /// The name of the directory to remove. Use either or , not both. - /// to remove all files and subdirectories recursively; otherwise only the top level empty directory. - /// overrides read only attribute of files and directories. - /// requires the directory must be empty. - /// does not throw an Exception when the file system object does not exist. - /// Indicates the format of the path parameter(s). - [SuppressMessage("Microsoft.Maintainability", "CA1502:AvoidExcessiveComplexity")] - [SecurityCritical] - internal static void DeleteDirectoryCore(FileSystemEntryInfo fileSystemEntryInfo, KernelTransaction transaction, string path, bool recursive, bool ignoreReadOnly, bool requireEmpty, bool continueOnNotExist, PathFormat pathFormat) - { - #region Setup - - if (pathFormat == PathFormat.RelativePath) - Path.CheckSupportedPathFormat(path, true, true); - - if (fileSystemEntryInfo == null) - { - // MSDN: .NET 3.5+: DirectoryNotFoundException: - // Path does not exist or could not be found. - // Path refers to a file instead of a directory. - // The specified path is invalid (for example, it is on an unmapped drive). - - fileSystemEntryInfo = File.GetFileSystemEntryInfoCore(true, transaction, Path.GetExtendedLengthPathCore(transaction, path, pathFormat, GetFullPathOptions.TrimEnd | GetFullPathOptions.RemoveTrailingDirectorySeparator), continueOnNotExist, pathFormat); - } - - if (fileSystemEntryInfo == null) - return; - - string pathLp = fileSystemEntryInfo.LongFullPath; - - #endregion // Setup - - // Do not follow mount points nor symbolic links, but do delete the reparse point itself. - - // If directory is reparse point, disable recursion. - if (recursive && fileSystemEntryInfo.IsReparsePoint) - recursive = false; - - - // Check to see if this is a mount point, and unmount it. - if (fileSystemEntryInfo.IsMountPoint) - { - int lastError = Volume.DeleteVolumeMountPointCore(pathLp, true); - - if (lastError != Win32Errors.ERROR_SUCCESS && lastError != Win32Errors.ERROR_PATH_NOT_FOUND) - NativeError.ThrowException(lastError, pathLp); - - // Now it is safe to delete the actual directory. - } - - - if (recursive) - { - // Enumerate all file system objects. - foreach (var fsei in EnumerateFileSystemEntryInfosCore(transaction, pathLp, Path.WildcardStarMatchAll, DirectoryEnumerationOptions.FilesAndFolders, PathFormat.LongFullPath)) - { - if (fsei.IsDirectory) - DeleteDirectoryCore(fsei, transaction, null, true, ignoreReadOnly, requireEmpty, true, PathFormat.LongFullPath); - else - File.DeleteFileCore(transaction, fsei.LongFullPath, ignoreReadOnly, PathFormat.LongFullPath); - } - } - - #region Remove - - startRemoveDirectory: - - if (!(transaction == null || !NativeMethods.IsAtLeastWindowsVista - - // RemoveDirectory() / RemoveDirectoryTransacted() - // In the ANSI version of this function, the name is limited to MAX_PATH characters. - // To extend this limit to 32,767 wide characters, call the Unicode version of the function and prepend "\\?\" to the path. - // 2014-09-09: MSDN confirms LongPath usage. - - // RemoveDirectory on a symbolic link will remove the link itself. - - ? NativeMethods.RemoveDirectory(pathLp) - : NativeMethods.RemoveDirectoryTransacted(pathLp, transaction.SafeHandle))) - { - int lastError = Marshal.GetLastWin32Error(); - switch ((uint) lastError) - { - case Win32Errors.ERROR_DIR_NOT_EMPTY: - if (requireEmpty) - // MSDN: .NET 3.5+: IOException: The directory specified by path is not an empty directory. - throw new DirectoryNotEmptyException(pathLp); - - goto startRemoveDirectory; - - - case Win32Errors.ERROR_DIRECTORY: - // MSDN: .NET 3.5+: DirectoryNotFoundException: Path refers to a file instead of a directory. - if (File.ExistsCore(false, transaction, pathLp, PathFormat.LongFullPath)) - throw new DirectoryNotFoundException(string.Format(CultureInfo.CurrentCulture, "({0}) {1}", Win32Errors.ERROR_INVALID_PARAMETER, string.Format(CultureInfo.CurrentCulture, Resources.Target_Directory_Is_A_File, pathLp))); - break; - - - case Win32Errors.ERROR_PATH_NOT_FOUND: - if (continueOnNotExist) - return; - break; - - case Win32Errors.ERROR_SHARING_VIOLATION: - // MSDN: .NET 3.5+: IOException: The directory is being used by another process or there is an open handle on the directory. - NativeError.ThrowException(lastError, pathLp); - break; - - case Win32Errors.ERROR_ACCESS_DENIED: - var data = new NativeMethods.WIN32_FILE_ATTRIBUTE_DATA(); - int dataInitialised = File.FillAttributeInfoCore(transaction, pathLp, ref data, false, true); - - if (data.dwFileAttributes != (FileAttributes) (-1)) - { - if ((data.dwFileAttributes & FileAttributes.ReadOnly) != 0) - { - // MSDN: .NET 3.5+: IOException: The directory specified by path is read-only. - - if (ignoreReadOnly) - { - // Reset directory attributes. - File.SetAttributesCore(true, transaction, pathLp, FileAttributes.Normal, true, PathFormat.LongFullPath); - goto startRemoveDirectory; - } - - // MSDN: .NET 3.5+: IOException: The directory is read-only. - throw new DirectoryReadOnlyException(pathLp); - } - } - - if (dataInitialised == Win32Errors.ERROR_SUCCESS) - // MSDN: .NET 3.5+: UnauthorizedAccessException: The caller does not have the required permission. - NativeError.ThrowException(lastError, pathLp); - - break; - } - - // MSDN: .NET 3.5+: IOException: - // A file with the same name and location specified by path exists. - // The directory specified by path is read-only, or recursive is false and path is not an empty directory. - // The directory is the application's current working directory. - // The directory contains a read-only file. - // The directory is being used by another process. - - NativeError.ThrowException(lastError, pathLp); - } - - #endregion // Remove - } - - #endregion // Internal Methods - } -} diff --git a/AlphaFS/Filesystem/Directory Class/Directory.DeleteEmptySubdirectories.cs b/AlphaFS/Filesystem/Directory Class/Directory.DeleteEmptySubdirectories.cs deleted file mode 100644 index 7740354..0000000 --- a/AlphaFS/Filesystem/Directory Class/Directory.DeleteEmptySubdirectories.cs +++ /dev/null @@ -1,211 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System; -using System.Globalization; -using System.IO; -using System.Linq; -using System.Security; - -namespace Alphaleonis.Win32.Filesystem -{ - partial class Directory - { - /// [AlphaFS] Deletes empty subdirectories from the specified directory. - /// - /// - /// - /// The name of the directory to remove empty subdirectories from. - /// deletes empty subdirectories from this directory and its subdirectories. - [SecurityCritical] - public static void DeleteEmptySubdirectories(string path, bool recursive) - { - DeleteEmptySubdirectoriesCore(null, null, path, recursive, false, true, PathFormat.RelativePath); - } - - /// [AlphaFS] Deletes empty subdirectories from the specified directory. - /// - /// - /// - /// The name of the directory to remove empty subdirectories from. - /// deletes empty subdirectories from this directory and its subdirectories. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static void DeleteEmptySubdirectories(string path, bool recursive, PathFormat pathFormat) - { - DeleteEmptySubdirectoriesCore(null, null, path, recursive, false, true, pathFormat); - } - - - - /// [AlphaFS] Deletes empty subdirectories from the specified directory. - /// - /// - /// - /// The name of the directory to remove empty subdirectories from. - /// deletes empty subdirectories from this directory and its subdirectories. - /// overrides read only of empty directories. - [SecurityCritical] - public static void DeleteEmptySubdirectories(string path, bool recursive, bool ignoreReadOnly) - { - DeleteEmptySubdirectoriesCore(null, null, path, recursive, ignoreReadOnly, true, PathFormat.RelativePath); - } - - /// [AlphaFS] Deletes empty subdirectories from the specified directory. - /// - /// - /// - /// The name of the directory to remove empty subdirectories from. - /// deletes empty subdirectories from this directory and its subdirectories. - /// overrides read only of empty directories. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static void DeleteEmptySubdirectories(string path, bool recursive, bool ignoreReadOnly, PathFormat pathFormat) - { - DeleteEmptySubdirectoriesCore(null, null, path, recursive, ignoreReadOnly, true, pathFormat); - } - - #region Transactional - - /// [AlphaFS] Deletes empty subdirectories from the specified directory. - /// - /// - /// - /// The transaction. - /// The name of the directory to remove empty subdirectories from. - /// deletes empty subdirectories from this directory and its subdirectories. - [SecurityCritical] - public static void DeleteEmptySubdirectoriesTransacted(KernelTransaction transaction, string path, bool recursive) - { - DeleteEmptySubdirectoriesCore(null, transaction, path, recursive, false, true, PathFormat.RelativePath); - } - - /// [AlphaFS] Deletes empty subdirectories from the specified directory. - /// - /// - /// - /// The transaction. - /// The name of the directory to remove empty subdirectories from. - /// deletes empty subdirectories from this directory and its subdirectories. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static void DeleteEmptySubdirectoriesTransacted(KernelTransaction transaction, string path, bool recursive, PathFormat pathFormat) - { - DeleteEmptySubdirectoriesCore(null, transaction, path, recursive, false, true, pathFormat); - } - - - - /// [AlphaFS] Deletes empty subdirectories from the specified directory. - /// - /// - /// - /// The transaction. - /// The name of the directory to remove empty subdirectories from. - /// deletes empty subdirectories from this directory and its subdirectories. - /// overrides read only of empty directories. - [SecurityCritical] - public static void DeleteEmptySubdirectoriesTransacted(KernelTransaction transaction, string path, bool recursive, bool ignoreReadOnly) - { - DeleteEmptySubdirectoriesCore(null, transaction, path, recursive, ignoreReadOnly, true, PathFormat.RelativePath); - } - - /// [AlphaFS] Deletes empty subdirectories from the specified directory. - /// - /// - /// - /// The transaction. - /// The name of the directory to remove empty subdirectories from. - /// deletes empty subdirectories from this directory and its subdirectories. - /// overrides read only of empty directories. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static void DeleteEmptySubdirectoriesTransacted(KernelTransaction transaction, string path, bool recursive, bool ignoreReadOnly, PathFormat pathFormat) - { - DeleteEmptySubdirectoriesCore(null, transaction, path, recursive, ignoreReadOnly, true, pathFormat); - } - - #endregion // Transactional - - #region Internal Methods - - /// Delete empty subdirectories from the specified directory. - /// - /// - /// - /// - /// - /// - /// A FileSystemEntryInfo instance. Use either or , not both. - /// The transaction. - /// The name of the directory to remove empty subdirectories from. Use either or , not both. - /// deletes empty subdirectories from this directory and its subdirectories. - /// overrides read only of empty directories. - /// When indicates the method is called externally. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - internal static void DeleteEmptySubdirectoriesCore(FileSystemEntryInfo fileSystemEntryInfo, KernelTransaction transaction, string path, bool recursive, bool ignoreReadOnly, bool initialize, PathFormat pathFormat) - { - #region Setup - - if (pathFormat == PathFormat.RelativePath) - Path.CheckSupportedPathFormat(path, true, true); - - if (fileSystemEntryInfo == null) - { - if (!File.ExistsCore(true, transaction, path, pathFormat)) - NativeError.ThrowException(Win32Errors.ERROR_PATH_NOT_FOUND, path); - - fileSystemEntryInfo = File.GetFileSystemEntryInfoCore(true, transaction, Path.GetExtendedLengthPathCore(transaction, path, pathFormat, GetFullPathOptions.TrimEnd | GetFullPathOptions.RemoveTrailingDirectorySeparator | GetFullPathOptions.FullCheck) , false, pathFormat); - } - - if (fileSystemEntryInfo == null) - throw new ArgumentNullException("path"); - - string pathLp = fileSystemEntryInfo.LongFullPath; - - #endregion // Setup - - // Ensure path is a directory. - if (!fileSystemEntryInfo.IsDirectory) - throw new IOException(string.Format(CultureInfo.CurrentCulture, Resources.Target_Directory_Is_A_File, pathLp)); - - - var dirEnumOptions = DirectoryEnumerationOptions.Folders; - - if (recursive) - dirEnumOptions |= DirectoryEnumerationOptions.Recursive; - - foreach (var fsei in EnumerateFileSystemEntryInfosCore(transaction, pathLp, Path.WildcardStarMatchAll, dirEnumOptions, PathFormat.LongFullPath)) - DeleteEmptySubdirectoriesCore(fsei, transaction, null, recursive, ignoreReadOnly, false, PathFormat.LongFullPath); - - - if (!EnumerateFileSystemEntryInfosCore(transaction, pathLp, Path.WildcardStarMatchAll, DirectoryEnumerationOptions.FilesAndFolders, PathFormat.LongFullPath).Any()) - { - // Prevent deleting path itself. - if (!initialize) - DeleteDirectoryCore(fileSystemEntryInfo, transaction, null, false, ignoreReadOnly, true, true, PathFormat.LongFullPath); - } - } - - #endregion // Internal Methods - } -} diff --git a/AlphaFS/Filesystem/Directory Class/Directory.EncryptedDirectoryRaw.cs b/AlphaFS/Filesystem/Directory Class/Directory.EncryptedDirectoryRaw.cs deleted file mode 100644 index ee0698e..0000000 --- a/AlphaFS/Filesystem/Directory Class/Directory.EncryptedDirectoryRaw.cs +++ /dev/null @@ -1,154 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System.IO; - -namespace Alphaleonis.Win32.Filesystem -{ - partial class Directory - { - #region Export - - /// [AlphaFS] Backs up (export) encrypted directories. This is one of a group of Encrypted File System (EFS) functions that is - /// intended to implement backup and restore functionality, while maintaining files in their encrypted state. - /// - /// - /// The directory being backed up is not decrypted; it is backed up in its encrypted state. - /// If the caller does not have access to the key for the file, the caller needs to export encrypted files. See . - /// To backup an encrypted directory call one of the overloads and specify the directory to backup along with the destination stream of the backup data. - /// This function is intended for the backup of only encrypted directories; see for backup of unencrypted directories. - /// Note that this method does not back up the files inside the directory, only the directory entry itself. - /// - /// - /// - /// - /// The name of the file to be backed up. - /// The destination stream to which the backup data will be written. - public static void ExportEncryptedDirectoryRaw(string fileName, Stream outputStream) - { - File.ImportExportEncryptedFileDirectoryRawCore(true, false, outputStream, fileName, PathFormat.RelativePath, false); - } - - /// [AlphaFS] Backs up (export) encrypted directories. This is one of a group of Encrypted File System (EFS) functions that is - /// intended to implement backup and restore functionality, while maintaining files in their encrypted state. - /// - /// - /// The directory being backed up is not decrypted; it is backed up in its encrypted state. - /// If the caller does not have access to the key for the file, the caller needs to export encrypted files. See . - /// To backup an encrypted directory call one of the overloads and specify the directory to backup along with the destination stream of the backup data. - /// This function is intended for the backup of only encrypted directories; see for backup of unencrypted directories. - /// Note that this method does not back up the files inside the directory, only the directory entry itself. - /// - /// - /// - /// - /// The name of the file to be backed up. - /// The destination stream to which the backup data will be written. - /// The path format of the parameter. - public static void ExportEncryptedDirectoryRaw(string fileName, Stream outputStream, PathFormat pathFormat) - { - File.ImportExportEncryptedFileDirectoryRawCore(true, false, outputStream, fileName, pathFormat, false); - } - - #endregion // Export - - #region Import - - /// [AlphaFS] Restores (import) encrypted directories. This is one of a group of Encrypted File System (EFS) functions that is - /// intended to implement backup and restore functionality, while maintaining files in their encrypted state. - /// - /// - /// If the caller does not have access to the key for the directory, the caller needs to restore encrypted directories. See . - /// To restore an encrypted directory call one of the overloads and specify the file to restore along with the destination stream of the restored data. - /// This function is intended for the restoration of only encrypted directories; see for backup of unencrypted files. - /// - /// - /// - /// - /// The stream to read previously backed up data from. - /// The path of the destination directory to restore to. - public static void ImportEncryptedDirectoryRaw(Stream inputStream, string destinationPath) - { - File.ImportExportEncryptedFileDirectoryRawCore(false, true, inputStream, destinationPath, PathFormat.RelativePath, false); - } - - /// [AlphaFS] Restores (import) encrypted directories. This is one of a group of Encrypted File System (EFS) functions that is - /// intended to implement backup and restore functionality, while maintaining files in their encrypted state. - /// - /// - /// If the caller does not have access to the key for the directory, the caller needs to restore encrypted directories. See . - /// To restore an encrypted directory call one of the overloads and specify the file to restore along with the destination stream of the restored data. - /// This function is intended for the restoration of only encrypted directories; see for backup of unencrypted files. - /// - /// - /// - /// - /// The stream to read previously backed up data from. - /// The path of the destination directory to restore to. - /// The path format of the parameter. - public static void ImportEncryptedDirectoryRaw(Stream inputStream, string destinationPath, PathFormat pathFormat) - { - File.ImportExportEncryptedFileDirectoryRawCore(false, true, inputStream, destinationPath, pathFormat, false); - } - - - /// [AlphaFS] Restores (import) encrypted directories. This is one of a group of Encrypted File System (EFS) functions that is - /// intended to implement backup and restore functionality, while maintaining files in their encrypted state. - /// - /// - /// If the caller does not have access to the key for the directory, the caller needs to restore encrypted directories. See . - /// To restore an encrypted directory call one of the overloads and specify the file to restore along with the destination stream of the restored data. - /// This function is intended for the restoration of only encrypted directories; see for backup of unencrypted files. - /// - /// - /// - /// - /// The stream to read previously backed up data from. - /// The path of the destination directory to restore to. - /// If set to a hidden directory will be overwritten on import. - public static void ImportEncryptedDirectoryRaw(Stream inputStream, string destinationPath, bool overwriteHidden) - { - File.ImportExportEncryptedFileDirectoryRawCore(false, true, inputStream, destinationPath, PathFormat.RelativePath, overwriteHidden); - } - - /// [AlphaFS] Restores (import) encrypted directories. This is one of a group of Encrypted File System (EFS) functions that is - /// intended to implement backup and restore functionality, while maintaining files in their encrypted state. - /// - /// - /// If the caller does not have access to the key for the directory, the caller needs to restore encrypted directories. See . - /// To restore an encrypted directory call one of the overloads and specify the file to restore along with the destination stream of the restored data. - /// This function is intended for the restoration of only encrypted directories; see for backup of unencrypted files. - /// - /// - /// - /// - /// The stream to read previously backed up data from. - /// The path of the destination directory to restore to. - /// If set to a hidden directory will be overwritten on import. - /// The path format of the parameter. - public static void ImportEncryptedDirectoryRaw(Stream inputStream, string destinationPath, bool overwriteHidden, PathFormat pathFormat) - { - File.ImportExportEncryptedFileDirectoryRawCore(false, true, inputStream, destinationPath, pathFormat, overwriteHidden); - } - - #endregion // Import - } -} diff --git a/AlphaFS/Filesystem/Directory Class/Directory.Encryption.cs b/AlphaFS/Filesystem/Directory Class/Directory.Encryption.cs deleted file mode 100644 index 5b1c780..0000000 --- a/AlphaFS/Filesystem/Directory Class/Directory.Encryption.cs +++ /dev/null @@ -1,272 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System; -using System.IO; -using System.Security; - -namespace Alphaleonis.Win32.Filesystem -{ - partial class Directory - { - #region Decrypt - - /// [AlphaFS] Decrypts a directory that was encrypted by the current account using the Encrypt method. - /// - /// - /// - /// - /// - /// - /// A path that describes a directory to decrypt. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static void Decrypt(string path, PathFormat pathFormat) - { - EncryptDecryptDirectoryCore(path, false, false, pathFormat); - } - - /// [AlphaFS] Decrypts a directory that was encrypted by the current account using the Encrypt method. - /// - /// - /// - /// - /// - /// - /// A path that describes a directory to decrypt. - /// to decrypt the directory recursively. only decrypt the directory. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static void Decrypt(string path, bool recursive, PathFormat pathFormat) - { - EncryptDecryptDirectoryCore(path, false, recursive, pathFormat); - } - - /// [AlphaFS] Decrypts a directory that was encrypted by the current account using the Encrypt method. - /// - /// - /// - /// - /// - /// - /// A path that describes a directory to decrypt. - [SecurityCritical] - public static void Decrypt(string path) - { - EncryptDecryptDirectoryCore(path, false, false, PathFormat.RelativePath); - } - - /// [AlphaFS] Decrypts a directory that was encrypted by the current account using the Encrypt method. - /// - /// - /// - /// - /// - /// - /// A path that describes a directory to decrypt. - /// to decrypt the directory recursively. only decrypt the directory. - [SecurityCritical] - public static void Decrypt(string path, bool recursive) - { - EncryptDecryptDirectoryCore(path, false, recursive, PathFormat.RelativePath); - } - - #endregion // Decrypt - - #region Encrypt - - /// [AlphaFS] Encrypts a directory so that only the account used to encrypt the directory can decrypt it. - /// - /// - /// - /// - /// - /// - /// A path that describes a directory to encrypt. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static void Encrypt(string path, PathFormat pathFormat) - { - EncryptDecryptDirectoryCore(path, true, false, pathFormat); - } - - /// [AlphaFS] Encrypts a directory so that only the account used to encrypt the directory can decrypt it. - /// - /// - /// - /// - /// - /// - /// A path that describes a directory to encrypt. - /// to encrypt the directory recursively. only encrypt the directory. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static void Encrypt(string path, bool recursive, PathFormat pathFormat) - { - EncryptDecryptDirectoryCore(path, true, recursive, pathFormat); - } - - - /// [AlphaFS] Encrypts a directory so that only the account used to encrypt the directory can decrypt it. - /// - /// - /// - /// - /// - /// - /// A path that describes a directory to encrypt. - [SecurityCritical] - public static void Encrypt(string path) - { - EncryptDecryptDirectoryCore(path, true, false, PathFormat.RelativePath); - } - - /// [AlphaFS] Encrypts a directory so that only the account used to encrypt the directory can decrypt it. - /// - /// - /// - /// - /// - /// - /// A path that describes a directory to encrypt. - /// to encrypt the directory recursively. only encrypt the directory. - [SecurityCritical] - public static void Encrypt(string path, bool recursive) - { - EncryptDecryptDirectoryCore(path, true, recursive, PathFormat.RelativePath); - } - - #endregion // Encrypt - - #region DisableEncryption - - /// [AlphaFS] Disables encryption of the specified directory and the files in it. - /// This method only creates/modifies the file "Desktop.ini" in the root of and disables encryption by writing: "Disable=1" - /// This method does not affect encryption of files and subdirectories below the indicated directory. - /// - /// The name of the directory for which to disable encryption. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static void DisableEncryption(string path, PathFormat pathFormat) - { - EnableDisableEncryptionCore(path, false, pathFormat); - } - - /// [AlphaFS] Disables encryption of the specified directory and the files in it. - /// This method only creates/modifies the file "Desktop.ini" in the root of and disables encryption by writing: "Disable=1" - /// This method does not affect encryption of files and subdirectories below the indicated directory. - /// - /// The name of the directory for which to disable encryption. - [SecurityCritical] - public static void DisableEncryption(string path) - { - EnableDisableEncryptionCore(path, false, PathFormat.RelativePath); - } - - #endregion // DisableEncryption - - #region EnableEncryption - - /// [AlphaFS] Enables encryption of the specified directory and the files in it. - /// This method only creates/modifies the file "Desktop.ini" in the root of and enables encryption by writing: "Disable=0" - /// This method does not affect encryption of files and subdirectories below the indicated directory. - /// - /// The name of the directory for which to enable encryption. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static void EnableEncryption(string path, PathFormat pathFormat) - { - EnableDisableEncryptionCore(path, true, pathFormat); - } - - /// [AlphaFS] Enables encryption of the specified directory and the files in it. - /// This method only creates/modifies the file "Desktop.ini" in the root of and enables encryption by writing: "Disable=0" - /// This method does not affect encryption of files and subdirectories below the indicated directory. - /// - /// The name of the directory for which to enable encryption. - [SecurityCritical] - public static void EnableEncryption(string path) - { - EnableDisableEncryptionCore(path, true, PathFormat.RelativePath); - } - - #endregion // EnableEncryption - - #region Internal Methods - - /// Enables/disables encryption of the specified directory and the files in it. - /// This method only creates/modifies the file "Desktop.ini" in the root of and enables/disables encryption by writing: "Disable=0" or "Disable=1". - /// This method does not affect encryption of files and subdirectories below the indicated directory. - /// - /// The name of the directory for which to enable encryption. - /// enabled encryption, disables encryption. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - internal static void EnableDisableEncryptionCore(string path, bool enable, PathFormat pathFormat) - { - if (Utils.IsNullOrWhiteSpace(path)) - throw new ArgumentNullException("path"); - - string pathLp = Path.GetExtendedLengthPathCore(null, path, pathFormat, GetFullPathOptions.RemoveTrailingDirectorySeparator | GetFullPathOptions.FullCheck); - - // EncryptionDisable() - // In the ANSI version of this function, the name is limited to 248 characters. - // To extend this limit to 32,767 wide characters, call the Unicode version of the function and prepend "\\?\" to the path. - // 2013-01-13: MSDN does not confirm LongPath usage but a Unicode version of this function exists. - - if (!NativeMethods.EncryptionDisable(pathLp, !enable)) - NativeError.ThrowException(pathLp); - } - - /// Decrypts/encrypts a directory recursively so that only the account used to encrypt the directory can decrypt it. - /// - /// - /// - /// - /// - /// - /// A path that describes a directory to encrypt. - /// encrypt, decrypt. - /// to decrypt the directory recursively. only decrypt files and directories in the root of . - /// Indicates the format of the path parameter(s). - [SecurityCritical] - internal static void EncryptDecryptDirectoryCore(string path, bool encrypt, bool recursive, PathFormat pathFormat) - { - string pathLp = Path.GetExtendedLengthPathCore(null, path, pathFormat, GetFullPathOptions.RemoveTrailingDirectorySeparator | GetFullPathOptions.FullCheck); - - var options = DirectoryEnumerationOptions.FilesAndFolders | DirectoryEnumerationOptions.AsLongPath; - - // Process folders and files when recursive. - if (recursive) - { - options |= DirectoryEnumerationOptions.Recursive; - - foreach (string fsei in EnumerateFileSystemEntryInfosCore(null, pathLp, Path.WildcardStarMatchAll, options, PathFormat.LongFullPath)) - File.EncryptDecryptFileCore(true, fsei, encrypt, PathFormat.LongFullPath); - } - - // Process the root folder, the given path. - File.EncryptDecryptFileCore(true, pathLp, encrypt, PathFormat.LongFullPath); - } - - #endregion // Internal Methods - } -} diff --git a/AlphaFS/Filesystem/Directory Class/Directory.EnumerateAlternateDataStreams.cs b/AlphaFS/Filesystem/Directory Class/Directory.EnumerateAlternateDataStreams.cs deleted file mode 100644 index 8ddcf9d..0000000 --- a/AlphaFS/Filesystem/Directory Class/Directory.EnumerateAlternateDataStreams.cs +++ /dev/null @@ -1,69 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System.Collections.Generic; -using System.Security; - -namespace Alphaleonis.Win32.Filesystem -{ - partial class Directory - { - /// [AlphaFS] Enumerates the streams of type :$DATA from the specified directory. - /// The path to the directory to enumerate streams of. - /// The streams of type :$DATA in the specified directory. - [SecurityCritical] - public static IEnumerable EnumerateAlternateDataStreams(string path) - { - return File.EnumerateAlternateDataStreamsCore(null, path, PathFormat.RelativePath); - } - - /// [AlphaFS] Enumerates the streams of type :$DATA from the specified directory. - /// The path to the directory to enumerate streams of. - /// Indicates the format of the path parameter(s). - /// The streams of type :$DATA in the specified directory. - [SecurityCritical] - public static IEnumerable EnumerateAlternateDataStreams(string path, PathFormat pathFormat) - { - return File.EnumerateAlternateDataStreamsCore(null, path, pathFormat); - } - - /// [AlphaFS] Enumerates the streams of type :$DATA from the specified directory. - /// The transaction. - /// The path to the directory to enumerate streams of. - /// The streams of type :$DATA in the specified directory. - [SecurityCritical] - public static IEnumerable EnumerateAlternateDataStreamsTransacted(KernelTransaction transaction, string path) - { - return File.EnumerateAlternateDataStreamsCore(transaction, path, PathFormat.RelativePath); - } - - /// [AlphaFS] Enumerates the streams of type :$DATA from the specified directory. - /// The transaction. - /// The path to the directory to enumerate streams of. - /// Indicates the format of the path parameter(s). - /// The streams of type :$DATA in the specified directory. - [SecurityCritical] - public static IEnumerable EnumerateAlternateDataStreamsTransacted(KernelTransaction transaction, string path, PathFormat pathFormat) - { - return File.EnumerateAlternateDataStreamsCore(transaction, path, pathFormat); - } - } -} diff --git a/AlphaFS/Filesystem/Directory Class/Directory.EnumerateDirectories.cs b/AlphaFS/Filesystem/Directory Class/Directory.EnumerateDirectories.cs deleted file mode 100644 index d666b10..0000000 --- a/AlphaFS/Filesystem/Directory Class/Directory.EnumerateDirectories.cs +++ /dev/null @@ -1,500 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System; -using System.Collections.Generic; -using System.IO; -using System.Security; -using SearchOption = System.IO.SearchOption; - -namespace Alphaleonis.Win32.Filesystem -{ - partial class Directory - { - #region .NET - - /// Returns an enumerable collection of directory names in a specified . - /// An enumerable collection of the full names (including paths) for the directories in the directory specified by . - /// - /// - /// - /// - /// - /// - /// The directory to search. - [SecurityCritical] - public static IEnumerable EnumerateDirectories(string path) - { - return EnumerateFileSystemEntryInfosCore(null, path, Path.WildcardStarMatchAll, DirectoryEnumerationOptions.Folders, PathFormat.RelativePath); - } - - /// Returns an enumerable collection of directory names that match a in a specified . - /// An enumerable collection of the full names (including paths) for the directories in the directory specified by and that match the specified . - /// - /// - /// - /// - /// - /// - /// The directory to search. - /// - /// The search string to match against the names of directories in . - /// This parameter can contain a combination of valid literal path and wildcard - /// ( and ) characters, but does not support regular expressions. - /// - [SecurityCritical] - public static IEnumerable EnumerateDirectories(string path, string searchPattern) - { - return EnumerateFileSystemEntryInfosCore(null, path, searchPattern, DirectoryEnumerationOptions.Folders, PathFormat.RelativePath); - } - - /// Returns an enumerable collection of directory names that match a in a specified , and optionally searches subdirectories. - /// An enumerable collection of the full names (including paths) for the directories in the directory specified by and that match the specified and . - /// - /// - /// - /// - /// - /// - /// The directory to search. - /// - /// The search string to match against the names of directories in . - /// This parameter can contain a combination of valid literal path and wildcard - /// ( and ) characters, but does not support regular expressions. - /// - /// - /// One of the enumeration values that specifies whether the - /// should include only the current directory or should include all subdirectories. - /// - [SecurityCritical] - public static IEnumerable EnumerateDirectories(string path, string searchPattern, SearchOption searchOption) - { - var options = DirectoryEnumerationOptions.Folders | ((searchOption == SearchOption.AllDirectories) ? DirectoryEnumerationOptions.Recursive : 0); - - return EnumerateFileSystemEntryInfosCore(null, path, searchPattern, options, PathFormat.RelativePath); - } - - #endregion // .NET - - /// [AlphaFS] Returns an enumerable collection of directory names in a specified . - /// An enumerable collection of the full names (including paths) for the directories in the directory specified by . - /// - /// - /// - /// - /// - /// - /// The directory to search. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static IEnumerable EnumerateDirectories(string path, PathFormat pathFormat) - { - return EnumerateFileSystemEntryInfosCore(null, path, Path.WildcardStarMatchAll, DirectoryEnumerationOptions.Folders, pathFormat); - } - - - - /// [AlphaFS] Returns an enumerable collection of directory names that match a in a specified . - /// An enumerable collection of the full names (including paths) for the directories in the directory specified by and that match the specified . - /// - /// - /// - /// - /// - /// - /// The directory to search. - /// - /// The search string to match against the names of directories in . - /// This parameter can contain a combination of valid literal path and wildcard - /// ( and ) characters, but does not support regular expressions. - /// - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static IEnumerable EnumerateDirectories(string path, string searchPattern, PathFormat pathFormat) - { - return EnumerateFileSystemEntryInfosCore(null, path, searchPattern, DirectoryEnumerationOptions.Folders, pathFormat); - } - - /// [AlphaFS] Returns an enumerable collection of directory names that match a in a specified , and optionally searches subdirectories. - /// An enumerable collection of the full names (including paths) for the directories in the directory specified by and that match the specified and . - /// - /// - /// - /// - /// - /// - /// The directory to search. - /// - /// The search string to match against the names of directories in . - /// This parameter can contain a combination of valid literal path and wildcard - /// ( and ) characters, but does not support regular expressions. - /// - /// - /// One of the enumeration values that specifies whether the - /// should include only the current directory or should include all subdirectories. - /// - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static IEnumerable EnumerateDirectories(string path, string searchPattern, SearchOption searchOption, PathFormat pathFormat) - { - var options = DirectoryEnumerationOptions.Folders | ((searchOption == SearchOption.AllDirectories) ? DirectoryEnumerationOptions.Recursive : 0); - - return EnumerateFileSystemEntryInfosCore(null, path, searchPattern, options, pathFormat); - } - - - - /// [AlphaFS] Returns an enumerable collection of directory names in a specified . - /// An enumerable collection of the full names (including paths) for the directories in the directory specified by . - /// - /// - /// - /// - /// - /// - /// The directory to search. - /// flags that specify how the directory is to be enumerated. - [SecurityCritical] - public static IEnumerable EnumerateDirectories(string path, DirectoryEnumerationOptions options) - { - // Adhere to the method name. - options &= ~DirectoryEnumerationOptions.Files; // Remove enumeration of files. - options |= DirectoryEnumerationOptions.Folders; // Add enumeration of directories. - - return EnumerateFileSystemEntryInfosCore(null, path, Path.WildcardStarMatchAll, options, PathFormat.RelativePath); - } - - /// [AlphaFS] Returns an enumerable collection of directory names in a specified . - /// An enumerable collection of the full names (including paths) for the directories in the directory specified by . - /// - /// - /// - /// - /// - /// - /// The directory to search. - /// flags that specify how the directory is to be enumerated. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static IEnumerable EnumerateDirectories(string path, DirectoryEnumerationOptions options, PathFormat pathFormat) - { - // Adhere to the method name. - options &= ~DirectoryEnumerationOptions.Files; - options |= DirectoryEnumerationOptions.Folders; - - return EnumerateFileSystemEntryInfosCore(null, path, Path.WildcardStarMatchAll, options, pathFormat); - } - - - - /// [AlphaFS] Returns an enumerable collection of directory names in a specified . - /// An enumerable collection of the full names (including paths) for the directories in the directory specified by . - /// - /// - /// - /// - /// - /// - /// The directory to search. - /// - /// The search string to match against the names of directories in . - /// This parameter can contain a combination of valid literal path and wildcard - /// ( and ) characters, but does not support regular expressions. - /// - /// flags that specify how the directory is to be enumerated. - [SecurityCritical] - public static IEnumerable EnumerateDirectories(string path, string searchPattern, DirectoryEnumerationOptions options) - { - // Adhere to the method name. - options &= ~DirectoryEnumerationOptions.Files; - options |= DirectoryEnumerationOptions.Folders; - - return EnumerateFileSystemEntryInfosCore(null, path, searchPattern, options, PathFormat.RelativePath); - } - - /// [AlphaFS] Returns an enumerable collection of directory names in a specified . - /// An enumerable collection of the full names (including paths) for the directories in the directory specified by . - /// - /// - /// - /// - /// - /// - /// The directory to search. - /// - /// The search string to match against the names of directories in . - /// This parameter can contain a combination of valid literal path and wildcard - /// ( and ) characters, but does not support regular expressions. - /// - /// flags that specify how the directory is to be enumerated. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static IEnumerable EnumerateDirectories(string path, string searchPattern, DirectoryEnumerationOptions options, PathFormat pathFormat) - { - // Adhere to the method name. - options &= ~DirectoryEnumerationOptions.Files; - options |= DirectoryEnumerationOptions.Folders; - - return EnumerateFileSystemEntryInfosCore(null, path, searchPattern, options, pathFormat); - } - - - - #region Transactional - - /// [AlphaFS] Returns an enumerable collection of directory instances in a specified . - /// An enumerable collection of the full names (including paths) for the directories in the directory specified by . - /// - /// - /// - /// - /// - /// - /// The transaction. - /// The directory to search. - [SecurityCritical] - public static IEnumerable EnumerateDirectoriesTransacted(KernelTransaction transaction, string path) - { - return EnumerateFileSystemEntryInfosCore(transaction, path, Path.WildcardStarMatchAll, DirectoryEnumerationOptions.Folders, PathFormat.RelativePath); - } - - /// [AlphaFS] Returns an enumerable collection of directory instances that match a in a specified . - /// An enumerable collection of the full names (including paths) for the directories in the directory specified by and that match the specified . - /// - /// - /// - /// - /// - /// - /// The transaction. - /// The directory to search. - /// - /// The search string to match against the names of directories in . - /// This parameter can contain a combination of valid literal path and wildcard - /// ( and ) characters, but does not support regular expressions. - /// - [SecurityCritical] - public static IEnumerable EnumerateDirectoriesTransacted(KernelTransaction transaction, string path, string searchPattern) - { - return EnumerateFileSystemEntryInfosCore(transaction, path, searchPattern, DirectoryEnumerationOptions.Folders, PathFormat.RelativePath); - } - - /// [AlphaFS] Returns an enumerable collection of directory names that match a in a specified , and optionally searches subdirectories. - /// An enumerable collection of the full names (including paths) for the directories in the directory specified by and that match the specified and . - /// - /// - /// - /// - /// - /// - /// The transaction. - /// The directory to search. - /// - /// The search string to match against the names of directories in . - /// This parameter can contain a combination of valid literal path and wildcard - /// ( and ) characters, but does not support regular expressions. - /// - /// - /// One of the enumeration values that specifies whether the - /// should include only the current directory or should include all subdirectories. - /// - [SecurityCritical] - public static IEnumerable EnumerateDirectoriesTransacted(KernelTransaction transaction, string path, string searchPattern, SearchOption searchOption) - { - var options = DirectoryEnumerationOptions.Folders | ((searchOption == SearchOption.AllDirectories) ? DirectoryEnumerationOptions.Recursive : 0); - - return EnumerateFileSystemEntryInfosCore(transaction, path, searchPattern, options, PathFormat.RelativePath); - } - - - - /// [AlphaFS] Returns an enumerable collection of directory instances in a specified . - /// An enumerable collection of the full names (including paths) for the directories in the directory specified by . - /// - /// - /// - /// - /// - /// - /// The transaction. - /// The directory to search. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static IEnumerable EnumerateDirectoriesTransacted(KernelTransaction transaction, string path, PathFormat pathFormat) - { - return EnumerateFileSystemEntryInfosCore(transaction, path, Path.WildcardStarMatchAll, DirectoryEnumerationOptions.Folders, pathFormat); - } - - - - /// [AlphaFS] Returns an enumerable collection of directory instances that match a in a specified . - /// An enumerable collection of the full names (including paths) for the directories in the directory specified by and that match the specified . - /// - /// - /// - /// - /// - /// - /// The transaction. - /// The directory to search. - /// - /// The search string to match against the names of directories in . - /// This parameter can contain a combination of valid literal path and wildcard - /// ( and ) characters, but does not support regular expressions. - /// - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static IEnumerable EnumerateDirectoriesTransacted(KernelTransaction transaction, string path, string searchPattern, PathFormat pathFormat) - { - return EnumerateFileSystemEntryInfosCore(transaction, path, searchPattern, DirectoryEnumerationOptions.Folders, pathFormat); - } - - /// [AlphaFS] Returns an enumerable collection of directory names that match a in a specified , and optionally searches subdirectories. - /// An enumerable collection of the full names (including paths) for the directories in the directory specified by and that match the specified and . - /// - /// - /// - /// - /// - /// - /// The transaction. - /// The directory to search. - /// - /// The search string to match against the names of directories in . - /// This parameter can contain a combination of valid literal path and wildcard - /// ( and ) characters, but does not support regular expressions. - /// - /// - /// One of the enumeration values that specifies whether the - /// should include only the current directory or should include all subdirectories. - /// - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static IEnumerable EnumerateDirectoriesTransacted(KernelTransaction transaction, string path, string searchPattern, SearchOption searchOption, PathFormat pathFormat) - { - var options = DirectoryEnumerationOptions.Folders | ((searchOption == SearchOption.AllDirectories) ? DirectoryEnumerationOptions.Recursive : 0); - - return EnumerateFileSystemEntryInfosCore(transaction, path, searchPattern, options, pathFormat); - } - - - - /// [AlphaFS] Returns an enumerable collection of directory instances in a specified . - /// An enumerable collection of the full names (including paths) for the directories in the directory specified by . - /// - /// - /// - /// - /// - /// - /// The transaction. - /// The directory to search. - /// flags that specify how the directory is to be enumerated. - [SecurityCritical] - public static IEnumerable EnumerateDirectoriesTransacted(KernelTransaction transaction, string path, DirectoryEnumerationOptions options) - { - // Adhere to the method name. - options &= ~DirectoryEnumerationOptions.Files; - options |= DirectoryEnumerationOptions.Folders; - - return EnumerateFileSystemEntryInfosCore(transaction, path, Path.WildcardStarMatchAll, options, PathFormat.RelativePath); - } - - /// [AlphaFS] Returns an enumerable collection of directory instances in a specified . - /// An enumerable collection of the full names (including paths) for the directories in the directory specified by . - /// - /// - /// - /// - /// - /// - /// The transaction. - /// The directory to search. - /// flags that specify how the directory is to be enumerated. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static IEnumerable EnumerateDirectoriesTransacted(KernelTransaction transaction, string path, DirectoryEnumerationOptions options, PathFormat pathFormat) - { - // Adhere to the method name. - options &= ~DirectoryEnumerationOptions.Files; - options |= DirectoryEnumerationOptions.Folders; - - return EnumerateFileSystemEntryInfosCore(transaction, path, Path.WildcardStarMatchAll, options, pathFormat); - } - - - - /// [AlphaFS] Returns an enumerable collection of directory instances that match a in a specified . - /// An enumerable collection of the full names (including paths) for the directories in the directory specified by and that match the specified . - /// - /// - /// - /// - /// - /// - /// The transaction. - /// The directory to search. - /// - /// The search string to match against the names of directories in . - /// This parameter can contain a combination of valid literal path and wildcard - /// ( and ) characters, but does not support regular expressions. - /// - /// flags that specify how the directory is to be enumerated. - [SecurityCritical] - public static IEnumerable EnumerateDirectoriesTransacted(KernelTransaction transaction, string path, string searchPattern, DirectoryEnumerationOptions options) - { - // Adhere to the method name. - options &= ~DirectoryEnumerationOptions.Files; - options |= DirectoryEnumerationOptions.Folders; - - return EnumerateFileSystemEntryInfosCore(transaction, path, searchPattern, options, PathFormat.RelativePath); - } - - /// [AlphaFS] Returns an enumerable collection of directory instances that match a in a specified . - /// An enumerable collection of the full names (including paths) for the directories in the directory specified by and that match the specified . - /// - /// - /// - /// - /// - /// - /// The transaction. - /// The directory to search. - /// - /// The search string to match against the names of directories in . - /// This parameter can contain a combination of valid literal path and wildcard - /// ( and ) characters, but does not support regular expressions. - /// - /// flags that specify how the directory is to be enumerated. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static IEnumerable EnumerateDirectoriesTransacted(KernelTransaction transaction, string path, string searchPattern, DirectoryEnumerationOptions options, PathFormat pathFormat) - { - // Adhere to the method name. - options &= ~DirectoryEnumerationOptions.Files; - options |= DirectoryEnumerationOptions.Folders; - - return EnumerateFileSystemEntryInfosCore(transaction, path, searchPattern, options, pathFormat); - } - - #endregion // Transactional - } -} diff --git a/AlphaFS/Filesystem/Directory Class/Directory.EnumerateFileIdBothDirectoryInfo.cs b/AlphaFS/Filesystem/Directory Class/Directory.EnumerateFileIdBothDirectoryInfo.cs deleted file mode 100644 index 68f63aa..0000000 --- a/AlphaFS/Filesystem/Directory Class/Directory.EnumerateFileIdBothDirectoryInfo.cs +++ /dev/null @@ -1,230 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using Microsoft.Win32.SafeHandles; -using System; -using System.Collections.Generic; -using System.IO; -using System.Runtime.InteropServices; -using System.Security; -using System.Security.AccessControl; - -namespace Alphaleonis.Win32.Filesystem -{ - partial class Directory - { - /// [AlphaFS] Retrieves information about files in the directory specified by in mode. - /// An enumeration of records for each file system entry in the specified diretory. - /// A path to a directory from which to retrieve information. - [SecurityCritical] - public static IEnumerable EnumerateFileIdBothDirectoryInfo(string path) - { - return EnumerateFileIdBothDirectoryInfoCore(null, null, path, FileShare.ReadWrite, false, PathFormat.RelativePath); - } - - /// [AlphaFS] Retrieves information about files in the directory specified by in mode. - /// An enumeration of records for each file system entry in the specified diretory. - /// A path to a directory from which to retrieve information. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static IEnumerable EnumerateFileIdBothDirectoryInfo(string path, PathFormat pathFormat) - { - return EnumerateFileIdBothDirectoryInfoCore(null, null, path, FileShare.ReadWrite, false, pathFormat); - } - - - - /// [AlphaFS] Retrieves information about files in the directory specified by in specified mode. - /// An enumeration of records for each file system entry in the specified diretory. - /// A path to a directory from which to retrieve information. - /// The mode with which to open a handle to the directory. - [SecurityCritical] - public static IEnumerable EnumerateFileIdBothDirectoryInfo(string path, FileShare shareMode) - { - return EnumerateFileIdBothDirectoryInfoCore(null, null, path, shareMode, false, PathFormat.RelativePath); - } - - /// [AlphaFS] Retrieves information about files in the directory specified by in specified mode. - /// An enumeration of records for each file system entry in the specified diretory. - /// A path to a directory from which to retrieve information. - /// The mode with which to open a handle to the directory. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static IEnumerable EnumerateFileIdBothDirectoryInfo(string path, FileShare shareMode, PathFormat pathFormat) - { - return EnumerateFileIdBothDirectoryInfoCore(null, null, path, shareMode, false, pathFormat); - } - - - - /// [AlphaFS] Retrieves information about files in the directory handle specified. - /// An IEnumerable of records for each file system entry in the specified diretory. - /// An open handle to the directory from which to retrieve information. - [SecurityCritical] - public static IEnumerable EnumerateFileIdBothDirectoryInfo(SafeFileHandle handle) - { - // FileShare has no effect since a handle is already opened. - return EnumerateFileIdBothDirectoryInfoCore(null, handle, null, FileShare.ReadWrite, false, PathFormat.RelativePath); - } - - #region Transactional - - /// [AlphaFS] Retrieves information about files in the directory specified by in mode. - /// An enumeration of records for each file system entry in the specified diretory. - /// The transaction. - /// A path to a directory from which to retrieve information. - [SecurityCritical] - public static IEnumerable EnumerateFileIdBothDirectoryInfoTransacted(KernelTransaction transaction, string path) - { - return EnumerateFileIdBothDirectoryInfoCore(transaction, null, path, FileShare.ReadWrite, false, PathFormat.RelativePath); - } - - /// [AlphaFS] Retrieves information about files in the directory specified by in mode. - /// An enumeration of records for each file system entry in the specified diretory. - /// The transaction. - /// A path to a directory from which to retrieve information. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static IEnumerable EnumerateFileIdBothDirectoryInfoTransacted(KernelTransaction transaction, string path, PathFormat pathFormat) - { - return EnumerateFileIdBothDirectoryInfoCore(transaction, null, path, FileShare.ReadWrite, false, pathFormat); - } - - - - /// [AlphaFS] Retrieves information about files in the directory specified by in specified mode. - /// An enumeration of records for each file system entry in the specified diretory. - /// The transaction. - /// A path to a directory from which to retrieve information. - /// The mode with which to open a handle to the directory. - [SecurityCritical] - public static IEnumerable EnumerateFileIdBothDirectoryInfoTransacted(KernelTransaction transaction, string path, FileShare shareMode) - { - return EnumerateFileIdBothDirectoryInfoCore(transaction, null, path, shareMode, false, PathFormat.RelativePath); - } - - /// [AlphaFS] Retrieves information about files in the directory specified by in specified mode. - /// An enumeration of records for each file system entry in the specified diretory. - /// The transaction. - /// A path to a directory from which to retrieve information. - /// The mode with which to open a handle to the directory. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static IEnumerable EnumerateFileIdBothDirectoryInfoTransacted(KernelTransaction transaction, string path, FileShare shareMode, PathFormat pathFormat) - { - return EnumerateFileIdBothDirectoryInfoCore(transaction, null, path, shareMode, false, pathFormat); - } - - #endregion // Transactional - - #region Internal Methods - - /// Returns an enumerable collection of information about files in the directory handle specified. - /// An IEnumerable of records for each file system entry in the specified diretory. - /// - /// Either use or , not both. - /// - /// The number of files that are returned for each call to GetFileInformationByHandleEx depends on the size of the buffer that is passed to the function. - /// Any subsequent calls to GetFileInformationByHandleEx on the same handle will resume the enumeration operation after the last file is returned. - /// - /// - /// The transaction. - /// An open handle to the directory from which to retrieve information. - /// A path to the directory. - /// The mode with which to open a handle to the directory. - /// suppress any Exception that might be thrown as a result from a failure, such as ACLs protected directories or non-accessible reparse points. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - internal static IEnumerable EnumerateFileIdBothDirectoryInfoCore(KernelTransaction transaction, SafeFileHandle safeHandle, string path, FileShare shareMode, bool continueOnException, PathFormat pathFormat) - { - if (!NativeMethods.IsAtLeastWindowsVista) - throw new PlatformNotSupportedException(Resources.Requires_Windows_Vista_Or_Higher); - - bool callerHandle = safeHandle != null; - if (!callerHandle) - { - if (Utils.IsNullOrWhiteSpace(path)) - throw new ArgumentNullException("path"); - - string pathLp = Path.GetExtendedLengthPathCore(transaction, path, pathFormat, GetFullPathOptions.RemoveTrailingDirectorySeparator | GetFullPathOptions.FullCheck); - - safeHandle = File.CreateFileCore(transaction, pathLp, ExtendedFileAttributes.BackupSemantics, null, FileMode.Open, FileSystemRights.ReadData, shareMode, true, PathFormat.LongFullPath); - } - - - try - { - if (!NativeMethods.IsValidHandle(safeHandle, Marshal.GetLastWin32Error(), !continueOnException)) - yield break; - - var fileNameOffset = (int)Marshal.OffsetOf(typeof(NativeMethods.FILE_ID_BOTH_DIR_INFO), "FileName"); - - using (var safeBuffer = new SafeGlobalMemoryBufferHandle(NativeMethods.DefaultFileBufferSize)) - { - while (true) - { - if (!NativeMethods.GetFileInformationByHandleEx(safeHandle, NativeMethods.FileInfoByHandleClass.FileIdBothDirectoryInfo, safeBuffer, (uint)safeBuffer.Capacity)) - { - uint lastError = (uint)Marshal.GetLastWin32Error(); - switch (lastError) - { - case Win32Errors.ERROR_SUCCESS: - case Win32Errors.ERROR_NO_MORE_FILES: - case Win32Errors.ERROR_HANDLE_EOF: - yield break; - - case Win32Errors.ERROR_MORE_DATA: - continue; - - default: - NativeError.ThrowException(lastError, path); - yield break; // we should never get to this yield break. - } - } - - int offset = 0; - NativeMethods.FILE_ID_BOTH_DIR_INFO fibdi; - do - { - fibdi = safeBuffer.PtrToStructure(offset); - string fileName = safeBuffer.PtrToStringUni(offset + fileNameOffset, (int)(fibdi.FileNameLength / 2)); - - if (!fileName.Equals(Path.CurrentDirectoryPrefix, StringComparison.OrdinalIgnoreCase) && - !fileName.Equals(Path.ParentDirectoryPrefix, StringComparison.OrdinalIgnoreCase)) - yield return new FileIdBothDirectoryInfo(fibdi, fileName); - - offset += fibdi.NextEntryOffset; - } - while (fibdi.NextEntryOffset != 0); - } - } - } - finally - { - // Handle is ours, dispose. - if (!callerHandle && safeHandle != null) - safeHandle.Close(); - } - } - - #endregion // Internal Methods - } -} diff --git a/AlphaFS/Filesystem/Directory Class/Directory.EnumerateFileSystemEntries.cs b/AlphaFS/Filesystem/Directory Class/Directory.EnumerateFileSystemEntries.cs deleted file mode 100644 index f346b00..0000000 --- a/AlphaFS/Filesystem/Directory Class/Directory.EnumerateFileSystemEntries.cs +++ /dev/null @@ -1,472 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System; -using System.Collections.Generic; -using System.IO; -using System.Security; -using SearchOption = System.IO.SearchOption; - -namespace Alphaleonis.Win32.Filesystem -{ - partial class Directory - { - #region .NET - - /// Returns an enumerable collection of file names and directory names in a specified . - /// An enumerable collection of file system entries in the directory specified by . - /// - /// - /// - /// - /// - /// - /// The directory to search. - [SecurityCritical] - public static IEnumerable EnumerateFileSystemEntries(string path) - { - return EnumerateFileSystemEntryInfosCore(null, path, Path.WildcardStarMatchAll, DirectoryEnumerationOptions.FilesAndFolders, PathFormat.RelativePath); - } - - - - /// Returns an enumerable collection of file names and directory names that match a in a specified . - /// An enumerable collection of file system entries in the directory specified by and that match the specified . - /// - /// - /// - /// - /// - /// - /// The directory to search. - /// - /// The search string to match against the names of directories in . - /// This parameter can contain a combination of valid literal path and wildcard - /// ( and ) characters, but does not support regular expressions. - /// - [SecurityCritical] - public static IEnumerable EnumerateFileSystemEntries(string path, string searchPattern) - { - return EnumerateFileSystemEntryInfosCore(null, path, searchPattern, DirectoryEnumerationOptions.FilesAndFolders, PathFormat.RelativePath); - } - - /// Returns an enumerable collection of file names and directory names that match a in a specified , and optionally searches subdirectories. - /// An enumerable collection of file system entries in the directory specified by and that match the specified and . - /// - /// - /// - /// - /// - /// - /// The directory to search. - /// - /// The search string to match against the names of directories in . - /// This parameter can contain a combination of valid literal path and wildcard - /// ( and ) characters, but does not support regular expressions. - /// - /// - /// One of the enumeration values that specifies whether the - /// should include only the current directory or should include all subdirectories. - /// - [SecurityCritical] - public static IEnumerable EnumerateFileSystemEntries(string path, string searchPattern, SearchOption searchOption) - { - var options = DirectoryEnumerationOptions.FilesAndFolders | ((searchOption == SearchOption.AllDirectories) ? DirectoryEnumerationOptions.Recursive : 0); - - return EnumerateFileSystemEntryInfosCore(null, path, searchPattern, options, PathFormat.RelativePath); - } - - #endregion // .NET - - /// [AlphaFS] Returns an enumerable collection of file names and directory names in a specified . - /// An enumerable collection of file system entries in the directory specified by . - /// - /// - /// - /// - /// - /// - /// The directory to search. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static IEnumerable EnumerateFileSystemEntries(string path, PathFormat pathFormat) - { - return EnumerateFileSystemEntryInfosCore(null, path, Path.WildcardStarMatchAll, DirectoryEnumerationOptions.FilesAndFolders, pathFormat); - } - - - - /// [AlphaFS] Returns an enumerable collection of file names and directory names that match a in a specified . - /// An enumerable collection of file system entries in the directory specified by and that match the specified . - /// - /// - /// - /// - /// - /// - /// The directory to search. - /// - /// The search string to match against the names of directories in . - /// This parameter can contain a combination of valid literal path and wildcard - /// ( and ) characters, but does not support regular expressions. - /// - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static IEnumerable EnumerateFileSystemEntries(string path, string searchPattern, PathFormat pathFormat) - { - return EnumerateFileSystemEntryInfosCore(null, path, searchPattern, DirectoryEnumerationOptions.FilesAndFolders, pathFormat); - } - - /// [AlphaFS] Returns an enumerable collection of file names and directory names that match a in a specified , and optionally searches subdirectories. - /// An enumerable collection of file system entries in the directory specified by and that match the specified and . - /// - /// - /// - /// - /// - /// - /// The directory to search. - /// - /// The search string to match against the names of directories in . - /// This parameter can contain a combination of valid literal path and wildcard - /// ( and ) characters, but does not support regular expressions. - /// - /// - /// One of the enumeration values that specifies whether the - /// should include only the current directory or should include all subdirectories. - /// - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static IEnumerable EnumerateFileSystemEntries(string path, string searchPattern, SearchOption searchOption, PathFormat pathFormat) - { - var options = DirectoryEnumerationOptions.FilesAndFolders | ((searchOption == SearchOption.AllDirectories) ? DirectoryEnumerationOptions.Recursive : 0); - - return EnumerateFileSystemEntryInfosCore(null, path, searchPattern, options, pathFormat); - } - - - - /// [AlphaFS] Returns an enumerable collection of file names and directory names in a specified . - /// An enumerable collection of file system entries in the directory specified by . - /// - /// - /// - /// - /// - /// - /// The directory to search. - /// flags that specify how the directory is to be enumerated. - [SecurityCritical] - public static IEnumerable EnumerateFileSystemEntries(string path, DirectoryEnumerationOptions options) - { - return EnumerateFileSystemEntryInfosCore(null, path, Path.WildcardStarMatchAll, options, PathFormat.RelativePath); - } - - /// [AlphaFS] Returns an enumerable collection of file names and directory names in a specified . - /// An enumerable collection of file system entries in the directory specified by . - /// - /// - /// - /// - /// - /// - /// The directory to search. - /// flags that specify how the directory is to be enumerated. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static IEnumerable EnumerateFileSystemEntries(string path, DirectoryEnumerationOptions options, PathFormat pathFormat) - { - return EnumerateFileSystemEntryInfosCore(null, path, Path.WildcardStarMatchAll, options, pathFormat); - } - - - - /// [AlphaFS] Returns an enumerable collection of file names and directory names that match a in a specified . - /// An enumerable collection of file system entries in the directory specified by and that match the specified . - /// - /// - /// - /// - /// - /// - /// The directory to search. - /// - /// The search string to match against the names of directories in . - /// This parameter can contain a combination of valid literal path and wildcard - /// ( and ) characters, but does not support regular expressions. - /// - /// flags that specify how the directory is to be enumerated. - [SecurityCritical] - public static IEnumerable EnumerateFileSystemEntries(string path, string searchPattern, DirectoryEnumerationOptions options) - { - return EnumerateFileSystemEntryInfosCore(null, path, searchPattern, options, PathFormat.RelativePath); - } - - /// [AlphaFS] Returns an enumerable collection of file names and directory names that match a in a specified . - /// An enumerable collection of file system entries in the directory specified by and that match the specified . - /// - /// - /// - /// - /// - /// - /// The directory to search. - /// - /// The search string to match against the names of directories in . - /// This parameter can contain a combination of valid literal path and wildcard - /// ( and ) characters, but does not support regular expressions. - /// - /// Indicates the format of the path parameter(s). - /// flags that specify how the directory is to be enumerated. - [SecurityCritical] - public static IEnumerable EnumerateFileSystemEntries(string path, string searchPattern, DirectoryEnumerationOptions options, PathFormat pathFormat) - { - return EnumerateFileSystemEntryInfosCore(null, path, searchPattern, options, pathFormat); - } - - - - #region Transactional - - /// [AlphaFS] Returns an enumerable collection of file names and directory names in a specified . - /// An enumerable collection of file system entries in the directory specified by . - /// - /// - /// - /// - /// - /// - /// The transaction. - /// The directory to search. - [SecurityCritical] - public static IEnumerable EnumerateFileSystemEntriesTransacted(KernelTransaction transaction, string path) - { - return EnumerateFileSystemEntryInfosCore(transaction, path, Path.WildcardStarMatchAll, DirectoryEnumerationOptions.FilesAndFolders, PathFormat.RelativePath); - } - - - - /// [AlphaFS] Returns an enumerable collection of file names and directory names that match a in a specified . - /// An enumerable collection of file system entries in the directory specified by and that match the specified . - /// - /// - /// - /// - /// - /// - /// The transaction. - /// The directory to search. - /// - /// The search string to match against the names of directories in . - /// This parameter can contain a combination of valid literal path and wildcard - /// ( and ) characters, but does not support regular expressions. - /// - [SecurityCritical] - public static IEnumerable EnumerateFileSystemEntriesTransacted(KernelTransaction transaction, string path, string searchPattern) - { - return EnumerateFileSystemEntryInfosCore(transaction, path, searchPattern, DirectoryEnumerationOptions.FilesAndFolders, PathFormat.RelativePath); - } - - /// [AlphaFS] Returns an enumerable collection of file names and directory names that match a in a specified , and optionally searches subdirectories. - /// An enumerable collection of file system entries in the directory specified by and that match the specified and . - /// - /// - /// - /// - /// - /// - /// The transaction. - /// The directory to search. - /// - /// The search string to match against the names of directories in . - /// This parameter can contain a combination of valid literal path and wildcard - /// ( and ) characters, but does not support regular expressions. - /// - /// - /// One of the enumeration values that specifies whether the - /// should include only the current directory or should include all subdirectories. - /// - [SecurityCritical] - public static IEnumerable EnumerateFileSystemEntriesTransacted(KernelTransaction transaction, string path, string searchPattern, SearchOption searchOption) - { - var options = DirectoryEnumerationOptions.FilesAndFolders | ((searchOption == SearchOption.AllDirectories) ? DirectoryEnumerationOptions.Recursive : 0); - - return EnumerateFileSystemEntryInfosCore(transaction, path, searchPattern, options, PathFormat.RelativePath); - } - - - - /// [AlphaFS] Returns an enumerable collection of file names and directory names in a specified . - /// An enumerable collection of file system entries in the directory specified by . - /// - /// - /// - /// - /// - /// - /// The transaction. - /// The directory to search. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static IEnumerable EnumerateFileSystemEntriesTransacted(KernelTransaction transaction, string path, PathFormat pathFormat) - { - return EnumerateFileSystemEntryInfosCore(transaction, path, Path.WildcardStarMatchAll, DirectoryEnumerationOptions.FilesAndFolders, pathFormat); - } - - - - /// [AlphaFS] Returns an enumerable collection of file names and directory names that match a in a specified . - /// An enumerable collection of file system entries in the directory specified by and that match the specified . - /// - /// - /// - /// - /// - /// - /// The transaction. - /// The directory to search. - /// - /// The search string to match against the names of directories in . - /// This parameter can contain a combination of valid literal path and wildcard - /// ( and ) characters, but does not support regular expressions. - /// - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static IEnumerable EnumerateFileSystemEntriesTransacted(KernelTransaction transaction, string path, string searchPattern, PathFormat pathFormat) - { - return EnumerateFileSystemEntryInfosCore(transaction, path, searchPattern, DirectoryEnumerationOptions.FilesAndFolders, pathFormat); - } - - /// [AlphaFS] Returns an enumerable collection of file names and directory names that match a in a specified , and optionally searches subdirectories. - /// An enumerable collection of file system entries in the directory specified by and that match the specified and . - /// - /// - /// - /// - /// - /// - /// The transaction. - /// The directory to search. - /// - /// The search string to match against the names of directories in . - /// This parameter can contain a combination of valid literal path and wildcard - /// ( and ) characters, but does not support regular expressions. - /// - /// - /// One of the enumeration values that specifies whether the - /// should include only the current directory or should include all subdirectories. - /// - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static IEnumerable EnumerateFileSystemEntriesTransacted(KernelTransaction transaction, string path, string searchPattern, SearchOption searchOption, PathFormat pathFormat) - { - var options = DirectoryEnumerationOptions.FilesAndFolders | ((searchOption == SearchOption.AllDirectories) ? DirectoryEnumerationOptions.Recursive : 0); - - return EnumerateFileSystemEntryInfosCore(transaction, path, searchPattern, options, pathFormat); - } - - - - /// [AlphaFS] Returns an enumerable collection of file names and directory names in a specified . - /// An enumerable collection of file system entries in the directory specified by . - /// - /// - /// - /// - /// - /// - /// The transaction. - /// The directory to search. - /// flags that specify how the directory is to be enumerated. - [SecurityCritical] - public static IEnumerable EnumerateFileSystemEntriesTransacted(KernelTransaction transaction, string path, DirectoryEnumerationOptions options) - { - return EnumerateFileSystemEntryInfosCore(transaction, path, Path.WildcardStarMatchAll, options, PathFormat.RelativePath); - } - - /// [AlphaFS] Returns an enumerable collection of file names and directory names in a specified . - /// An enumerable collection of file system entries in the directory specified by . - /// - /// - /// - /// - /// - /// - /// The transaction. - /// The directory to search. - /// flags that specify how the directory is to be enumerated. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static IEnumerable EnumerateFileSystemEntriesTransacted(KernelTransaction transaction, string path, DirectoryEnumerationOptions options, PathFormat pathFormat) - { - return EnumerateFileSystemEntryInfosCore(transaction, path, Path.WildcardStarMatchAll, options, pathFormat); - } - - - - /// [AlphaFS] Returns an enumerable collection of file names and directory names that match a in a specified . - /// An enumerable collection of file system entries in the directory specified by and that match the specified . - /// - /// - /// - /// - /// - /// - /// The transaction. - /// The directory to search. - /// - /// The search string to match against the names of directories in . - /// This parameter can contain a combination of valid literal path and wildcard - /// ( and ) characters, but does not support regular expressions. - /// - /// flags that specify how the directory is to be enumerated. - [SecurityCritical] - public static IEnumerable EnumerateFileSystemEntriesTransacted(KernelTransaction transaction, string path, string searchPattern, DirectoryEnumerationOptions options) - { - return EnumerateFileSystemEntryInfosCore(transaction, path, searchPattern, options, PathFormat.RelativePath); - } - - /// [AlphaFS] Returns an enumerable collection of file names and directory names that match a in a specified . - /// An enumerable collection of file system entries in the directory specified by and that match the specified . - /// - /// - /// - /// - /// - /// - /// The transaction. - /// The directory to search. - /// - /// The search string to match against the names of directories in . - /// This parameter can contain a combination of valid literal path and wildcard - /// ( and ) characters, but does not support regular expressions. - /// - /// flags that specify how the directory is to be enumerated. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static IEnumerable EnumerateFileSystemEntriesTransacted(KernelTransaction transaction, string path, string searchPattern, DirectoryEnumerationOptions options, PathFormat pathFormat) - { - return EnumerateFileSystemEntryInfosCore(transaction, path, searchPattern, options, pathFormat); - } - - #endregion // Transactional - } -} diff --git a/AlphaFS/Filesystem/Directory Class/Directory.EnumerateFileSystemEntryInfos.cs b/AlphaFS/Filesystem/Directory Class/Directory.EnumerateFileSystemEntryInfos.cs deleted file mode 100644 index 890d394..0000000 --- a/AlphaFS/Filesystem/Directory Class/Directory.EnumerateFileSystemEntryInfos.cs +++ /dev/null @@ -1,670 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System; -using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; -using System.IO; -using System.Security; - -namespace Alphaleonis.Win32.Filesystem -{ - partial class Directory - { - /// [AlphaFS] Returns an enumerable collection of file system entries in a specified path. - /// The matching file system entries. The type of the items is determined by the type . - /// - /// - /// - /// - /// - /// - /// The type to return. This may be one of the following types: - /// - /// - /// - /// This method will return instances of instances. - /// - /// - /// - /// This method will return instances of and instances. - /// - /// - /// - /// This method will return the full path of each item. - /// - /// - /// - /// The directory to search. - [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Infos")] - [SecurityCritical] - public static IEnumerable EnumerateFileSystemEntryInfos(string path) - { - return EnumerateFileSystemEntryInfosCore(null, path, Path.WildcardStarMatchAll, DirectoryEnumerationOptions.FilesAndFolders, PathFormat.RelativePath); - } - - /// [AlphaFS] Returns an enumerable collection of file system entries in a specified path. - /// The matching file system entries. The type of the items is determined by the type . - /// - /// - /// - /// - /// - /// - /// The type to return. This may be one of the following types: - /// - /// - /// - /// This method will return instances of instances. - /// - /// - /// - /// This method will return instances of and instances. - /// - /// - /// - /// This method will return the full path of each item. - /// - /// - /// - /// The directory to search. - /// Indicates the format of the path parameter(s). - [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Infos")] - [SecurityCritical] - public static IEnumerable EnumerateFileSystemEntryInfos(string path, PathFormat pathFormat) - { - return EnumerateFileSystemEntryInfosCore(null, path, Path.WildcardStarMatchAll, DirectoryEnumerationOptions.FilesAndFolders, pathFormat); - } - - - - /// [AlphaFS] Returns an enumerable collection of file system entries in a specified path. - /// The matching file system entries. The type of the items is determined by the type . - /// - /// - /// - /// - /// - /// - /// The type to return. This may be one of the following types: - /// - /// - /// - /// This method will return instances of instances. - /// - /// - /// - /// This method will return instances of and instances. - /// - /// - /// - /// This method will return the full path of each item. - /// - /// - /// - /// The directory to search. - /// flags that specify how the directory is to be enumerated. - [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Infos")] - [SecurityCritical] - public static IEnumerable EnumerateFileSystemEntryInfos(string path, DirectoryEnumerationOptions options) - { - return EnumerateFileSystemEntryInfosCore(null, path, Path.WildcardStarMatchAll, options, PathFormat.RelativePath); - } - - /// [AlphaFS] Returns an enumerable collection of file system entries in a specified path. - /// The matching file system entries. The type of the items is determined by the type . - /// - /// - /// - /// - /// - /// - /// The type to return. This may be one of the following types: - /// - /// - /// - /// This method will return instances of instances. - /// - /// - /// - /// This method will return instances of and instances. - /// - /// - /// - /// This method will return the full path of each item. - /// - /// - /// - /// The directory to search. - /// flags that specify how the directory is to be enumerated. - /// Indicates the format of the path parameter(s). - [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Infos")] - [SecurityCritical] - public static IEnumerable EnumerateFileSystemEntryInfos(string path, DirectoryEnumerationOptions options, PathFormat pathFormat) - { - return EnumerateFileSystemEntryInfosCore(null, path, Path.WildcardStarMatchAll, options, pathFormat); - } - - - - /// [AlphaFS] Returns an enumerable collection of file system entries that match a in a specified path. - /// The matching file system entries. The type of the items is determined by the type . - /// - /// - /// - /// - /// - /// - /// The type to return. This may be one of the following types: - /// - /// - /// - /// This method will return instances of instances. - /// - /// - /// - /// This method will return instances of and instances. - /// - /// - /// - /// This method will return the full path of each item. - /// - /// - /// - /// The directory to search. - /// - /// The search string to match against the names of directories in . - /// This parameter can contain a combination of valid literal path and wildcard - /// ( and ) characters, but does not support regular expressions. - /// - [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Infos")] - [SecurityCritical] - public static IEnumerable EnumerateFileSystemEntryInfos(string path, string searchPattern) - { - return EnumerateFileSystemEntryInfosCore(null, path, searchPattern, DirectoryEnumerationOptions.FilesAndFolders, PathFormat.RelativePath); - } - - /// [AlphaFS] Returns an enumerable collection of file system entries that match a in a specified path. - /// The matching file system entries. The type of the items is determined by the type . - /// - /// - /// - /// - /// - /// - /// The type to return. This may be one of the following types: - /// - /// - /// - /// This method will return instances of instances. - /// - /// - /// - /// This method will return instances of and instances. - /// - /// - /// - /// This method will return the full path of each item. - /// - /// - /// - /// The directory to search. - /// - /// The search string to match against the names of directories in . - /// This parameter can contain a combination of valid literal path and wildcard - /// ( and ) characters, but does not support regular expressions. - /// - /// Indicates the format of the path parameter(s). - [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Infos")] - [SecurityCritical] - public static IEnumerable EnumerateFileSystemEntryInfos(string path, string searchPattern, PathFormat pathFormat) - { - return EnumerateFileSystemEntryInfosCore(null, path, searchPattern, DirectoryEnumerationOptions.FilesAndFolders, pathFormat); - } - - - - /// [AlphaFS] Returns an enumerable collection of file system entries that match a in a specified path using . - /// The matching file system entries. The type of the items is determined by the type . - /// - /// - /// - /// - /// - /// - /// The type to return. This may be one of the following types: - /// - /// - /// - /// This method will return instances of instances. - /// - /// - /// - /// This method will return instances of and instances. - /// - /// - /// - /// This method will return the full path of each item. - /// - /// - /// - /// The directory to search. - /// - /// The search string to match against the names of directories in . - /// This parameter can contain a combination of valid literal path and wildcard - /// ( and ) characters, but does not support regular expressions. - /// - /// flags that specify how the directory is to be enumerated. - [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Infos")] - [SecurityCritical] - public static IEnumerable EnumerateFileSystemEntryInfos(string path, string searchPattern, DirectoryEnumerationOptions options) - { - return EnumerateFileSystemEntryInfosCore(null, path, searchPattern, options, PathFormat.RelativePath); - } - - /// [AlphaFS] Returns an enumerable collection of file system entries that match a in a specified path using . - /// The matching file system entries. The type of the items is determined by the type . - /// - /// - /// - /// - /// - /// - /// The type to return. This may be one of the following types: - /// - /// - /// - /// This method will return instances of instances. - /// - /// - /// - /// This method will return instances of and instances. - /// - /// - /// - /// This method will return the full path of each item. - /// - /// - /// - /// The directory to search. - /// - /// The search string to match against the names of directories in . - /// This parameter can contain a combination of valid literal path and wildcard - /// ( and ) characters, but does not support regular expressions. - /// - /// flags that specify how the directory is to be enumerated. - /// Indicates the format of the path parameter(s). - [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Infos")] - [SecurityCritical] - public static IEnumerable EnumerateFileSystemEntryInfos(string path, string searchPattern, DirectoryEnumerationOptions options, PathFormat pathFormat) - { - return EnumerateFileSystemEntryInfosCore(null, path, searchPattern, options, pathFormat); - } - - #region Transactional - - /// [AlphaFS] Returns an enumerable collection of file system entries in a specified path. - /// The matching file system entries. The type of the items is determined by the type . - /// - /// - /// - /// - /// - /// - /// The type to return. This may be one of the following types: - /// - /// - /// - /// This method will return instances of instances. - /// - /// - /// - /// This method will return instances of and instances. - /// - /// - /// - /// This method will return the full path of each item. - /// - /// - /// - /// The transaction. - /// The directory to search. - [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Infos")] - [SecurityCritical] - public static IEnumerable EnumerateFileSystemEntryInfosTransacted(KernelTransaction transaction, string path) - { - return EnumerateFileSystemEntryInfosCore(transaction, path, Path.WildcardStarMatchAll, DirectoryEnumerationOptions.FilesAndFolders, PathFormat.RelativePath); - } - - /// [AlphaFS] Returns an enumerable collection of file system entries in a specified path. - /// The matching file system entries. The type of the items is determined by the type . - /// - /// - /// - /// - /// - /// - /// The type to return. This may be one of the following types: - /// - /// - /// - /// This method will return instances of instances. - /// - /// - /// - /// This method will return instances of and instances. - /// - /// - /// - /// This method will return the full path of each item. - /// - /// - /// - /// The transaction. - /// The directory to search. - /// Indicates the format of the path parameter(s). - [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Infos")] - [SecurityCritical] - public static IEnumerable EnumerateFileSystemEntryInfosTransacted(KernelTransaction transaction, string path, PathFormat pathFormat) - { - return EnumerateFileSystemEntryInfosCore(transaction, path, Path.WildcardStarMatchAll, DirectoryEnumerationOptions.FilesAndFolders, pathFormat); - } - - - - /// [AlphaFS] Returns an enumerable collection of file system entries in a specified path. - /// The matching file system entries. The type of the items is determined by the type . - /// - /// - /// - /// - /// - /// - /// The type to return. This may be one of the following types: - /// - /// - /// - /// This method will return instances of instances. - /// - /// - /// - /// This method will return instances of and instances. - /// - /// - /// - /// This method will return the full path of each item. - /// - /// - /// - /// The transaction. - /// The directory to search. - /// flags that specify how the directory is to be enumerated. - [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Infos")] - [SecurityCritical] - public static IEnumerable EnumerateFileSystemEntryInfosTransacted(KernelTransaction transaction, string path, DirectoryEnumerationOptions options) - { - return EnumerateFileSystemEntryInfosCore(transaction, path, Path.WildcardStarMatchAll, options, PathFormat.RelativePath); - } - - /// [AlphaFS] Returns an enumerable collection of file system entries in a specified path. - /// The matching file system entries. The type of the items is determined by the type . - /// - /// - /// - /// - /// - /// - /// The type to return. This may be one of the following types: - /// - /// - /// - /// This method will return instances of instances. - /// - /// - /// - /// This method will return instances of and instances. - /// - /// - /// - /// This method will return the full path of each item. - /// - /// - /// - /// The transaction. - /// The directory to search. - /// flags that specify how the directory is to be enumerated. - /// Indicates the format of the path parameter(s). - [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Infos")] - [SecurityCritical] - public static IEnumerable EnumerateFileSystemEntryInfosTransacted(KernelTransaction transaction, string path, DirectoryEnumerationOptions options, PathFormat pathFormat) - { - return EnumerateFileSystemEntryInfosCore(transaction, path, Path.WildcardStarMatchAll, options, pathFormat); - } - - - - /// [AlphaFS] Returns an enumerable collection of file system entries that match a in a specified path. - /// The matching file system entries. The type of the items is determined by the type . - /// - /// - /// - /// - /// - /// - /// The type to return. This may be one of the following types: - /// - /// - /// - /// This method will return instances of instances. - /// - /// - /// - /// This method will return instances of and instances. - /// - /// - /// - /// This method will return the full path of each item. - /// - /// - /// - /// The transaction. - /// The directory to search. - /// - /// The search string to match against the names of directories in . - /// This parameter can contain a combination of valid literal path and wildcard - /// ( and ) characters, but does not support regular expressions. - /// - [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Infos")] - [SecurityCritical] - public static IEnumerable EnumerateFileSystemEntryInfosTransacted(KernelTransaction transaction, string path, string searchPattern) - { - return EnumerateFileSystemEntryInfosCore(transaction, path, searchPattern, DirectoryEnumerationOptions.FilesAndFolders, PathFormat.RelativePath); - } - - /// [AlphaFS] Returns an enumerable collection of file system entries that match a in a specified path. - /// The matching file system entries. The type of the items is determined by the type . - /// - /// - /// - /// - /// - /// - /// The type to return. This may be one of the following types: - /// - /// - /// - /// This method will return instances of instances. - /// - /// - /// - /// This method will return instances of and instances. - /// - /// - /// - /// This method will return the full path of each item. - /// - /// - /// - /// The transaction. - /// The directory to search. - /// - /// The search string to match against the names of directories in . - /// This parameter can contain a combination of valid literal path and wildcard - /// ( and ) characters, but does not support regular expressions. - /// - /// Indicates the format of the path parameter(s). - [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Infos")] - [SecurityCritical] - public static IEnumerable EnumerateFileSystemEntryInfosTransacted(KernelTransaction transaction, string path, string searchPattern, PathFormat pathFormat) - { - return EnumerateFileSystemEntryInfosCore(transaction, path, searchPattern, DirectoryEnumerationOptions.FilesAndFolders, pathFormat); - } - - - - /// [AlphaFS] Returns an enumerable collection of file system entries that match a in a specified path using . - /// The matching file system entries. The type of the items is determined by the type . - /// - /// - /// - /// - /// - /// - /// The type to return. This may be one of the following types: - /// - /// - /// - /// This method will return instances of instances. - /// - /// - /// - /// This method will return instances of and instances. - /// - /// - /// - /// This method will return the full path of each item. - /// - /// - /// - /// The transaction. - /// The directory to search. - /// - /// The search string to match against the names of directories in . - /// This parameter can contain a combination of valid literal path and wildcard - /// ( and ) characters, but does not support regular expressions. - /// - /// flags that specify how the directory is to be enumerated. - [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Infos")] - [SecurityCritical] - public static IEnumerable EnumerateFileSystemEntryInfosTransacted(KernelTransaction transaction, string path, string searchPattern, DirectoryEnumerationOptions options) - { - return EnumerateFileSystemEntryInfosCore(transaction, path, searchPattern, options, PathFormat.RelativePath); - } - - /// [AlphaFS] Returns an enumerable collection of file system entries that match a in a specified path using . - /// The matching file system entries. The type of the items is determined by the type . - /// - /// - /// - /// - /// - /// - /// The type to return. This may be one of the following types: - /// - /// - /// - /// This method will return instances of instances. - /// - /// - /// - /// This method will return instances of and instances. - /// - /// - /// - /// This method will return the full path of each item. - /// - /// - /// - /// The transaction. - /// The directory to search. - /// - /// The search string to match against the names of directories in . - /// This parameter can contain a combination of valid literal path and wildcard - /// ( and ) characters, but does not support regular expressions. - /// - /// flags that specify how the directory is to be enumerated. - /// Indicates the format of the path parameter(s). - [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Infos")] - [SecurityCritical] - public static IEnumerable EnumerateFileSystemEntryInfosTransacted(KernelTransaction transaction, string path, string searchPattern, DirectoryEnumerationOptions options, PathFormat pathFormat) - { - return EnumerateFileSystemEntryInfosCore(transaction, path, searchPattern, options, pathFormat); - } - - #endregion // Transactional - - #region Internal Methods - - /// Returns an enumerable collection of file system entries in a specified path using . - /// The matching file system entries. The type of the items is determined by the type . - /// - /// - /// - /// - /// - /// - /// The type to return. This may be one of the following types: - /// - /// - /// - /// This method will return instances of instances. - /// - /// - /// - /// This method will return instances of and instances. - /// - /// - /// - /// This method will return the full path of each item. - /// - /// - /// - /// The transaction. - /// The directory to search. - /// - /// The search string to match against the names of directories in . - /// This parameter can contain a combination of valid literal path and wildcard - /// ( and ) characters, but does not support regular expressions. - /// - /// flags that specify how the directory is to be enumerated. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - internal static IEnumerable EnumerateFileSystemEntryInfosCore(KernelTransaction transaction, string path, string searchPattern, DirectoryEnumerationOptions options, PathFormat pathFormat) - { - // Enable BasicSearch and LargeCache by default. - options |= DirectoryEnumerationOptions.BasicSearch | DirectoryEnumerationOptions.LargeCache; - - return new FindFileSystemEntryInfo(true, transaction, path, searchPattern, options, typeof(T), pathFormat).Enumerate(); - } - - #endregion // Internal Methods - } -} diff --git a/AlphaFS/Filesystem/Directory Class/Directory.EnumerateFiles.cs b/AlphaFS/Filesystem/Directory Class/Directory.EnumerateFiles.cs deleted file mode 100644 index f4ee086..0000000 --- a/AlphaFS/Filesystem/Directory Class/Directory.EnumerateFiles.cs +++ /dev/null @@ -1,502 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System; -using System.Collections.Generic; -using System.IO; -using System.Security; -using SearchOption = System.IO.SearchOption; - -namespace Alphaleonis.Win32.Filesystem -{ - partial class Directory - { - #region .NET - - /// Returns an enumerable collection of file names in a specified . - /// An enumerable collection of the full names (including paths) for the files in the directory specified by . - /// - /// - /// - /// - /// - /// - /// The directory to search. - [SecurityCritical] - public static IEnumerable EnumerateFiles(string path) - { - return EnumerateFileSystemEntryInfosCore(null, path, Path.WildcardStarMatchAll, DirectoryEnumerationOptions.Files, PathFormat.RelativePath); - } - - /// Returns an enumerable collection of file names in a specified . - /// An enumerable collection of the full names (including paths) for the files in the directory specified by and that match the . - /// - /// - /// - /// - /// - /// - /// The directory to search. - /// - /// The search string to match against the names of directories in . - /// This parameter can contain a combination of valid literal path and wildcard - /// ( and ) characters, but does not support regular expressions. - /// - [SecurityCritical] - public static IEnumerable EnumerateFiles(string path, string searchPattern) - { - return EnumerateFileSystemEntryInfosCore(null, path, searchPattern, DirectoryEnumerationOptions.Files, PathFormat.RelativePath); - } - - /// Returns an enumerable collection of file names that match a in a specified , and optionally searches subdirectories. - /// An enumerable collection of the full names (including paths) for the files in the directory specified by and that match the specified and . - /// - /// - /// - /// - /// - /// - /// The directory to search. - /// - /// The search string to match against the names of directories in . - /// This parameter can contain a combination of valid literal path and wildcard - /// ( and ) characters, but does not support regular expressions. - /// - /// - /// One of the enumeration values that specifies whether the - /// should include only the current directory or should include all subdirectories. - /// - [SecurityCritical] - public static IEnumerable EnumerateFiles(string path, string searchPattern, SearchOption searchOption) - { - var options = DirectoryEnumerationOptions.Files | ((searchOption == SearchOption.AllDirectories) ? DirectoryEnumerationOptions.Recursive : 0); - - return EnumerateFileSystemEntryInfosCore(null, path, searchPattern, options, PathFormat.RelativePath); - } - - #endregion // .NET - - /// [AlphaFS] Returns an enumerable collection of file names in a specified . - /// An enumerable collection of the full names (including paths) for the files in the directory specified by . - /// - /// - /// - /// - /// - /// - /// The directory to search. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static IEnumerable EnumerateFiles(string path, PathFormat pathFormat) - { - return EnumerateFileSystemEntryInfosCore(null, path, Path.WildcardStarMatchAll, DirectoryEnumerationOptions.Files, pathFormat); - } - - - - /// [AlphaFS] Returns an enumerable collection of file names in a specified . - /// An enumerable collection of the full names (including paths) for the files in the directory specified by and that match the . - /// - /// - /// - /// - /// - /// - /// The directory to search. - /// - /// The search string to match against the names of directories in . - /// This parameter can contain a combination of valid literal path and wildcard - /// ( and ) characters, but does not support regular expressions. - /// - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static IEnumerable EnumerateFiles(string path, string searchPattern, PathFormat pathFormat) - { - return EnumerateFileSystemEntryInfosCore(null, path, searchPattern, DirectoryEnumerationOptions.Files, pathFormat); - } - - /// [AlphaFS] Returns an enumerable collection of file names that match a in a specified , and optionally searches subdirectories. - /// An enumerable collection of the full names (including paths) for the files in the directory specified by and that match the specified and . - /// - /// - /// - /// - /// - /// - /// The directory to search. - /// - /// The search string to match against the names of directories in . - /// This parameter can contain a combination of valid literal path and wildcard - /// ( and ) characters, but does not support regular expressions. - /// - /// - /// One of the enumeration values that specifies whether the - /// should include only the current directory or should include all subdirectories. - /// - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static IEnumerable EnumerateFiles(string path, string searchPattern, SearchOption searchOption, PathFormat pathFormat) - { - var options = DirectoryEnumerationOptions.Files | ((searchOption == SearchOption.AllDirectories) ? DirectoryEnumerationOptions.Recursive : 0); - - return EnumerateFileSystemEntryInfosCore(null, path, searchPattern, options, pathFormat); - } - - - - /// [AlphaFS] Returns an enumerable collection of file names in a specified . - /// An enumerable collection of the full names (including paths) for the files in the directory specified by . - /// - /// - /// - /// - /// - /// - /// The directory to search. - /// flags that specify how the directory is to be enumerated. - [SecurityCritical] - public static IEnumerable EnumerateFiles(string path, DirectoryEnumerationOptions options) - { - // Adhere to the method name. - options &= ~DirectoryEnumerationOptions.Folders; // Remove enumeration of directories. - options |= DirectoryEnumerationOptions.Files; // Add enumeration of files. - - return EnumerateFileSystemEntryInfosCore(null, path, Path.WildcardStarMatchAll, options, PathFormat.RelativePath); - } - - /// [AlphaFS] Returns an enumerable collection of file names in a specified . - /// An enumerable collection of the full names (including paths) for the files in the directory specified by . - /// - /// - /// - /// - /// - /// - /// The directory to search. - /// flags that specify how the directory is to be enumerated. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static IEnumerable EnumerateFiles(string path, DirectoryEnumerationOptions options, PathFormat pathFormat) - { - // Adhere to the method name. - options &= ~DirectoryEnumerationOptions.Folders; - options |= DirectoryEnumerationOptions.Files; - - return EnumerateFileSystemEntryInfosCore(null, path, Path.WildcardStarMatchAll, options, pathFormat); - } - - - - /// [AlphaFS] Returns an enumerable collection of file names in a specified . - /// An enumerable collection of the full names (including paths) for the files in the directory specified by and that match the . - /// - /// - /// - /// - /// - /// - /// The directory to search. - /// - /// The search string to match against the names of directories in . - /// This parameter can contain a combination of valid literal path and wildcard - /// ( and ) characters, but does not support regular expressions. - /// - /// flags that specify how the directory is to be enumerated. - [SecurityCritical] - public static IEnumerable EnumerateFiles(string path, string searchPattern, DirectoryEnumerationOptions options) - { - // Adhere to the method name. - options &= ~DirectoryEnumerationOptions.Folders; - options |= DirectoryEnumerationOptions.Files; - - return EnumerateFileSystemEntryInfosCore(null, path, searchPattern, options, PathFormat.RelativePath); - } - - /// [AlphaFS] Returns an enumerable collection of file names in a specified . - /// An enumerable collection of the full names (including paths) for the files in the directory specified by and that match the . - /// - /// - /// - /// - /// - /// - /// The directory to search. - /// - /// The search string to match against the names of directories in . - /// This parameter can contain a combination of valid literal path and wildcard - /// ( and ) characters, but does not support regular expressions. - /// - /// flags that specify how the directory is to be enumerated. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static IEnumerable EnumerateFiles(string path, string searchPattern, DirectoryEnumerationOptions options, PathFormat pathFormat) - { - // Adhere to the method name. - options &= ~DirectoryEnumerationOptions.Folders; - options |= DirectoryEnumerationOptions.Files; - - return EnumerateFileSystemEntryInfosCore(null, path, searchPattern, options, pathFormat); - } - - - - #region Transactional - - /// [AlphaFS] Returns an enumerable collection of file names in a specified . - /// An enumerable collection of the full names (including paths) for the files in the directory specified by . - /// - /// - /// - /// - /// - /// - /// The transaction. - /// The directory to search. - [SecurityCritical] - public static IEnumerable EnumerateFilesTransacted(KernelTransaction transaction, string path) - { - return EnumerateFileSystemEntryInfosCore(transaction, path, Path.WildcardStarMatchAll, DirectoryEnumerationOptions.Files, PathFormat.RelativePath); - } - - - - /// [AlphaFS] Returns an enumerable collection of file instances that match a in a specified . - /// An enumerable collection of the full names (including paths) for the files in the directory specified by and that match the . - /// - /// - /// - /// - /// - /// - /// The transaction. - /// The directory to search. - /// - /// The search string to match against the names of directories in . - /// This parameter can contain a combination of valid literal path and wildcard - /// ( and ) characters, but does not support regular expressions. - /// - [SecurityCritical] - public static IEnumerable EnumerateFilesTransacted(KernelTransaction transaction, string path, string searchPattern) - { - return EnumerateFileSystemEntryInfosCore(transaction, path, searchPattern, DirectoryEnumerationOptions.Files, PathFormat.RelativePath); - } - - /// [AlphaFS] Returns an enumerable collection of file instances instances that match a in a specified , and optionally searches subdirectories. - /// An enumerable collection of the full names (including paths) for the files in the directory specified by and that match the specified and . - /// - /// - /// - /// - /// - /// - /// The transaction. - /// The directory to search. - /// - /// The search string to match against the names of directories in . - /// This parameter can contain a combination of valid literal path and wildcard - /// ( and ) characters, but does not support regular expressions. - /// - /// - /// One of the enumeration values that specifies whether the - /// should include only the current directory or should include all subdirectories. - /// - [SecurityCritical] - public static IEnumerable EnumerateFilesTransacted(KernelTransaction transaction, string path, string searchPattern, SearchOption searchOption) - { - var options = DirectoryEnumerationOptions.Files | ((searchOption == SearchOption.AllDirectories) ? DirectoryEnumerationOptions.Recursive : 0); - - return EnumerateFileSystemEntryInfosCore(transaction, path, searchPattern, options, PathFormat.RelativePath); - } - - - - /// [AlphaFS] Returns an enumerable collection of file names in a specified . - /// An enumerable collection of the full names (including paths) for the files in the directory specified by . - /// - /// - /// - /// - /// - /// - /// The transaction. - /// The directory to search. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static IEnumerable EnumerateFilesTransacted(KernelTransaction transaction, string path, PathFormat pathFormat) - { - return EnumerateFileSystemEntryInfosCore(transaction, path, Path.WildcardStarMatchAll, DirectoryEnumerationOptions.Files, pathFormat); - } - - - - /// [AlphaFS] Returns an enumerable collection of file instances that match a in a specified . - /// An enumerable collection of the full names (including paths) for the files in the directory specified by and that match the . - /// - /// - /// - /// - /// - /// - /// The transaction. - /// The directory to search. - /// - /// The search string to match against the names of directories in . - /// This parameter can contain a combination of valid literal path and wildcard - /// ( and ) characters, but does not support regular expressions. - /// - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static IEnumerable EnumerateFilesTransacted(KernelTransaction transaction, string path, string searchPattern, PathFormat pathFormat) - { - return EnumerateFileSystemEntryInfosCore(transaction, path, searchPattern, DirectoryEnumerationOptions.Files, pathFormat); - } - - /// [AlphaFS] Returns an enumerable collection of file instances instances that match a in a specified , and optionally searches subdirectories. - /// An enumerable collection of the full names (including paths) for the files in the directory specified by and that match the specified and . - /// - /// - /// - /// - /// - /// - /// The transaction. - /// The directory to search. - /// - /// The search string to match against the names of directories in . - /// This parameter can contain a combination of valid literal path and wildcard - /// ( and ) characters, but does not support regular expressions. - /// - /// - /// One of the enumeration values that specifies whether the - /// should include only the current directory or should include all subdirectories. - /// - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static IEnumerable EnumerateFilesTransacted(KernelTransaction transaction, string path, string searchPattern, SearchOption searchOption, PathFormat pathFormat) - { - var options = DirectoryEnumerationOptions.Files | ((searchOption == SearchOption.AllDirectories) ? DirectoryEnumerationOptions.Recursive : 0); - - return EnumerateFileSystemEntryInfosCore(transaction, path, searchPattern, options, pathFormat); - } - - - - /// [AlphaFS] Returns an enumerable collection of file names in a specified . - /// An enumerable collection of the full names (including paths) for the files in the directory specified by . - /// - /// - /// - /// - /// - /// - /// The transaction. - /// The directory to search. - /// flags that specify how the directory is to be enumerated. - [SecurityCritical] - public static IEnumerable EnumerateFilesTransacted(KernelTransaction transaction, string path, DirectoryEnumerationOptions options) - { - // Adhere to the method name. - options &= ~DirectoryEnumerationOptions.Folders; - options |= DirectoryEnumerationOptions.Files; - - return EnumerateFileSystemEntryInfosCore(transaction, path, Path.WildcardStarMatchAll, options, PathFormat.RelativePath); - } - - /// [AlphaFS] Returns an enumerable collection of file names in a specified . - /// An enumerable collection of the full names (including paths) for the files in the directory specified by . - /// - /// - /// - /// - /// - /// - /// The transaction. - /// The directory to search. - /// flags that specify how the directory is to be enumerated. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static IEnumerable EnumerateFilesTransacted(KernelTransaction transaction, string path, DirectoryEnumerationOptions options, PathFormat pathFormat) - { - // Adhere to the method name. - options &= ~DirectoryEnumerationOptions.Folders; - options |= DirectoryEnumerationOptions.Files; - - return EnumerateFileSystemEntryInfosCore(transaction, path, Path.WildcardStarMatchAll, options, pathFormat); - } - - - - /// [AlphaFS] Returns an enumerable collection of file instances that match a in a specified . - /// An enumerable collection of the full names (including paths) for the files in the directory specified by and that match the . - /// - /// - /// - /// - /// - /// - /// The transaction. - /// The directory to search. - /// - /// The search string to match against the names of directories in . - /// This parameter can contain a combination of valid literal path and wildcard - /// ( and ) characters, but does not support regular expressions. - /// - /// flags that specify how the directory is to be enumerated. - [SecurityCritical] - public static IEnumerable EnumerateFilesTransacted(KernelTransaction transaction, string path, string searchPattern, DirectoryEnumerationOptions options) - { - // Adhere to the method name. - options &= ~DirectoryEnumerationOptions.Folders; - options |= DirectoryEnumerationOptions.Files; - - return EnumerateFileSystemEntryInfosCore(transaction, path, searchPattern, options, PathFormat.RelativePath); - } - - /// [AlphaFS] Returns an enumerable collection of file instances that match a in a specified . - /// An enumerable collection of the full names (including paths) for the files in the directory specified by and that match the . - /// - /// - /// - /// - /// - /// - /// The transaction. - /// The directory to search. - /// - /// The search string to match against the names of directories in . - /// This parameter can contain a combination of valid literal path and wildcard - /// ( and ) characters, but does not support regular expressions. - /// - /// flags that specify how the directory is to be enumerated. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static IEnumerable EnumerateFilesTransacted(KernelTransaction transaction, string path, string searchPattern, DirectoryEnumerationOptions options, PathFormat pathFormat) - { - // Adhere to the method name. - options &= ~DirectoryEnumerationOptions.Folders; - options |= DirectoryEnumerationOptions.Files; - - return EnumerateFileSystemEntryInfosCore(transaction, path, searchPattern, options, pathFormat); - } - - #endregion // Transactional - } -} diff --git a/AlphaFS/Filesystem/Directory Class/Directory.Exists.cs b/AlphaFS/Filesystem/Directory Class/Directory.Exists.cs deleted file mode 100644 index c0639b0..0000000 --- a/AlphaFS/Filesystem/Directory Class/Directory.Exists.cs +++ /dev/null @@ -1,110 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System.Security; - -namespace Alphaleonis.Win32.Filesystem -{ - partial class Directory - { - #region .NET - - /// Determines whether the given path refers to an existing directory on disk. - /// - /// Returns if refers to an existing directory. - /// Returns if the directory does not exist or an error occurs when trying to determine if the specified file exists. - /// - /// - /// The Exists method returns if any error occurs while trying to determine if the specified file exists. - /// This can occur in situations that raise exceptions such as passing a file name with invalid characters or too many characters, - /// a failing or missing disk, or if the caller does not have permission to read the file. - /// - /// The path to test. - [SecurityCritical] - public static bool Exists(string path) - { - return File.ExistsCore(true, null, path, PathFormat.RelativePath); - } - - #endregion // .NET - - - - /// [AlphaFS] Determines whether the given path refers to an existing directory on disk. - /// - /// Returns if refers to an existing directory. - /// Returns if the directory does not exist or an error occurs when trying to determine if the specified file exists. - /// - /// - /// The Exists method returns if any error occurs while trying to determine if the specified file exists. - /// This can occur in situations that raise exceptions such as passing a file name with invalid characters or too many characters, - /// a failing or missing disk, or if the caller does not have permission to read the file. - /// - /// The path to test. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static bool Exists(string path, PathFormat pathFormat) - { - return File.ExistsCore(true, null, path, pathFormat); - } - - #region Transactional - - /// [AlphaFS] Determines whether the given path refers to an existing directory on disk. - /// - /// Returns if refers to an existing directory. - /// Returns if the directory does not exist or an error occurs when trying to determine if the specified file exists. - /// - /// - /// The Exists method returns if any error occurs while trying to determine if the specified file exists. - /// This can occur in situations that raise exceptions such as passing a file name with invalid characters or too many characters, - /// a failing or missing disk, or if the caller does not have permission to read the file. - /// - /// The transaction. - /// The path to test. - [SecurityCritical] - public static bool ExistsTransacted(KernelTransaction transaction, string path) - { - return File.ExistsCore(true, transaction, path, PathFormat.RelativePath); - } - - /// [AlphaFS] Determines whether the given path refers to an existing directory on disk. - /// - /// Returns if refers to an existing directory. - /// Returns if the directory does not exist or an error occurs when trying to determine if the specified file exists. - /// - /// - /// The Exists method returns if any error occurs while trying to determine if the specified file exists. - /// This can occur in situations that raise exceptions such as passing a file name with invalid characters or too many characters, - /// a failing or missing disk, or if the caller does not have permission to read the file. - /// - /// The transaction. - /// The path to test. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static bool ExistsTransacted(KernelTransaction transaction, string path, PathFormat pathFormat) - { - return File.ExistsCore(true, transaction, path, pathFormat); - } - - #endregion // Transactional - } -} diff --git a/AlphaFS/Filesystem/Directory Class/Directory.GetAccessControl.cs b/AlphaFS/Filesystem/Directory Class/Directory.GetAccessControl.cs deleted file mode 100644 index 9d90e02..0000000 --- a/AlphaFS/Filesystem/Directory Class/Directory.GetAccessControl.cs +++ /dev/null @@ -1,113 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System; -using System.IO; -using System.Runtime.InteropServices; -using System.Security; -using System.Security.AccessControl; -using Alphaleonis.Win32.Security; -using Microsoft.Win32.SafeHandles; - -namespace Alphaleonis.Win32.Filesystem -{ - partial class Directory - { - /// Gets a object that encapsulates the access control list (ACL) entries for the specified directory. - /// A object that encapsulates the access control rules for the file described by the parameter. - /// - /// - /// - /// The path to a directory containing a object that describes the file's access control list (ACL) information. - [SecurityCritical] - public static DirectorySecurity GetAccessControl(string path) - { - return File.GetAccessControlCore(true, path, AccessControlSections.Access | AccessControlSections.Group | AccessControlSections.Owner, PathFormat.RelativePath); - } - - /// Gets a object that encapsulates the specified type of access control list (ACL) entries for a particular directory. - /// A object that encapsulates the access control rules for the directory described by the parameter. - /// - /// - /// - /// The path to a directory containing a object that describes the directory's access control list (ACL) information. - /// One (or more) of the values that specifies the type of access control list (ACL) information to receive. - [SecurityCritical] - public static DirectorySecurity GetAccessControl(string path, AccessControlSections includeSections) - { - return File.GetAccessControlCore(true, path, includeSections, PathFormat.RelativePath); - } - - - /// [AlphaFS] Gets a object that encapsulates the access control list (ACL) entries for the specified directory. - /// A object that encapsulates the access control rules for the file described by the parameter. - /// - /// - /// - /// The path to a directory containing a object that describes the file's access control list (ACL) information. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static DirectorySecurity GetAccessControl(string path, PathFormat pathFormat) - { - return File.GetAccessControlCore(true, path, AccessControlSections.Access | AccessControlSections.Group | AccessControlSections.Owner, pathFormat); - } - - /// [AlphaFS] Gets a object that encapsulates the specified type of access control list (ACL) entries for a particular directory. - /// A object that encapsulates the access control rules for the directory described by the parameter. - /// - /// - /// - /// The path to a directory containing a object that describes the directory's access control list (ACL) information. - /// One (or more) of the values that specifies the type of access control list (ACL) information to receive. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static DirectorySecurity GetAccessControl(string path, AccessControlSections includeSections, PathFormat pathFormat) - { - return File.GetAccessControlCore(true, path, includeSections, pathFormat); - } - - - /// [AlphaFS] Gets a object that encapsulates the access control list (ACL) entries for the specified directory handle. - /// A object that encapsulates the access control rules for the file described by the parameter. - /// - /// - /// - /// A to a directory containing a object that describes the directory's access control list (ACL) information. - [SecurityCritical] - public static DirectorySecurity GetAccessControl(SafeFileHandle handle) - { - return File.GetAccessControlHandleCore(false, true, handle, AccessControlSections.Access | AccessControlSections.Group | AccessControlSections.Owner, SecurityInformation.None); - } - - /// [AlphaFS] Gets a object that encapsulates the specified type of access control list (ACL) entries for a particular directory handle. - /// A object that encapsulates the access control rules for the directory described by the parameter. - /// - /// - /// - /// A to a directory containing a object that describes the directory's access control list (ACL) information. - /// One (or more) of the values that specifies the type of access control list (ACL) information to receive. - [SecurityCritical] - public static DirectorySecurity GetAccessControl(SafeFileHandle handle, AccessControlSections includeSections) - { - return File.GetAccessControlHandleCore(false, true, handle, includeSections, SecurityInformation.None); - } - } -} diff --git a/AlphaFS/Filesystem/Directory Class/Directory.GetChangeTime.cs b/AlphaFS/Filesystem/Directory Class/Directory.GetChangeTime.cs deleted file mode 100644 index d70676c..0000000 --- a/AlphaFS/Filesystem/Directory Class/Directory.GetChangeTime.cs +++ /dev/null @@ -1,138 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using Microsoft.Win32.SafeHandles; -using System; -using System.Security; - -namespace Alphaleonis.Win32.Filesystem -{ - partial class Directory - { - /// [AlphaFS] Gets the change date and time of the specified directory. - /// A structure set to the change date and time for the specified directory. This value is expressed in local time. - /// The directory for which to obtain creation date and time information. - [SecurityCritical] - public static DateTime GetChangeTime(string path) - { - return File.GetChangeTimeCore(true, null, null, path, false, PathFormat.RelativePath); - } - - /// [AlphaFS] Gets the change date and time of the specified directory. - /// A structure set to the change date and time for the specified directory. This value is expressed in local time. - /// The directory for which to obtain creation date and time information. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static DateTime GetChangeTime(string path, PathFormat pathFormat) - { - return File.GetChangeTimeCore(true, null, null, path, false, pathFormat); - } - - - - /// [AlphaFS] Gets the change date and time, in Coordinated Universal Time (UTC) format, of the specified directory. - /// A structure set to the change date and time for the specified directory. This value is expressed in UTC time. - /// The file for which to obtain change date and time information, in Coordinated Universal Time (UTC) format. - [SecurityCritical] - public static DateTime GetChangeTimeUtc(string path) - { - return File.GetChangeTimeCore(true, null, null, path, true, PathFormat.RelativePath); - } - - /// [AlphaFS] Gets the change date and time, in Coordinated Universal Time (UTC) format, of the specified directory. - /// A structure set to the change date and time for the specified directory. This value is expressed in UTC time. - /// The file for which to obtain change date and time information, in Coordinated Universal Time (UTC) format. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static DateTime GetChangeTimeUtc(string path, PathFormat pathFormat) - { - return File.GetChangeTimeCore(true, null, null, path, true, pathFormat); - } - - - - /// [AlphaFS] Gets the change date and time of the specified directory. - /// A structure set to the change date and time for the specified directory. This value is expressed in local time. - /// An open handle to the directory from which to retrieve information. - [SecurityCritical] - public static DateTime GetChangeTime(SafeFileHandle safeHandle) - { - return File.GetChangeTimeCore(true, null, safeHandle, null, false, PathFormat.RelativePath); - } - - /// [AlphaFS] Gets the change date and time, in Coordinated Universal Time (UTC) format, of the specified directory. - /// A structure set to the change date and time for the specified directory. This value is expressed in UTC time. - /// An open handle to the directory from which to retrieve information. - [SecurityCritical] - public static DateTime GetChangeTimeUtc(SafeFileHandle safeHandle) - { - return File.GetChangeTimeCore(true, null, safeHandle, null, true, PathFormat.RelativePath); - } - - #region Transactional - - /// [AlphaFS] Gets the change date and time of the specified directory. - /// A structure set to the change date and time for the specified directory. This value is expressed in local time. - /// The transaction. - /// The directory for which to obtain creation date and time information. - [SecurityCritical] - public static DateTime GetChangeTimeTransacted(KernelTransaction transaction, string path) - { - return File.GetChangeTimeCore(true, transaction, null, path, false, PathFormat.RelativePath); - } - - /// [AlphaFS] Gets the change date and time of the specified directory. - /// A structure set to the change date and time for the specified directory. This value is expressed in local time. - /// The transaction. - /// The directory for which to obtain creation date and time information. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static DateTime GetChangeTimeTransacted(KernelTransaction transaction, string path, PathFormat pathFormat) - { - return File.GetChangeTimeCore(true, transaction, null, path, false, pathFormat); - } - - - - /// [AlphaFS] Gets the change date and time, in Coordinated Universal Time (UTC) format, of the specified directory. - /// A structure set to the change date and time for the specified directory. This value is expressed in UTC time. - /// The transaction. - /// The file for which to obtain change date and time information, in Coordinated Universal Time (UTC) format. - [SecurityCritical] - public static DateTime GetChangeTimeUtcTransacted(KernelTransaction transaction, string path) - { - return File.GetChangeTimeCore(true, transaction, null, path, true, PathFormat.RelativePath); - } - - /// [AlphaFS] Gets the change date and time, in Coordinated Universal Time (UTC) format, of the specified directory. - /// A structure set to the change date and time for the specified directory. This value is expressed in UTC time. - /// The transaction. - /// The file for which to obtain change date and time information, in Coordinated Universal Time (UTC) format. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static DateTime GetChangeTimeUtcTransacted(KernelTransaction transaction, string path, PathFormat pathFormat) - { - return File.GetChangeTimeCore(true, transaction, null, path, true, pathFormat); - } - - #endregion // Transactional - } -} diff --git a/AlphaFS/Filesystem/Directory Class/Directory.GetCreationTime.cs b/AlphaFS/Filesystem/Directory Class/Directory.GetCreationTime.cs deleted file mode 100644 index 8b6b3aa..0000000 --- a/AlphaFS/Filesystem/Directory Class/Directory.GetCreationTime.cs +++ /dev/null @@ -1,124 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System; -using System.Security; - -namespace Alphaleonis.Win32.Filesystem -{ - partial class Directory - { - #region .NET - - /// Gets the creation date and time of the specified directory. - /// A structure set to the creation date and time for the specified directory. This value is expressed in local time. - /// The directory for which to obtain creation date and time information. - [SecurityCritical] - public static DateTime GetCreationTime(string path) - { - return File.GetCreationTimeCore(null, path, false, PathFormat.RelativePath).ToLocalTime(); - } - - - - /// Gets the creation date and time, in Coordinated Universal Time (UTC) format, of the specified directory. - /// A structure set to the creation date and time for the specified directory. This value is expressed in UTC time. - /// The directory for which to obtain creation date and time information, in Coordinated Universal Time (UTC) format. - [SecurityCritical] - public static DateTime GetCreationTimeUtc(string path) - { - return File.GetCreationTimeCore(null, path, true, PathFormat.RelativePath); - } - - #endregion // .NET - - /// [AlphaFS] Gets the creation date and time of the specified directory. - /// A structure set to the creation date and time for the specified directory. This value is expressed in local time. - /// The directory for which to obtain creation date and time information. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static DateTime GetCreationTime(string path, PathFormat pathFormat) - { - return File.GetCreationTimeCore(null, path, false, pathFormat).ToLocalTime(); - } - - - - /// [AlphaFS] Gets the creation date and time, in Coordinated Universal Time (UTC) format, of the specified directory. - /// A structure set to the creation date and time for the specified directory. This value is expressed in UTC time. - /// The directory for which to obtain creation date and time information, in Coordinated Universal Time (UTC) format. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static DateTime GetCreationTimeUtc(string path, PathFormat pathFormat) - { - return File.GetCreationTimeCore(null, path, true, pathFormat); - } - - - #region Transactional - - /// [AlphaFS] Gets the creation date and time of the specified directory. - /// A structure set to the creation date and time for the specified directory. This value is expressed in local time. - /// The transaction. - /// The directory for which to obtain creation date and time information. - [SecurityCritical] - public static DateTime GetCreationTimeTransacted(KernelTransaction transaction, string path) - { - return File.GetCreationTimeCore(transaction, path, false, PathFormat.RelativePath).ToLocalTime(); - } - - /// [AlphaFS] Gets the creation date and time of the specified directory. - /// A structure set to the creation date and time for the specified directory. This value is expressed in local time. - /// The transaction. - /// The directory for which to obtain creation date and time information. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static DateTime GetCreationTimeTransacted(KernelTransaction transaction, string path, PathFormat pathFormat) - { - return File.GetCreationTimeCore(transaction, path, false, pathFormat).ToLocalTime(); - } - - - - /// [AlphaFS] Gets the creation date and time, in Coordinated Universal Time (UTC) format, of the specified directory. - /// A structure set to the creation date and time for the specified directory. This value is expressed in UTC time. - /// The transaction. - /// The directory for which to obtain creation date and time information, in Coordinated Universal Time (UTC) format. - [SecurityCritical] - public static DateTime GetCreationTimeUtcTransacted(KernelTransaction transaction, string path) - { - return File.GetCreationTimeCore(transaction, path, true, PathFormat.RelativePath); - } - - /// [AlphaFS] Gets the creation date and time, in Coordinated Universal Time (UTC) format, of the specified directory. - /// A structure set to the creation date and time for the specified directory. This value is expressed in UTC time. - /// The transaction. - /// The directory for which to obtain creation date and time information, in Coordinated Universal Time (UTC) format. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static DateTime GetCreationTimeUtcTransacted(KernelTransaction transaction, string path, PathFormat pathFormat) - { - return File.GetCreationTimeCore(transaction, path, true, pathFormat); - } - - #endregion // Transactional - } -} diff --git a/AlphaFS/Filesystem/Directory Class/Directory.GetDirectories.cs b/AlphaFS/Filesystem/Directory Class/Directory.GetDirectories.cs deleted file mode 100644 index ccac010..0000000 --- a/AlphaFS/Filesystem/Directory Class/Directory.GetDirectories.cs +++ /dev/null @@ -1,210 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System; -using System.IO; -using System.Linq; -using System.Security; -using SearchOption = System.IO.SearchOption; - -namespace Alphaleonis.Win32.Filesystem -{ - partial class Directory - { - // Since Directory.GetDirectories() is less efficient than Directory.EnumerateDirectories(), - // only .NET and AlphaFS Transactional methods are implemented. No additional overloaded methods. - - #region .NET - - /// Returns the names of subdirectories (including their paths) in the specified directory. - /// An array of the full names (including paths) of subdirectories in the specified path, or an empty array if no directories are found. - /// - /// The names returned by this method are prefixed with the directory information provided in path. - /// The EnumerateDirectories and GetDirectories methods differ as follows: When you use EnumerateDirectories, you can start enumerating the collection of names - /// before the whole collection is returned; when you use GetDirectories, you must wait for the whole array of names to be returned before you can access the array. - /// Therefore, when you are working with many files and directories, EnumerateDirectories can be more efficient. - /// - /// - /// - /// - /// - /// - /// - /// - /// The directory to search. - [SecurityCritical] - public static string[] GetDirectories(string path) - { - return EnumerateFileSystemEntryInfosCore(null, path, Path.WildcardStarMatchAll, DirectoryEnumerationOptions.Folders, PathFormat.RelativePath).ToArray(); - } - - /// Returns the names of subdirectories (including their paths) that match the specified search pattern in the specified directory. - /// An array of the full names (including paths) of the subdirectories that match the search pattern in the specified directory, or an empty array if no directories are found. - /// - /// The names returned by this method are prefixed with the directory information provided in path. - /// The EnumerateDirectories and GetDirectories methods differ as follows: When you use EnumerateDirectories, you can start enumerating the collection of names - /// before the whole collection is returned; when you use GetDirectories, you must wait for the whole array of names to be returned before you can access the array. - /// Therefore, when you are working with many files and directories, EnumerateDirectories can be more efficient. - /// - /// - /// - /// - /// - /// - /// - /// - /// The directory to search. - /// - /// The search string to match against the names of directories in . - /// This parameter can contain a combination of valid literal path and wildcard - /// ( and ) characters, but does not support regular expressions. - /// - [SecurityCritical] - public static string[] GetDirectories(string path, string searchPattern) - { - return EnumerateFileSystemEntryInfosCore(null, path, searchPattern, DirectoryEnumerationOptions.Folders, PathFormat.RelativePath).ToArray(); - } - - /// Returns the names of the subdirectories (including their paths) that match the specified search pattern in the specified directory, and optionally searches subdirectories. - /// An array of the full names (including paths) of the subdirectories that match the specified criteria, or an empty array if no directories are found. - /// - /// The names returned by this method are prefixed with the directory information provided in path. - /// The EnumerateDirectories and GetDirectories methods differ as follows: When you use EnumerateDirectories, you can start enumerating the collection of names - /// before the whole collection is returned; when you use GetDirectories, you must wait for the whole array of names to be returned before you can access the array. - /// Therefore, when you are working with many files and directories, EnumerateDirectories can be more efficient. - /// - /// - /// - /// - /// - /// - /// - /// - /// The directory to search. - /// - /// The search string to match against the names of directories in . - /// This parameter can contain a combination of valid literal path and wildcard - /// ( and ) characters, but does not support regular expressions. - /// - /// - /// One of the enumeration values that specifies whether the - /// should include only the current directory or should include all subdirectories. - /// - [SecurityCritical] - public static string[] GetDirectories(string path, string searchPattern, SearchOption searchOption) - { - var options = DirectoryEnumerationOptions.Folders | ((searchOption == SearchOption.AllDirectories) ? DirectoryEnumerationOptions.Recursive : 0); - - return EnumerateFileSystemEntryInfosCore(null, path, searchPattern, options, PathFormat.RelativePath).ToArray(); - } - - #endregion // .NET - - #region Transactional - - /// Returns the names of subdirectories (including their paths) in the specified directory. - /// An array of the full names (including paths) of subdirectories in the specified path, or an empty array if no directories are found. - /// - /// The names returned by this method are prefixed with the directory information provided in path. - /// The EnumerateDirectories and GetDirectories methods differ as follows: When you use EnumerateDirectories, you can start enumerating the collection of names - /// before the whole collection is returned; when you use GetDirectories, you must wait for the whole array of names to be returned before you can access the array. - /// Therefore, when you are working with many files and directories, EnumerateDirectories can be more efficient. - /// - /// - /// - /// - /// - /// - /// - /// - /// The transaction. - /// The directory to search. - [SecurityCritical] - public static string[] GetDirectoriesTransacted(KernelTransaction transaction, string path) - { - return EnumerateFileSystemEntryInfosCore(transaction, path, Path.WildcardStarMatchAll, DirectoryEnumerationOptions.Folders, PathFormat.RelativePath).ToArray(); - } - - /// Returns the names of subdirectories (including their paths) that match the specified search pattern in the specified directory. - /// An array of the full names (including paths) of the subdirectories that match the search pattern in the specified directory, or an empty array if no directories are found. - /// - /// The names returned by this method are prefixed with the directory information provided in path. - /// The EnumerateDirectories and GetDirectories methods differ as follows: When you use EnumerateDirectories, you can start enumerating the collection of names - /// before the whole collection is returned; when you use GetDirectories, you must wait for the whole array of names to be returned before you can access the array. - /// Therefore, when you are working with many files and directories, EnumerateDirectories can be more efficient. - /// - /// - /// - /// - /// - /// - /// - /// - /// The transaction. - /// The directory to search. - /// - /// The search string to match against the names of directories in . - /// This parameter can contain a combination of valid literal path and wildcard - /// ( and ) characters, but does not support regular expressions. - /// - [SecurityCritical] - public static string[] GetDirectoriesTransacted(KernelTransaction transaction, string path, string searchPattern) - { - return EnumerateFileSystemEntryInfosCore(transaction, path, searchPattern, DirectoryEnumerationOptions.Folders, PathFormat.RelativePath).ToArray(); - } - - /// Returns the names of the subdirectories (including their paths) that match the specified search pattern in the specified directory, and optionally searches subdirectories. - /// An array of the full names (including paths) of the subdirectories that match the specified criteria, or an empty array if no directories are found. - /// - /// The names returned by this method are prefixed with the directory information provided in path. - /// The EnumerateDirectories and GetDirectories methods differ as follows: When you use EnumerateDirectories, you can start enumerating the collection of names - /// before the whole collection is returned; when you use GetDirectories, you must wait for the whole array of names to be returned before you can access the array. - /// Therefore, when you are working with many files and directories, EnumerateDirectories can be more efficient. - /// - /// - /// - /// - /// - /// - /// - /// - /// The transaction. - /// The directory to search. - /// - /// The search string to match against the names of directories in . - /// This parameter can contain a combination of valid literal path and wildcard - /// ( and ) characters, but does not support regular expressions. - /// - /// - /// One of the enumeration values that specifies whether the - /// should include only the current directory or should include all subdirectories. - /// - [SecurityCritical] - public static string[] GetDirectoriesTransacted(KernelTransaction transaction, string path, string searchPattern, SearchOption searchOption) - { - var options = DirectoryEnumerationOptions.Folders | ((searchOption == SearchOption.AllDirectories) ? DirectoryEnumerationOptions.Recursive : 0); - - return EnumerateFileSystemEntryInfosCore(transaction, path, searchPattern, options, PathFormat.RelativePath).ToArray(); - } - - #endregion // Transactional - } -} diff --git a/AlphaFS/Filesystem/Directory Class/Directory.GetDirectoryRoot.cs b/AlphaFS/Filesystem/Directory Class/Directory.GetDirectoryRoot.cs deleted file mode 100644 index 91b62f6..0000000 --- a/AlphaFS/Filesystem/Directory Class/Directory.GetDirectoryRoot.cs +++ /dev/null @@ -1,115 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System; -using System.Security; - -namespace Alphaleonis.Win32.Filesystem -{ - partial class Directory - { - #region .NET - - /// Returns the volume information, root information, or both for the specified path. - /// The volume information, root information, or both for the specified path, or if path does not contain root directory information. - /// - /// - /// - /// The path of a file or directory. - [SecurityCritical] - public static string GetDirectoryRoot(string path) - { - return GetDirectoryRootCore(null, path, PathFormat.RelativePath); - } - - #endregion // .NET - - /// Returns the volume information, root information, or both for the specified path. - /// The volume information, root information, or both for the specified path, or if path does not contain root directory information. - /// - /// - /// - /// The path of a file or directory. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static string GetDirectoryRoot(string path, PathFormat pathFormat) - { - return GetDirectoryRootCore(null, path, pathFormat); - } - - #region Transactional - - /// [AlphaFS] Returns the volume information, root information, or both for the specified path. - /// The volume information, root information, or both for the specified path, or if path does not contain root directory information. - /// - /// - /// - /// The transaction. - /// The path of a file or directory. - [SecurityCritical] - public static string GetDirectoryRootTransacted(KernelTransaction transaction, string path) - { - return GetDirectoryRootCore(transaction, path, PathFormat.RelativePath); - } - - /// Returns the volume information, root information, or both for the specified path. - /// The volume information, root information, or both for the specified path, or if path does not contain root directory information. - /// - /// - /// - /// The transaction. - /// The path of a file or directory. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static string GetDirectoryRootTransacted(KernelTransaction transaction, string path, PathFormat pathFormat) - { - return GetDirectoryRootCore(transaction, path, pathFormat); - } - - #endregion // Transactional - - #region Internal Methods - - /// Returns the volume information, root information, or both for the specified path. - /// The volume information, root information, or both for the specified path, or if path does not contain root directory information. - /// - /// - /// - /// The transaction. - /// The path of a file or directory. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - internal static string GetDirectoryRootCore(KernelTransaction transaction, string path, PathFormat pathFormat) - { - Path.CheckInvalidUncPath(path); - - string pathLp = Path.GetExtendedLengthPathCore(transaction, path, pathFormat, GetFullPathOptions.CheckInvalidPathChars); - - pathLp = Path.GetRegularPathCore(pathLp, GetFullPathOptions.None, false); - - string rootPath = Path.GetPathRoot(pathLp, false); - - return Utils.IsNullOrWhiteSpace(rootPath) ? null : rootPath; - } - - #endregion // Internal Methods - } -} diff --git a/AlphaFS/Filesystem/Directory Class/Directory.GetFileSystemEntries.cs b/AlphaFS/Filesystem/Directory Class/Directory.GetFileSystemEntries.cs deleted file mode 100644 index e4974a0..0000000 --- a/AlphaFS/Filesystem/Directory Class/Directory.GetFileSystemEntries.cs +++ /dev/null @@ -1,210 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System; -using System.IO; -using System.Linq; -using System.Security; -using SearchOption = System.IO.SearchOption; - -namespace Alphaleonis.Win32.Filesystem -{ - partial class Directory - { - // Since Directory.GetFileSystemEntries() is less efficient than Directory.EnumerateFileSystemEntries(), - // only .NET and AlphaFS Transactional methods are implemented. No additional overloaded methods. - - #region .NET - - /// Returns the names of all files and subdirectories in the specified directory. - /// An string[] array of the names of files and subdirectories in the specified directory. - /// - /// The EnumerateFileSystemEntries and GetFileSystemEntries methods differ as follows: When you use EnumerateFileSystemEntries, - /// you can start enumerating the collection of entries before the whole collection is returned; when you use GetFileSystemEntries, - /// you must wait for the whole array of entries to be returned before you can access the array. - /// Therefore, when you are working with many files and directories, EnumerateFiles can be more efficient. - /// - /// - /// - /// - /// - /// - /// - /// - /// The directory for which file and subdirectory names are returned. - [SecurityCritical] - public static string[] GetFileSystemEntries(string path) - { - return EnumerateFileSystemEntryInfosCore(null, path, Path.WildcardStarMatchAll, DirectoryEnumerationOptions.FilesAndFolders, PathFormat.RelativePath).ToArray(); - } - - /// Returns an array of file system entries that match the specified search criteria. - /// An string[] array of file system entries that match the specified search criteria. - /// - /// The EnumerateFileSystemEntries and GetFileSystemEntries methods differ as follows: When you use EnumerateFileSystemEntries, - /// you can start enumerating the collection of entries before the whole collection is returned; when you use GetFileSystemEntries, - /// you must wait for the whole array of entries to be returned before you can access the array. - /// Therefore, when you are working with many files and directories, EnumerateFiles can be more efficient. - /// - /// - /// - /// - /// - /// - /// - /// - /// The path to be searched. - /// - /// The search string to match against the names of directories in . - /// This parameter can contain a combination of valid literal path and wildcard - /// ( and ) characters, but does not support regular expressions. - /// - [SecurityCritical] - public static string[] GetFileSystemEntries(string path, string searchPattern) - { - return EnumerateFileSystemEntryInfosCore(null, path, searchPattern, DirectoryEnumerationOptions.FilesAndFolders, PathFormat.RelativePath).ToArray(); - } - - /// Gets an array of all the file names and directory names that match a in a specified path, and optionally searches subdirectories. - /// An string[] array of file system entries that match the specified search criteria. - /// - /// The EnumerateFileSystemEntries and GetFileSystemEntries methods differ as follows: When you use EnumerateFileSystemEntries, - /// you can start enumerating the collection of entries before the whole collection is returned; when you use GetFileSystemEntries, - /// you must wait for the whole array of entries to be returned before you can access the array. - /// Therefore, when you are working with many files and directories, EnumerateFiles can be more efficient. - /// - /// - /// - /// - /// - /// - /// - /// - /// The directory to search. - /// - /// The search string to match against the names of directories in . - /// This parameter can contain a combination of valid literal path and wildcard - /// ( and ) characters, but does not support regular expressions. - /// - /// - /// One of the enumeration values that specifies whether the - /// should include only the current directory or should include all subdirectories. - /// - [SecurityCritical] - public static string[] GetFileSystemEntries(string path, string searchPattern, SearchOption searchOption) - { - var options = DirectoryEnumerationOptions.FilesAndFolders | ((searchOption == SearchOption.AllDirectories) ? DirectoryEnumerationOptions.Recursive : 0); - - return EnumerateFileSystemEntryInfosCore(null, path, searchPattern, options, PathFormat.RelativePath).ToArray(); - } - - #endregion // .NET - - #region Transactional - - /// Returns the names of all files and subdirectories in the specified directory. - /// An string[] array of the names of files and subdirectories in the specified directory. - /// - /// The EnumerateFileSystemEntries and GetFileSystemEntries methods differ as follows: When you use EnumerateFileSystemEntries, - /// you can start enumerating the collection of entries before the whole collection is returned; when you use GetFileSystemEntries, - /// you must wait for the whole array of entries to be returned before you can access the array. - /// Therefore, when you are working with many files and directories, EnumerateFiles can be more efficient. - /// - /// - /// - /// - /// - /// - /// - /// - /// The transaction. - /// The directory for which file and subdirectory names are returned. - [SecurityCritical] - public static string[] GetFileSystemEntriesTransacted(KernelTransaction transaction, string path) - { - return EnumerateFileSystemEntryInfosCore(transaction, path, Path.WildcardStarMatchAll, DirectoryEnumerationOptions.FilesAndFolders, PathFormat.RelativePath).ToArray(); - } - - /// Returns an array of file system entries that match the specified search criteria. - /// An string[] array of file system entries that match the specified search criteria. - /// - /// The EnumerateFileSystemEntries and GetFileSystemEntries methods differ as follows: When you use EnumerateFileSystemEntries, - /// you can start enumerating the collection of entries before the whole collection is returned; when you use GetFileSystemEntries, - /// you must wait for the whole array of entries to be returned before you can access the array. - /// Therefore, when you are working with many files and directories, EnumerateFiles can be more efficient. - /// - /// - /// - /// - /// - /// - /// - /// - /// The transaction. - /// The path to be searched. - /// - /// The search string to match against the names of directories in . - /// This parameter can contain a combination of valid literal path and wildcard - /// ( and ) characters, but does not support regular expressions. - /// - [SecurityCritical] - public static string[] GetFileSystemEntriesTransacted(KernelTransaction transaction, string path, string searchPattern) - { - return EnumerateFileSystemEntryInfosCore(transaction, path, searchPattern, DirectoryEnumerationOptions.FilesAndFolders, PathFormat.RelativePath).ToArray(); - } - - /// Gets an array of all the file names and directory names that match a in a specified path, and optionally searches subdirectories. - /// An string[] array of file system entries that match the specified search criteria. - /// - /// The EnumerateFileSystemEntries and GetFileSystemEntries methods differ as follows: When you use EnumerateFileSystemEntries, - /// you can start enumerating the collection of entries before the whole collection is returned; when you use GetFileSystemEntries, - /// you must wait for the whole array of entries to be returned before you can access the array. - /// Therefore, when you are working with many files and directories, EnumerateFiles can be more efficient. - /// - /// - /// - /// - /// - /// - /// - /// - /// The transaction. - /// The directory to search. - /// - /// The search string to match against the names of directories in . - /// This parameter can contain a combination of valid literal path and wildcard - /// ( and ) characters, but does not support regular expressions. - /// - /// - /// One of the enumeration values that specifies whether the - /// should include only the current directory or should include all subdirectories. - /// - [SecurityCritical] - public static string[] GetFileSystemEntriesTransacted(KernelTransaction transaction, string path, string searchPattern, SearchOption searchOption) - { - var options = DirectoryEnumerationOptions.FilesAndFolders | ((searchOption == SearchOption.AllDirectories) ? DirectoryEnumerationOptions.Recursive : 0); - - return EnumerateFileSystemEntryInfosCore(transaction, path, searchPattern, options, PathFormat.RelativePath).ToArray(); - } - - #endregion // Transactional - } -} diff --git a/AlphaFS/Filesystem/Directory Class/Directory.GetFiles.cs b/AlphaFS/Filesystem/Directory Class/Directory.GetFiles.cs deleted file mode 100644 index 4d1d46f..0000000 --- a/AlphaFS/Filesystem/Directory Class/Directory.GetFiles.cs +++ /dev/null @@ -1,216 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System; -using System.IO; -using System.Linq; -using System.Security; -using SearchOption = System.IO.SearchOption; - -namespace Alphaleonis.Win32.Filesystem -{ - partial class Directory - { - // Since Directory.GetFiles() is less efficient than Directory.EnumerateFiles(), - // only .NET and AlphaFS Transactional methods are implemented. No additional overloaded methods. - - #region .NET - - /// Returns the names of files (including their paths) in the specified directory. - /// An array of the full names (including paths) for the files in the specified directory, or an empty array if no files are found. - /// - /// The returned file names are appended to the supplied parameter. - /// The order of the returned file names is not guaranteed; use the Sort() method if a specific sort order is required. - /// The EnumerateFiles and GetFiles methods differ as follows: When you use EnumerateFiles, you can start enumerating the collection of names - /// before the whole collection is returned; when you use GetFiles, you must wait for the whole array of names to be returned before you can access the array. - /// Therefore, when you are working with many files and directories, EnumerateFiles can be more efficient. - /// - /// - /// - /// - /// - /// - /// - /// - /// The directory to search. - [SecurityCritical] - public static string[] GetFiles(string path) - { - return EnumerateFileSystemEntryInfosCore(null, path, Path.WildcardStarMatchAll, DirectoryEnumerationOptions.Files, PathFormat.RelativePath).ToArray(); - } - - /// Returns the names of files (including their paths) that match the specified search pattern in the specified directory. - /// An array of the full names (including paths) for the files in the specified directory that match the specified search pattern, or an empty array if no files are found. - /// - /// The returned file names are appended to the supplied parameter. - /// The order of the returned file names is not guaranteed; use the Sort() method if a specific sort order is required. - /// The EnumerateFiles and GetFiles methods differ as follows: When you use EnumerateFiles, you can start enumerating the collection of names - /// before the whole collection is returned; when you use GetFiles, you must wait for the whole array of names to be returned before you can access the array. - /// Therefore, when you are working with many files and directories, EnumerateFiles can be more efficient. - /// - /// - /// - /// - /// - /// - /// - /// - /// The directory to search. - /// - /// The search string to match against the names of directories in . - /// This parameter can contain a combination of valid literal path and wildcard - /// ( and ) characters, but does not support regular expressions. - /// - [SecurityCritical] - public static string[] GetFiles(string path, string searchPattern) - { - return EnumerateFileSystemEntryInfosCore(null, path, searchPattern, DirectoryEnumerationOptions.Files, PathFormat.RelativePath).ToArray(); - } - - /// Returns the names of files (including their paths) that match the specified search pattern in the current directory, and optionally searches subdirectories. - /// An array of the full names (including paths) for the files in the specified directory that match the specified search pattern and option, or an empty array if no files are found. - /// - /// The returned file names are appended to the supplied parameter. - /// The order of the returned file names is not guaranteed; use the Sort() method if a specific sort order is required. - /// The EnumerateFiles and GetFiles methods differ as follows: When you use EnumerateFiles, you can start enumerating the collection of names - /// before the whole collection is returned; when you use GetFiles, you must wait for the whole array of names to be returned before you can access the array. - /// Therefore, when you are working with many files and directories, EnumerateFiles can be more efficient. - /// - /// - /// - /// - /// - /// - /// - /// - /// The directory to search. - /// - /// The search string to match against the names of directories in . - /// This parameter can contain a combination of valid literal path and wildcard - /// ( and ) characters, but does not support regular expressions. - /// - /// - /// One of the enumeration values that specifies whether the - /// should include only the current directory or should include all subdirectories. - /// - [SecurityCritical] - public static string[] GetFiles(string path, string searchPattern, SearchOption searchOption) - { - var options = DirectoryEnumerationOptions.Files | ((searchOption == SearchOption.AllDirectories) ? DirectoryEnumerationOptions.Recursive : 0); - - return EnumerateFileSystemEntryInfosCore(null, path, searchPattern, options, PathFormat.RelativePath).ToArray(); - } - - #endregion // .NET - - #region Transactional - - /// Returns the names of files (including their paths) in the specified directory. - /// An array of the full names (including paths) for the files in the specified directory, or an empty array if no files are found. - /// - /// The returned file names are appended to the supplied parameter. - /// The order of the returned file names is not guaranteed; use the Sort() method if a specific sort order is required. - /// The EnumerateFiles and GetFiles methods differ as follows: When you use EnumerateFiles, you can start enumerating the collection of names - /// before the whole collection is returned; when you use GetFiles, you must wait for the whole array of names to be returned before you can access the array. - /// Therefore, when you are working with many files and directories, EnumerateFiles can be more efficient. - /// - /// - /// - /// - /// - /// - /// - /// - /// The transaction. - /// The directory to search. - [SecurityCritical] - public static string[] GetFilesTransacted(KernelTransaction transaction, string path) - { - return EnumerateFileSystemEntryInfosCore(transaction, path, Path.WildcardStarMatchAll, DirectoryEnumerationOptions.Files, PathFormat.RelativePath).ToArray(); - } - - /// Returns the names of files (including their paths) that match the specified search pattern in the specified directory. - /// An array of the full names (including paths) for the files in the specified directory that match the specified search pattern, or an empty array if no files are found. - /// - /// The returned file names are appended to the supplied parameter. - /// The order of the returned file names is not guaranteed; use the Sort() method if a specific sort order is required. - /// The EnumerateFiles and GetFiles methods differ as follows: When you use EnumerateFiles, you can start enumerating the collection of names - /// before the whole collection is returned; when you use GetFiles, you must wait for the whole array of names to be returned before you can access the array. - /// Therefore, when you are working with many files and directories, EnumerateFiles can be more efficient. - /// - /// - /// - /// - /// - /// - /// - /// - /// The transaction. - /// The directory to search. - /// - /// The search string to match against the names of directories in . - /// This parameter can contain a combination of valid literal path and wildcard - /// ( and ) characters, but does not support regular expressions. - /// - [SecurityCritical] - public static string[] GetFilesTransacted(KernelTransaction transaction, string path, string searchPattern) - { - return EnumerateFileSystemEntryInfosCore(transaction, path, searchPattern, DirectoryEnumerationOptions.Files, PathFormat.RelativePath).ToArray(); - } - - /// Returns the names of files (including their paths) that match the specified search pattern in the current directory, and optionally searches subdirectories. - /// An array of the full names (including paths) for the files in the specified directory that match the specified search pattern and option, or an empty array if no files are found. - /// - /// The returned file names are appended to the supplied parameter. - /// The order of the returned file names is not guaranteed; use the Sort() method if a specific sort order is required. - /// The EnumerateFiles and GetFiles methods differ as follows: When you use EnumerateFiles, you can start enumerating the collection of names - /// before the whole collection is returned; when you use GetFiles, you must wait for the whole array of names to be returned before you can access the array. - /// Therefore, when you are working with many files and directories, EnumerateFiles can be more efficient. - /// - /// - /// - /// - /// - /// - /// - /// - /// The transaction. - /// The directory to search. - /// - /// The search string to match against the names of directories in . - /// This parameter can contain a combination of valid literal path and wildcard - /// ( and ) characters, but does not support regular expressions. - /// - /// - /// One of the enumeration values that specifies whether the - /// should include only the current directory or should include all subdirectories. - /// - [SecurityCritical] - public static string[] GetFilesTransacted(KernelTransaction transaction, string path, string searchPattern, SearchOption searchOption) - { - var options = DirectoryEnumerationOptions.Files | ((searchOption == SearchOption.AllDirectories) ? DirectoryEnumerationOptions.Recursive : 0); - - return EnumerateFileSystemEntryInfosCore(transaction, path, searchPattern, options, PathFormat.RelativePath).ToArray(); - } - - #endregion // Transactional - } -} diff --git a/AlphaFS/Filesystem/Directory Class/Directory.GetLastAccessTime.cs b/AlphaFS/Filesystem/Directory Class/Directory.GetLastAccessTime.cs deleted file mode 100644 index 9808b72..0000000 --- a/AlphaFS/Filesystem/Directory Class/Directory.GetLastAccessTime.cs +++ /dev/null @@ -1,121 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System; -using System.Security; - -namespace Alphaleonis.Win32.Filesystem -{ - partial class Directory - { - #region .NET - - /// Gets the date and time that the specified directory was last accessed. - /// A structure set to the date and time that the specified directory was last accessed. This value is expressed in local time. - /// The directory for which to obtain access date and time information. - [SecurityCritical] - public static DateTime GetLastAccessTime(string path) - { - return File.GetLastAccessTimeCore(null, path, false, PathFormat.RelativePath).ToLocalTime(); - } - - /// Gets the date and time, in coordinated universal time (UTC), that the specified directory was last accessed. - /// A structure set to the date and time that the specified directory was last accessed. This value is expressed in UTC time. - /// The directory for which to obtain access date and time information. - [SecurityCritical] - public static DateTime GetLastAccessTimeUtc(string path) - { - return File.GetLastAccessTimeCore(null, path, true, PathFormat.RelativePath); - } - - #endregion // .NET - - /// [AlphaFS] Gets the date and time that the specified directory was last accessed. - /// A structure set to the date and time that the specified directory was last accessed. This value is expressed in local time. - /// The directory for which to obtain access date and time information. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static DateTime GetLastAccessTime(string path, PathFormat pathFormat) - { - return File.GetLastAccessTimeCore(null, path, false, pathFormat).ToLocalTime(); - } - - - - /// [AlphaFS] Gets the date and time, in coordinated universal time (UTC), that the specified directory was last accessed. - /// A structure set to the date and time that the specified directory was last accessed. This value is expressed in UTC time. - /// The directory for which to obtain access date and time information. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static DateTime GetLastAccessTimeUtc(string path, PathFormat pathFormat) - { - return File.GetLastAccessTimeCore(null, path, true, pathFormat); - } - - #region Transactional - - /// [AlphaFS] Gets the date and time that the specified directory was last accessed. - /// A structure set to the date and time that the specified directory was last accessed. This value is expressed in local time. - /// The transaction. - /// The directory for which to obtain access date and time information. - [SecurityCritical] - public static DateTime GetLastAccessTimeTransacted(KernelTransaction transaction, string path) - { - return File.GetLastAccessTimeCore(transaction, path, false, PathFormat.RelativePath).ToLocalTime(); - } - - /// [AlphaFS] Gets the date and time that the specified directory was last accessed. - /// A structure set to the date and time that the specified directory was last accessed. This value is expressed in local time. - /// The transaction. - /// The directory for which to obtain access date and time information. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static DateTime GetLastAccessTimeTransacted(KernelTransaction transaction, string path, PathFormat pathFormat) - { - return File.GetLastAccessTimeCore(transaction, path, false, pathFormat).ToLocalTime(); - } - - - - /// [AlphaFS] Gets the date and time, in coordinated universal time (UTC), that the specified directory was last accessed. - /// A structure set to the date and time that the specified directory was last accessed. This value is expressed in UTC time. - /// The transaction. - /// The directory for which to obtain access date and time information. - [SecurityCritical] - public static DateTime GetLastAccessTimeUtcTransacted(KernelTransaction transaction, string path) - { - return File.GetLastAccessTimeCore(transaction, path, true, PathFormat.RelativePath); - } - - /// [AlphaFS] Gets the date and time, in coordinated universal time (UTC), that the specified directory was last accessed. - /// A structure set to the date and time that the specified directory was last accessed. This value is expressed in UTC time. - /// The transaction. - /// The directory for which to obtain access date and time information. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static DateTime GetLastAccessTimeUtcTransacted(KernelTransaction transaction, string path, PathFormat pathFormat) - { - return File.GetLastAccessTimeCore(transaction, path, true, pathFormat); - } - - #endregion // Transactional - } -} diff --git a/AlphaFS/Filesystem/Directory Class/Directory.GetLastWriteTime.cs b/AlphaFS/Filesystem/Directory Class/Directory.GetLastWriteTime.cs deleted file mode 100644 index c34a959..0000000 --- a/AlphaFS/Filesystem/Directory Class/Directory.GetLastWriteTime.cs +++ /dev/null @@ -1,123 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System; -using System.Security; - -namespace Alphaleonis.Win32.Filesystem -{ - partial class Directory - { - #region .NET - - /// Gets the date and time that the specified directory was last written to. - /// A structure set to the date and time that the specified directory was last written to. This value is expressed in local time. - /// The directory for which to obtain write date and time information. - [SecurityCritical] - public static DateTime GetLastWriteTime(string path) - { - return File.GetLastWriteTimeCore(null, path, false, PathFormat.RelativePath).ToLocalTime(); - } - - - - /// Gets the date and time, in coordinated universal time (UTC) time, that the specified directory was last written to. - /// A structure set to the date and time that the specified directory was last written to. This value is expressed in UTC time. - /// The directory for which to obtain write date and time information. - [SecurityCritical] - public static DateTime GetLastWriteTimeUtc(string path) - { - return File.GetLastWriteTimeCore(null, path, true, PathFormat.RelativePath); - } - - #endregion // .NET - - /// [AlphaFS] Gets the date and time that the specified directory was last written to. - /// A structure set to the date and time that the specified directory was last written to. This value is expressed in local time. - /// The directory for which to obtain write date and time information. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static DateTime GetLastWriteTime(string path, PathFormat pathFormat) - { - return File.GetLastWriteTimeCore(null, path, false, pathFormat).ToLocalTime(); - } - - - - /// [AlphaFS] Gets the date and time, in coordinated universal time (UTC) time, that the specified directory was last written to. - /// A structure set to the date and time that the specified directory was last written to. This value is expressed in UTC time. - /// The directory for which to obtain write date and time information. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static DateTime GetLastWriteTimeUtc(string path, PathFormat pathFormat) - { - return File.GetLastWriteTimeCore(null, path, true, pathFormat); - } - - #region Transactional - - /// [AlphaFS] Gets the date and time that the specified directory was last written to. - /// A structure set to the date and time that the specified directory was last written to. This value is expressed in local time. - /// The transaction. - /// The directory for which to obtain write date and time information. - [SecurityCritical] - public static DateTime GetLastWriteTimeTransacted(KernelTransaction transaction, string path) - { - return File.GetLastWriteTimeCore(transaction, path, false, PathFormat.RelativePath).ToLocalTime(); - } - - /// [AlphaFS] Gets the date and time that the specified directory was last written to. - /// A structure set to the date and time that the specified directory was last written to. This value is expressed in local time. - /// The transaction. - /// The directory for which to obtain write date and time information. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static DateTime GetLastWriteTimeTransacted(KernelTransaction transaction, string path, PathFormat pathFormat) - { - return File.GetLastWriteTimeCore(transaction, path, false, pathFormat).ToLocalTime(); - } - - - - /// [AlphaFS] Gets the date and time, in coordinated universal time (UTC) time, that the specified directory was last written to. - /// A structure set to the date and time that the specified directory was last written to. This value is expressed in UTC time. - /// The transaction. - /// The directory for which to obtain write date and time information. - [SecurityCritical] - public static DateTime GetLastWriteTimeUtcTransacted(KernelTransaction transaction, string path) - { - return File.GetLastWriteTimeCore(transaction, path, true, PathFormat.RelativePath); - } - - /// [AlphaFS] Gets the date and time, in coordinated universal time (UTC) time, that the specified directory was last written to. - /// A structure set to the date and time that the specified directory was last written to. This value is expressed in UTC time. - /// The transaction. - /// The directory for which to obtain write date and time information. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static DateTime GetLastWriteTimeUtcTransacted(KernelTransaction transaction, string path, PathFormat pathFormat) - { - return File.GetLastWriteTimeCore(transaction, path, true, pathFormat); - } - - #endregion // Transactional - } -} diff --git a/AlphaFS/Filesystem/Directory Class/Directory.GetLogicalDrives.cs b/AlphaFS/Filesystem/Directory Class/Directory.GetLogicalDrives.cs deleted file mode 100644 index a6a3620..0000000 --- a/AlphaFS/Filesystem/Directory Class/Directory.GetLogicalDrives.cs +++ /dev/null @@ -1,150 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Security; - -namespace Alphaleonis.Win32.Filesystem -{ - partial class Directory - { - #region .NET - - /// Retrieves the names of the logical drives on this computer in the form "<drive letter>:\". - /// An array of type that represents the logical drives on a computer. - [SecurityCritical] - public static string[] GetLogicalDrives() - { - return EnumerateLogicalDrivesCore(false, false).Select(drive => drive.Name).ToArray(); - } - - #endregion // .NET - - /// [AlphaFS] Retrieves the names of the logical drives on this computer in the form "<drive letter>:\". - /// An array of type that represents the logical drives on a computer. - /// Retrieve logical drives as known by the Environment. - /// Retrieve only when accessible (IsReady) logical drives. - [SecurityCritical] - public static string[] GetLogicalDrives(bool fromEnvironment, bool isReady) - { - return EnumerateLogicalDrivesCore(fromEnvironment, isReady).Select(drive => drive.Name).ToArray(); - } - - - /// [AlphaFS] Enumerates the drive names of all logical drives on a computer. - /// An IEnumerable of type that represents the logical drives on a computer. - /// Retrieve logical drives as known by the Environment. - /// Retrieve only when accessible (IsReady) logical drives. - [SecurityCritical] - public static IEnumerable EnumerateLogicalDrives(bool fromEnvironment, bool isReady) - { - return EnumerateLogicalDrivesCore(fromEnvironment, isReady); - } - - #region Internal Methods - - /// Enumerates the drive names of all logical drives on a computer. - /// An IEnumerable of type that represents the logical drives on a computer. - /// Retrieve logical drives as known by the Environment. - /// Retrieve only when accessible (IsReady) logical drives. - [SecurityCritical] - internal static IEnumerable EnumerateLogicalDrivesCore(bool fromEnvironment, bool isReady) - { - #region Get from Environment - - if (fromEnvironment) - { - IEnumerable drivesEnv = isReady - ? Environment.GetLogicalDrives().Where(ld => File.ExistsCore(true, null, ld, PathFormat.FullPath)) - : Environment.GetLogicalDrives().Select(ld => ld); - - foreach (string drive in drivesEnv) - { - // Optionally check Drive .IsReady. - if (isReady) - { - if (File.ExistsCore(true, null, drive, PathFormat.FullPath)) - yield return new DriveInfo(drive); - } - else - yield return new DriveInfo(drive); - } - - yield break; - } - - #endregion // Get from Environment - - #region Get through NativeMethod - - uint lastError = NativeMethods.GetLogicalDrives(); - if (lastError == Win32Errors.ERROR_SUCCESS) - NativeError.ThrowException((int)lastError); - - uint drives = lastError; - int count = 0; - while (drives != 0) - { - if ((drives & 1) != 0) - ++count; - - drives >>= 1; - } - - string[] result = new string[count]; - char[] root = { 'A', Path.VolumeSeparatorChar }; - - drives = lastError; - count = 0; - - while (drives != 0) - { - if ((drives & 1) != 0) - { - string drive = new string(root); - - if (isReady) - { - // Optionally check Drive .IsReady. - if (File.ExistsCore(true, null, drive, PathFormat.FullPath)) - yield return new DriveInfo(drive); - } - else - { - // Ready or not. - yield return new DriveInfo(drive); - } - - result[count++] = drive; - } - - drives >>= 1; - root[0]++; - } - - #endregion // Get through NativeMethod - } - - #endregion // Internal Methods - } -} diff --git a/AlphaFS/Filesystem/Directory Class/Directory.GetParent.cs b/AlphaFS/Filesystem/Directory Class/Directory.GetParent.cs deleted file mode 100644 index c2945a4..0000000 --- a/AlphaFS/Filesystem/Directory Class/Directory.GetParent.cs +++ /dev/null @@ -1,92 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System.Security; - -namespace Alphaleonis.Win32.Filesystem -{ - partial class Directory - { - #region .NET - - /// Retrieves the parent directory of the specified path, including both absolute and relative paths. - /// The path for which to retrieve the parent directory. - /// The parent directory, or if is the root directory, including the root of a UNC server or share name. - [SecurityCritical] - public static DirectoryInfo GetParent(string path) - { - return GetParentCore(null, path, PathFormat.RelativePath); - } - - /// [AlphaFS] Retrieves the parent directory of the specified path, including both absolute and relative paths. - /// The parent directory, or if is the root directory, including the root of a UNC server or share name. - /// The path for which to retrieve the parent directory. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static DirectoryInfo GetParent(string path, PathFormat pathFormat) - { - return GetParentCore(null, path, pathFormat); - } - - #endregion // .NET - - /// [AlphaFS] Retrieves the parent directory of the specified path, including both absolute and relative paths. - /// The parent directory, or if is the root directory, including the root of a UNC server or share name. - /// The transaction. - /// The path for which to retrieve the parent directory. - [SecurityCritical] - public static DirectoryInfo GetParentTransacted(KernelTransaction transaction, string path) - { - return GetParentCore(transaction, path, PathFormat.RelativePath); - } - - /// Retrieves the parent directory of the specified path, including both absolute and relative paths. - /// The parent directory, or if is the root directory, including the root of a UNC server or share name. - /// The transaction. - /// The path for which to retrieve the parent directory. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static DirectoryInfo GetParentTransacted(KernelTransaction transaction, string path, PathFormat pathFormat) - { - return GetParentCore(transaction, path, pathFormat); - } - - #region Internal Methods - - /// Retrieves the parent directory of the specified path, including both absolute and relative paths. - /// The parent directory, or if is the root directory, including the root of a UNC server or share name. - /// The transaction. - /// The path for which to retrieve the parent directory. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - internal static DirectoryInfo GetParentCore(KernelTransaction transaction, string path, PathFormat pathFormat) - { - string pathLp = Path.GetExtendedLengthPathCore(transaction, path, pathFormat, GetFullPathOptions.CheckInvalidPathChars); - - pathLp = Path.GetRegularPathCore(pathLp, GetFullPathOptions.None, false); - string dirName = Path.GetDirectoryName(pathLp, false); - - return Utils.IsNullOrWhiteSpace(dirName) ? null : new DirectoryInfo(transaction, dirName, PathFormat.RelativePath); - } - - #endregion // Internal Methods - } -} diff --git a/AlphaFS/Filesystem/Directory Class/Directory.GetProperties.cs b/AlphaFS/Filesystem/Directory Class/Directory.GetProperties.cs deleted file mode 100644 index 92dfe70..0000000 --- a/AlphaFS/Filesystem/Directory Class/Directory.GetProperties.cs +++ /dev/null @@ -1,286 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Security; - -namespace Alphaleonis.Win32.Filesystem -{ - partial class Directory - { - /// [AlphaFS] Gets the properties of the particular directory without following any symbolic links or mount points. - /// Properties include aggregated info from of each encountered file system object, plus additional ones: Total, File, Size and Error. - /// Total: is the total number of enumerated objects. - /// File: is the total number of files. File is considered when object is neither nor . - /// Size: is the total size of enumerated objects. - /// Error: is the total number of errors encountered during enumeration. - /// - /// A dictionary mapping the keys mentioned above to their respective aggregated values. - /// Directory: is an object which has attribute without one. - /// - /// - /// - /// - /// - /// - /// The target directory. - [SecurityCritical] - public static Dictionary GetProperties(string path) - { - return GetPropertiesCore(null, path, DirectoryEnumerationOptions.FilesAndFolders, PathFormat.RelativePath); - } - - /// [AlphaFS] Gets the properties of the particular directory without following any symbolic links or mount points. - /// Properties include aggregated info from of each encountered file system object, plus additional ones: Total, File, Size and Error. - /// Total: is the total number of enumerated objects. - /// File: is the total number of files. File is considered when object is neither nor . - /// Size: is the total size of enumerated objects. - /// Error: is the total number of errors encountered during enumeration. - /// - /// A dictionary mapping the keys mentioned above to their respective aggregated values. - /// Directory: is an object which has attribute without one. - /// - /// - /// - /// - /// - /// - /// The target directory. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static Dictionary GetProperties(string path, PathFormat pathFormat) - { - return GetPropertiesCore(null, path, DirectoryEnumerationOptions.FilesAndFolders, pathFormat); - } - - - /// [AlphaFS] Gets the properties of the particular directory without following any symbolic links or mount points. - /// Properties include aggregated info from of each encountered file system object, plus additional ones: Total, File, Size and Error. - /// Total: is the total number of enumerated objects. - /// File: is the total number of files. File is considered when object is neither nor . - /// Size: is the total size of enumerated objects. - /// Error: is the total number of errors encountered during enumeration. - /// - /// A dictionary mapping the keys mentioned above to their respective aggregated values. - /// Directory: is an object which has attribute without one. - /// - /// - /// - /// - /// - /// - /// The target directory. - /// flags that specify how the directory is to be enumerated. - [SecurityCritical] - public static Dictionary GetProperties(string path, DirectoryEnumerationOptions options) - { - return GetPropertiesCore(null, path, options, PathFormat.RelativePath); - } - - /// [AlphaFS] Gets the properties of the particular directory without following any symbolic links or mount points. - /// Properties include aggregated info from of each encountered file system object, plus additional ones: Total, File, Size and Error. - /// Total: is the total number of enumerated objects. - /// File: is the total number of files. File is considered when object is neither nor . - /// Size: is the total size of enumerated objects. - /// Error: is the total number of errors encountered during enumeration. - /// - /// A dictionary mapping the keys mentioned above to their respective aggregated values. - /// Directory: is an object which has attribute without one. - /// - /// - /// - /// - /// - /// - /// The target directory. - /// flags that specify how the directory is to be enumerated. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static Dictionary GetProperties(string path, DirectoryEnumerationOptions options, PathFormat pathFormat) - { - return GetPropertiesCore(null, path, options, pathFormat); - } - - - #region Transactional - - /// [AlphaFS] Gets the properties of the particular directory without following any symbolic links or mount points. - /// Properties include aggregated info from of each encountered file system object, plus additional ones: Total, File, Size and Error. - /// Total: is the total number of enumerated objects. - /// File: is the total number of files. File is considered when object is neither nor . - /// Size: is the total size of enumerated objects. - /// Error: is the total number of errors encountered during enumeration. - /// - /// A dictionary mapping the keys mentioned above to their respective aggregated values. - /// Directory: is an object which has attribute without one. - /// - /// - /// - /// - /// - /// - /// The transaction. - /// The target directory. - [SecurityCritical] - public static Dictionary GetPropertiesTransacted(KernelTransaction transaction, string path) - { - return GetPropertiesCore(transaction, path, DirectoryEnumerationOptions.FilesAndFolders, PathFormat.RelativePath); - } - - /// [AlphaFS] Gets the properties of the particular directory without following any symbolic links or mount points. - /// Properties include aggregated info from of each encountered file system object, plus additional ones: Total, File, Size and Error. - /// Total: is the total number of enumerated objects. - /// File: is the total number of files. File is considered when object is neither nor . - /// Size: is the total size of enumerated objects. - /// Error: is the total number of errors encountered during enumeration. - /// - /// A dictionary mapping the keys mentioned above to their respective aggregated values. - /// Directory: is an object which has attribute without one. - /// - /// - /// - /// - /// - /// - /// The transaction. - /// The target directory. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static Dictionary GetPropertiesTransacted(KernelTransaction transaction, string path, PathFormat pathFormat) - { - return GetPropertiesCore(transaction, path, DirectoryEnumerationOptions.FilesAndFolders, pathFormat); - } - - - /// [AlphaFS] Gets the properties of the particular directory without following any symbolic links or mount points. - /// Properties include aggregated info from of each encountered file system object, plus additional ones: Total, File, Size and Error. - /// Total: is the total number of enumerated objects. - /// File: is the total number of files. File is considered when object is neither nor . - /// Size: is the total size of enumerated objects. - /// Error: is the total number of errors encountered during enumeration. - /// - /// A dictionary mapping the keys mentioned above to their respective aggregated values. - /// Directory: is an object which has attribute without one. - /// - /// - /// - /// - /// - /// - /// The transaction. - /// The target directory. - /// flags that specify how the directory is to be enumerated. - [SecurityCritical] - public static Dictionary GetPropertiesTransacted(KernelTransaction transaction, string path, DirectoryEnumerationOptions options) - { - return GetPropertiesCore(transaction, path, options, PathFormat.RelativePath); - } - - /// [AlphaFS] Gets the properties of the particular directory without following any symbolic links or mount points. - /// Properties include aggregated info from of each encountered file system object, plus additional ones: Total, File, Size and Error. - /// Total: is the total number of enumerated objects. - /// File: is the total number of files. File is considered when object is neither nor . - /// Size: is the total size of enumerated objects. - /// Error: is the total number of errors encountered during enumeration. - /// - /// A dictionary mapping the keys mentioned above to their respective aggregated values. - /// Directory: is an object which has attribute without one. - /// - /// - /// - /// - /// - /// - /// The transaction. - /// The target directory. - /// flags that specify how the directory is to be enumerated. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static Dictionary GetPropertiesTransacted(KernelTransaction transaction, string path, DirectoryEnumerationOptions options, PathFormat pathFormat) - { - return GetPropertiesCore(transaction, path, options, pathFormat); - } - - #endregion // Transactional - - #region Internal Methods - - /// [AlphaFS] Gets the properties of the particular directory without following any symbolic links or mount points. - /// Properties include aggregated info from of each encountered file system object, plus additional ones: Total, File, Size and Error. - /// Total: is the total number of enumerated objects. - /// File: is the total number of files. File is considered when object is neither nor . - /// Size: is the total size of enumerated objects. - /// Error: is the total number of errors encountered during enumeration. - /// - /// A dictionary mapping the keys mentioned above to their respective aggregated values. - /// Directory: is an object which has attribute without one. - /// - /// - /// - /// - /// - /// - /// The transaction. - /// The target directory. - /// flags that specify how the directory is to be enumerated. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - internal static Dictionary GetPropertiesCore(KernelTransaction transaction, string path, DirectoryEnumerationOptions options, PathFormat pathFormat) - { - long total = 0; - long size = 0; - - const string propFile = "File"; - const string propTotal = "Total"; - const string propSize = "Size"; - - var typeOfAttrs = typeof(FileAttributes); - var attributes = Enum.GetValues(typeOfAttrs); - var props = Enum.GetNames(typeOfAttrs).OrderBy(attrs => attrs).ToDictionary(name => name, name => 0); - var pathLp = Path.GetExtendedLengthPathCore(transaction, path, pathFormat, GetFullPathOptions.RemoveTrailingDirectorySeparator | GetFullPathOptions.FullCheck); - - foreach (var fsei in EnumerateFileSystemEntryInfosCore(transaction, pathLp, Path.WildcardStarMatchAll, options, PathFormat.LongFullPath)) - { - total++; - - if (!fsei.IsDirectory) - size += fsei.FileSize; - - var fsei1 = fsei; - - foreach (var attributeMarker in attributes.Cast().Where(attributeMarker => (fsei1.Attributes & attributeMarker) != 0)) - props[((attributeMarker & FileAttributes.Directory) != 0 ? FileAttributes.Directory : attributeMarker).ToString()]++; - } - - // Adjust regular files count. - props.Add(propFile, total - props[FileAttributes.Directory.ToString()] - props[FileAttributes.ReparsePoint.ToString()]); - props.Add(propTotal, total); - props.Add(propSize, size); - - return props; - } - - #endregion // Internal Methods - } -} diff --git a/AlphaFS/Filesystem/Directory Class/Directory.HasInheritedPermissions.cs b/AlphaFS/Filesystem/Directory Class/Directory.HasInheritedPermissions.cs deleted file mode 100644 index 71e4033..0000000 --- a/AlphaFS/Filesystem/Directory Class/Directory.HasInheritedPermissions.cs +++ /dev/null @@ -1,58 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System; -using System.Security.AccessControl; -using System.Security.Principal; - -namespace Alphaleonis.Win32.Filesystem -{ - partial class Directory - { - /// [AlphaFS] Check if the directory has permission inheritance enabled. - /// if permission inheritance is enabled, if permission inheritance is disabled. - /// The full path to the directory to check. - /// Indicates the format of the path parameter(s). - public static bool HasInheritedPermissions(string path, PathFormat pathFormat) - { - if (Utils.IsNullOrWhiteSpace(path)) - throw new ArgumentNullException("path"); - - var acl = File.GetAccessControlCore(true, path, AccessControlSections.Access | AccessControlSections.Group | AccessControlSections.Owner, pathFormat); - - return acl.GetAccessRules(false, true, typeof(SecurityIdentifier)).Count > 0; - } - - - /// [AlphaFS] Check if the directory has permission inheritance enabled. - /// The full path to the directory to check. - /// if permission inheritance is enabled, if permission inheritance is disabled. - public static bool HasInheritedPermissions(string path) - { - if (Utils.IsNullOrWhiteSpace(path)) - throw new ArgumentNullException("path"); - - var acl = File.GetAccessControlCore(true, path, AccessControlSections.Access | AccessControlSections.Group | AccessControlSections.Owner, PathFormat.RelativePath); - - return acl.GetAccessRules(false, true, typeof(SecurityIdentifier)).Count > 0; - } - } -} diff --git a/AlphaFS/Filesystem/Directory Class/Directory.SetAccessControl.cs b/AlphaFS/Filesystem/Directory Class/Directory.SetAccessControl.cs deleted file mode 100644 index fc0559b..0000000 --- a/AlphaFS/Filesystem/Directory Class/Directory.SetAccessControl.cs +++ /dev/null @@ -1,104 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System.Diagnostics.CodeAnalysis; -using System.Security; -using System.Security.AccessControl; -using Microsoft.Win32.SafeHandles; - -namespace Alphaleonis.Win32.Filesystem -{ - partial class Directory - { - /// Applies access control list (ACL) entries described by a object to the specified directory. - /// A directory to add or remove access control list (ACL) entries from. - /// A object that describes an ACL entry to apply to the directory described by the path parameter. - [SuppressMessage("Microsoft.Design", "CA1011:ConsiderPassingBaseTypesAsParameters")] - [SecurityCritical] - public static void SetAccessControl(string path, DirectorySecurity directorySecurity) - { - File.SetAccessControlCore(path, null, directorySecurity, AccessControlSections.All, PathFormat.RelativePath); - } - - /// Applies access control list (ACL) entries described by a object to the specified directory. - /// Note that unlike this method does not automatically - /// determine what parts of the specified instance has been modified. Instead, the - /// parameter is used to specify what entries from to apply to . - /// A directory to add or remove access control list (ACL) entries from. - /// A object that describes an ACL entry to apply to the directory described by the path parameter. - /// One or more of the values that specifies the type of access control list (ACL) information to set. - [SuppressMessage("Microsoft.Design", "CA1011:ConsiderPassingBaseTypesAsParameters")] - [SecurityCritical] - public static void SetAccessControl(string path, DirectorySecurity directorySecurity, AccessControlSections includeSections) - { - File.SetAccessControlCore(path, null, directorySecurity, includeSections, PathFormat.RelativePath); - } - - - /// [AlphaFS] Applies access control list (ACL) entries described by a object to the specified directory. - /// A directory to add or remove access control list (ACL) entries from. - /// A object that describes an ACL entry to apply to the directory described by the path parameter. - /// Indicates the format of the path parameter(s). - [SuppressMessage("Microsoft.Design", "CA1011:ConsiderPassingBaseTypesAsParameters")] - [SecurityCritical] - public static void SetAccessControl(string path, DirectorySecurity directorySecurity, PathFormat pathFormat) - { - File.SetAccessControlCore(path, null, directorySecurity, AccessControlSections.All, pathFormat); - } - - /// [AlphaFS] Applies access control list (ACL) entries described by a object to the specified directory. - /// Note that unlike this method does not automatically - /// determine what parts of the specified instance has been modified. Instead, the - /// parameter is used to specify what entries from to apply to . - /// A directory to add or remove access control list (ACL) entries from. - /// A object that describes an ACL entry to apply to the directory described by the path parameter. - /// One or more of the values that specifies the type of access control list (ACL) information to set. - /// Indicates the format of the path parameter(s). - [SuppressMessage("Microsoft.Design", "CA1011:ConsiderPassingBaseTypesAsParameters")] - [SecurityCritical] - public static void SetAccessControl(string path, DirectorySecurity directorySecurity, AccessControlSections includeSections, PathFormat pathFormat) - { - File.SetAccessControlCore(path, null, directorySecurity, includeSections, pathFormat); - } - - - /// Applies access control list (ACL) entries described by a object to the specified directory. - /// A to a file to add or remove access control list (ACL) entries from. - /// A object that describes an ACL entry to apply to the directory described by the path parameter. - [SuppressMessage("Microsoft.Design", "CA1011:ConsiderPassingBaseTypesAsParameters")] - [SecurityCritical] - public static void SetAccessControl(SafeFileHandle handle, DirectorySecurity directorySecurity) - { - File.SetAccessControlCore(null, handle, directorySecurity, AccessControlSections.All, PathFormat.LongFullPath); - } - - /// Applies access control list (ACL) entries described by a object to the specified directory. - /// A to a file to add or remove access control list (ACL) entries from. - /// A object that describes an ACL entry to apply to the directory described by the path parameter. - /// One or more of the values that specifies the type of access control list (ACL) information to set. - [SuppressMessage("Microsoft.Design", "CA1011:ConsiderPassingBaseTypesAsParameters")] - [SecurityCritical] - public static void SetAccessControl(SafeFileHandle handle, DirectorySecurity directorySecurity, AccessControlSections includeSections) - { - File.SetAccessControlCore(null, handle, directorySecurity, includeSections, PathFormat.LongFullPath); - } - } -} diff --git a/AlphaFS/Filesystem/Directory Class/Directory.SetCreationTime.cs b/AlphaFS/Filesystem/Directory Class/Directory.SetCreationTime.cs deleted file mode 100644 index f2698a1..0000000 --- a/AlphaFS/Filesystem/Directory Class/Directory.SetCreationTime.cs +++ /dev/null @@ -1,169 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System; -using System.Security; - -namespace Alphaleonis.Win32.Filesystem -{ - partial class Directory - { - #region .NET - - /// Sets the date and time the directory was created. - /// The directory for which to set the creation date and time information. - /// A containing the value to set for the creation date and time of . This value is expressed in local time. - [SecurityCritical] - public static void SetCreationTime(string path, DateTime creationTime) - { - File.SetFsoDateTimeCore(true, null, path, creationTime.ToUniversalTime(), null, null, false, PathFormat.RelativePath); - } - - - - /// Sets the date and time, in coordinated universal time (UTC), that the directory was created. - /// The directory for which to set the creation date and time information. - /// A containing the value to set for the creation date and time of . This value is expressed in UTC time. - [SecurityCritical] - public static void SetCreationTimeUtc(string path, DateTime creationTimeUtc) - { - File.SetFsoDateTimeCore(true, null, path, creationTimeUtc, null, null, false, PathFormat.RelativePath); - } - - #endregion // .NET - - /// [AlphaFS] Sets the date and time the directory was created. - /// The directory for which to set the creation date and time information. - /// Indicates the format of the path parameter(s). - /// A containing the value to set for the creation date and time of . This value is expressed in local time. - [SecurityCritical] - public static void SetCreationTime(string path, DateTime creationTime, PathFormat pathFormat) - { - File.SetFsoDateTimeCore(true, null, path, creationTime.ToUniversalTime(), null, null, false, pathFormat); - } - - /// [AlphaFS] Sets the date and time the directory was created. - /// The directory for which to set the creation date and time information. - /// Indicates the format of the path parameter(s). - /// A containing the value to set for the creation date and time of . This value is expressed in local time. - /// If , the date and time information will apply to the reparse point (symlink or junction) and not the file or directory linked to. No effect if does not refer to a reparse point. - [SecurityCritical] - public static void SetCreationTime(string path, DateTime creationTime, bool modifyReparsePoint, PathFormat pathFormat) - { - File.SetFsoDateTimeCore(true, null, path, creationTime.ToUniversalTime(), null, null, modifyReparsePoint, pathFormat); - } - - - - /// [AlphaFS] Sets the date and time, in coordinated universal time (UTC), that the directory was created. - /// The directory for which to set the creation date and time information. - /// A containing the value to set for the creation date and time of . This value is expressed in UTC time. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static void SetCreationTimeUtc(string path, DateTime creationTimeUtc, PathFormat pathFormat) - { - File.SetFsoDateTimeCore(true, null, path, creationTimeUtc, null, null, false, pathFormat); - } - - /// [AlphaFS] Sets the date and time, in coordinated universal time (UTC), that the directory was created. - /// The directory for which to set the creation date and time information. - /// A containing the value to set for the creation date and time of . This value is expressed in UTC time. - /// If , the date and time information will apply to the reparse point (symlink or junction) and not the file or directory linked to. No effect if does not refer to a reparse point. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static void SetCreationTimeUtc(string path, DateTime creationTimeUtc, bool modifyReparsePoint, PathFormat pathFormat) - { - File.SetFsoDateTimeCore(true, null, path, creationTimeUtc, null, null, modifyReparsePoint, pathFormat); - } - - #region Transactional - - /// [AlphaFS] Sets the date and time the directory was created. - /// The transaction. - /// The directory for which to set the creation date and time information. - /// A containing the value to set for the creation date and time of . This value is expressed in local time. - [SecurityCritical] - public static void SetCreationTimeTransacted(KernelTransaction transaction, string path, DateTime creationTime) - { - File.SetFsoDateTimeCore(true, transaction, path, creationTime.ToUniversalTime(), null, null, false, PathFormat.RelativePath); - } - - /// [AlphaFS] Sets the date and time the directory was created. - /// The transaction. - /// The directory for which to set the creation date and time information. - /// A containing the value to set for the creation date and time of . This value is expressed in local time. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static void SetCreationTimeTransacted(KernelTransaction transaction, string path, DateTime creationTime, PathFormat pathFormat) - { - File.SetFsoDateTimeCore(true, transaction, path, creationTime.ToUniversalTime(), null, null, false, pathFormat); - } - - /// [AlphaFS] Sets the date and time the directory was created. - /// The transaction. - /// The directory for which to set the creation date and time information. - /// A containing the value to set for the creation date and time of . This value is expressed in local time. - /// If , the date and time information will apply to the reparse point (symlink or junction) and not the file or directory linked to. No effect if does not refer to a reparse point. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static void SetCreationTimeTransacted(KernelTransaction transaction, string path, DateTime creationTime, bool modifyReparsePoint, PathFormat pathFormat) - { - File.SetFsoDateTimeCore(true, transaction, path, creationTime.ToUniversalTime(), null, null, modifyReparsePoint, pathFormat); - } - - - - /// [AlphaFS] Sets the date and time, in coordinated universal time (UTC), that the directory was created. - /// The transaction. - /// The directory for which to set the creation date and time information. - /// A containing the value to set for the creation date and time of . This value is expressed in UTC time. - [SecurityCritical] - public static void SetCreationTimeUtcTransacted(KernelTransaction transaction, string path, DateTime creationTimeUtc) - { - File.SetFsoDateTimeCore(true, transaction, path, creationTimeUtc, null, null, false, PathFormat.RelativePath); - } - - /// [AlphaFS] Sets the date and time, in coordinated universal time (UTC), that the directory was created. - /// The transaction. - /// The directory for which to set the creation date and time information. - /// A containing the value to set for the creation date and time of . This value is expressed in UTC time. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static void SetCreationTimeUtcTransacted(KernelTransaction transaction, string path, DateTime creationTimeUtc, PathFormat pathFormat) - { - File.SetFsoDateTimeCore(true, transaction, path, creationTimeUtc, null, null, false, pathFormat); - } - - /// [AlphaFS] Sets the date and time, in coordinated universal time (UTC), that the directory was created. - /// The transaction. - /// The directory for which to set the creation date and time information. - /// A containing the value to set for the creation date and time of . This value is expressed in UTC time. - /// If , the date and time information will apply to the reparse point (symlink or junction) and not the file or directory linked to. No effect if does not refer to a reparse point. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static void SetCreationTimeUtcTransacted(KernelTransaction transaction, string path, DateTime creationTimeUtc, bool modifyReparsePoint, PathFormat pathFormat) - { - File.SetFsoDateTimeCore(true, transaction, path, creationTimeUtc, null, null, modifyReparsePoint, pathFormat); - } - - #endregion // Transactional - } -} diff --git a/AlphaFS/Filesystem/Directory Class/Directory.SetLastAccessTime.cs b/AlphaFS/Filesystem/Directory Class/Directory.SetLastAccessTime.cs deleted file mode 100644 index 998ef00..0000000 --- a/AlphaFS/Filesystem/Directory Class/Directory.SetLastAccessTime.cs +++ /dev/null @@ -1,169 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System; -using System.Security; - -namespace Alphaleonis.Win32.Filesystem -{ - partial class Directory - { - #region .NET - - /// Sets the date and time that the specified directory was last accessed. - /// The file for which to set the access date and time information. - /// A containing the value to set for the last access date and time of . This value is expressed in local time. - [SecurityCritical] - public static void SetLastAccessTime(string path, DateTime lastAccessTime) - { - File.SetFsoDateTimeCore(true, null, path, null, lastAccessTime.ToUniversalTime(), null, false, PathFormat.RelativePath); - } - - - - /// Sets the date and time, in coordinated universal time (UTC), that the specified directory was last accessed. - /// The directory for which to set the access date and time information. - /// A containing the value to set for the last access date and time of . This value is expressed in UTC time. - [SecurityCritical] - public static void SetLastAccessTimeUtc(string path, DateTime lastAccessTimeUtc) - { - File.SetFsoDateTimeCore(true, null, path, null, lastAccessTimeUtc, null, false, PathFormat.RelativePath); - } - - #endregion // .NET - - /// [AlphaFS] Sets the date and time that the specified directory was last accessed. - /// The file for which to set the access date and time information. - /// A containing the value to set for the last access date and time of . This value is expressed in local time. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static void SetLastAccessTime(string path, DateTime lastAccessTime, PathFormat pathFormat) - { - File.SetFsoDateTimeCore(true, null, path, null, lastAccessTime.ToUniversalTime(), null, false, pathFormat); - } - - /// [AlphaFS] Sets the date and time that the specified directory was last accessed. - /// The file for which to set the access date and time information. - /// A containing the value to set for the last access date and time of . This value is expressed in local time. - /// If , the date and time information will apply to the reparse point (symlink or junction) and not the file or directory linked to. No effect if does not refer to a reparse point. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static void SetLastAccessTime(string path, DateTime lastAccessTime, bool modifyReparsePoint, PathFormat pathFormat) - { - File.SetFsoDateTimeCore(true, null, path, null, lastAccessTime.ToUniversalTime(), null, modifyReparsePoint, pathFormat); - } - - - - /// [AlphaFS] Sets the date and time, in coordinated universal time (UTC), that the specified directory was last accessed. - /// The directory for which to set the access date and time information. - /// A containing the value to set for the last access date and time of . This value is expressed in UTC time. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static void SetLastAccessTimeUtc(string path, DateTime lastAccessTimeUtc, PathFormat pathFormat) - { - File.SetFsoDateTimeCore(true, null, path, null, lastAccessTimeUtc, null, false, pathFormat); - } - - /// [AlphaFS] Sets the date and time, in coordinated universal time (UTC), that the specified directory was last accessed. - /// The directory for which to set the access date and time information. - /// A containing the value to set for the last access date and time of . This value is expressed in UTC time. - /// If , the date and time information will apply to the reparse point (symlink or junction) and not the file or directory linked to. No effect if does not refer to a reparse point. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static void SetLastAccessTimeUtc(string path, DateTime lastAccessTimeUtc, bool modifyReparsePoint, PathFormat pathFormat) - { - File.SetFsoDateTimeCore(true, null, path, null, lastAccessTimeUtc, null, modifyReparsePoint, pathFormat); - } - - #region Transactional - - /// [AlphaFS] Sets the date and time that the specified directory was last accessed. - /// The transaction. - /// The directory for which to set the access date and time information. - /// A containing the value to set for the last access date and time of . This value is expressed in local time. - [SecurityCritical] - public static void SetLastAccessTimeTransacted(KernelTransaction transaction, string path, DateTime lastAccessTime) - { - File.SetFsoDateTimeCore(true, transaction, path, null, lastAccessTime.ToUniversalTime(), null, false, PathFormat.RelativePath); - } - - /// [AlphaFS] Sets the date and time that the specified directory was last accessed. - /// The transaction. - /// The directory for which to set the access date and time information. - /// A containing the value to set for the last access date and time of . This value is expressed in local time. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static void SetLastAccessTimeTransacted(KernelTransaction transaction, string path, DateTime lastAccessTime, PathFormat pathFormat) - { - File.SetFsoDateTimeCore(true, transaction, path, null, lastAccessTime.ToUniversalTime(), null, false, pathFormat); - } - - /// [AlphaFS] Sets the date and time that the specified directory was last accessed. - /// The transaction. - /// The directory for which to set the access date and time information. - /// A containing the value to set for the last access date and time of . This value is expressed in local time. - /// If , the date and time information will apply to the reparse point (symlink or junction) and not the file or directory linked to. No effect if does not refer to a reparse point. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static void SetLastAccessTimeTransacted(KernelTransaction transaction, string path, DateTime lastAccessTime, bool modifyReparsePoint, PathFormat pathFormat) - { - File.SetFsoDateTimeCore(true, transaction, path, null, lastAccessTime.ToUniversalTime(), null, modifyReparsePoint, pathFormat); - } - - - - /// [AlphaFS] Sets the date and time, in coordinated universal time (UTC), that the specified directory was last accessed. - /// The transaction. - /// The directory for which to set the access date and time information. - /// A containing the value to set for the last access date and time of . This value is expressed in UTC time. - [SecurityCritical] - public static void SetLastAccessTimeUtcTransacted(KernelTransaction transaction, string path, DateTime lastAccessTimeUtc) - { - File.SetFsoDateTimeCore(true, transaction, path, null, lastAccessTimeUtc, null, false, PathFormat.RelativePath); - } - - /// [AlphaFS] Sets the date and time, in coordinated universal time (UTC), that the specified directory was last accessed. - /// The transaction. - /// The directory for which to set the access date and time information. - /// A containing the value to set for the last access date and time of . This value is expressed in UTC time. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static void SetLastAccessTimeUtcTransacted(KernelTransaction transaction, string path, DateTime lastAccessTimeUtc, PathFormat pathFormat) - { - File.SetFsoDateTimeCore(true, transaction, path, null, lastAccessTimeUtc, null, false, pathFormat); - } - - /// [AlphaFS] Sets the date and time, in coordinated universal time (UTC), that the specified directory was last accessed. - /// The transaction. - /// The directory for which to set the access date and time information. - /// A containing the value to set for the last access date and time of . This value is expressed in UTC time. - /// If , the date and time information will apply to the reparse point (symlink or junction) and not the file or directory linked to. No effect if does not refer to a reparse point. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static void SetLastAccessTimeUtcTransacted(KernelTransaction transaction, string path, DateTime lastAccessTimeUtc, bool modifyReparsePoint, PathFormat pathFormat) - { - File.SetFsoDateTimeCore(true, transaction, path, null, lastAccessTimeUtc, null, modifyReparsePoint, pathFormat); - } - - #endregion // Transactional - } -} diff --git a/AlphaFS/Filesystem/Directory Class/Directory.SetLastWriteTime.cs b/AlphaFS/Filesystem/Directory Class/Directory.SetLastWriteTime.cs deleted file mode 100644 index 2211921..0000000 --- a/AlphaFS/Filesystem/Directory Class/Directory.SetLastWriteTime.cs +++ /dev/null @@ -1,167 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System; -using System.Security; - -namespace Alphaleonis.Win32.Filesystem -{ - partial class Directory - { - #region .NET - - /// Sets the date and time that the specified directory was last written to. - /// The directory for which to set the date and time information. - /// A containing the value to set for the last write date and time of . This value is expressed in local time. - [SecurityCritical] - public static void SetLastWriteTime(string path, DateTime lastWriteTime) - { - File.SetFsoDateTimeCore(true, null, path, null, null, lastWriteTime.ToUniversalTime(), false, PathFormat.RelativePath); - } - - - - /// Sets the date and time, in coordinated universal time (UTC), that the specified directory was last written to. - /// The directory for which to set the date and time information. - /// A containing the value to set for the last write date and time of . This value is expressed in UTC time. - [SecurityCritical] - public static void SetLastWriteTimeUtc(string path, DateTime lastWriteTimeUtc) - { - File.SetFsoDateTimeCore(true, null, path, null, null, lastWriteTimeUtc, false, PathFormat.RelativePath); - } - - #endregion // .NET - - /// [AlphaFS] Sets the date and time that the specified directory was last written to. - /// The directory for which to set the date and time information. - /// A containing the value to set for the last write date and time of . This value is expressed in local time. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static void SetLastWriteTime(string path, DateTime lastWriteTime, PathFormat pathFormat) - { - File.SetFsoDateTimeCore(true, null, path, null, null, lastWriteTime.ToUniversalTime(), false, pathFormat); - } - - /// [AlphaFS] Sets the date and time that the specified directory was last written to. - /// The directory for which to set the date and time information. - /// A containing the value to set for the last write date and time of . This value is expressed in local time. - /// If , the date and time information will apply to the reparse point (symlink or junction) and not the file or directory linked to. No effect if does not refer to a reparse point. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static void SetLastWriteTime(string path, DateTime lastWriteTime, bool modifyReparsePoint, PathFormat pathFormat) - { - File.SetFsoDateTimeCore(true, null, path, null, null, lastWriteTime.ToUniversalTime(), modifyReparsePoint, pathFormat); - } - - /// [AlphaFS] Sets the date and time, in coordinated universal time (UTC), that the specified directory was last written to. - /// The directory for which to set the date and time information. - /// A containing the value to set for the last write date and time of . This value is expressed in UTC time. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static void SetLastWriteTimeUtc(string path, DateTime lastWriteTimeUtc, PathFormat pathFormat) - { - File.SetFsoDateTimeCore(true, null, path, null, null, lastWriteTimeUtc, false, pathFormat); - } - - /// [AlphaFS] Sets the date and time, in coordinated universal time (UTC), that the specified directory was last written to. - /// The directory for which to set the date and time information. - /// A containing the value to set for the last write date and time of . This value is expressed in UTC time. - /// If , the date and time information will apply to the reparse point (symlink or junction) and not the file or directory linked to. No effect if does not refer to a reparse point. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static void SetLastWriteTimeUtc(string path, DateTime lastWriteTimeUtc, bool modifyReparsePoint, PathFormat pathFormat) - { - File.SetFsoDateTimeCore(true, null, path, null, null, lastWriteTimeUtc, modifyReparsePoint, pathFormat); - } - - #region Transactional - - /// [AlphaFS] Sets the date and time that the specified directory was last written to. - /// The transaction. - /// The directory for which to set the date and time information. - /// A containing the value to set for the last write date and time of . This value is expressed in local time. - [SecurityCritical] - public static void SetLastWriteTimeTransacted(KernelTransaction transaction, string path, DateTime lastWriteTime) - { - File.SetFsoDateTimeCore(true, transaction, path, null, null, lastWriteTime.ToUniversalTime(), false, PathFormat.RelativePath); - } - - /// [AlphaFS] Sets the date and time that the specified directory was last written to. - /// The transaction. - /// The directory for which to set the date and time information. - /// A containing the value to set for the last write date and time of . This value is expressed in local time. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static void SetLastWriteTimeTransacted(KernelTransaction transaction, string path, DateTime lastWriteTime, PathFormat pathFormat) - { - File.SetFsoDateTimeCore(true, transaction, path, null, null, lastWriteTime.ToUniversalTime(), false, pathFormat); - } - - /// [AlphaFS] Sets the date and time that the specified directory was last written to. - /// The transaction. - /// The directory for which to set the date and time information. - /// A containing the value to set for the last write date and time of . This value is expressed in local time. - /// If , the date and time information will apply to the reparse point (symlink or junction) and not the file or directory linked to. No effect if does not refer to a reparse point. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static void SetLastWriteTimeTransacted(KernelTransaction transaction, string path, DateTime lastWriteTime, bool modifyReparsePoint, PathFormat pathFormat) - { - File.SetFsoDateTimeCore(true, transaction, path, null, null, lastWriteTime.ToUniversalTime(), modifyReparsePoint, pathFormat); - } - - - - /// [AlphaFS] Sets the date and time, in coordinated universal time (UTC), that the specified directory was last written to. - /// The transaction. - /// The directory for which to set the date and time information. - /// A containing the value to set for the last write date and time of . This value is expressed in UTC time. - [SecurityCritical] - public static void SetLastWriteTimeUtcTransacted(KernelTransaction transaction, string path, DateTime lastWriteTimeUtc) - { - File.SetFsoDateTimeCore(true, transaction, path, null, null, lastWriteTimeUtc, false, PathFormat.RelativePath); - } - - /// [AlphaFS] Sets the date and time, in coordinated universal time (UTC), that the specified directory was last written to. - /// The transaction. - /// The directory for which to set the date and time information. - /// A containing the value to set for the last write date and time of . This value is expressed in UTC time. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static void SetLastWriteTimeUtcTransacted(KernelTransaction transaction, string path, DateTime lastWriteTimeUtc, PathFormat pathFormat) - { - File.SetFsoDateTimeCore(true, transaction, path, null, null, lastWriteTimeUtc, false, pathFormat); - } - - /// [AlphaFS] Sets the date and time, in coordinated universal time (UTC), that the specified directory was last written to. - /// The transaction. - /// The directory for which to set the date and time information. - /// A containing the value to set for the last write date and time of . This value is expressed in UTC time. - /// If , the date and time information will apply to the reparse point (symlink or junction) and not the file or directory linked to. No effect if does not refer to a reparse point. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static void SetLastWriteTimeUtcTransacted(KernelTransaction transaction, string path, DateTime lastWriteTimeUtc, bool modifyReparsePoint, PathFormat pathFormat) - { - File.SetFsoDateTimeCore(true, transaction, path, null, null, lastWriteTimeUtc, modifyReparsePoint, pathFormat); - } - - #endregion // Transactional - } -} diff --git a/AlphaFS/Filesystem/Directory Class/Directory.SetTimestamps.cs b/AlphaFS/Filesystem/Directory Class/Directory.SetTimestamps.cs deleted file mode 100644 index a3711ca..0000000 --- a/AlphaFS/Filesystem/Directory Class/Directory.SetTimestamps.cs +++ /dev/null @@ -1,187 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System; -using System.Security; - -namespace Alphaleonis.Win32.Filesystem -{ - partial class Directory - { - /// [AlphaFS] Sets all the date and time stamps for the specified directory, at once. - /// The directory for which to set the dates and times information. - /// A containing the value to set for the creation date and time of . This value is expressed in local time. - /// A containing the value to set for the last access date and time of . This value is expressed in local time. - /// A containing the value to set for the last write date and time of . This value is expressed in local time. - [SecurityCritical] - public static void SetTimestamps(string path, DateTime creationTime, DateTime lastAccessTime, DateTime lastWriteTime) - { - File.SetFsoDateTimeCore(true, null, path, creationTime.ToUniversalTime(), lastAccessTime.ToUniversalTime(), lastWriteTime.ToUniversalTime(), false, PathFormat.RelativePath); - } - - /// [AlphaFS] Sets all the date and time stamps for the specified directory, at once. - /// The directory for which to set the dates and times information. - /// A containing the value to set for the creation date and time of . This value is expressed in local time. - /// A containing the value to set for the last access date and time of . This value is expressed in local time. - /// A containing the value to set for the last write date and time of . This value is expressed in local time. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static void SetTimestamps(string path, DateTime creationTime, DateTime lastAccessTime, DateTime lastWriteTime, PathFormat pathFormat) - { - File.SetFsoDateTimeCore(true, null, path, creationTime.ToUniversalTime(), lastAccessTime.ToUniversalTime(), lastWriteTime.ToUniversalTime(), false, pathFormat); - } - - /// [AlphaFS] Sets all the date and time stamps for the specified directory, at once. - /// The directory for which to set the dates and times information. - /// A containing the value to set for the creation date and time of . This value is expressed in local time. - /// A containing the value to set for the last access date and time of . This value is expressed in local time. - /// A containing the value to set for the last write date and time of . This value is expressed in local time. - /// If , the date and time information will apply to the reparse point (symlink or junction) and not the file or directory linked to. No effect if does not refer to a reparse point. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static void SetTimestamps(string path, DateTime creationTime, DateTime lastAccessTime, DateTime lastWriteTime, bool modifyReparsePoint, PathFormat pathFormat) - { - File.SetFsoDateTimeCore(true, null, path, creationTime.ToUniversalTime(), lastAccessTime.ToUniversalTime(), lastWriteTime.ToUniversalTime(), modifyReparsePoint, pathFormat); - } - - - - /// [AlphaFS] Sets all the date and time stamps, in coordinated universal time (UTC), for the specified directory, at once. - /// The directory for which to set the dates and times information. - /// A containing the value to set for the creation date and time of . This value is expressed in UTC time. - /// A containing the value to set for the last access date and time of . This value is expressed in UTC time. - /// A containing the value to set for the last write date and time of . This value is expressed in UTC time. - [SecurityCritical] - public static void SetTimestampsUtc(string path, DateTime creationTimeUtc, DateTime lastAccessTimeUtc, DateTime lastWriteTimeUtc) - { - File.SetFsoDateTimeCore(true, null, path, creationTimeUtc, lastAccessTimeUtc, lastWriteTimeUtc, false, PathFormat.RelativePath); - } - - /// [AlphaFS] Sets all the date and time stamps, in coordinated universal time (UTC), for the specified directory, at once. - /// The directory for which to set the dates and times information. - /// A containing the value to set for the creation date and time of . This value is expressed in UTC time. - /// A containing the value to set for the last access date and time of . This value is expressed in UTC time. - /// A containing the value to set for the last write date and time of . This value is expressed in UTC time. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static void SetTimestampsUtc(string path, DateTime creationTimeUtc, DateTime lastAccessTimeUtc, DateTime lastWriteTimeUtc, PathFormat pathFormat) - { - File.SetFsoDateTimeCore(true, null, path, creationTimeUtc, lastAccessTimeUtc, lastWriteTimeUtc, false, pathFormat); - } - - /// [AlphaFS] Sets all the date and time stamps, in coordinated universal time (UTC), for the specified directory, at once. - /// The directory for which to set the dates and times information. - /// A containing the value to set for the creation date and time of . This value is expressed in UTC time. - /// A containing the value to set for the last access date and time of . This value is expressed in UTC time. - /// A containing the value to set for the last write date and time of . This value is expressed in UTC time. - /// If , the date and time information will apply to the reparse point (symlink or junction) and not the file or directory linked to. No effect if does not refer to a reparse point. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static void SetTimestampsUtc(string path, DateTime creationTimeUtc, DateTime lastAccessTimeUtc, DateTime lastWriteTimeUtc, bool modifyReparsePoint, PathFormat pathFormat) - { - File.SetFsoDateTimeCore(true, null, path, creationTimeUtc, lastAccessTimeUtc, lastWriteTimeUtc, modifyReparsePoint, pathFormat); - } - - #region Transactional - - /// [AlphaFS] Sets all the date and time stamps for the specified directory, at once. - /// The transaction. - /// The directory for which to set the dates and times information. - /// A containing the value to set for the creation date and time of . This value is expressed in local time. - /// A containing the value to set for the last access date and time of . This value is expressed in local time. - /// A containing the value to set for the last write date and time of . This value is expressed in local time. - [SecurityCritical] - public static void SetTimestampsTransacted(KernelTransaction transaction, string path, DateTime creationTime, DateTime lastAccessTime, DateTime lastWriteTime) - { - File.SetFsoDateTimeCore(true, transaction, path, creationTime.ToUniversalTime(), lastAccessTime.ToUniversalTime(), lastWriteTime.ToUniversalTime(), false, PathFormat.RelativePath); - } - - /// [AlphaFS] Sets all the date and time stamps for the specified directory, at once. - /// The transaction. - /// The directory for which to set the dates and times information. - /// A containing the value to set for the creation date and time of . This value is expressed in local time. - /// A containing the value to set for the last access date and time of . This value is expressed in local time. - /// A containing the value to set for the last write date and time of . This value is expressed in local time. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static void SetTimestampsTransacted(KernelTransaction transaction, string path, DateTime creationTime, DateTime lastAccessTime, DateTime lastWriteTime, PathFormat pathFormat) - { - File.SetFsoDateTimeCore(true, transaction, path, creationTime.ToUniversalTime(), lastAccessTime.ToUniversalTime(), lastWriteTime.ToUniversalTime(), false, pathFormat); - } - - /// [AlphaFS] Sets all the date and time stamps for the specified directory, at once. - /// The transaction. - /// The directory for which to set the dates and times information. - /// A containing the value to set for the creation date and time of . This value is expressed in local time. - /// A containing the value to set for the last access date and time of . This value is expressed in local time. - /// A containing the value to set for the last write date and time of . This value is expressed in local time. - /// If , the date and time information will apply to the reparse point (symlink or junction) and not the file or directory linked to. No effect if does not refer to a reparse point. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static void SetTimestampsTransacted(KernelTransaction transaction, string path, DateTime creationTime, DateTime lastAccessTime, DateTime lastWriteTime, bool modifyReparsePoint, PathFormat pathFormat) - { - File.SetFsoDateTimeCore(true, transaction, path, creationTime.ToUniversalTime(), lastAccessTime.ToUniversalTime(), lastWriteTime.ToUniversalTime(), modifyReparsePoint, pathFormat); - } - - - - /// [AlphaFS] Sets all the date and time stamps, in coordinated universal time (UTC), for the specified directory, at once. - /// The transaction. - /// The directory for which to set the dates and times information. - /// A containing the value to set for the creation date and time of . This value is expressed in UTC time. - /// A containing the value to set for the last access date and time of . This value is expressed in UTC time. - /// A containing the value to set for the last write date and time of . This value is expressed in UTC time. - [SecurityCritical] - public static void SetTimestampsUtcTransacted(KernelTransaction transaction, string path, DateTime creationTimeUtc, DateTime lastAccessTimeUtc, DateTime lastWriteTimeUtc) - { - File.SetFsoDateTimeCore(true, transaction, path, creationTimeUtc, lastAccessTimeUtc, lastWriteTimeUtc, false, PathFormat.RelativePath); - } - - /// [AlphaFS] Sets all the date and time stamps, in coordinated universal time (UTC), for the specified directory, at once. - /// The transaction. - /// The directory for which to set the dates and times information. - /// A containing the value to set for the creation date and time of . This value is expressed in UTC time. - /// A containing the value to set for the last access date and time of . This value is expressed in UTC time. - /// A containing the value to set for the last write date and time of . This value is expressed in UTC time. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static void SetTimestampsUtcTransacted(KernelTransaction transaction, string path, DateTime creationTimeUtc, DateTime lastAccessTimeUtc, DateTime lastWriteTimeUtc, PathFormat pathFormat) - { - File.SetFsoDateTimeCore(true, transaction, path, creationTimeUtc, lastAccessTimeUtc, lastWriteTimeUtc, false, pathFormat); - } - - /// [AlphaFS] Sets all the date and time stamps, in coordinated universal time (UTC), for the specified directory, at once. - /// The transaction. - /// The directory for which to set the dates and times information. - /// A containing the value to set for the creation date and time of . This value is expressed in UTC time. - /// A containing the value to set for the last access date and time of . This value is expressed in UTC time. - /// A containing the value to set for the last write date and time of . This value is expressed in UTC time. - /// If , the date and time information will apply to the reparse point (symlink or junction) and not the file or directory linked to. No effect if does not refer to a reparse point. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static void SetTimestampsUtcTransacted(KernelTransaction transaction, string path, DateTime creationTimeUtc, DateTime lastAccessTimeUtc, DateTime lastWriteTimeUtc, bool modifyReparsePoint, PathFormat pathFormat) - { - File.SetFsoDateTimeCore(true, transaction, path, creationTimeUtc, lastAccessTimeUtc, lastWriteTimeUtc, modifyReparsePoint, pathFormat); - } - - #endregion // Transactional - } -} diff --git a/AlphaFS/Filesystem/Directory Class/Directory.TransferTimestamps.cs b/AlphaFS/Filesystem/Directory Class/Directory.TransferTimestamps.cs deleted file mode 100644 index 069f9c9..0000000 --- a/AlphaFS/Filesystem/Directory Class/Directory.TransferTimestamps.cs +++ /dev/null @@ -1,76 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System.Security; - -namespace Alphaleonis.Win32.Filesystem -{ - partial class Directory - { - /// [AlphaFS] Transfers the date and time stamps for the specified directories. - /// This method uses BackupSemantics flag to get Timestamp changed for directories. - /// The source directory to get the date and time stamps from. - /// The destination directory to set the date and time stamps. - [SecurityCritical] - public static void TransferTimestamps(string sourcePath, string destinationPath) - { - File.TransferTimestampsCore(true, null, sourcePath, destinationPath, PathFormat.RelativePath); - } - - /// [AlphaFS] Transfers the date and time stamps for the specified directories. - /// This method uses BackupSemantics flag to get Timestamp changed for directories. - /// The source directory to get the date and time stamps from. - /// The destination directory to set the date and time stamps. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static void TransferTimestamps(string sourcePath, string destinationPath, PathFormat pathFormat) - { - File.TransferTimestampsCore(true, null, sourcePath, destinationPath, pathFormat); - } - - #region Transactional - - /// [AlphaFS] Transfers the date and time stamps for the specified directories. - /// This method uses BackupSemantics flag to get Timestamp changed for directories. - /// The transaction. - /// The source directory to get the date and time stamps from. - /// The destination directory to set the date and time stamps. - [SecurityCritical] - public static void TransferTimestampsTransacted(KernelTransaction transaction, string sourcePath, string destinationPath) - { - File.TransferTimestampsCore(true, transaction, sourcePath, destinationPath, PathFormat.RelativePath); - } - - /// [AlphaFS] Transfers the date and time stamps for the specified directories. - /// This method uses BackupSemantics flag to get Timestamp changed for directories. - /// The transaction. - /// The source directory to get the date and time stamps from. - /// The destination directory to set the date and time stamps. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static void TransferTimestampsTransacted(KernelTransaction transaction, string sourcePath, string destinationPath, PathFormat pathFormat) - { - File.TransferTimestampsCore(true, transaction, sourcePath, destinationPath, pathFormat); - } - - #endregion // Transactional - } -} diff --git a/AlphaFS/Filesystem/Directory Class/Directory.cs b/AlphaFS/Filesystem/Directory Class/Directory.cs deleted file mode 100644 index 70e6604..0000000 --- a/AlphaFS/Filesystem/Directory Class/Directory.cs +++ /dev/null @@ -1,31 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -namespace Alphaleonis.Win32.Filesystem -{ - /// Exposes static methods for creating, moving, and enumerating through directories and subdirectories. - /// This class cannot be inherited. - /// - public static partial class Directory - { - // This file only exists for the documentation. - } -} \ No newline at end of file diff --git a/AlphaFS/Filesystem/DirectoryInfo Class/DirectoryInfo.Compression.cs b/AlphaFS/Filesystem/DirectoryInfo Class/DirectoryInfo.Compression.cs deleted file mode 100644 index 0070b8d..0000000 --- a/AlphaFS/Filesystem/DirectoryInfo Class/DirectoryInfo.Compression.cs +++ /dev/null @@ -1,128 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System; -using System.IO; -using System.Security; - -namespace Alphaleonis.Win32.Filesystem -{ - partial class DirectoryInfo - { - #region AlphaFS - - #region Compress - - /// [AlphaFS] Compresses a directory using NTFS compression. - /// This will only compress the root items (non recursive). - /// - /// - /// - /// - /// - /// - [SecurityCritical] - public void Compress() - { - Directory.CompressDecompressCore(Transaction, LongFullName, Path.WildcardStarMatchAll, DirectoryEnumerationOptions.FilesAndFolders, true, PathFormat.LongFullPath); - } - - /// [AlphaFS] Compresses a directory using NTFS compression. - /// - /// - /// - /// - /// - /// - /// flags that specify how the directory is to be enumerated. - [SecurityCritical] - public void Compress(DirectoryEnumerationOptions options) - { - Directory.CompressDecompressCore(Transaction, LongFullName, Path.WildcardStarMatchAll, options, true, PathFormat.LongFullPath); - } - - #endregion // Compress - - #region Decompress - - /// [AlphaFS] Decompresses an NTFS compressed directory. - /// This will only decompress the root items (non recursive). - /// - /// - /// - /// - /// - /// - [SecurityCritical] - public void Decompress() - { - Directory.CompressDecompressCore(Transaction, LongFullName, Path.WildcardStarMatchAll, DirectoryEnumerationOptions.FilesAndFolders, false, PathFormat.LongFullPath); - } - - /// [AlphaFS] Decompresses an NTFS compressed directory. - /// - /// - /// - /// - /// - /// - /// flags that specify how the directory is to be enumerated. - [SecurityCritical] - public void Decompress(DirectoryEnumerationOptions options) - { - Directory.CompressDecompressCore(Transaction, LongFullName, Path.WildcardStarMatchAll, options, false, PathFormat.LongFullPath); - } - - #endregion // Decompress - - #region DisableCompression - - /// [AlphaFS] Disables compression of the specified directory and the files in it. - /// - /// This method disables the directory-compression attribute. It will not decompress the current contents of the directory. - /// However, newly created files and directories will be uncompressed. - /// - [SecurityCritical] - public void DisableCompression() - { - Device.ToggleCompressionCore(true, Transaction, LongFullName, false, PathFormat.LongFullPath); - } - - #endregion // DisableCompression - - #region EnableCompression - - /// [AlphaFS] Enables compression of the specified directory and the files in it. - /// - /// This method enables the directory-compression attribute. It will not compress the current contents of the directory. - /// However, newly created files and directories will be compressed. - /// - [SecurityCritical] - public void EnableCompression() - { - Device.ToggleCompressionCore(true, Transaction, LongFullName, true, PathFormat.LongFullPath); - } - - #endregion // EnableCompression - - #endregion // AlphaFS - } -} diff --git a/AlphaFS/Filesystem/DirectoryInfo Class/DirectoryInfo.CopyToMoveTo.cs b/AlphaFS/Filesystem/DirectoryInfo Class/DirectoryInfo.CopyToMoveTo.cs deleted file mode 100644 index f58feda..0000000 --- a/AlphaFS/Filesystem/DirectoryInfo Class/DirectoryInfo.CopyToMoveTo.cs +++ /dev/null @@ -1,459 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System; -using System.IO; -using System.Security; - -namespace Alphaleonis.Win32.Filesystem -{ - partial class DirectoryInfo - { - #region CopyTo - - // .NET: Directory class does not contain the Copy() method. - // Mimic .NET File.Copy() methods. - - /// [AlphaFS] Copies a instance and its contents to a new path. - /// - /// Use this method to prevent overwriting of an existing directory by default. - /// Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - /// If two directories have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - /// - /// - /// A new instance if the directory was completely copied. - /// - /// - /// - /// - /// - /// - /// The destination directory path. - [SecurityCritical] - public DirectoryInfo CopyTo(string destinationPath) - { - string destinationPathLp; - CopyToMoveToCore(destinationPath, CopyOptions.FailIfExists, null, null, null, out destinationPathLp, PathFormat.RelativePath); - return new DirectoryInfo(Transaction, destinationPathLp, PathFormat.LongFullPath); - } - - /// [AlphaFS] Copies a instance and its contents to a new path. - /// - /// Use this method to prevent overwriting of an existing directory by default. - /// Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - /// If two directories have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - /// - /// - /// A new instance if the directory was completely copied. - /// - /// - /// - /// - /// - /// - /// The destination directory path. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public DirectoryInfo CopyTo(string destinationPath, PathFormat pathFormat) - { - string destinationPathLp; - CopyToMoveToCore(destinationPath, CopyOptions.FailIfExists, null, null, null, out destinationPathLp, pathFormat); - return new DirectoryInfo(Transaction, destinationPathLp, PathFormat.LongFullPath); - } - - - - /// [AlphaFS] Copies an existing directory to a new directory, allowing the overwriting of an existing directory, can be specified. - /// - /// Option is recommended for very large file transfers. - /// Use this method to allow or prevent overwriting of an existing directory. - /// Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - /// If two directories have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - /// - /// - /// - /// Returns a new directory, or an overwrite of an existing directory if is not . - /// If the directory exists and contains , an is thrown. - /// - /// - /// - /// - /// - /// - /// - /// The destination directory path. - /// that specify how the directory is to be copied. This parameter can be . - [SecurityCritical] - public DirectoryInfo CopyTo(string destinationPath, CopyOptions copyOptions) - { - string destinationPathLp; - CopyToMoveToCore(destinationPath, copyOptions, null, null, null, out destinationPathLp, PathFormat.RelativePath); - return new DirectoryInfo(Transaction, destinationPathLp, PathFormat.LongFullPath); - } - - /// [AlphaFS] Copies an existing directory to a new directory, allowing the overwriting of an existing directory, can be specified. - /// - /// Option is recommended for very large file transfers. - /// Use this method to allow or prevent overwriting of an existing directory. - /// Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - /// If two directories have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - /// - /// - /// - /// Returns a new directory, or an overwrite of an existing directory if is not . - /// If the directory exists and contains , an is thrown. - /// - /// - /// - /// - /// - /// - /// - /// The destination directory path. - /// that specify how the directory is to be copied. This parameter can be . - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public DirectoryInfo CopyTo(string destinationPath, CopyOptions copyOptions, PathFormat pathFormat) - { - string destinationPathLp; - CopyToMoveToCore(destinationPath, copyOptions, null, null, null, out destinationPathLp, pathFormat); - return new DirectoryInfo(Transaction, destinationPathLp, PathFormat.LongFullPath); - } - - - - /// [AlphaFS] Copies an existing directory to a new directory, allowing the overwriting of an existing directory, can be specified. - /// and the possibility of notifying the application of its progress through a callback function. - /// - /// Option is recommended for very large file transfers. - /// Use this method to allow or prevent overwriting of an existing directory. - /// Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - /// If two directories have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - /// - /// - /// A class with details of the Copy action. - /// - /// - /// - /// - /// - /// - /// The destination directory path. - /// that specify how the directory is to be copied. This parameter can be . - /// A callback function that is called each time another portion of the directory has been copied. This parameter can be . - /// The argument to be passed to the callback function. This parameter can be . - [SecurityCritical] - public CopyMoveResult CopyTo(string destinationPath, CopyOptions copyOptions, CopyMoveProgressRoutine progressHandler, object userProgressData) - { - string destinationPathLp; - var cmr = CopyToMoveToCore(destinationPath, copyOptions, null, progressHandler, userProgressData, out destinationPathLp, PathFormat.RelativePath); - CopyToMoveToCoreRefresh(destinationPath, destinationPathLp); - return cmr; - } - - /// [AlphaFS] Copies an existing directory to a new directory, allowing the overwriting of an existing directory, can be specified. - /// and the possibility of notifying the application of its progress through a callback function. - /// - /// Option is recommended for very large file transfers. - /// Use this method to allow or prevent overwriting of an existing directory. - /// Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - /// If two directories have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - /// - /// - /// A class with details of the Copy action. - /// - /// - /// - /// - /// - /// - /// The destination directory path. - /// that specify how the directory is to be copied. This parameter can be . - /// A callback function that is called each time another portion of the directory has been copied. This parameter can be . - /// The argument to be passed to the callback function. This parameter can be . - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public CopyMoveResult CopyTo(string destinationPath, CopyOptions copyOptions, CopyMoveProgressRoutine progressHandler, object userProgressData, PathFormat pathFormat) - { - string destinationPathLp; - var cmr = CopyToMoveToCore(destinationPath, copyOptions, null, progressHandler, userProgressData, out destinationPathLp, pathFormat); - CopyToMoveToCoreRefresh(destinationPath, destinationPathLp); - return cmr; - } - - #endregion // CopyTo - - - #region MoveTo - - #region .NET - - /// Moves a instance and its contents to a new path. - /// - /// Use this method to prevent overwriting of an existing directory by default. - /// This method does not work across disk volumes. - /// Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - /// If two directories have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - /// - /// - /// A class with details of the Move action. - /// - /// - /// - /// - /// - /// - /// - /// The name and path to which to move this directory. - /// The destination cannot be another disk volume or a directory with the identical name. - /// It can be an existing directory to which you want to add this directory as a subdirectory. - /// - [SecurityCritical] - public CopyMoveResult MoveTo(string destinationPath) - { - string destinationPathLp; - var copyMoveResult = CopyToMoveToCore(destinationPath, null, MoveOptions.None, null, null, out destinationPathLp, PathFormat.RelativePath); - CopyToMoveToCoreRefresh(destinationPath, destinationPathLp); - - return copyMoveResult; - } - - #endregion // .NET - - - #region AlphaFS - - /// Moves a instance and its contents to a new path. - /// - /// Use this method to prevent overwriting of an existing directory by default. - /// This method does not work across disk volumes. - /// Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - /// If two directories have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - /// - /// - /// A new instance if the directory was completely moved. - /// - /// - /// - /// - /// - /// - /// - /// The name and path to which to move this directory. - /// The destination cannot be another disk volume or a directory with the identical name. - /// It can be an existing directory to which you want to add this directory as a subdirectory. - /// - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public DirectoryInfo MoveTo(string destinationPath, PathFormat pathFormat) - { - string destinationPathLp; - CopyToMoveToCore(destinationPath, null, MoveOptions.None, null, null, out destinationPathLp, pathFormat); - return new DirectoryInfo(Transaction, destinationPathLp, PathFormat.LongFullPath); - } - - - - /// [AlphaFS] Moves a instance and its contents to a new path, can be specified. - /// - /// Use this method to allow or prevent overwriting of an existing directory. - /// This method does not work across disk volumes unless contains . - /// Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - /// If two directories have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - /// - /// - /// A new instance if the directory was completely moved. - /// - /// - /// - /// - /// - /// - /// - /// The name and path to which to move this directory. - /// The destination cannot be another disk volume unless contains , or a directory with the identical name. - /// It can be an existing directory to which you want to add this directory as a subdirectory. - /// - /// that specify how the directory is to be moved. This parameter can be . - [SecurityCritical] - public DirectoryInfo MoveTo(string destinationPath, MoveOptions moveOptions) - { - string destinationPathLp; - CopyToMoveToCore(destinationPath, null, moveOptions, null, null, out destinationPathLp, PathFormat.RelativePath); - return new DirectoryInfo(Transaction, destinationPathLp, PathFormat.LongFullPath); - } - - /// [AlphaFS] Moves a instance and its contents to a new path, can be specified. - /// - /// Use this method to allow or prevent overwriting of an existing directory. - /// This method does not work across disk volumes unless contains . - /// Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - /// If two directories have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - /// - /// - /// A new instance if the directory was completely moved. - /// - /// - /// - /// - /// - /// - /// - /// The name and path to which to move this directory. - /// The destination cannot be another disk volume unless contains , or a directory with the identical name. - /// It can be an existing directory to which you want to add this directory as a subdirectory. - /// - /// that specify how the directory is to be moved. This parameter can be . - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public DirectoryInfo MoveTo(string destinationPath, MoveOptions moveOptions, PathFormat pathFormat) - { - string destinationPathLp; - CopyToMoveToCore(destinationPath, null, moveOptions, null, null, out destinationPathLp, pathFormat); - return new DirectoryInfo(Transaction, destinationPathLp, PathFormat.LongFullPath); - } - - - - /// [AlphaFS] Moves a instance and its contents to a new path, can be specified, - /// and the possibility of notifying the application of its progress through a callback function. - /// - /// Use this method to allow or prevent overwriting of an existing directory. - /// This method does not work across disk volumes unless contains . - /// Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - /// If two directories have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - /// - /// - /// A class with details of the Move action. - /// - /// - /// - /// - /// - /// - /// - /// The name and path to which to move this directory. - /// The destination cannot be another disk volume unless contains , or a directory with the identical name. - /// It can be an existing directory to which you want to add this directory as a subdirectory. - /// - /// that specify how the directory is to be moved. This parameter can be . - /// A callback function that is called each time another portion of the directory has been moved. This parameter can be . - /// The argument to be passed to the callback function. This parameter can be . - [SecurityCritical] - public CopyMoveResult MoveTo(string destinationPath, MoveOptions moveOptions, CopyMoveProgressRoutine progressHandler, object userProgressData) - { - string destinationPathLp; - var cmr = CopyToMoveToCore(destinationPath, null, moveOptions, progressHandler, userProgressData, out destinationPathLp, PathFormat.RelativePath); - CopyToMoveToCoreRefresh(destinationPath, destinationPathLp); - return cmr; - } - - - - /// [AlphaFS] Moves a instance and its contents to a new path, can be specified, - /// and the possibility of notifying the application of its progress through a callback function. - /// - /// Use this method to allow or prevent overwriting of an existing directory. - /// This method does not work across disk volumes unless contains . - /// Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - /// If two directories have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - /// - /// - /// A class with details of the Move action. - /// - /// - /// - /// - /// - /// - /// - /// The name and path to which to move this directory. - /// The destination cannot be another disk volume unless contains , or a directory with the identical name. - /// It can be an existing directory to which you want to add this directory as a subdirectory. - /// - /// that specify how the directory is to be moved. This parameter can be . - /// A callback function that is called each time another portion of the directory has been moved. This parameter can be . - /// The argument to be passed to the callback function. This parameter can be . - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public CopyMoveResult MoveTo(string destinationPath, MoveOptions moveOptions, CopyMoveProgressRoutine progressHandler, object userProgressData, PathFormat pathFormat) - { - string destinationPathLp; - var cmr = CopyToMoveToCore(destinationPath, null, moveOptions, progressHandler, userProgressData, out destinationPathLp, pathFormat); - CopyToMoveToCoreRefresh(destinationPath, destinationPathLp); - return cmr; - } - - #endregion // AlphaFS - - #endregion // MoveTo - - - #region Internal Methods - - /// Copy/move a Non-/Transacted file or directory including its children to a new location, - /// or can be specified, and the possibility of notifying the application of its progress through a callback function. - /// - /// Option is recommended for very large file transfers. - /// You cannot use the Move method to overwrite an existing file, unless contains . - /// Note that if you attempt to replace a file by moving a file of the same name into that directory, you get an IOException. - /// - /// - /// A class with details of the Copy or Move action. - /// - /// - /// - /// - /// - /// - /// The destination directory path. - /// that specify how the file is to be copied. This parameter can be . - /// that specify how the file is to be moved. This parameter can be . - /// A callback function that is called each time another portion of the file has been copied. This parameter can be . - /// The argument to be passed to the callback function. This parameter can be . - /// Returns the retrieved long full path. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - private CopyMoveResult CopyToMoveToCore(string destinationPath, CopyOptions? copyOptions, MoveOptions? moveOptions, CopyMoveProgressRoutine progressHandler, object userProgressData, out string longFullPath, PathFormat pathFormat) - { - var destinationPathLp = Path.GetExtendedLengthPathCore(null, destinationPath, pathFormat, GetFullPathOptions.TrimEnd | GetFullPathOptions.RemoveTrailingDirectorySeparator | GetFullPathOptions.FullCheck); - longFullPath = destinationPathLp; - - // Returns false when CopyMoveProgressResult is PROGRESS_CANCEL or PROGRESS_STOP. - return Directory.CopyMoveCore(Transaction, LongFullName, destinationPathLp, copyOptions, moveOptions, progressHandler, userProgressData, null, PathFormat.LongFullPath); - } - - - private void CopyToMoveToCoreRefresh(string destinationPath, string destinationPathLp) - { - LongFullName = destinationPathLp; - FullPath = Path.GetRegularPathCore(destinationPathLp, GetFullPathOptions.None, false); - - OriginalPath = destinationPath; - DisplayPath = Path.GetRegularPathCore(OriginalPath, GetFullPathOptions.None, false); - - // Flush any cached information about the directory. - Reset(); - } - - #endregion // Internal Methods - } -} diff --git a/AlphaFS/Filesystem/DirectoryInfo Class/DirectoryInfo.CountFileSystemObjects.cs b/AlphaFS/Filesystem/DirectoryInfo Class/DirectoryInfo.CountFileSystemObjects.cs deleted file mode 100644 index 71b69ab..0000000 --- a/AlphaFS/Filesystem/DirectoryInfo Class/DirectoryInfo.CountFileSystemObjects.cs +++ /dev/null @@ -1,70 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System; -using System.IO; -using System.Linq; -using System.Security; - -namespace Alphaleonis.Win32.Filesystem -{ - partial class DirectoryInfo - { - #region AlphaFS - - /// [AlphaFS] Counts file system objects: files, folders or both) in a given directory. - /// The counted number of file system objects. - /// - /// - /// - /// - /// - /// - /// flags that specify how the directory is to be enumerated. - [SecurityCritical] - public long CountFileSystemObjects(DirectoryEnumerationOptions options) - { - return Directory.EnumerateFileSystemEntryInfosCore(Transaction, LongFullName, Path.WildcardStarMatchAll, options, PathFormat.LongFullPath).Count(); - } - - /// [AlphaFS] Counts file system objects: files, folders or both) in a given directory. - /// The counted number of file system objects. - /// - /// - /// - /// - /// - /// - /// - /// The search string to match against the names of directories in path. - /// This parameter can contain a combination of valid literal path and wildcard - /// ( and ) characters, but does not support regular expressions. - /// - /// flags that specify how the directory is to be enumerated. - [SecurityCritical] - public long CountFileSystemObjects(string searchPattern, DirectoryEnumerationOptions options) - { - return Directory.EnumerateFileSystemEntryInfosCore(Transaction, LongFullName, searchPattern, options, PathFormat.LongFullPath).Count(); - } - - #endregion // AlphaFS - } -} diff --git a/AlphaFS/Filesystem/DirectoryInfo Class/DirectoryInfo.Create.cs b/AlphaFS/Filesystem/DirectoryInfo Class/DirectoryInfo.Create.cs deleted file mode 100644 index dd01e8b..0000000 --- a/AlphaFS/Filesystem/DirectoryInfo Class/DirectoryInfo.Create.cs +++ /dev/null @@ -1,81 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System.Diagnostics.CodeAnalysis; -using System.Security; -using System.Security.AccessControl; - -namespace Alphaleonis.Win32.Filesystem -{ - partial class DirectoryInfo - { - #region .NET - - /// Creates a directory. - /// If the directory already exists, this method does nothing. - - [SecurityCritical] - public void Create() - { - Directory.CreateDirectoryCore(Transaction, LongFullName, null, null, false, PathFormat.LongFullPath); - } - - /// Creates a directory using a object. - /// The access control to apply to the directory. - /// If the directory already exists, this method does nothing. - - [SuppressMessage("Microsoft.Design", "CA1011:ConsiderPassingBaseTypesAsParameters")] - [SecurityCritical] - public void Create(DirectorySecurity directorySecurity) - { - Directory.CreateDirectoryCore(Transaction, LongFullName, null, directorySecurity, false, PathFormat.LongFullPath); - } - - #endregion // .NET - - #region AlphaFS - - /// [AlphaFS] Creates a directory using a object. - /// When compresses the directory. - /// If the directory already exists, this method does nothing. - - [SuppressMessage("Microsoft.Design", "CA1011:ConsiderPassingBaseTypesAsParameters")] - [SecurityCritical] - public void Create(bool compress) - { - Directory.CreateDirectoryCore(Transaction, LongFullName, null, null, compress, PathFormat.LongFullPath); - } - - /// [AlphaFS] Creates a directory using a object. - /// The access control to apply to the directory. - /// When compresses the directory. - /// If the directory already exists, this method does nothing. - - [SuppressMessage("Microsoft.Design", "CA1011:ConsiderPassingBaseTypesAsParameters")] - [SecurityCritical] - public void Create(DirectorySecurity directorySecurity, bool compress) - { - Directory.CreateDirectoryCore(Transaction, LongFullName, null, directorySecurity, compress, PathFormat.LongFullPath); - } - - #endregion // AlphaFS - } -} diff --git a/AlphaFS/Filesystem/DirectoryInfo Class/DirectoryInfo.CreateSubdirectory.cs b/AlphaFS/Filesystem/DirectoryInfo Class/DirectoryInfo.CreateSubdirectory.cs deleted file mode 100644 index 34f6ea6..0000000 --- a/AlphaFS/Filesystem/DirectoryInfo Class/DirectoryInfo.CreateSubdirectory.cs +++ /dev/null @@ -1,165 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System; -using System.Security; -using System.Security.AccessControl; - -namespace Alphaleonis.Win32.Filesystem -{ - partial class DirectoryInfo - { - #region .NET - - /// Creates a subdirectory or subdirectories on the specified path. The specified path can be relative to this instance of the class. - /// The specified path. This cannot be a different disk volume. - /// The last directory specified in . - /// - /// Any and all directories specified in path are created, unless some part of path is invalid. - /// The path parameter specifies a directory path, not a file path. - /// If the subdirectory already exists, this method does nothing. - /// - - [SecurityCritical] - public DirectoryInfo CreateSubdirectory(string path) - { - return CreateSubdirectoryCore(path, null, null, false); - } - - /// Creates a subdirectory or subdirectories on the specified path. The specified path can be relative to this instance of the class. - /// The specified path. This cannot be a different disk volume. - /// The security to apply. - /// The last directory specified in . - /// - /// Any and all directories specified in path are created, unless some part of path is invalid. - /// The path parameter specifies a directory path, not a file path. - /// If the subdirectory already exists, this method does nothing. - /// - - [SecurityCritical] - public DirectoryInfo CreateSubdirectory(string path, DirectorySecurity directorySecurity) - { - return CreateSubdirectoryCore(path, null, directorySecurity, false); - } - - #endregion // .NET - - #region AlphaFS - - /// [AlphaFS] Creates a subdirectory or subdirectories on the specified path. The specified path can be relative to this instance of the class. - /// The last directory specified in . - /// - /// Any and all directories specified in path are created, unless some part of path is invalid. - /// The path parameter specifies a directory path, not a file path. - /// If the subdirectory already exists, this method does nothing. - /// - /// The specified path. This cannot be a different disk volume. - /// When compresses the directory. - [SecurityCritical] - public DirectoryInfo CreateSubdirectory(string path, bool compress) - { - return CreateSubdirectoryCore(path, null, null, compress); - } - - /// [AlphaFS] Creates a subdirectory or subdirectories on the specified path. The specified path can be relative to this instance of the class. - /// The specified path. This cannot be a different disk volume. - /// The path of the directory to use as a template when creating the new directory. - /// When compresses the directory. - /// The last directory specified in . - /// - /// Any and all directories specified in path are created, unless some part of path is invalid. - /// The path parameter specifies a directory path, not a file path. - /// If the subdirectory already exists, this method does nothing. - /// - - [SecurityCritical] - public DirectoryInfo CreateSubdirectory(string path, string templatePath, bool compress) - { - return CreateSubdirectoryCore(path, templatePath, null, compress); - } - - - /// [AlphaFS] Creates a subdirectory or subdirectories on the specified path. The specified path can be relative to this instance of the class. - /// The specified path. This cannot be a different disk volume. - /// The security to apply. - /// When compresses the directory. - /// The last directory specified in . - /// - /// Any and all directories specified in path are created, unless some part of path is invalid. - /// The path parameter specifies a directory path, not a file path. - /// If the subdirectory already exists, this method does nothing. - /// - - [SecurityCritical] - public DirectoryInfo CreateSubdirectory(string path, DirectorySecurity directorySecurity, bool compress) - { - return CreateSubdirectoryCore(path, null, directorySecurity, compress); - } - - /// [AlphaFS] Creates a subdirectory or subdirectories on the specified path. The specified path can be relative to this instance of the class. - /// The path of the directory to use as a template when creating the new directory. - /// The specified path. This cannot be a different disk volume. - /// When compresses the directory. - /// The security to apply. - /// The last directory specified in . - /// - /// Any and all directories specified in path are created, unless some part of path is invalid. - /// The path parameter specifies a directory path, not a file path. - /// If the subdirectory already exists, this method does nothing. - /// - - [SecurityCritical] - public DirectoryInfo CreateSubdirectory(string path, string templatePath, DirectorySecurity directorySecurity, bool compress) - { - return CreateSubdirectoryCore(path, templatePath, directorySecurity, compress); - } - - #endregion // AlphaFS - - #region Internal Methods - - /// Creates a subdirectory or subdirectories on the specified path. The specified path can be relative to this instance of the DirectoryInfo class. - /// The last directory specified in path as an object. - /// - /// Any and all directories specified in path are created, unless some part of path is invalid. - /// The path parameter specifies a directory path, not a file path. - /// If the subdirectory already exists, this method does nothing. - /// - /// The specified path. This cannot be a different disk volume or Universal Naming Convention (UNC) name. - /// The path of the directory to use as a template when creating the new directory. - /// The security to apply. - /// When compresses the directory. - [SecurityCritical] - private DirectoryInfo CreateSubdirectoryCore(string path, string templatePath, DirectorySecurity directorySecurity, bool compress) - { - string pathLp = Path.CombineCore(false, LongFullName, path); - string templatePathLp = templatePath == null ? null : - Path.GetExtendedLengthPathCore(Transaction, templatePath, PathFormat.RelativePath, GetFullPathOptions.TrimEnd | GetFullPathOptions.RemoveTrailingDirectorySeparator); - - if (string.Compare(LongFullName, 0, pathLp, 0, LongFullName.Length, StringComparison.OrdinalIgnoreCase) != 0) - throw new ArgumentException(Resources.Invalid_Subpath, pathLp); - - return Directory.CreateDirectoryCore(Transaction, pathLp, templatePathLp, directorySecurity, compress, PathFormat.LongFullPath); - } - - #endregion // Internal Methods - } -} diff --git a/AlphaFS/Filesystem/DirectoryInfo Class/DirectoryInfo.Decrypt.cs b/AlphaFS/Filesystem/DirectoryInfo Class/DirectoryInfo.Decrypt.cs deleted file mode 100644 index 4e453e3..0000000 --- a/AlphaFS/Filesystem/DirectoryInfo Class/DirectoryInfo.Decrypt.cs +++ /dev/null @@ -1,28 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -namespace Alphaleonis.Win32.Filesystem -{ - partial class DirectoryInfo - { - - } -} \ No newline at end of file diff --git a/AlphaFS/Filesystem/DirectoryInfo Class/DirectoryInfo.Delete.cs b/AlphaFS/Filesystem/DirectoryInfo Class/DirectoryInfo.Delete.cs deleted file mode 100644 index b28347e..0000000 --- a/AlphaFS/Filesystem/DirectoryInfo Class/DirectoryInfo.Delete.cs +++ /dev/null @@ -1,88 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System; -using System.IO; -using System.Security; - -namespace Alphaleonis.Win32.Filesystem -{ - partial class DirectoryInfo - { - #region .NET - - /// Deletes this if it is empty. - /// - /// - /// - /// - /// - /// - [SecurityCritical] - public override void Delete() - { - Directory.DeleteDirectoryCore(null, Transaction, LongFullName, false, false, true, false, PathFormat.LongFullPath); - } - - /// Deletes this instance of a , specifying whether to delete subdirectories and files. - /// - /// If the has no files or subdirectories, this method deletes the even if recursive is . - /// Attempting to delete a that is not empty when recursive is false throws an . - /// - /// - /// - /// - /// - /// - /// - /// to delete this directory, its subdirectories, and all files; otherwise, . - [SecurityCritical] - public void Delete(bool recursive) - { - Directory.DeleteDirectoryCore(null, Transaction, LongFullName, recursive, false, !recursive, false, PathFormat.LongFullPath); - } - - #endregion // .NET - - #region AlphaFS - - /// [AlphaFS] Deletes this instance of a , specifying whether to delete files and subdirectories. - /// - /// If the has no files or subdirectories, this method deletes the even if recursive is . - /// Attempting to delete a that is not empty when recursive is false throws an . - /// - /// - /// - /// - /// - /// - /// - /// to delete this directory, its subdirectories, and all files; otherwise, . - /// ignores read only attribute of files and directories. - [SecurityCritical] - public void Delete(bool recursive, bool ignoreReadOnly) - { - Directory.DeleteDirectoryCore(null, Transaction, LongFullName, recursive, ignoreReadOnly, !recursive, false, PathFormat.LongFullPath); - } - - #endregion // AlphaFS - } -} diff --git a/AlphaFS/Filesystem/DirectoryInfo Class/DirectoryInfo.DeleteEmptySubdirectories.cs b/AlphaFS/Filesystem/DirectoryInfo Class/DirectoryInfo.DeleteEmptySubdirectories.cs deleted file mode 100644 index 1c26fed..0000000 --- a/AlphaFS/Filesystem/DirectoryInfo Class/DirectoryInfo.DeleteEmptySubdirectories.cs +++ /dev/null @@ -1,57 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System.IO; -using System.Security; - -namespace Alphaleonis.Win32.Filesystem -{ - partial class DirectoryInfo - { - #region AlphaFS - - /// [AlphaFS] Deletes empty subdirectories from the instance. - [SecurityCritical] - public void DeleteEmptySubdirectories() - { - Directory.DeleteEmptySubdirectoriesCore(null, Transaction, LongFullName, false, false, true, PathFormat.LongFullPath); - } - - /// [AlphaFS] Deletes empty subdirectories from the instance. - /// deletes empty subdirectories from this directory and its subdirectories. - [SecurityCritical] - public void DeleteEmptySubdirectories(bool recursive) - { - Directory.DeleteEmptySubdirectoriesCore(null, Transaction, LongFullName, recursive, false, true, PathFormat.LongFullPath); - } - - /// [AlphaFS] Deletes empty subdirectories from the instance. - /// deletes empty subdirectories from this directory and its subdirectories. - /// overrides read only of empty directories. - [SecurityCritical] - public void DeleteEmptySubdirectories(bool recursive, bool ignoreReadOnly) - { - Directory.DeleteEmptySubdirectoriesCore(null, Transaction, LongFullName, recursive, ignoreReadOnly, true, PathFormat.LongFullPath); - } - - #endregion // AlphaFS - } -} diff --git a/AlphaFS/Filesystem/DirectoryInfo Class/DirectoryInfo.Encryption.cs b/AlphaFS/Filesystem/DirectoryInfo Class/DirectoryInfo.Encryption.cs deleted file mode 100644 index 16ff27b..0000000 --- a/AlphaFS/Filesystem/DirectoryInfo Class/DirectoryInfo.Encryption.cs +++ /dev/null @@ -1,122 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System; -using System.IO; -using System.Security; - -namespace Alphaleonis.Win32.Filesystem -{ - partial class DirectoryInfo - { - #region AlphaFS - - #region Decrypt - - /// [AlphaFS] Decrypts a directory that was encrypted by the current account using the Encrypt method. - /// - /// - /// - /// - /// - /// - [SecurityCritical] - public void Decrypt() - { - Directory.EncryptDecryptDirectoryCore(LongFullName, false, false, PathFormat.LongFullPath); - } - - /// [AlphaFS] Decrypts a directory that was encrypted by the current account using the Encrypt method. - /// - /// - /// - /// - /// - /// - /// to decrypt the directory recursively. only decrypt files and directories in the root of the directory. - [SecurityCritical] - public void Decrypt(bool recursive) - { - Directory.EncryptDecryptDirectoryCore(LongFullName, false, recursive, PathFormat.LongFullPath); - } - - #endregion // Decrypt - - #region DisableEncryption - - /// [AlphaFS] Disables encryption of the specified directory and the files in it. It does not affect encryption of subdirectories below the indicated directory. - /// on success, otherwise. - /// This method will create/change the file "Desktop.ini" and wil set Encryption value: "Disable=0" - [SecurityCritical] - public void DisableEncryption() - { - Directory.EnableDisableEncryptionCore(LongFullName, false, PathFormat.LongFullPath); - } - - #endregion // DisableEncryption - - #region EnableEncryption - - /// [AlphaFS] Enables encryption of the specified directory and the files in it. It does not affect encryption of subdirectories below the indicated directory. - /// on success, otherwise. - /// This method will create/change the file "Desktop.ini" and wil set Encryption value: "Disable=1" - [SecurityCritical] - public void EnableEncryption() - { - Directory.EnableDisableEncryptionCore(LongFullName, true, PathFormat.LongFullPath); - } - - #endregion // EnableEncryption - - #region Encrypt - - /// [AlphaFS] Encrypts a directory so that only the account used to encrypt the directory can decrypt it. - /// - /// - /// - /// - /// - /// - [SecurityCritical] - public void Encrypt() - { - Directory.EncryptDecryptDirectoryCore(LongFullName, true, false, PathFormat.LongFullPath); - } - - /// [AlphaFS] Decrypts a directory that was encrypted by the current account using the Encrypt method. - /// - /// - /// - /// - /// - /// - /// to encrypt the directory recursively. only encrypt files and directories in the root of the directory. - [SecurityCritical] - public void Encrypt(bool recursive) - { - Directory.EncryptDecryptDirectoryCore(LongFullName, true, recursive, PathFormat.LongFullPath); - } - - #endregion // Encrypt - - #endregion // AlphaFS - } -} diff --git a/AlphaFS/Filesystem/DirectoryInfo Class/DirectoryInfo.EnumerateAlternateDataStreams.cs b/AlphaFS/Filesystem/DirectoryInfo Class/DirectoryInfo.EnumerateAlternateDataStreams.cs deleted file mode 100644 index 4b91dd7..0000000 --- a/AlphaFS/Filesystem/DirectoryInfo Class/DirectoryInfo.EnumerateAlternateDataStreams.cs +++ /dev/null @@ -1,37 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System.Collections.Generic; -using System.Security; - -namespace Alphaleonis.Win32.Filesystem -{ - partial class DirectoryInfo - { - /// [AlphaFS] Returns an enumerable collection of instances for the directory. - /// An enumerable collection of instances for the directory. - [SecurityCritical] - public IEnumerable EnumerateAlternateDataStreams() - { - return File.EnumerateAlternateDataStreamsCore(Transaction, LongFullName, PathFormat.LongFullPath); - } - } -} diff --git a/AlphaFS/Filesystem/DirectoryInfo Class/DirectoryInfo.EnumerateDirectories.cs b/AlphaFS/Filesystem/DirectoryInfo Class/DirectoryInfo.EnumerateDirectories.cs deleted file mode 100644 index 05b5cee..0000000 --- a/AlphaFS/Filesystem/DirectoryInfo Class/DirectoryInfo.EnumerateDirectories.cs +++ /dev/null @@ -1,138 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System; -using System.Collections.Generic; -using System.IO; -using System.Security; - -namespace Alphaleonis.Win32.Filesystem -{ - partial class DirectoryInfo - { - #region .NET - - /// Returns an enumerable collection of directory information in the current directory. - /// An enumerable collection of directories in the current directory. - /// - /// - /// - /// - /// - /// - [SecurityCritical] - public IEnumerable EnumerateDirectories() - { - return Directory.EnumerateFileSystemEntryInfosCore(Transaction, LongFullName, Path.WildcardStarMatchAll, DirectoryEnumerationOptions.Folders, PathFormat.LongFullPath); - } - - /// Returns an enumerable collection of directory information that matches a specified search pattern. - /// An enumerable collection of directories that matches . - /// - /// - /// - /// - /// - /// - /// - /// The search string to match against the names of directories in path. - /// This parameter can contain a combination of valid literal path and wildcard - /// ( and ) characters, but does not support regular expressions. - /// - [SecurityCritical] - public IEnumerable EnumerateDirectories(string searchPattern) - { - return Directory.EnumerateFileSystemEntryInfosCore(Transaction, LongFullName, searchPattern, DirectoryEnumerationOptions.Folders, PathFormat.LongFullPath); - } - - /// Returns an enumerable collection of directory information that matches a specified search pattern and search subdirectory option. - /// An enumerable collection of directories that matches and . - /// - /// - /// - /// - /// - /// - /// - /// The search string to match against the names of directories in path. - /// This parameter can contain a combination of valid literal path and wildcard - /// ( and ) characters, but does not support regular expressions. - /// - /// - /// One of the enumeration values that specifies whether the - /// should include only the current directory or should include all subdirectories. - /// - [SecurityCritical] - public IEnumerable EnumerateDirectories(string searchPattern, SearchOption searchOption) - { - var options = DirectoryEnumerationOptions.Folders | ((searchOption == SearchOption.AllDirectories) ? DirectoryEnumerationOptions.Recursive : 0); - - return Directory.EnumerateFileSystemEntryInfosCore(Transaction, LongFullName, searchPattern, options, PathFormat.LongFullPath); - } - - #endregion // .NET - - - - /// [AlphaFS] Returns an enumerable collection of directory information in the current directory. - /// An enumerable collection of directories in the current directory. - /// - /// - /// - /// - /// - /// - /// flags that specify how the directory is to be enumerated. - [SecurityCritical] - public IEnumerable EnumerateDirectories(DirectoryEnumerationOptions options) - { - // Adhere to the method name. - options &= ~DirectoryEnumerationOptions.Files; - options |= DirectoryEnumerationOptions.Folders; - - return Directory.EnumerateFileSystemEntryInfosCore(Transaction, LongFullName, Path.WildcardStarMatchAll, options, PathFormat.LongFullPath); - } - - /// Returns an enumerable collection of directory information that matches a specified search pattern. - /// An enumerable collection of directories that matches . - /// - /// - /// - /// - /// - /// - /// - /// The search string to match against the names of directories in path. - /// This parameter can contain a combination of valid literal path and wildcard - /// ( and ) characters, but does not support regular expressions. - /// - /// flags that specify how the directory is to be enumerated. - [SecurityCritical] - public IEnumerable EnumerateDirectories(string searchPattern, DirectoryEnumerationOptions options) - { - // Adhere to the method name. - options &= ~DirectoryEnumerationOptions.Files; - options |= DirectoryEnumerationOptions.Folders; - - return Directory.EnumerateFileSystemEntryInfosCore(Transaction, LongFullName, searchPattern, DirectoryEnumerationOptions.Folders | options, PathFormat.LongFullPath); - } - } -} diff --git a/AlphaFS/Filesystem/DirectoryInfo Class/DirectoryInfo.EnumerateFileSystemInfos.cs b/AlphaFS/Filesystem/DirectoryInfo Class/DirectoryInfo.EnumerateFileSystemInfos.cs deleted file mode 100644 index 11bc623..0000000 --- a/AlphaFS/Filesystem/DirectoryInfo Class/DirectoryInfo.EnumerateFileSystemInfos.cs +++ /dev/null @@ -1,136 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System; -using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; -using System.IO; -using System.Security; - -namespace Alphaleonis.Win32.Filesystem -{ - partial class DirectoryInfo - { - #region .NET - - /// Returns an enumerable collection of file system information in the current directory. - /// An enumerable collection of file system information in the current directory. - /// - /// - /// - /// - /// - /// - [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Infos")] - [SecurityCritical] - public IEnumerable EnumerateFileSystemInfos() - { - return Directory.EnumerateFileSystemEntryInfosCore(Transaction, LongFullName, Path.WildcardStarMatchAll, DirectoryEnumerationOptions.FilesAndFolders, PathFormat.LongFullPath); - } - - /// Returns an enumerable collection of file system information that matches a specified search pattern. - /// An enumerable collection of file system information objects that matches . - /// - /// - /// - /// - /// - /// - /// - /// The search string to match against the names of directories in path. - /// This parameter can contain a combination of valid literal path and wildcard - /// ( and ) characters, but does not support regular expressions. - /// - [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Infos")] - [SecurityCritical] - public IEnumerable EnumerateFileSystemInfos(string searchPattern) - { - return Directory.EnumerateFileSystemEntryInfosCore(Transaction, LongFullName, searchPattern, DirectoryEnumerationOptions.FilesAndFolders, PathFormat.LongFullPath); - } - - /// Returns an enumerable collection of file system information that matches a specified search pattern and search subdirectory option. - /// An enumerable collection of file system information objects that matches and . - /// - /// - /// - /// - /// - /// - /// - /// The search string to match against the names of directories in path. - /// This parameter can contain a combination of valid literal path and wildcard - /// ( and ) characters, but does not support regular expressions. - /// - /// - /// One of the enumeration values that specifies whether the - /// should include only the current directory or should include all subdirectories. - /// - [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Infos")] - [SecurityCritical] - public IEnumerable EnumerateFileSystemInfos(string searchPattern, SearchOption searchOption) - { - var options = DirectoryEnumerationOptions.FilesAndFolders | ((searchOption == SearchOption.AllDirectories) ? DirectoryEnumerationOptions.Recursive : 0); - - return Directory.EnumerateFileSystemEntryInfosCore(Transaction, LongFullName, searchPattern, options, PathFormat.LongFullPath); - } - - #endregion // .NET - - - - /// [AlphaFS] Returns an enumerable collection of file system information in the current directory. - /// An enumerable collection of file system information in the current directory. - /// - /// - /// - /// - /// - /// - /// flags that specify how the directory is to be enumerated. - [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Infos")] - [SecurityCritical] - public IEnumerable EnumerateFileSystemInfos(DirectoryEnumerationOptions options) - { - return Directory.EnumerateFileSystemEntryInfosCore(Transaction, LongFullName, Path.WildcardStarMatchAll, options, PathFormat.LongFullPath); - } - - /// [AlphaFS] Returns an enumerable collection of file system information that matches a specified search pattern. - /// An enumerable collection of file system information objects that matches . - /// - /// - /// - /// - /// - /// - /// - /// The search string to match against the names of directories in path. - /// This parameter can contain a combination of valid literal path and wildcard - /// ( and ) characters, but does not support regular expressions. - /// - /// flags that specify how the directory is to be enumerated. - [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Infos")] - [SecurityCritical] - public IEnumerable EnumerateFileSystemInfos(string searchPattern, DirectoryEnumerationOptions options) - { - return Directory.EnumerateFileSystemEntryInfosCore(Transaction, LongFullName, searchPattern, options, PathFormat.LongFullPath); - } - } -} diff --git a/AlphaFS/Filesystem/DirectoryInfo Class/DirectoryInfo.EnumerateFiles.cs b/AlphaFS/Filesystem/DirectoryInfo Class/DirectoryInfo.EnumerateFiles.cs deleted file mode 100644 index 710ee06..0000000 --- a/AlphaFS/Filesystem/DirectoryInfo Class/DirectoryInfo.EnumerateFiles.cs +++ /dev/null @@ -1,138 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System; -using System.Collections.Generic; -using System.IO; -using System.Security; - -namespace Alphaleonis.Win32.Filesystem -{ - partial class DirectoryInfo - { - #region .NET - - /// Returns an enumerable collection of file information in the current directory. - /// An enumerable collection of the files in the current directory. - /// - /// - /// - /// - /// - /// - [SecurityCritical] - public IEnumerable EnumerateFiles() - { - return Directory.EnumerateFileSystemEntryInfosCore(Transaction, LongFullName, Path.WildcardStarMatchAll, DirectoryEnumerationOptions.Files, PathFormat.LongFullPath); - } - - /// Returns an enumerable collection of file information that matches a search pattern. - /// An enumerable collection of files that matches . - /// - /// - /// - /// - /// - /// - /// - /// The search string to match against the names of directories in path. - /// This parameter can contain a combination of valid literal path and wildcard - /// ( and ) characters, but does not support regular expressions. - /// - [SecurityCritical] - public IEnumerable EnumerateFiles(string searchPattern) - { - return Directory.EnumerateFileSystemEntryInfosCore(Transaction, LongFullName, searchPattern, DirectoryEnumerationOptions.Files, PathFormat.LongFullPath); - } - - /// Returns an enumerable collection of file information that matches a specified search pattern and search subdirectory option. - /// An enumerable collection of files that matches and . - /// - /// - /// - /// - /// - /// - /// - /// The search string to match against the names of directories in path. - /// This parameter can contain a combination of valid literal path and wildcard - /// ( and ) characters, but does not support regular expressions. - /// - /// - /// One of the enumeration values that specifies whether the - /// should include only the current directory or should include all subdirectories. - /// - [SecurityCritical] - public IEnumerable EnumerateFiles(string searchPattern, SearchOption searchOption) - { - var options = DirectoryEnumerationOptions.Files | ((searchOption == SearchOption.AllDirectories) ? DirectoryEnumerationOptions.Recursive : 0); - - return Directory.EnumerateFileSystemEntryInfosCore(Transaction, LongFullName, searchPattern, options, PathFormat.LongFullPath); - } - - #endregion // .NET - - - - /// Returns an enumerable collection of file information in the current directory. - /// An enumerable collection of the files in the current directory. - /// - /// - /// - /// - /// - /// - /// flags that specify how the directory is to be enumerated. - [SecurityCritical] - public IEnumerable EnumerateFiles(DirectoryEnumerationOptions options) - { - // Adhere to the method name. - options &= ~DirectoryEnumerationOptions.Folders; - options |= DirectoryEnumerationOptions.Files; - - return Directory.EnumerateFileSystemEntryInfosCore(Transaction, LongFullName, Path.WildcardStarMatchAll, options, PathFormat.LongFullPath); - } - - /// Returns an enumerable collection of file information that matches a search pattern. - /// An enumerable collection of files that matches . - /// - /// - /// - /// - /// - /// - /// - /// The search string to match against the names of directories in path. - /// This parameter can contain a combination of valid literal path and wildcard - /// ( and ) characters, but does not support regular expressions. - /// - /// flags that specify how the directory is to be enumerated. - [SecurityCritical] - public IEnumerable EnumerateFiles(string searchPattern, DirectoryEnumerationOptions options) - { - // Adhere to the method name. - options &= ~DirectoryEnumerationOptions.Folders; - options |= DirectoryEnumerationOptions.Files; - - return Directory.EnumerateFileSystemEntryInfosCore(Transaction, LongFullName, searchPattern, options, PathFormat.LongFullPath); - } - } -} diff --git a/AlphaFS/Filesystem/DirectoryInfo Class/DirectoryInfo.GetAccessControl.cs b/AlphaFS/Filesystem/DirectoryInfo Class/DirectoryInfo.GetAccessControl.cs deleted file mode 100644 index 2f844ea..0000000 --- a/AlphaFS/Filesystem/DirectoryInfo Class/DirectoryInfo.GetAccessControl.cs +++ /dev/null @@ -1,52 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System.Security; -using System.Security.AccessControl; - -namespace Alphaleonis.Win32.Filesystem -{ - partial class DirectoryInfo - { - #region .NET - - /// Gets a object that encapsulates the access control list (ACL) entries for the directory described by the current DirectoryInfo object. - /// A object that encapsulates the access control rules for the directory. - - [SecurityCritical] - public DirectorySecurity GetAccessControl() - { - return File.GetAccessControlCore(true, LongFullName, AccessControlSections.Access | AccessControlSections.Group | AccessControlSections.Owner, PathFormat.LongFullPath); - } - - /// Gets a object that encapsulates the specified type of access control list (ACL) entries for the directory described by the current object. - /// One of the values that specifies the type of access control list (ACL) information to receive. - /// A object that encapsulates the access control rules for the file described by the path parameter. - - [SecurityCritical] - public DirectorySecurity GetAccessControl(AccessControlSections includeSections) - { - return File.GetAccessControlCore(true, LongFullName, includeSections, PathFormat.LongFullPath); - } - - #endregion // .NET - } -} diff --git a/AlphaFS/Filesystem/DirectoryInfo Class/DirectoryInfo.GetDirectories.cs b/AlphaFS/Filesystem/DirectoryInfo Class/DirectoryInfo.GetDirectories.cs deleted file mode 100644 index 848f4ea..0000000 --- a/AlphaFS/Filesystem/DirectoryInfo Class/DirectoryInfo.GetDirectories.cs +++ /dev/null @@ -1,110 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System; -using System.IO; -using System.Linq; -using System.Security; - -namespace Alphaleonis.Win32.Filesystem -{ - partial class DirectoryInfo - { - #region .NET - - /// Returns the subdirectories of the current directory. - /// An array of objects. - /// If there are no subdirectories, this method returns an empty array. This method is not recursive. - /// - /// The EnumerateDirectories and GetDirectories methods differ as follows: When you use EnumerateDirectories, you can start enumerating the collection of names - /// before the whole collection is returned; when you use GetDirectories, you must wait for the whole array of names to be returned before you can access the array. - /// Therefore, when you are working with many files and directories, EnumerateDirectories can be more efficient. - /// - /// - /// - /// - /// - /// - /// - [SecurityCritical] - public DirectoryInfo[] GetDirectories() - { - return Directory.EnumerateFileSystemEntryInfosCore(Transaction, LongFullName, Path.WildcardStarMatchAll, DirectoryEnumerationOptions.Folders, PathFormat.LongFullPath).ToArray(); - } - - /// Returns an array of directories in the current matching the given search criteria. - /// An array of type matching . - /// - /// The EnumerateDirectories and GetDirectories methods differ as follows: When you use EnumerateDirectories, you can start enumerating the collection of names - /// before the whole collection is returned; when you use GetDirectories, you must wait for the whole array of names to be returned before you can access the array. - /// Therefore, when you are working with many files and directories, EnumerateDirectories can be more efficient. - /// - /// - /// - /// - /// - /// - /// - /// - /// The search string to match against the names of directories in path. - /// This parameter can contain a combination of valid literal path and wildcard - /// ( and ) characters, but does not support regular expressions. - /// - [SecurityCritical] - public DirectoryInfo[] GetDirectories(string searchPattern) - { - return Directory.EnumerateFileSystemEntryInfosCore(Transaction, LongFullName, searchPattern, DirectoryEnumerationOptions.Folders, PathFormat.LongFullPath).ToArray(); - } - - /// Returns an array of directories in the current matching the given search criteria and using a value to determine whether to search subdirectories. - /// An array of type matching . - /// If there are no subdirectories, or no subdirectories match the searchPattern parameter, this method returns an empty array. - /// - /// The EnumerateDirectories and GetDirectories methods differ as follows: When you use EnumerateDirectories, you can start enumerating the collection of names - /// before the whole collection is returned; when you use GetDirectories, you must wait for the whole array of names to be returned before you can access the array. - /// Therefore, when you are working with many files and directories, EnumerateDirectories can be more efficient. - /// - /// - /// - /// - /// - /// - /// - /// - /// The search string to match against the names of directories in path. - /// This parameter can contain a combination of valid literal path and wildcard - /// ( and ) characters, but does not support regular expressions. - /// - /// - /// One of the enumeration values that specifies whether the - /// should include only the current directory or should include all subdirectories. - /// - [SecurityCritical] - public DirectoryInfo[] GetDirectories(string searchPattern, SearchOption searchOption) - { - var options = DirectoryEnumerationOptions.Folders | ((searchOption == SearchOption.AllDirectories) ? DirectoryEnumerationOptions.Recursive : 0); - - return Directory.EnumerateFileSystemEntryInfosCore(Transaction, LongFullName, searchPattern, options, PathFormat.LongFullPath).ToArray(); - } - - #endregion // .NET - } -} diff --git a/AlphaFS/Filesystem/DirectoryInfo Class/DirectoryInfo.GetFileSystemInfos.cs b/AlphaFS/Filesystem/DirectoryInfo Class/DirectoryInfo.GetFileSystemInfos.cs deleted file mode 100644 index 7bcaa25..0000000 --- a/AlphaFS/Filesystem/DirectoryInfo Class/DirectoryInfo.GetFileSystemInfos.cs +++ /dev/null @@ -1,124 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System; -using System.Diagnostics.CodeAnalysis; -using System.IO; -using System.Linq; -using System.Security; - -namespace Alphaleonis.Win32.Filesystem -{ - partial class DirectoryInfo - { - #region .NET - - /// Returns an array of strongly typed entries representing all the files and subdirectories in a directory. - /// An array of strongly typed entries. - /// - /// For subdirectories, the objects returned by this method can be cast to the derived class . - /// Use the value returned by the property to determine whether the represents a file or a directory. - /// - /// - /// If there are no files or directories in the DirectoryInfo, this method returns an empty array. This method is not recursive. - /// For subdirectories, the FileSystemInfo objects returned by this method can be cast to the derived class DirectoryInfo. - /// Use the FileAttributes value returned by the Attributes property to determine whether the FileSystemInfo represents a file or a directory. - /// - /// - /// - /// - /// - /// - /// - [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Infos")] - [SecurityCritical] - public FileSystemInfo[] GetFileSystemInfos() - { - return Directory.EnumerateFileSystemEntryInfosCore(Transaction, LongFullName, Path.WildcardStarMatchAll, DirectoryEnumerationOptions.FilesAndFolders, PathFormat.LongFullPath).ToArray(); - } - - /// Retrieves an array of strongly typed objects representing the files and subdirectories that match the specified search criteria. - /// - /// The search string to match against the names of directories in path. - /// This parameter can contain a combination of valid literal path and wildcard - /// ( and ) characters, but does not support regular expressions. - /// - /// An array of strongly typed entries. - /// - /// For subdirectories, the objects returned by this method can be cast to the derived class . - /// Use the value returned by the property to determine whether the represents a file or a directory. - /// - /// - /// If there are no files or directories in the DirectoryInfo, this method returns an empty array. This method is not recursive. - /// For subdirectories, the FileSystemInfo objects returned by this method can be cast to the derived class DirectoryInfo. - /// Use the FileAttributes value returned by the Attributes property to determine whether the FileSystemInfo represents a file or a directory. - /// - /// - /// - /// - /// - /// - /// - [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Infos")] - [SecurityCritical] - public FileSystemInfo[] GetFileSystemInfos(string searchPattern) - { - return Directory.EnumerateFileSystemEntryInfosCore(Transaction, LongFullName, searchPattern, DirectoryEnumerationOptions.FilesAndFolders, PathFormat.LongFullPath).ToArray(); - } - - /// Retrieves an array of strongly typed objects representing the files and subdirectories that match the specified search criteria. - /// - /// The search string to match against the names of directories in path. - /// This parameter can contain a combination of valid literal path and wildcard - /// ( and ) characters, but does not support regular expressions. - /// - /// - /// One of the enumeration values that specifies whether the - /// should include only the current directory or should include all subdirectories. - /// - /// An array of strongly typed entries. - /// - /// For subdirectories, the objects returned by this method can be cast to the derived class . - /// Use the value returned by the property to determine whether the represents a file or a directory. - /// - /// - /// If there are no files or directories in the DirectoryInfo, this method returns an empty array. This method is not recursive. - /// For subdirectories, the FileSystemInfo objects returned by this method can be cast to the derived class DirectoryInfo. - /// Use the FileAttributes value returned by the Attributes property to determine whether the FileSystemInfo represents a file or a directory. - /// - /// - /// - /// - /// - /// - /// - [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Infos")] - [SecurityCritical] - public FileSystemInfo[] GetFileSystemInfos(string searchPattern, SearchOption searchOption) - { - var options = DirectoryEnumerationOptions.FilesAndFolders | ((searchOption == SearchOption.AllDirectories) ? DirectoryEnumerationOptions.Recursive : 0); - - return Directory.EnumerateFileSystemEntryInfosCore(Transaction, LongFullName, searchPattern, options, PathFormat.LongFullPath).ToArray(); - } - - #endregion // .NET - } -} diff --git a/AlphaFS/Filesystem/DirectoryInfo Class/DirectoryInfo.GetFiles.cs b/AlphaFS/Filesystem/DirectoryInfo Class/DirectoryInfo.GetFiles.cs deleted file mode 100644 index 1c5ce95..0000000 --- a/AlphaFS/Filesystem/DirectoryInfo Class/DirectoryInfo.GetFiles.cs +++ /dev/null @@ -1,114 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System; -using System.IO; -using System.Linq; -using System.Security; - -namespace Alphaleonis.Win32.Filesystem -{ - partial class DirectoryInfo - { - #region .NET - - /// Returns a file list from the current directory. - /// An array of type . - /// The order of the returned file names is not guaranteed; use the Sort() method if a specific sort order is required. - /// If there are no files in the , this method returns an empty array. - /// - /// The EnumerateFiles and GetFiles methods differ as follows: When you use EnumerateFiles, you can start enumerating the collection of names - /// before the whole collection is returned; when you use GetFiles, you must wait for the whole array of names to be returned before you can access the array. - /// Therefore, when you are working with many files and directories, EnumerateFiles can be more efficient. - /// - /// - /// - /// - /// - /// - /// - [SecurityCritical] - public FileInfo[] GetFiles() - { - return Directory.EnumerateFileSystemEntryInfosCore(Transaction, LongFullName, Path.WildcardStarMatchAll, DirectoryEnumerationOptions.Files, PathFormat.LongFullPath).ToArray(); - } - - /// Returns a file list from the current directory matching the given search pattern. - /// - /// The search string to match against the names of directories in path. - /// This parameter can contain a combination of valid literal path and wildcard - /// ( and ) characters, but does not support regular expressions. - /// - /// An array of type . - /// The order of the returned file names is not guaranteed; use the Sort() method if a specific sort order is required. - /// If there are no files in the , this method returns an empty array. - /// - /// The EnumerateFiles and GetFiles methods differ as follows: When you use EnumerateFiles, you can start enumerating the collection of names - /// before the whole collection is returned; when you use GetFiles, you must wait for the whole array of names to be returned before you can access the array. - /// Therefore, when you are working with many files and directories, EnumerateFiles can be more efficient. - /// - /// - /// - /// - /// - /// - /// - [SecurityCritical] - public FileInfo[] GetFiles(string searchPattern) - { - return Directory.EnumerateFileSystemEntryInfosCore(Transaction, LongFullName, searchPattern, DirectoryEnumerationOptions.Files, PathFormat.LongFullPath).ToArray(); - } - - /// Returns a file list from the current directory matching the given search pattern and using a value to determine whether to search subdirectories. - /// - /// The search string to match against the names of directories in path. - /// This parameter can contain a combination of valid literal path and wildcard - /// ( and ) characters, but does not support regular expressions. - /// - /// - /// One of the enumeration values that specifies whether the - /// should include only the current directory or should include all subdirectories. - /// - /// An array of type . - /// The order of the returned file names is not guaranteed; use the Sort() method if a specific sort order is required. - /// If there are no files in the , this method returns an empty array. - /// - /// The EnumerateFiles and GetFiles methods differ as follows: When you use EnumerateFiles, you can start enumerating the collection of names - /// before the whole collection is returned; when you use GetFiles, you must wait for the whole array of names to be returned before you can access the array. - /// Therefore, when you are working with many files and directories, EnumerateFiles can be more efficient. - /// - /// - /// - /// - /// - /// - /// - [SecurityCritical] - public FileInfo[] GetFiles(string searchPattern, SearchOption searchOption) - { - var options = DirectoryEnumerationOptions.Files | ((searchOption == SearchOption.AllDirectories) ? DirectoryEnumerationOptions.Recursive : 0); - - return Directory.EnumerateFileSystemEntryInfosCore(Transaction, LongFullName, searchPattern, options, PathFormat.LongFullPath).ToArray(); - } - - #endregion // .NET - } -} diff --git a/AlphaFS/Filesystem/DirectoryInfo Class/DirectoryInfo.Refresh.cs b/AlphaFS/Filesystem/DirectoryInfo Class/DirectoryInfo.Refresh.cs deleted file mode 100644 index 90bc626..0000000 --- a/AlphaFS/Filesystem/DirectoryInfo Class/DirectoryInfo.Refresh.cs +++ /dev/null @@ -1,39 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System.Security; - -namespace Alphaleonis.Win32.Filesystem -{ - partial class DirectoryInfo - { - #region .NET - - /// Refreshes the state of the object. - [SecurityCritical] - public new void Refresh() - { - base.Refresh(); - } - - #endregion // .NET - } -} \ No newline at end of file diff --git a/AlphaFS/Filesystem/DirectoryInfo Class/DirectoryInfo.RefreshEntryInfo.cs b/AlphaFS/Filesystem/DirectoryInfo Class/DirectoryInfo.RefreshEntryInfo.cs deleted file mode 100644 index e50d1d0..0000000 --- a/AlphaFS/Filesystem/DirectoryInfo Class/DirectoryInfo.RefreshEntryInfo.cs +++ /dev/null @@ -1,39 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System.Security; - -namespace Alphaleonis.Win32.Filesystem -{ - partial class DirectoryInfo - { - #region AlphaFS - - /// Refreshes the state of the EntryInfo instance. - [SecurityCritical] - public new void RefreshEntryInfo() - { - base.RefreshEntryInfo(); - } - - #endregion // AlphaFS - } -} \ No newline at end of file diff --git a/AlphaFS/Filesystem/DirectoryInfo Class/DirectoryInfo.SetAccessControl.cs b/AlphaFS/Filesystem/DirectoryInfo Class/DirectoryInfo.SetAccessControl.cs deleted file mode 100644 index 8bc5686..0000000 --- a/AlphaFS/Filesystem/DirectoryInfo Class/DirectoryInfo.SetAccessControl.cs +++ /dev/null @@ -1,49 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System.Diagnostics.CodeAnalysis; -using System.Security; -using System.Security.AccessControl; - -namespace Alphaleonis.Win32.Filesystem -{ - partial class DirectoryInfo - { - /// Applies access control list (ACL) entries described by a object to the directory described by the current DirectoryInfo object. - /// A object that describes an ACL entry to apply to the directory described by the path parameter. - [SuppressMessage("Microsoft.Design", "CA1011:ConsiderPassingBaseTypesAsParameters")] - [SecurityCritical] - public void SetAccessControl(DirectorySecurity directorySecurity) - { - File.SetAccessControlCore(LongFullName, null, directorySecurity, AccessControlSections.All, PathFormat.LongFullPath); - } - - /// Applies access control list (ACL) entries described by a object to the directory described by the current DirectoryInfo object. - /// A object that describes an ACL entry to apply to the directory described by the path parameter. - /// One or more of the values that specifies the type of access control list (ACL) information to set. - [SuppressMessage("Microsoft.Design", "CA1011:ConsiderPassingBaseTypesAsParameters")] - [SecurityCritical] - public void SetAccessControl(DirectorySecurity directorySecurity, AccessControlSections includeSections) - { - File.SetAccessControlCore(LongFullName, null, directorySecurity, includeSections, PathFormat.LongFullPath); - } - } -} diff --git a/AlphaFS/Filesystem/DirectoryInfo Class/DirectoryInfo.ToString.cs b/AlphaFS/Filesystem/DirectoryInfo Class/DirectoryInfo.ToString.cs deleted file mode 100644 index 7e4b33a..0000000 --- a/AlphaFS/Filesystem/DirectoryInfo Class/DirectoryInfo.ToString.cs +++ /dev/null @@ -1,33 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -namespace Alphaleonis.Win32.Filesystem -{ - partial class DirectoryInfo - { - /// Returns the original path that was passed by the user. - /// A string that represents this object. - public override string ToString() - { - return DisplayPath; - } - } -} diff --git a/AlphaFS/Filesystem/DirectoryInfo Class/DirectoryInfo.cs b/AlphaFS/Filesystem/DirectoryInfo Class/DirectoryInfo.cs deleted file mode 100644 index d784bc1..0000000 --- a/AlphaFS/Filesystem/DirectoryInfo Class/DirectoryInfo.cs +++ /dev/null @@ -1,203 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System; -using System.Diagnostics.CodeAnalysis; -using System.IO; -using System.Security; - -namespace Alphaleonis.Win32.Filesystem -{ - /// Exposes instance methods for creating, moving, and enumerating through directories and subdirectories. This class cannot be inherited. - [SerializableAttribute] - public sealed partial class DirectoryInfo : FileSystemInfo - { - #region Constructors - - #region .NET - - /// Initializes a new instance of the class on the specified path. - /// The path on which to create the . - /// - /// This constructor does not check if a directory exists. This constructor is a placeholder for a string that is used to access the disk in subsequent operations. - /// The path parameter can be a file name, including a file on a Universal Naming Convention (UNC) share. - /// - public DirectoryInfo(string path) : this(null, path, PathFormat.RelativePath) - { - } - - #endregion // .NET - - #region AlphaFS - - /// [AlphaFS] Initializes a new instance of the class on the specified path. - /// The path on which to create the . - /// Indicates the format of the path parameter(s). - /// This constructor does not check if a directory exists. This constructor is a placeholder for a string that is used to access the disk in subsequent operations. - public DirectoryInfo(string path, PathFormat pathFormat) : this(null, path, pathFormat) - { - } - - /// [AlphaFS] Special internal implementation. - /// The transaction. - /// The full path on which to create the . - /// Not used. - /// Not used. - /// This constructor does not check if a directory exists. This constructor is a placeholder for a string that is used to access the disk in subsequent operations. - [SuppressMessage("Microsoft.Usage", "CA1801:ReviewUnusedParameters", MessageId = "junk1")] - [SuppressMessage("Microsoft.Usage", "CA1801:ReviewUnusedParameters", MessageId = "junk2")] - private DirectoryInfo(KernelTransaction transaction, string fullPath, bool junk1, bool junk2) - { - IsDirectory = true; - Transaction = transaction; - - LongFullName = Path.GetLongPathCore(fullPath, GetFullPathOptions.None); - - OriginalPath = Path.GetFileName(fullPath, true); - - FullPath = fullPath; - - DisplayPath = OriginalPath.Length != 2 || OriginalPath[1] != Path.VolumeSeparatorChar ? OriginalPath : Path.CurrentDirectoryPrefix; - } - - #region Transactional - - /// [AlphaFS] Initializes a new instance of the class on the specified path. - /// The transaction. - /// The path on which to create the . - /// This constructor does not check if a directory exists. This constructor is a placeholder for a string that is used to access the disk in subsequent operations. - public DirectoryInfo(KernelTransaction transaction, string path) : this(transaction, path, PathFormat.RelativePath) - { - } - - /// [AlphaFS] Initializes a new instance of the class on the specified path. - /// The transaction. - /// The path on which to create the . - /// Indicates the format of the path parameter(s). - /// This constructor does not check if a directory exists. This constructor is a placeholder for a string that is used to access the disk in subsequent operations. - public DirectoryInfo(KernelTransaction transaction, string path, PathFormat pathFormat) - { - InitializeCore(true, transaction, path, pathFormat); - } - - #endregion // Transactional - - #endregion // AlphaFS - - #endregion // Constructors - - #region Properties - - #region .NET - - #region Exists - - /// Gets a value indicating whether the directory exists. - /// - /// The property returns if any error occurs while trying to determine if the - /// specified directory exists. - /// This can occur in situations that raise exceptions such as passing a directory name with invalid characters or too many - /// characters, - /// a failing or missing disk, or if the caller does not have permission to read the directory. - /// - /// if the directory exists; otherwise, . - [SuppressMessage("Microsoft.Design", "CA1031:DoNotCatchGeneralExceptionTypes")] - public override bool Exists - { - [SecurityCritical] - get - { - try - { - if (DataInitialised == -1) - Refresh(); - - FileAttributes attrs = Win32AttributeData.dwFileAttributes; - return DataInitialised == 0 && attrs != (FileAttributes) (-1) && (attrs & FileAttributes.Directory) != 0; - } - catch - { - return false; - } - } - } - - #endregion // Exists - - #region Name - - /// Gets the name of this instance. - /// The directory name. - /// - /// This Name property returns only the name of the directory, such as "Bin". - /// To get the full path, such as "c:\public\Bin", use the FullName property. - /// - public override string Name - { - get - { - // GetDirName() - return FullPath.Length > 3 - ? Path.GetFileName(Path.RemoveTrailingDirectorySeparator(FullPath, false), true) - : FullPath; - } - } - - #endregion // Name - - #region Parent - - /// Gets the parent directory of a specified subdirectory. - /// The parent directory, or null if the path is null or if the file path denotes a root (such as "\", "C:", or * "\\server\share"). - public DirectoryInfo Parent - { - [SecurityCritical] - get - { - string path = FullPath; - - if (path.Length > 3) - path = Path.RemoveTrailingDirectorySeparator(FullPath, false); - - string dirName = Path.GetDirectoryName(path, false); - return dirName == null ? null : new DirectoryInfo(Transaction, dirName, true, true); - } - } - - #endregion // Parent - - #region Root - - /// Gets the root portion of the directory. - /// An object that represents the root of the directory. - public DirectoryInfo Root - { - [SecurityCritical] - get { return new DirectoryInfo(Transaction, Path.GetPathRoot(FullPath, false), PathFormat.RelativePath); } - } - - #endregion // Root - - #endregion // .NET - - #endregion // Properties - } -} diff --git a/AlphaFS/Filesystem/DiskSpaceInfo.cs b/AlphaFS/Filesystem/DiskSpaceInfo.cs deleted file mode 100644 index 619673e..0000000 --- a/AlphaFS/Filesystem/DiskSpaceInfo.cs +++ /dev/null @@ -1,265 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System; -using System.Diagnostics.CodeAnalysis; -using System.Globalization; -using System.Runtime.InteropServices; -using System.Security; - -namespace Alphaleonis.Win32.Filesystem -{ - /// Retrieves information about the amount of space that is available on a disk volume, which is the total amount of space, - /// the total amount of free space, and the total amount of free space available to the user that is associated with the calling thread. - /// This class cannot be inherited. - /// - [SerializableAttribute] - [SecurityCritical] - public sealed class DiskSpaceInfo - { - #region Constructor - - /// Initializes a DiskSpaceInfo instance. - /// A valid drive path or drive letter. This can be either uppercase or lowercase, 'a' to 'z' or a network share in the format: \\server\share - /// This is a Lazyloading object; call to populate all properties first before accessing. - [SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "0", Justification = "Utils.IsNullOrWhiteSpace validates arguments.")] - [SecurityCritical] - public DiskSpaceInfo(string drivePath) - { - if (Utils.IsNullOrWhiteSpace(drivePath)) - throw new ArgumentNullException("drivePath"); - - if (drivePath.Length == 1) - DriveName += Path.VolumeSeparatorChar; - else - DriveName = Path.GetPathRoot(drivePath, false); - - if (Utils.IsNullOrWhiteSpace(DriveName)) - throw new ArgumentException("Argument must be a drive letter (\"C\"), RootDir (\"C:\\\") or UNC path (\"\\\\server\\share\")"); - - // MSDN: - // If this parameter is a UNC name, it must include a trailing backslash (for example, "\\MyServer\MyShare\"). - // Furthermore, a drive specification must have a trailing backslash (for example, "C:\"). - // The calling application must have FILE_LIST_DIRECTORY access rights for this directory. - DriveName = Path.AddTrailingDirectorySeparator(DriveName, false); - } - - /// Initializes a DiskSpaceInfo instance. - /// A valid drive path or drive letter. This can be either uppercase or lowercase, 'a' to 'z' or a network share in the format: \\server\share - /// gets both size- and disk cluster information. Get only disk cluster information, Get only size information. - /// Refreshes the state of the object. - /// suppress any Exception that might be thrown as a result from a failure, such as unavailable resources. - [SecurityCritical] - public DiskSpaceInfo(string drivePath, bool? spaceInfoType, bool refresh, bool continueOnException) : this(drivePath) - { - if (spaceInfoType == null) - _initGetSpaceInfo = _initGetClusterInfo = true; - - else - { - _initGetSpaceInfo = (bool) !spaceInfoType; - _initGetClusterInfo = (bool) spaceInfoType; - } - - _continueOnAccessError = continueOnException; - - if (refresh) - Refresh(); - } - - #endregion // Constructor - - #region Fields - - private readonly bool _initGetClusterInfo = true; - private readonly bool _initGetSpaceInfo = true; - private readonly bool _continueOnAccessError; - - #endregion // Fields - - #region Methods - - #region Refresh - - /// Refreshes the state of the object. - public void Refresh() - { - Reset(); - - using (new NativeMethods.ChangeErrorMode(NativeMethods.ErrorMode.FailCriticalErrors)) - { - int lastError = (int) Win32Errors.NO_ERROR; - - #region Get size information. - - if (_initGetSpaceInfo) - { - long freeBytesAvailable, totalNumberOfBytes, totalNumberOfFreeBytes; - - if (!NativeMethods.GetDiskFreeSpaceEx(DriveName, out freeBytesAvailable, out totalNumberOfBytes, out totalNumberOfFreeBytes)) - lastError = Marshal.GetLastWin32Error(); - - else - { - FreeBytesAvailable = freeBytesAvailable; - TotalNumberOfBytes = totalNumberOfBytes; - TotalNumberOfFreeBytes = totalNumberOfFreeBytes; - } - - if (!_continueOnAccessError && (lastError != Win32Errors.NO_ERROR && lastError != Win32Errors.ERROR_NOT_READY)) - NativeError.ThrowException(DriveName); - } - - #endregion // Get size information. - - #region Get cluster information. - - if (_initGetClusterInfo) - { - int sectorsPerCluster, bytesPerSector, numberOfFreeClusters; - uint totalNumberOfClusters; - - if (!NativeMethods.GetDiskFreeSpace(DriveName, out sectorsPerCluster, out bytesPerSector, out numberOfFreeClusters, out totalNumberOfClusters)) - lastError = Marshal.GetLastWin32Error(); - - else - { - BytesPerSector = bytesPerSector; - NumberOfFreeClusters = numberOfFreeClusters; - SectorsPerCluster = sectorsPerCluster; - TotalNumberOfClusters = totalNumberOfClusters; - } - - if (!_continueOnAccessError && (lastError != Win32Errors.NO_ERROR && lastError != Win32Errors.ERROR_NOT_READY)) - NativeError.ThrowException(DriveName); - } - - #endregion // Get cluster information. - } - } - - #endregion // Refresh - - #region Reset - - /// Initializes all properties to 0. - private void Reset() - { - if (_initGetSpaceInfo) - FreeBytesAvailable = TotalNumberOfBytes = TotalNumberOfFreeBytes = 0; - - if (_initGetClusterInfo) - { - BytesPerSector = NumberOfFreeClusters = SectorsPerCluster = 0; - TotalNumberOfClusters = 0; - } - } - - #endregion // Reset - - #region ToString - /// Returns the drive name. - /// A string that represents this object. - public override string ToString() - { - return DriveName; - } - - #endregion // ToString - - #endregion // Methods - - #region Properties - - /// Indicates the amount of available free space on a drive, formatted as percentage. - public string AvailableFreeSpacePercent - { - get - { - return string.Format(CultureInfo.CurrentCulture, "{0:0.00}%", Utils.PercentCalculate(TotalNumberOfBytes - (TotalNumberOfBytes - TotalNumberOfFreeBytes), 0, TotalNumberOfBytes)); - } - } - - /// Indicates the amount of available free space on a drive, formatted as a unit size. - public string AvailableFreeSpaceUnitSize - { - get { return Utils.UnitSizeToText(TotalNumberOfFreeBytes); } - } - - /// Returns the Clusters size. - public long ClusterSize - { - get { return SectorsPerCluster * BytesPerSector; } - } - - /// Gets the name of a drive. - /// The name of the drive. - /// This property is the name assigned to the drive, such as C:\ or E:\ - public string DriveName { get; private set; } - - /// The total number of bytes on a disk that are available to the user who is associated with the calling thread, formatted as a unit size. - public string TotalSizeUnitSize - { - get { return Utils.UnitSizeToText(TotalNumberOfBytes); } - } - - /// Indicates the amount of used space on a drive, formatted as percentage. - public string UsedSpacePercent - { - get - { - return string.Format(CultureInfo.CurrentCulture, "{0:0.00}%", Utils.PercentCalculate(TotalNumberOfBytes - FreeBytesAvailable, 0, TotalNumberOfBytes)); - } - } - - /// Indicates the amount of used space on a drive, formatted as a unit size. - public string UsedSpaceUnitSize - { - get { return Utils.UnitSizeToText(TotalNumberOfBytes - FreeBytesAvailable); } - } - - /// The total number of free bytes on a disk that are available to the user who is associated with the calling thread. - public long FreeBytesAvailable { get; private set; } - - /// The total number of bytes on a disk that are available to the user who is associated with the calling thread. - public long TotalNumberOfBytes { get; private set; } - - /// The total number of free bytes on a disk. - public long TotalNumberOfFreeBytes { get; private set; } - - /// The number of bytes per sector. - public int BytesPerSector { get; private set; } - - /// The total number of free clusters on the disk that are available to the user who is associated with the calling thread. - public int NumberOfFreeClusters { get; private set; } - - /// The number of sectors per cluster. - public int SectorsPerCluster { get; private set; } - - /// The total number of clusters on the disk that are available to the user who is associated with the calling thread. - /// If per-user disk quotas are in use, this value may be less than the total number of clusters on the disk. - /// - public long TotalNumberOfClusters { get; private set; } - - - #endregion // Properties - } -} diff --git a/AlphaFS/Filesystem/DriveInfo.cs b/AlphaFS/Filesystem/DriveInfo.cs deleted file mode 100644 index 6238c5c..0000000 --- a/AlphaFS/Filesystem/DriveInfo.cs +++ /dev/null @@ -1,422 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System; -using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; -using System.IO; -using System.Linq; -using System.Security; - -namespace Alphaleonis.Win32.Filesystem -{ - /// Provides access to information on a local or remote drive. - /// - /// This class models a drive and provides methods and properties to query for drive information. - /// Use DriveInfo to determine what drives are available, and what type of drives they are. - /// You can also query to determine the capacity and available free space on the drive. - /// - [Serializable] - [SecurityCritical] - public sealed class DriveInfo - { - #region Private Fields - - [NonSerialized] - private readonly VolumeInfo _volumeInfo; - - [NonSerialized] - private readonly DiskSpaceInfo _dsi; - - [NonSerialized] - private bool _initDsie; - - [NonSerialized] - private DriveType? _driveType; - - [NonSerialized] - private string _dosDeviceName; - - [NonSerialized] - private DirectoryInfo _rootDirectory; - - private readonly string _name; - - - #endregion - - #region Constructors - - /// Provides access to information on the specified drive. - /// - /// - /// - /// A valid drive path or drive letter. - /// This can be either uppercase or lowercase, - /// 'a' to 'z' or a network share in the format: \\server\share - /// - [SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "0", Justification = "Utils.IsNullOrWhiteSpace validates arguments.")] - [SecurityCritical] - public DriveInfo(string driveName) - { - if (Utils.IsNullOrWhiteSpace(driveName)) - throw new ArgumentNullException("driveName"); - - if (driveName.Length == 1) - _name += Path.VolumeSeparatorChar; - else - _name = Path.GetPathRoot(driveName, false); - - if (Utils.IsNullOrWhiteSpace(_name)) - throw new ArgumentException("Argument must be a drive letter (\"C\"), RootDir (\"C:\\\") or UNC path (\"\\\\server\\share\")"); - - // If an exception is thrown, the original drivePath is used. - _name = Path.AddTrailingDirectorySeparator(_name, false); - - - // Initiate VolumeInfo() lazyload instance. - _volumeInfo = new VolumeInfo(_name, false, true); - - // Initiate DiskSpaceInfo() lazyload instance. - _dsi = new DiskSpaceInfo(_name, null, false, true); - } - - #endregion // Constructors - - #region Properties - - /// Indicates the amount of available free space on a drive. - /// The amount of free space available on the drive, in bytes. - /// This property indicates the amount of free space available on the drive. Note that this number may be different from the number because this property takes into account disk quotas. - public long AvailableFreeSpace - { - get - { - GetDeviceInfo(3, 0); - return _dsi == null ? 0 : _dsi.FreeBytesAvailable; - } - } - - /// Gets the name of the file system, such as NTFS or FAT32. - /// Use DriveFormat to determine what formatting a drive uses. - public string DriveFormat - { - get { return (string)GetDeviceInfo(0, 1); } - } - - /// Gets the drive type. - /// One of the values. - /// - /// The DriveType property indicates whether a drive is any of: CDRom, Fixed, Unknown, Network, NoRootDirectory, - /// Ram, Removable, or Unknown. Values are listed in the enumeration. - /// - public DriveType DriveType - { - get { return (DriveType)GetDeviceInfo(2, 0); } - } - - /// Gets a value indicating whether a drive is ready. - /// if the drive is ready; otherwise, . - /// - /// IsReady indicates whether a drive is ready. For example, it indicates whether a CD is in a CD drive or whether - /// a removable storage device is ready for read/write operations. If you do not test whether a drive is ready, and - /// it is not ready, querying the drive using DriveInfo will raise an IOException. - /// - /// Do not rely on IsReady() to avoid catching exceptions from other members such as TotalSize, TotalFreeSpace, and DriveFormat. - /// Between the time that your code checks IsReady and then accesses one of the other properties - /// (even if the access occurs immediately after the check), a drive may have been disconnected or a disk may have been removed. - /// - public bool IsReady - { - get { return File.ExistsCore(true, null, Name, PathFormat.LongFullPath); } - } - - - /// Gets the name of the drive. - /// The name of the drive. - /// This property is the name assigned to the drive, such as C:\ or E:\ - public string Name - { - get { return _name; } - } - - /// Gets the root directory of a drive. - /// A DirectoryInfo object that contains the root directory of the drive. - public DirectoryInfo RootDirectory - { - get { return (DirectoryInfo)GetDeviceInfo(2, 1); } - } - - /// Gets the total amount of free space available on a drive. - /// The total free space available on a drive, in bytes. - /// This property indicates the total amount of free space available on the drive, not just what is available to the current user. - public long TotalFreeSpace - { - get - { - GetDeviceInfo(3, 0); - return _dsi == null ? 0 : _dsi.TotalNumberOfFreeBytes; - } - } - - /// Gets the total size of storage space on a drive. - /// The total size of the drive, in bytes. - /// This property indicates the total size of the drive in bytes, not just what is available to the current user. - public long TotalSize - { - get - { - GetDeviceInfo(3, 0); - return _dsi == null ? 0 : _dsi.TotalNumberOfBytes; - } - } - - /// Gets or sets the volume label of a drive. - /// The volume label. - /// - /// The label length is determined by the operating system. For example, NTFS allows a volume label - /// to be up to 32 characters long. Note that is a valid VolumeLabel. - /// - - public string VolumeLabel - { - get { return (string)GetDeviceInfo(0, 2); } - set { Volume.SetVolumeLabel(Name, value); } - } - - /// [AlphaFS] Returns the instance. - public DiskSpaceInfo DiskSpaceInfo - { - get - { - GetDeviceInfo(3, 0); - return _dsi; - } - } - - /// [AlphaFS] The MS-DOS device name. - public string DosDeviceName - { - get { return (string)GetDeviceInfo(1, 0); } - } - - /// [AlphaFS] Indicates if this drive is a SUBST.EXE / DefineDosDevice drive mapping. - public bool IsDosDeviceSubstitute - { - get { return !Utils.IsNullOrWhiteSpace(DosDeviceName) && DosDeviceName.StartsWith(Path.SubstitutePrefix, StringComparison.OrdinalIgnoreCase); } - } - - /// [AlphaFS] Indicates if this drive is a UNC path. - /// Only retrieve this information if we're dealing with a real network share mapping: http://alphafs.codeplex.com/discussions/316583 - public bool IsUnc - { - get { return !IsDosDeviceSubstitute && DriveType == DriveType.Network; } - } - - /// [AlphaFS] Determines whether the specified volume name is a defined volume on the current computer. - public bool IsVolume - { - get { return GetDeviceInfo(0, 0) != null; } - } - - /// [AlphaFS] Contains information about a file-system volume. - /// A VolumeInfo object that contains file-system volume information of the drive. - public VolumeInfo VolumeInfo - { - get { return (VolumeInfo)GetDeviceInfo(0, 0); } - } - - - #endregion // Properties - - #region Methods - - /// Retrieves the drive names of all logical drives on a computer. - /// An array of type that represents the logical drives on a computer. - - [SecurityCritical] - public static DriveInfo[] GetDrives() - { - return Directory.EnumerateLogicalDrivesCore(false, false).ToArray(); - } - - /// Returns a drive name as a string. - /// The name of the drive. - /// This method returns the Name property. - public override string ToString() - { - return _name; - } - - - /// [AlphaFS] Enumerates the drive names of all logical drives on a computer. - /// Retrieve logical drives as known by the Environment. - /// Retrieve only when accessible (IsReady) logical drives. - /// - /// An IEnumerable of type that represents - /// the logical drives on a computer. - /// - [SecurityCritical] - public static IEnumerable EnumerateDrives(bool fromEnvironment, bool isReady) - { - return Directory.EnumerateLogicalDrivesCore(fromEnvironment, isReady); - } - - - /// [AlphaFS] Gets the first available drive letter on the local system. - /// A drive letter as . When no drive letters are available, an exception is thrown. - /// The letters "A" and "B" are reserved for floppy drives and will never be returned by this function. - - public static char GetFreeDriveLetter() - { - return GetFreeDriveLetter(false); - } - - /// Gets an available drive letter on the local system. - /// When get the last available drive letter. When gets the first available drive letter. - /// A drive letter as . When no drive letters are available, an exception is thrown. - /// The letters "A" and "B" are reserved for floppy drives and will never be returned by this function. - - [SuppressMessage("Microsoft.Design", "CA1024:UsePropertiesWhereAppropriate")] - [SuppressMessage("Microsoft.Usage", "CA2201:DoNotRaiseReservedExceptionTypes")] - public static char GetFreeDriveLetter(bool getLastAvailable) - { - IEnumerable freeDriveLetters = "CDEFGHIJKLMNOPQRSTUVWXYZ".Except(Directory.EnumerateLogicalDrivesCore(false, false).Select(d => d.Name[0])); - - try - { - return getLastAvailable ? freeDriveLetters.Last() : freeDriveLetters.First(); - } - catch - { - throw new Exception("There are no drive letters available."); - } - } - - #endregion // Methods - - #region Private Methods - - /// Retrieves information about the file system and volume associated with the specified root file or directorystream. - [SuppressMessage("Microsoft.Maintainability", "CA1502:AvoidExcessiveComplexity")] - [SuppressMessage("Microsoft.Design", "CA1031:DoNotCatchGeneralExceptionTypes")] - [SecurityCritical] - private object GetDeviceInfo(int type, int mode) - { - try - { - switch (type) - { - #region Volume - - // VolumeInfo properties. - case 0: - if (Utils.IsNullOrWhiteSpace(_volumeInfo.FullPath)) - _volumeInfo.Refresh(); - - switch (mode) - { - case 0: - // IsVolume, VolumeInfo - return _volumeInfo; - - case 1: - // DriveFormat - return _volumeInfo == null ? DriveType.Unknown.ToString() : _volumeInfo.FileSystemName ?? DriveType.Unknown.ToString(); - - case 2: - // VolumeLabel - return _volumeInfo == null ? string.Empty : _volumeInfo.Name ?? string.Empty; - } - break; - - // Volume related. - case 1: - switch (mode) - { - case 0: - // DosDeviceName - - // Do not use ?? expression here. - if (_dosDeviceName == null) - _dosDeviceName = Volume.QueryDosDevice(Name).FirstOrDefault(); - - return _dosDeviceName; - } - break; - - #endregion // Volume - - #region Drive - - // Drive related. - case 2: - switch (mode) - { - case 0: - // DriveType - // Do not use ?? expression here. - if (_driveType == null) - _driveType = Volume.GetDriveType(Name); - - return _driveType; - - case 1: - // RootDirectory - - // Do not use ?? expression here. - if (_rootDirectory == null) - _rootDirectory = new DirectoryInfo(null, Name, PathFormat.RelativePath); - - return _rootDirectory; - } - break; - - // DiskSpaceInfo related. - case 3: - switch (mode) - { - case 0: - // AvailableFreeSpace, TotalFreeSpace, TotalSize, DiskSpaceInfo - if (!_initDsie) - { - _dsi.Refresh(); - _initDsie = true; - } - break; - } - break; - - #endregion // Drive - } - } - catch - { - } - - return type == 0 && mode > 0 ? string.Empty : null; - } - - - #endregion // Private - - } -} diff --git a/AlphaFS/Filesystem/Enumerations/BackupStreamType.cs b/AlphaFS/Filesystem/Enumerations/BackupStreamType.cs deleted file mode 100644 index 495f7e1..0000000 --- a/AlphaFS/Filesystem/Enumerations/BackupStreamType.cs +++ /dev/null @@ -1,84 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System.Diagnostics.CodeAnalysis; - -namespace Alphaleonis.Win32.Filesystem -{ - /// The type of the data contained in the backup stream. - public enum BackupStreamType - { - /// This indicates an error. - None = 0, - - /// BACKUP_DATA - /// Standard data. This corresponds to the NTFS $DATA stream type on the default (unnamed) data stream. - /// - Data = 1, - - /// BACKUP_EA_DATA - /// Extended attribute data. This corresponds to the NTFS $EA stream type. - /// - ExtendedAttributesData = 2, - - /// BACKUP_SECURITY_DATA - /// Security descriptor data. - /// - SecurityData = 3, - - /// BACKUP_ALTERNATE_DATA - /// Alternative data streams. This corresponds to the NTFS $DATA stream type on a named data stream. - /// - AlternateData = 4, - - /// BACKUP_LINK - /// Hard link information. This corresponds to the NTFS $FILE_NAME stream type. - /// - Link = 5, - - /// BACKUP_PROPERTY_DATA - /// Property data. - /// - PropertyData = 6, - - /// BACKUP_OBJECT_ID - /// Objects identifiers. This corresponds to the NTFS $OBJECT_ID stream type. - /// - ObjectId = 7, - - /// BACKUP_REPARSE_DATA - /// Reparse points. This corresponds to the NTFS $REPARSE_POINT stream type. - /// - ReparseData = 8, - - /// BACKUP_SPARSE_BLOCK - /// Sparse file. This corresponds to the NTFS $DATA stream type for a sparse file. - /// - SparseBlock = 9, - - /// BACKUP_TXFS_DATA - /// Transactional NTFS (TxF) data stream. - /// - /// Windows Server 2003 and Windows XP: This value is not supported. - [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Txfs")] - TxfsData = 10 - } -} \ No newline at end of file diff --git a/AlphaFS/Filesystem/Enumerations/CopyMoveProgressCallbackReason.cs b/AlphaFS/Filesystem/Enumerations/CopyMoveProgressCallbackReason.cs deleted file mode 100644 index 1664118..0000000 --- a/AlphaFS/Filesystem/Enumerations/CopyMoveProgressCallbackReason.cs +++ /dev/null @@ -1,37 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -namespace Alphaleonis.Win32.Filesystem -{ - /// Used by CopyFileXxx and MoveFileXxx. The reason that was called. - public enum CopyMoveProgressCallbackReason - { - /// CALLBACK_CHUNK_FINISHED - /// Another part of the data file was copied. - /// - ChunkFinished = 0, - - /// CALLBACK_STREAM_SWITCH - /// Another stream was created and is about to be copied. This is the callback reason given when the callback routine is first invoked. - /// - StreamSwitch = 1 - } -} \ No newline at end of file diff --git a/AlphaFS/Filesystem/Enumerations/CopyMoveProgressResult.cs b/AlphaFS/Filesystem/Enumerations/CopyMoveProgressResult.cs deleted file mode 100644 index 8e2fa6d..0000000 --- a/AlphaFS/Filesystem/Enumerations/CopyMoveProgressResult.cs +++ /dev/null @@ -1,47 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -namespace Alphaleonis.Win32.Filesystem -{ - /// Used by CopyFileXxx and MoveFileXxx. The function should return one of the following values. - public enum CopyMoveProgressResult - { - /// PROGRESS_CONTINUE - /// Continue the copy operation. - /// - Continue = 0, - - /// PROGRESS_CANCEL - /// Cancel the copy operation and delete the destination file. - /// - Cancel = 1, - - /// PROGRESS_STOP - /// Stop the copy operation. It can be restarted at a later time. - /// - Stop = 2, - - /// PROGRESS_QUIET - /// Continue the copy operation, but stop invoking to report progress. - /// - Quiet = 3 - } -} \ No newline at end of file diff --git a/AlphaFS/Filesystem/Enumerations/CopyOptions.cs b/AlphaFS/Filesystem/Enumerations/CopyOptions.cs deleted file mode 100644 index 1b2d066..0000000 --- a/AlphaFS/Filesystem/Enumerations/CopyOptions.cs +++ /dev/null @@ -1,69 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System; -using System.Diagnostics.CodeAnalysis; - -namespace Alphaleonis.Win32.Filesystem -{ - /// Flags that specify how a file or directory is to be copied. - [Flags] - public enum CopyOptions - { - /// No CopyOptions used, this allows overwriting the file. - None = 0, - - /// COPY_FILE_FAIL_IF_EXISTS - /// The copy operation fails immediately if the target file already exists. - /// - FailIfExists = 1, - - /// COPY_FILE_RESTARTABLE - /// - /// Progress of the copy is tracked in the target file in case the copy fails. The failed copy can be restarted at a later time by specifying the same values - /// forexisting file name and new file name as those used in the call that failed. This can significantly slow down the copy operation as the new file may be - /// flushed multiple times during the copy operation. - /// - /// - [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Restartable")] - Restartable = 2, - - /// COPY_FILE_OPEN_SOURCE_FOR_WRITE - /// The file is copied and the original file is opened for write access. - /// - OpenSourceForWrite = 4, - - /// COPY_FILE_ALLOW_DECRYPTED_DESTINATION - /// An attempt to copy an encrypted file will succeed even if the destination copy cannot be encrypted. - /// - AllowDecryptedDestination = 8, - - /// COPY_FILE_COPY_SYMLINK - /// If the source file is a symbolic link, the destination file is also a symbolic link pointing to the same file that the source symbolic link is pointing to. - /// - CopySymbolicLink = 2048, - - /// COPY_FILE_NO_BUFFERING - /// The copy operation is performed using unbuffered I/O, bypassing system I/O cache resources. Recommended for very large file transfers. - /// - NoBuffering = 4096 - } -} \ No newline at end of file diff --git a/AlphaFS/Filesystem/Enumerations/DeviceGuid.cs b/AlphaFS/Filesystem/Enumerations/DeviceGuid.cs deleted file mode 100644 index 288e0ef..0000000 --- a/AlphaFS/Filesystem/Enumerations/DeviceGuid.cs +++ /dev/null @@ -1,200 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System.ComponentModel; -using System.Diagnostics.CodeAnalysis; - -namespace Alphaleonis.Win32.Filesystem -{ - /// System-Defined Device Interface Classes - /// http://msdn.microsoft.com/en-us/library/windows/hardware/ff541389%28v=vs.85%29.aspx - public enum DeviceGuid - { - #region 1394 and 61883 Devices - - /// The BUS1394_CLASS_GUID device interface class is defined for 1394 bus devices. - [Description("6BDD1FC1-810F-11d0-BEC7-08002BE2092F")] Bus1394, - - /// The GUID_61883_CLASS device interface class is defined for devices in the 61883 device setup class. - [Description("7EBEFBC0-3200-11d2-B4C2-00A0C9697D07")] Guid61883, - - #endregion // 1394 and 61883 Devices - - #region Battery and ACPI devices - - /// The GUID_DEVICE_APPLICATIONLAUNCH_BUTTON device interface class is defined for Advanced Configuration and Power Interface (ACPI) application start buttons. - [Description("629758EE-986E-4D9E-8E47-DE27F8AB054D")] ApplicationLaunchButton, - - /// The GUID_DEVICE_BATTERY device interface class is defined for battery devices. - [Description("72631E54-78A4-11D0-BCF7-00AA00B7B32A")] Battery, - - /// The GUID_DEVICE_LID device interface class is defined for Advanced Configuration and Power Interface (ACPI) lid devices. - [Description("4AFA3D52-74A7-11d0-be5e-00A0C9062857")] Lid, - - /// The GUID_DEVICE_MEMORY device interface class is defined for Advanced Configuration and Power Interface (ACPI) memory devices. - [Description("3FD0F03D-92E0-45FB-B75C-5ED8FFB01021")] Memory, - - /// The GUID_DEVICE_MESSAGE_INDICATOR device interface class is defined for Advanced Configuration and Power Interface (ACPI) message indicator devices. - [Description("CD48A365-FA94-4CE2-A232-A1B764E5D8B4")] MessageIndicator, - - /// The GUID_DEVICE_PROCESSOR device interface class is defined for Advanced Configuration and Power Interface (ACPI) processor devices. - [Description("97FADB10-4E33-40AE-359C-8BEF029DBDD0")] Processor, - - /// The GUID_DEVICE_SYS_BUTTON device interface classis defined for Advanced Configuration and Power Interface (ACPI) system power button devices. - [Description("4AFA3D53-74A7-11d0-be5e-00A0C9062857")] SysButton, - - /// The GUID_DEVICE_THERMAL_ZONE device interface class is defined for Advanced Configuration and Power Interface (ACPI) thermal zone devices. - [Description("4AFA3D51-74A7-11d0-be5e-00A0C9062857")] ThermalZone, - - #endregion // Battery and ACPI devices - - #region Bluetooth Devices - - /// The GUID_BTHPORT_DEVICE_INTERFACE device interface class is defined for Bluetooth radios. - [Description("0850302A-B344-4fda-9BE9-90576B8D46F0")] Bluetooth, - - #endregion // Bluetooth Devices - - #region Display and Image Devices - - /// The GUID_DEVINTERFACE_BRIGHTNESS device interface class is defined for display adapter drivers that operate in the context of the Windows Vista Display Driver Model and support brightness control of monitor child devices. - [Description("FDE5BBA4-B3F9-46FB-BDAA-0728CE3100B4")] Brightness, - - /// The GUID_DEVINTERFACE_DISPLAY_ADAPTER device interface class is defined for display views that are supported by display adapters. - [Description("5B45201D-F2F2-4F3B-85BB-30FF1F953599")] DisplayAdapter, - - /// The GUID_DEVINTERFACE_I2C device interface class is defined for display adapter drivers that operate in the context of the Windows Vista Display Driver Model and perform I2C transactions with monitor child devices. - [Description("2564AA4F-DDDB-4495-B497-6AD4A84163D7")] I2C, - - /// The GUID_DEVINTERFACE_IMAGE device interface class is defined for WIA devices and Still Image (STI) devices, including digital cameras and scanners. - [Description("6BDD1FC6-810F-11D0-BEC7-08002BE2092F")] StillImage, - - /// The GUID_DEVINTERFACE_MONITOR device interface class is defined for monitor devices. - [Description("E6F07B5F-EE97-4a90-B076-33F57BF4EAA7")] Monitor, - - /// The GUID_DEVINTERFACE_OPM device interface class is defined for display adapter drivers that operate in the context of the Windows Vista Display Driver Model and support output protection management (OPM) for monitor child devices. - [Description("BF4672DE-6B4E-4BE4-A325-68A91EA49C09")] OutputProtectionManagement, - - /// The GUID_DEVINTERFACE_VIDEO_OUTPUT_ARRIVAL device interface class is defined for child devices of display devices. - [Description("1AD9E4F0-F88D-4360-BAB9-4C2D55E564CD")] VideoOutputArrival, - - /// The GUID_DISPLAY_DEVICE_ARRIVAL device interface class is defined for display adapters. - [Description("1CA05180-A699-450A-9A0C-DE4FBE3DDD89")] DisplayDeviceArrival, - - #endregion // Display and Image Devices - - #region Interactive Input Devices - - /// The GUID_DEVINTERFACE_HID device interface class is defined for HID collections. - [Description("4D1E55B2-F16F-11CF-88CB-001111000030")] Hid, - - /// The GUID_DEVINTERFACE_KEYBOARD device interface class is defined for keyboard devices. - [Description("4D1E55B2-F16F-11CF-88CB-001111000030")] Keyboard, - - /// The GUID_DEVINTERFACE_MOUSE device interface class is defined for mouse devices. - [Description("378DE44C-56EF-11D1-BC8C-00A0C91405DD")] Mouse, - - #endregion // Interactive Input Devices - - #region Modem Devices - - /// The GUID_DEVINTERFACE_MODEM device interface class is defined for modem devices. - [Description("2C7089AA-2E0E-11D1-B114-00C04FC2AAE4")] Modem, - - #endregion // Modem Devices - - #region Network Devices - - /// The GUID_DEVINTERFACE_NET device interface class is defined for network devices. - [Description("CAC88484-7515-4C03-82E6-71A87ABAC361")] Network, - - #endregion // Network Devices - - #region Serial and Parallel Port Devices - - /// The GUID_DEVINTERFACE_COMPORT device interface class is defined for COM ports. - [SuppressMessage("Microsoft.Naming", "CA1702:CompoundWordsShouldBeCasedCorrectly", MessageId = "ComPort")] - [Description("86E0D1E0-8089-11D0-9CE4-08003E301F73")] ComPort, - - /// The GUID_DEVINTERFACE_PARALLEL device interface class is defined for parallel ports that support an IEEE 1284-compatible hardware interface. - [Description("97F76EF0-F883-11D0-AF1F-0000F800845C")] Parallel, - - /// The GUID_DEVINTERFACE_PARCLASS device interface class is defined for devices that are attached to a parallel port. - [Description("811FC6A5-F728-11D0-A537-0000F8753ED1")] ParallelClass, - - /// The GUID_DEVINTERFACE_SERENUM_BUS_ENUMERATOR device interface class is defined for Plug and Play (PnP) serial ports. - [Description("4D36E978-E325-11CE-BFC1-08002BE10318")] SerialEnumBusEnumerator, - - #endregion // Serial and Parallel Port Devices - - #region Storage Devices - - /// The GUID_DEVINTERFACE_CDCHANGER device interface class is defined for CD-ROM changer devices. - [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Cdrom")] - [Description("53F56312-B6BF-11D0-94F2-00A0C91EFB8B")] CdromChanger, - - /// The GUID_DEVINTERFACE_CDROM device interface class is defined for CD-ROM storage devices. - [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Cdrom")] - [Description("53F56308-B6BF-11D0-94F2-00A0C91EFB8B")] Cdrom, - - /// The GUID_DEVINTERFACE_DISK device interface class is defined for hard disk storage devices. - [Description("53F56307-B6BF-11D0-94F2-00A0C91EFB8B")] Disk, - - /// The GUID_DEVINTERFACE_FLOPPY device interface class is defined for floppy disk storage devices. - [Description("53F56311-B6BF-11D0-94F2-00A0C91EFB8B")] Floppy, - - /// The GUID_DEVINTERFACE_MEDIUMCHANGER device interface class is defined for medium changer devices. - [Description("53F56310-B6BF-11D0-94F2-00A0C91EFB8B")] MediumChanger, - - /// The GUID_DEVINTERFACE_PARTITION device interface class is defined for partition devices. - [Description("53F5630A-B6BF-11D0-94F2-00A0C91EFB8B")] Partition, - - /// The GUID_DEVINTERFACE_STORAGEPORT device interface class is defined for storage port devices. - [Description("2ACCFE60-C130-11D2-B082-00A0C91EFB8B")] StoragePort, - - /// The GUID_DEVINTERFACE_TAPE device interface class is defined for tape storage devices. - [Description("53F5630B-B6BF-11D0-94F2-00A0C91EFB8B")] Tape, - - /// The GUID_DEVINTERFACE_VOLUME device interface class is defined for volume devices. - [Description("53F5630D-B6BF-11D0-94F2-00A0C91EFB8B")] Volume, - - /// The GUID_DEVINTERFACE_WRITEONCEDISK device interface class is defined for write-once disk devices. - [Description("53F5630C-B6BF-11D0-94F2-00A0C91EFB8B")] WriteOnceDisk, - - #endregion // Storage Devices - - #region USB Devices - - /// The GUID_DEVINTERFACE_USB_DEVICE device interface class is defined for USB devices that are attached to a USB hub. - [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Usb")] - [Description("A5DCBF10-6530-11D2-901F-00C04FB951ED")] UsbDevice, - - /// The GUID_DEVINTERFACE_USB_HOST_CONTROLLER device interface class is defined for USB host controller devices. - [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Usb")] - [Description("3ABF6F2D-71C4-462A-8A92-1E6861E6AF27")] UsbHostController, - - /// The GUID_DEVINTERFACE_USB_HUB device interface class is defined for USB hub devices. - [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Usb")] - [Description("F18A0E88-C30C-11D0-8815-00A0C906BED8")] UsbHub - - #endregion // USB Devices - } -} \ No newline at end of file diff --git a/AlphaFS/Filesystem/Enumerations/DiGetClassFlags.cs b/AlphaFS/Filesystem/Enumerations/DiGetClassFlags.cs deleted file mode 100644 index bb74db1..0000000 --- a/AlphaFS/Filesystem/Enumerations/DiGetClassFlags.cs +++ /dev/null @@ -1,61 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System; - -namespace Alphaleonis.Win32.Filesystem -{ - internal static partial class NativeMethods - { - /// Specifies control options that filter the device information elements that are added to the device information set. - [Flags] - internal enum SetupDiGetClassDevsExFlags - { - /// DIGCF_DEFAULT - /// Return only the device that is associated with the system default device interface, if one is set, for the specified device interface classes. - /// - Default = 1, // only valid with DIGCF_DEVICEINTERFACE - - /// DIGCF_PRESENT - /// Return only devices that are currently present. - /// - Present = 2, - - /// DIGCF_ALLCLASSES - /// Return a list of installed devices for the specified device setup classes or device interface classes. - /// - AllClasses = 4, - - /// DIGCF_PROFILE - /// Return only devices that are a part of the current hardware profile. - /// - Profile = 8, - - /// DIGCF_DEVICEINTERFACE - /// - /// Return devices that support device interfaces for the specified device interface classes. - /// This flag must be set in the Flags parameter if the Enumerator parameter specifies a Device Instance ID. - /// - /// - DeviceInterface = 16, - } - } -} \ No newline at end of file diff --git a/AlphaFS/Filesystem/Enumerations/DirectoryEnumerationOptions.cs b/AlphaFS/Filesystem/Enumerations/DirectoryEnumerationOptions.cs deleted file mode 100644 index fd9ce87..0000000 --- a/AlphaFS/Filesystem/Enumerations/DirectoryEnumerationOptions.cs +++ /dev/null @@ -1,62 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System; - -namespace Alphaleonis.Win32.Filesystem -{ - /// [AlphaFS] Directory enumeration options, flags that specify how a directory is to be enumerated. - [Flags] - public enum DirectoryEnumerationOptions - { - /// None (do not use). - None = 0, - - /// Enumerate files only. - Files = 1, - - /// Enumerate directories only. - Folders = 2, - - /// Enumerate files and directories. - FilesAndFolders = Files | Folders, - - /// Return full path as long full path (Unicode format), only valid when return type is . - AsLongPath = 4, - - /// Skip reparse points during directory enumeration. - SkipReparsePoints = 8, - - /// Suppress any Exception that might be thrown as a result from a failure, such as ACLs protected directories or non-accessible reparse points. - ContinueOnException = 16, - - /// Specifies whether to search the current directory, or the current directory and all subdirectories. - Recursive = 32, - - /// Enumerates the directory without querying the short file name, improving overall enumeration speed. - /// This option is enabled by default if supported. This value is not supported until Windows Server 2008 R2 and Windows 7. - BasicSearch = 64, - - /// Enumerates the directory using a larger buffer for directory queries, which can increase performance of the find operation. - /// This option is enabled by default if supported. This value is not supported until Windows Server 2008 R2 and Windows 7. - LargeCache = 128 - } -} diff --git a/AlphaFS/Filesystem/Enumerations/DosDeviceAttributes.cs b/AlphaFS/Filesystem/Enumerations/DosDeviceAttributes.cs deleted file mode 100644 index c14589c..0000000 --- a/AlphaFS/Filesystem/Enumerations/DosDeviceAttributes.cs +++ /dev/null @@ -1,60 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -using System; - -namespace Alphaleonis.Win32.Filesystem -{ - /// Defines the controllable aspects of the Volume.DefineDosDevice() method. - [Flags] - public enum DosDeviceAttributes - { - /// DDD_EXACT_MATCH_ON_REMOVE - /// Default. - /// - None = 0, - - /// DDD_RAW_TARGET_PATH - /// Uses the targetPath string as is. Otherwise, it is converted from an MS-DOS path to a path. - /// - RawTargetPath = 1, - - /// DDD_REMOVE_DEFINITION - /// Removes the specified definition for the specified device. - /// To determine which definition to remove, the function walks the list of mappings for the device, looking for a match of targetPath against a prefix of each mapping associated with this device. - /// The first mapping that matches is the one removed, and then the function returns. - /// If targetPath is null or a pointer to a null string, the function will remove the first mapping associated with the device and pop the most recent one pushed.If there is nothing left to pop, the device name will be removed. - /// If this value is not specified, the string pointed to by the targetPath parameter will become the new mapping for this device. - /// - RemoveDefinition = 2, - - /// DDD_EXACT_MATCH_ON_REMOVE - /// If this value is specified along with , the function will use an exact match to determine which mapping to remove. - /// Use this value to ensure that you do not delete something that you did not define. - /// - ExactMatchOnRemove = 4, - - /// DDD_NO_BROADCAST_SYSTEM - /// Do not broadcast the WM_SETTINGCHANGE message. - /// By default, this message is broadcast to notify the shell and applications of the change. - /// - NoBroadcastSystem = 8, - } -} \ No newline at end of file diff --git a/AlphaFS/Filesystem/Enumerations/EncryptedFileRawMode.cs b/AlphaFS/Filesystem/Enumerations/EncryptedFileRawMode.cs deleted file mode 100644 index a75e013..0000000 --- a/AlphaFS/Filesystem/Enumerations/EncryptedFileRawMode.cs +++ /dev/null @@ -1,45 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System; - -namespace Alphaleonis.Win32.Filesystem -{ - partial class NativeMethods - { - /// Indicates the operation to be performed when opening a file using the OpenEncryptedFileRaw. - [Flags] - internal enum EncryptedFileRawMode - { - /// (0) Open the file for export (backup). - CreateForExport = 0, - - /// (1) The file is being opened for import (restore). - CreateForImport = 1, - - /// (2) Import (restore) a directory containing encrypted files. This must be combined with one of the previous two flags to indicate the operation. - CreateForDir = 2, - - /// (4) Overwrite a hidden file on import. - OverwriteHidden = 4 - } - } -} diff --git a/AlphaFS/Filesystem/Enumerations/ErrorMode.cs b/AlphaFS/Filesystem/Enumerations/ErrorMode.cs deleted file mode 100644 index 44a6aa3..0000000 --- a/AlphaFS/Filesystem/Enumerations/ErrorMode.cs +++ /dev/null @@ -1,48 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System; - -namespace Alphaleonis.Win32.Filesystem -{ - internal static partial class NativeMethods - { - /// Enum for struct ChangeErrorMode. - [Flags] - internal enum ErrorMode - { - /// Use the system default, which is to display all error dialog boxes. - SystemDefault = 0, - - /// The system does not display the critical-error-handler message box. Instead, the system sends the error to the calling process/thread. - FailCriticalErrors = 1, - - /// The system does not display the Windows Error Reporting dialog. - NoGpfaultErrorbox = 2, - - /// The system automatically fixes memory alignment faults and makes them invisible to the application. It does this for the calling process and any descendant processes. This feature is only supported by certain processor architectures. - NoAlignmentFaultExcept = 4, - - /// The system does not display a message box when it fails to find a file. Instead, the error is returned to the calling process/thread. - NoOpenFileErrorbox = 32768 - } - } -} \ No newline at end of file diff --git a/AlphaFS/Filesystem/Enumerations/ExtendedFileAttributes.cs b/AlphaFS/Filesystem/Enumerations/ExtendedFileAttributes.cs deleted file mode 100644 index c8e67e4..0000000 --- a/AlphaFS/Filesystem/Enumerations/ExtendedFileAttributes.cs +++ /dev/null @@ -1,143 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System; -using System.Diagnostics.CodeAnalysis; -using System.IO; - -namespace Alphaleonis.Win32.Filesystem -{ - /// Specifies how the operating system should open a file. - [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2217:DoNotMarkEnumsWithFlags")] - [Flags] - public enum ExtendedFileAttributes - { - /// If you pass , the set of attributes is unspecified. explicitly sets no attributes. - None = 0, - - #region FILE_ATTRIBUTE - Attributes applying to any file - - /// The file is read only. Applications can read the file, but cannot write to or delete it. - /// Equals 1 - ReadOnly = FileAttributes.ReadOnly, - - /// The file is hidden. Do not include it in an ordinary directory listing. - /// Equals 2 - Hidden = FileAttributes.Hidden, - - /// The file is part of or used exclusively by an operating system. - /// Equals 4 - System = FileAttributes.System, - - /// The handle that identifies a directory. - /// Equals 16 - Directory = FileAttributes.Directory, - - /// The file should be archived. Applications use this attribute to mark files for backup or removal. - /// Equals 32 - Archive = FileAttributes.Archive, - - /// The file should be archived. Applications use this attribute to mark files for backup or removal. - /// Equals 64 - Device = FileAttributes.Device, - - /// The file does not have other attributes set. This attribute is valid only if used alone. - /// Equals 128 - Normal = FileAttributes.Normal, - - /// The file is being used for temporary storage. - /// Equals 256 - Temporary = FileAttributes.Temporary, - - /// A file that is a sparse file. - /// Equals 512 - SparseFile = FileAttributes.SparseFile, - - /// A file or directory that has an associated reparse point, or a file that is a symbolic link. - /// Equals 1024 - ReparsePoint = FileAttributes.ReparsePoint, - - /// A file or directory that is compressed. For a file, all of the data in the file is compressed. For a directory, compression is the default for newly created files and subdirectories. - /// Equals 2048 - Compressed = FileAttributes.Compressed, - - /// The data of a file is not immediately available. This attribute indicates that file data is physically moved to offline storage. This attribute is used by Remote Storage, the hierarchical storage management software. Applications should not arbitrarily change this attribute. - /// Equals 4096 - Offline = FileAttributes.Offline, - - /// The file or directory is not to be indexed by the content indexing service. - /// Equals 8192 - NotContentIndexed = FileAttributes.NotContentIndexed, - - /// The file or directory is encrypted. For a file, this means that all data in the file is encrypted. For a directory, this means that encryption is the default for newly created files and subdirectories. - /// Equals 16384 - Encrypted = FileOptions.Encrypted, - - #endregion // FILE_ATTRIBUTE - Attributes applying to any file - - /// The directory or user data stream is configured with integrity (only supported on ReFS volumes). It is not included in an ordinary directory listing. The integrity setting persists with the file if it's renamed. If a file is copied the destination file will have integrity set if either the source file or destination directory have integrity set. - /// This flag is not supported until Windows Server 2012. - IntegrityStream = 32768, - - /// The user data stream not to be read by the background data integrity scanner (AKA scrubber). When set on a directory it only provides inheritance. This flag is only supported on Storage Spaces and ReFS volumes. It is not included in an ordinary directory listing. - /// This flag is not supported until Windows Server 2012. - NoScrubData = 131072, - - /// ... - FirstPipeInstance = 524288, - - /// The file data is requested, but it should continue to be located in remote storage. It should not be transported back to local storage. This flag is for use by remote storage systems. - OpenNoRecall = 1048576, - - /// Normal reparse point processing will not occur; an attempt to open the reparse point will be made. When a file is opened, a file handle is returned, whether or not the filter that controls the reparse point is operational. See MSDN documentation for more information. - OpenReparsePoint = 2097152, - - /// Access will occur according to POSIX rules. This includes allowing multiple files with names, differing only in case, for file systems that support that naming. Use care when using this option, because files created with this flag may not be accessible by applications that are written for MS-DOS or 16-bit Windows. - [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Posix")] - PosixSemantics = 16777216, - - /// The file is being opened or created for a backup or restore operation. The system ensures that the calling process overrides file security checks when the process has SE_BACKUP_NAME and SE_RESTORE_NAME privileges. You must set this flag to obtain a handle to a directory. A directory handle can be passed to some functions instead of a file handle. - BackupSemantics = 33554432, - - /// The file is to be deleted immediately after all of its handles are closed, which includes the specified handle and any other open or duplicated handles. If there are existing open handles to a file, the call fails unless they were all opened with the share mode. Subsequent open requests for the file fail, unless the share mode is specified. - /// Equals 67108864 - DeleteOnClose = FileOptions.DeleteOnClose, - - /// Access is intended to be sequential from beginning to end. The system can use this as a hint to optimize file caching. - /// Equals 134217728 - SequentialScan = FileOptions.SequentialScan, - - /// Access is intended to be random. The system can use this as a hint to optimize file caching. - /// Equals 268435456 - RandomAccess = FileOptions.RandomAccess, - - /// There are strict requirements for successfully working with files opened with the flag, for details see the section on "File Buffering" in the online MSDN documentation. - NoBuffering = 536870912, - - /// The file or device is being opened or created for asynchronous I/O. - /// Equals 1073741824 - Overlapped = FileOptions.Asynchronous, - - /// Write operations will not go through any intermediate cache, they will go directly to disk. - /// Equals .NET -2147483648 - WriteThrough = FileOptions.WriteThrough - } -} diff --git a/AlphaFS/Filesystem/Enumerations/FINDEX_INFO_LEVELS.cs b/AlphaFS/Filesystem/Enumerations/FINDEX_INFO_LEVELS.cs deleted file mode 100644 index 40bf4b4..0000000 --- a/AlphaFS/Filesystem/Enumerations/FINDEX_INFO_LEVELS.cs +++ /dev/null @@ -1,44 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -namespace Alphaleonis.Win32.Filesystem -{ - internal static partial class NativeMethods - { - /// FINDEX_INFO_LEVELS Enumeration - Defines values that are used with the FindFirstFileEx function to specify the information level of the returned data. - /// - /// Minimum supported client: Windows XP [desktop apps | Windows Store apps] - /// Minimum supported server: Windows Server 2003 [desktop apps | Windows Store apps] - /// - internal enum FINDEX_INFO_LEVELS - { - /// A standard set of attribute is returned in a structure. - Standard = 0, - - /// The FindFirstFileEx function does not query the short file name, improving overall enumeration speed. - /// This value is not supported until Windows Server 2008 R2 and Windows 7. - Basic = 1 - - ///// This value is used for validation. Supported values are less than this value. - //MaxLevel - } - } -} diff --git a/AlphaFS/Filesystem/Enumerations/FileEncryptionStatus.cs b/AlphaFS/Filesystem/Enumerations/FileEncryptionStatus.cs deleted file mode 100644 index 158c8ec..0000000 --- a/AlphaFS/Filesystem/Enumerations/FileEncryptionStatus.cs +++ /dev/null @@ -1,58 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System.Diagnostics.CodeAnalysis; - -namespace Alphaleonis.Win32.Filesystem -{ - /// Represents the encryption status of the specified file. - public enum FileEncryptionStatus - { - /// The file can be encrypted. - [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Encryptable")] - Encryptable = 0, - - /// The file is encrypted. - Encrypted = 1, - - /// The file is a system file. System files cannot be encrypted. - SystemFile = 2, - - /// The file is a root directory. Root directories cannot be encrypted. - RootDirectory = 3, - - /// The file is a system directory. System directories cannot be encrypted. - SystemDirectory = 4, - - /// The encryption status is unknown. The file may be encrypted. - Unknown = 5, - - /// The file system does not support file encryption. - [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Filesystem")] - NoFilesystemSupport = 6, - - /// Reserved for future use. - UserDisallowed = 7, - - /// The file is a read-only file. - ReadOnly = 8 - } -} \ No newline at end of file diff --git a/AlphaFS/Filesystem/Enumerations/FileInfoByHandleClass.cs b/AlphaFS/Filesystem/Enumerations/FileInfoByHandleClass.cs deleted file mode 100644 index a156e1c..0000000 --- a/AlphaFS/Filesystem/Enumerations/FileInfoByHandleClass.cs +++ /dev/null @@ -1,270 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -namespace Alphaleonis.Win32.Filesystem -{ - internal static partial class NativeMethods - { - /// FILE_INFO_BY_HANDLE_CLASS - /// Identifies the type of file information that GetFileInformationByHandleEx should retrieve or SetFileInformationByHandle should set. - /// - internal enum FileInfoByHandleClass - { - #region FILE_BASIC_INFO - - /// FILE_BASIC_INFO - /// Minimal information for the file should be retrieved or set. Used for file handles. - /// - FileBasicInfo = 0, - - #endregion // FILE_BASIC_INFO - - #region FILE_STANDARD_INFO - - ///// FILE_STANDARD_INFO - ///// Extended information for the file should be retrieved. Used for file handles. - ///// Use only when calling GetFileInformationByHandleEx. - ///// - //FileStandardInfo = 1, - - #endregion // FILE_STANDARD_INFO - - #region FILE_NAME_INFO - - ///// FILE_NAME_INFO - ///// The file name should be retrieved. Used for any handles. - ///// Use only when calling GetFileInformationByHandleEx. - ///// - //FileNameInfo = 2, - - #endregion // FILE_NAME_INFO - - #region FILE_RENAME_INFO - - ///// FILE_RENAME_INFO - ///// The file name should be changed. Used for file handles. - ///// Use only when calling . - ///// - //FileRenameInfo = 3, - - #endregion // FILE_RENAME_INFO - - #region FILE_DISPOSITION_INFO - - ///// FILE_DISPOSITION_INFO - ///// The file should be deleted. Used for any handles. - ///// Use only when calling . - ///// - //FileDispositionInfo = 4, - - #endregion // FILE_DISPOSITION_INFO - - #region FILE_ALLOCATION_INFO - - ///// FILE_ALLOCATION_INFO - ///// The file allocation information should be changed. Used for file handles. - ///// Use only when calling . - ///// - //FileAllocationInfo = 5, - - #endregion // FILE_ALLOCATION_INFO - - #region FILE_END_OF_FILE_INFO - - ///// FILE_END_OF_FILE_INFO - ///// The end of the file should be set. Use only when calling . - ///// - //FileEndOfFileInfo = 6, - - #endregion // FILE_END_OF_FILE_INFO - - #region FILE_STREAM_INFO - - ///// FILE_STREAM_INFO - ///// File stream information for the specified file should be retrieved. Used for any handles. - ///// Use only when calling GetFileInformationByHandleEx. - ///// - //FileStreamInfo = 7, - - #endregion // FILE_STREAM_INFO - - #region FILE_COMPRESSION_INFO - - ///// FILE_COMPRESSION_INFO - ///// File compression information should be retrieved. Used for any handles. - ///// Use only when calling GetFileInformationByHandleEx. - ///// - //FileCompressionInfo = 8, - - #endregion // FILE_COMPRESSION_INFO - - #region FILE_ATTRIBUTE_TAG_INFO - - ///// FILE_ATTRIBUTE_TAG_INFO - ///// File attribute information should be retrieved. Used for any handles. - ///// Use only when calling GetFileInformationByHandleEx. - ///// - //FileAttributeTagInfo = 9, - - #endregion // FILE_ATTRIBUTE_TAG_INFO - - #region FILE_ID_BOTH_DIR_INFO - - /// FILE_ID_BOTH_DIR_INFO - /// Files in the specified directory should be retrieved. Used for directory handles. - /// Use only when calling GetFileInformationByHandleEx. - /// - /// The number of files returned for each call to GetFileInformationByHandleEx - /// depends on the size of the buffer that is passed to the function. - /// Any subsequent calls to GetFileInformationByHandleEx on the same handle - /// will resume the enumeration operation after the last file is returned. - /// - /// - FileIdBothDirectoryInfo = 10, - - #endregion // FILE_ID_BOTH_DIR_INFO - - #region FILE_ID_BOTH_DIR_INFO - - ///// FILE_ID_BOTH_DIR_INFO - ///// Identical to , but forces the enumeration operation to start again from the beginning. - ///// - //FileIdBothDirectoryInfoRestartInfo = 11, - - #endregion // FILE_ID_BOTH_DIR_INFO - - #region FILE_IO_PRIORITY_HINT_INFO - - ///// FILE_IO_PRIORITY_HINT_INFO - ///// Priority hint information should be set.Use only when calling . - ///// - //FileIoPriorityHintInfo = 12, - - #endregion // FILE_IO_PRIORITY_HINT_INFO - - #region FILE_REMOTE_PROTOCOL_INFO - - ///// (13) FILE_REMOTE_PROTOCOL_INFO - ///// File remote protocol information should be retrieved.Use for any handles. - ///// Use only when calling GetFileInformationByHandleEx. - ///// - //FileRemoteProtocolInfo = 13, - - #endregion // FILE_REMOTE_PROTOCOL_INFO - - #region FILE_FULL_DIR_INFO - - ///// (14) FILE_FULL_DIR_INFO - ///// Files in the specified directory should be retrieved. Used for directory handles. - ///// Use only when calling GetFileInformationByHandleEx. - ///// - ///// Windows Server 2008 R2, Windows 7, Windows Server 2008, Windows Vista, Windows Server 2003, and Windows XP: - ///// This value is not supported before Windows 8 and Windows Server 2012 - ///// - ///// - //FileFullDirectoryInfo = 14, - - #endregion // FILE_FULL_DIR_INFO - - #region FILE_FULL_DIR_INFO - - ///// FILE_FULL_DIR_INFO - ///// Identical to , but forces the enumeration operation to start again from the beginning. Use only when calling GetFileInformationByHandleEx. - ///// - ///// Windows Server 2008 R2, Windows 7, Windows Server 2008, Windows Vista, Windows Server 2003, and Windows XP: - ///// This value is not supported before Windows 8 and Windows Server 2012 - ///// - ///// - //FileFullDirectoryRestartInfo = 15, - - #endregion // FILE_FULL_DIR_INFO - - #region FILE_STORAGE_INFO - - ///// FILE_STORAGE_INFO - ///// File storage information should be retrieved. Use for any handles. - ///// Use only when calling GetFileInformationByHandleEx. - ///// - ///// Windows Server 2008 R2, Windows 7, Windows Server 2008, Windows Vista, Windows Server 2003, and Windows XP: - ///// This value is not supported before Windows 8 and Windows Server 2012 - ///// - ///// - //FileStorageInfo = 16, - - #endregion // FILE_STORAGE_INFO - - #region FILE_ALIGNMENT_INFO - - ///// FILE_ALIGNMENT_INFO - ///// File alignment information should be retrieved. Use for any handles. - ///// Use only when calling GetFileInformationByHandleEx. - ///// - ///// Windows Server 2008 R2, Windows 7, Windows Server 2008, Windows Vista, Windows Server 2003, and Windows XP: - ///// This value is not supported before Windows 8 and Windows Server 2012 - ///// - ///// - //FileAlignmentInfo = 17, - - #endregion FILE_ALIGNMENT_INFO - - #region FILE_ID_INFO - - ///// FILE_ID_INFO - ///// File information should be retrieved. Use for any handles. - ///// Use only when calling GetFileInformationByHandleEx. - ///// - ///// Windows Server 2008 R2, Windows 7, Windows Server 2008, Windows Vista, Windows Server 2003, and Windows XP: - ///// This value is not supported before Windows 8 and Windows Server 2012 - ///// - ///// - //FileIdInfo = 18, - - #endregion // FILE_ID_INFO - - #region FILE_ID_EXTD_DIR_INFO - - ///// FILE_ID_EXTD_DIR_INFO - ///// Files in the specified directory should be retrieved. Used for directory handles. - ///// Use only when calling GetFileInformationByHandleEx. - ///// - ///// Windows Server 2008 R2, Windows 7, Windows Server 2008, Windows Vista, Windows Server 2003, and Windows XP: - ///// This value is not supported before Windows 8 and Windows Server 2012 - ///// - ///// - //FileIdExtdDirectoryInfo = 19, - - #endregion // FILE_ID_EXTD_DIR_INFO - - #region FILE_ID_EXTD_DIR_INFO - - ///// FILE_ID_EXTD_DIR_INFO - ///// Identical to , but forces the enumeration operation to start again from the beginning. Use only when calling GetFileInformationByHandleEx. - ///// - ///// Windows Server 2008 R2, Windows 7, Windows Server 2008, Windows Vista, Windows Server 2003, and Windows XP: - ///// This value is not supported before Windows 8 and Windows Server 2012 - ///// - ///// - //FileIdExtdDirectoryRestartInfo = 20 - - #endregion // FILE_ID_EXTD_DIR_INFO - } - } -} \ No newline at end of file diff --git a/AlphaFS/Filesystem/Enumerations/FinalPathFormats.cs b/AlphaFS/Filesystem/Enumerations/FinalPathFormats.cs deleted file mode 100644 index 8e5feea..0000000 --- a/AlphaFS/Filesystem/Enumerations/FinalPathFormats.cs +++ /dev/null @@ -1,45 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System; - -namespace Alphaleonis.Win32.Filesystem -{ - /// Determines the format to convert a path to using - [Flags] - public enum FinalPathFormats - { - /// (FileNameNormalized / VolumeNameDos) Return the normalized drive name. This is the default. - None = 0, - - /// Return the path with a volume GUID path instead of the drive name. - VolumeNameGuid = 1, - - /// Return the path with the volume device path. - VolumeNameNT = 2, - - /// Return the path with no drive information. - VolumeNameNone = 4, - - /// Return the opened file name (not normalized). - FileNameOpened = 8 - } -} \ No newline at end of file diff --git a/AlphaFS/Filesystem/Enumerations/FindExAdditionalFlags.cs b/AlphaFS/Filesystem/Enumerations/FindExAdditionalFlags.cs deleted file mode 100644 index 3b7cdf4..0000000 --- a/AlphaFS/Filesystem/Enumerations/FindExAdditionalFlags.cs +++ /dev/null @@ -1,43 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System; - -namespace Alphaleonis.Win32.Filesystem -{ - internal static partial class NativeMethods - { - /// Additional flags that control the search. - [Flags] - internal enum FindExAdditionalFlags - { - /// No additional flags used. - None = 0, - - /// Searches are case-sensitive. - CaseSensitive = 1, - - /// Uses a larger buffer for directory queries, which can increase performance of the find operation. - /// This value is not supported until Windows Server 2008 R2 and Windows 7. - LargeFetch = 2 - } - } -} diff --git a/AlphaFS/Filesystem/Enumerations/FindExSearchOps.cs b/AlphaFS/Filesystem/Enumerations/FindExSearchOps.cs deleted file mode 100644 index c1eda52..0000000 --- a/AlphaFS/Filesystem/Enumerations/FindExSearchOps.cs +++ /dev/null @@ -1,57 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -namespace Alphaleonis.Win32.Filesystem -{ - internal static partial class NativeMethods - { - /// FINDEX_SEARCH_OPS Enumeration - Defines values that are used with the FindFirstFileEx function to specify the type of filtering to perform. - /// - /// Minimum supported client: Windows XP [desktop apps | Windows Store apps] - /// Minimum supported server: Windows Server 2003 [desktop apps | Windows Store apps] - /// - internal enum FINDEX_SEARCH_OPS - { - /// The search for a file that matches a specified file name. - /// The lpSearchFilter parameter of FindFirstFileEx must be NULL when this search operation is used. - /// - SearchNameMatch = 0, - - /// This is an advisory flag. If the file system supports directory filtering, - /// the function searches for a file that matches the specified name and is also a directory. - /// If the file system does not support directory filtering, this flag is silently ignored. - ///   - /// - /// The lpSearchFilter parameter of the FindFirstFileEx function must be NULL when this search value is used. - /// If directory filtering is desired, this flag can be used on all file systems, - /// but because it is an advisory flag and only affects file systems that support it, - /// the application must examine the file attribute data stored in the lpFindFileData parameter - /// of the FindFirstFileEx function to determine whether the function has returned a handle to a directory. - /// - /// - SearchLimitToDirectories = 1, - - /// This filtering type is not available. - /// For more information, see Device Interface Classes. - SearchLimitToDevices = 2 - } - } -} \ No newline at end of file diff --git a/AlphaFS/Filesystem/Enumerations/GetFileExInfoLevels.cs b/AlphaFS/Filesystem/Enumerations/GetFileExInfoLevels.cs deleted file mode 100644 index 4eb25a6..0000000 --- a/AlphaFS/Filesystem/Enumerations/GetFileExInfoLevels.cs +++ /dev/null @@ -1,33 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -namespace Alphaleonis.Win32.Filesystem -{ - internal static partial class NativeMethods - { - /// Defines values that are used with the GetFileAttributesEx and GetFileAttributesTransacted functions to specify the information level of the returned data. - public enum GetFileExInfoLevels - { - /// The GetFileAttributesEx or GetFileAttributesTransacted function retrieves a standard set of attribute information. The data is returned in a WIN32_FILE_ATTRIBUTE_DATA structure. - GetFileExInfoStandard = 0 - } - } -} \ No newline at end of file diff --git a/AlphaFS/Filesystem/Enumerations/GetFullPathOptions.cs b/AlphaFS/Filesystem/Enumerations/GetFullPathOptions.cs deleted file mode 100644 index ec6999c..0000000 --- a/AlphaFS/Filesystem/Enumerations/GetFullPathOptions.cs +++ /dev/null @@ -1,60 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System; - -namespace Alphaleonis.Win32.Filesystem -{ - /// A bitfield of flags for specifying options for various internal operations that convert paths to full paths. - [Flags] - public enum GetFullPathOptions - { - /// No special options applies. - None = 0, - - /// Remove any trailing whitespace from the path. - TrimEnd = 1, - - /// Add a trailing directory separator to the path (if one does not already exist). - AddTrailingDirectorySeparator = 2, - - /// Remove the trailing directory separator from the path (if one exists). - RemoveTrailingDirectorySeparator = 4, - - /// Return full path as long full path (Unicode format). Not valid for . - AsLongPath = 8, - - /// Prevents any exception from being thrown if a filesystem object does not exist. Not valid for . - ContinueOnNonExist = 16, - - /// Check that the path contains only valid path-characters. - CheckInvalidPathChars = 32, - - /// Also check for wildcard (? and *) characters. - CheckAdditional = 64, - - /// Do not trim the trailing dot or space. - KeepDotOrSpace = 128, - - /// Performs both and checks. - FullCheck = CheckInvalidPathChars | CheckAdditional - } -} diff --git a/AlphaFS/Filesystem/Enumerations/MoveOptions.cs b/AlphaFS/Filesystem/Enumerations/MoveOptions.cs deleted file mode 100644 index c2e4e29..0000000 --- a/AlphaFS/Filesystem/Enumerations/MoveOptions.cs +++ /dev/null @@ -1,83 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System; -using System.Diagnostics.CodeAnalysis; - -namespace Alphaleonis.Win32.Filesystem -{ - /// Used by MoveFileXxx.Flags that specify how a file or directory is to be moved. - [Flags] - public enum MoveOptions - { - /// No MoveOptions used, this fails when the file name already exists. - None = 0, - - /// MOVE_FILE_REPLACE_EXISTSING - /// If the destination file name already exists, the function replaces its contents with the contents of the source file. - /// This value cannot be used if lpNewFileName or lpExistingFileName names a directory. - /// This value cannot be used if either source or destination names a directory. - /// - ReplaceExisting = 1, - - /// MOVE_FILE_COPY_ALLOWED - /// If the file is to be moved to a different volume, the function simulates the move by using the CopyFile and DeleteFile functions. - /// This value cannot be used with . - /// - CopyAllowed = 2, - - /// MOVE_FILE_DELAY_UNTIL_REBOOT - /// - /// The system does not move the file until the operating system is restarted. - /// The system moves the file immediately after AUTOCHK is executed, but before creating any paging files. - /// - /// - /// Consequently, this parameter enables the function to delete paging files from previous startups. - /// This value can only be used if the process is in the context of a user who belongs to the administrators group or the LocalSystem account. - /// - /// This value cannot be used with . - /// - DelayUntilReboot = 4, - - /// MOVE_FILE_WRITE_THROUGH - /// The function does not return until the file has actually been moved on the disk. - /// - /// Setting this value guarantees that a move performed as a copy and delete operation is flushed to disk before the function returns. - /// The flush occurs at the end of the copy operation. - /// - /// This value has no effect if is set. - /// - WriteThrough = 8, - - /// MOVE_FILE_CREATE_HARDLINK - /// Reserved for future use. - /// - [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Hardlink")] - CreateHardlink = 16, - - /// MOVE_FILE_FAIL_IF_NOT_TRACKABLE - /// The function fails if the source file is a link source, but the file cannot be tracked after the move. - /// This situation can occur if the destination is a volume formatted with the FAT file system. - /// - [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Trackable")] - FailIfNotTrackable = 32 - } -} \ No newline at end of file diff --git a/AlphaFS/Filesystem/Enumerations/PathFormat.cs b/AlphaFS/Filesystem/Enumerations/PathFormat.cs deleted file mode 100644 index e2c6b60..0000000 --- a/AlphaFS/Filesystem/Enumerations/PathFormat.cs +++ /dev/null @@ -1,59 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -namespace Alphaleonis.Win32.Filesystem -{ - /// Indicates the format of a path passed to a method. - /// - /// At some point in code you know the full path of file system objects, e.g.: "C:\Windows". - /// For example, Directory.EnumerateFileSystemEntries() will return all files and directories from a given path. - /// Most likely, some processing will happen on the results of the enum. The file or directory may be passed - /// on to another function. Whenever a file path is required, some performance can be gained. - ///   - /// A path like: "C:\Windows" or "\\server\share" is considered a full path for a directory because it is rooted and has a drive/unc path. - /// If the method supports it, and will skip GetFullPath() - /// calls for path resolving of the object, while also avoiding path validation and checks. - /// Using (default) will always call GetFullPath() and perform path validation and checks. - ///   - /// When working in a loop with thousands of files, will give the best performance. - /// - public enum PathFormat - { - /// The format of the path is automatically detected by the method and internally converted to an extended length path. - /// It can be either a standard (short) full path, an extended length (unicode) full path or a relative path. - /// Example relative path: "Windows". - /// - RelativePath, - - /// The path is a full path in either normal or extended length (UNICODE) format. - /// Internally it will be converted to an extended length (UNICODE) path. - /// Using this option has a very slight performance advantage compared to using . - /// Example full path: "C:\Windows" or "\\server\share". - /// - FullPath, - - /// The path is an extended length path. No additional processing will be done on the path, and it will be used as is. - /// Using this option has a slight performance advantage compared to using . - /// Example long full path: "\\?\C:\Windows" or "\\?\UNC\server\share". - /// - LongFullPath - } -} \ No newline at end of file diff --git a/AlphaFS/Filesystem/Enumerations/ReparsePointTag.cs b/AlphaFS/Filesystem/Enumerations/ReparsePointTag.cs deleted file mode 100644 index 894f460..0000000 --- a/AlphaFS/Filesystem/Enumerations/ReparsePointTag.cs +++ /dev/null @@ -1,106 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System.Diagnostics.CodeAnalysis; - -namespace Alphaleonis.Win32.Filesystem -{ - /// Enumeration specifying the different reparse point tags. - /// - /// Reparse tags, with the exception of IO_REPARSE_TAG_SYMLINK, are processed on the server and are not processed by a client after transmission over the wire. - /// Clients should treat associated reparse data as opaque data. - /// - public enum ReparsePointTag - { - /// The entry is not a reparse point. - None = 0, - - /// IO_REPARSE_APPXSTREAM - AppXStream = unchecked ((int) 3221225492), - - /// IO_REPARSE_TAG_CSV - Csv = unchecked ((int) 2147483657), - - /// IO_REPARSE_TAG_DRIVER_EXTENDER - /// Used by Home server drive extender. - /// - DriverExtender = unchecked ((int) 2147483653), - - /// IO_REPARSE_TAG_DEDUP - [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Dedup")] - Dedup = unchecked ((int) 2147483667), - - /// IO_REPARSE_TAG_DFS - /// Used by the DFS filter. - /// - [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Dfs")] - Dfs = unchecked ((int) 2147483658), - - /// IO_REPARSE_TAG_DFSR - /// Used by the DFS filter. - /// - [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Dfsr")] - Dfsr = unchecked ((int) 2147483666), - - /// IO_REPARSE_TAG_FILTER_MANAGER - /// Used by filter manager test harness. - /// - FilterManager = unchecked ((int) 2147483659), - - /// IO_REPARSE_TAG_HSM - /// (Obsolete) Used by legacy Hierarchical Storage Manager Product. - /// - [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Hsm")] - Hsm = unchecked ((int) 3221225476), - - /// IO_REPARSE_TAG_HSM2 - /// (Obsolete) Used by legacy Hierarchical Storage Manager Product. - /// - [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Hsm")] - Hsm2 = unchecked ((int) 2147483654), - - /// IO_REPARSE_TAG_NFS - /// NFS symlinks, Windows 8 / SMB3 and later. - /// - [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Nfs")] - Nfs = unchecked ((int) 2147483668), - - /// IO_REPARSE_TAG_MOUNT_POINT - /// Used for mount point support. - /// - MountPoint = unchecked ((int) 2684354563), - - /// IO_REPARSE_TAG_SIS - /// Used by single-instance storage (SIS) filter driver. - /// - Sis = unchecked ((int) 2147483655), - - /// IO_REPARSE_TAG_SYMLINK - /// Used for symbolic link support. - /// - [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Sym")] - SymLink = unchecked ((int) 2684354572), - - /// IO_REPARSE_TAG_WIM - [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Wim")] - Wim = unchecked ((int) 2147483656) - } -} diff --git a/AlphaFS/Filesystem/Enumerations/STREAM_INFO_LEVELS.cs b/AlphaFS/Filesystem/Enumerations/STREAM_INFO_LEVELS.cs deleted file mode 100644 index 44b2a53..0000000 --- a/AlphaFS/Filesystem/Enumerations/STREAM_INFO_LEVELS.cs +++ /dev/null @@ -1,40 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -namespace Alphaleonis.Win32.Filesystem -{ - internal static partial class NativeMethods - { - /// Defines values that are used with the FindFirstStreamW function to specify the information level of the returned data. - /// - /// Minimum supported client: Windows Vista [desktop apps only] - /// Minimum supported server: Windows Server 2003 [desktop apps only] - /// - internal enum STREAM_INFO_LEVELS - { - /// The FindFirstStreamW function retrieves standard stream information. The data is returned in a structure. - FindStreamInfoStandard = 0, - - /// Used to determine valid enumeration values. All supported enumeration values are less than FindStreamInfoMaxInfoLevel. - FindStreamInfoMaxInfoLevel = 1 - } - } -} diff --git a/AlphaFS/Filesystem/Enumerations/SetupDiGetDeviceRegistryPropertyEnum.cs b/AlphaFS/Filesystem/Enumerations/SetupDiGetDeviceRegistryPropertyEnum.cs deleted file mode 100644 index b8121e1..0000000 --- a/AlphaFS/Filesystem/Enumerations/SetupDiGetDeviceRegistryPropertyEnum.cs +++ /dev/null @@ -1,169 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -namespace Alphaleonis.Win32.Filesystem -{ - internal static partial class NativeMethods - { - /// Flags for SetupDiGetDeviceRegistryProperty(). - internal enum SetupDiGetDeviceRegistryPropertyEnum - { - /// SPDRP_DEVICEDESC - /// Represents a description of a device instance. - /// - DeviceDescription = 0, - - /// SPDRP_HARDWAREID - /// Represents the list of hardware identifiers for a device instance. - /// - HardwareId = 1, - - /// SPDRP_COMPATIBLEIDS - /// Represents the list of compatible identifiers for a device instance. - /// - CompatibleIds = 2, - - //SPDRP_UNUSED0 = 0x00000003, - - /// SPDRP_CLASS - /// Represents the name of the service that is installed for a device instance. - /// - Service = 4, - - //SPDRP_UNUSED1 = 0x00000005, - //SPDRP_UNUSED2 = 0x00000006, - - /// SPDRP_CLASS - /// Represents the name of the device setup class that a device instance belongs to. - /// - Class = 7, - - /// SPDRP_CLASSGUID - /// Represents the of the device setup class that a device instance belongs to. - /// - ClassGuid = 8, - - /// SPDRP_DRIVER - /// Represents the registry entry name of the driver key for a device instance. - /// - Driver = 9, - - ///// SPDRP_CONFIGFLAGS - ///// Represents the configuration flags that are set for a device instance. - ///// - //ConfigurationFlags = 10, - - /// SPDRP_MFG - /// Represents the name of the manufacturer of a device instance. - /// - Manufacturer = 11, - - /// SPDRP_FRIENDLYNAME - /// Represents the friendly name of a device instance. - /// - FriendlyName = 12, - - /// SPDRP_LOCATION_INFORMATION - /// Represents the bus-specific physical location of a device instance. - /// - LocationInformation = 13, - - /// SPDRP_PHYSICAL_DEVICE_LOCATION - /// Encapsulates the physical device location information provided by a device's firmware to Windows. - /// - PhysicalDeviceObjectName = 14, - - ///// SPDRP_CAPABILITIES - //// Represents the capabilities of a device instance. - //// - //Capabilities = 15, - - ///// SPDRP_UI_NUMBER - Represents a number for the device instance that can be displayed in a user interface item. - //UiNumber = 16, - - ///// SPDRP_UPPERFILTERS - Represents a list of the service names of the upper-level filter drivers that are installed for a device instance. - //UpperFilters = 17, - - ///// SPDRP_LOWERFILTERS - Represents a list of the service names of the lower-level filter drivers that are installed for a device instance. - //LowerFilters = 18, - - ///// SPDRP_BUSTYPEGUID - Represents the that identifies the bus type of a device instance. - //BusTypeGuid = 19, - - ///// SPDRP_LEGACYBUSTYPE - Represents the legacy bus number of a device instance. - //LegacyBusType = 20, - - ///// SPDRP_BUSNUMBER - Represents the number that identifies the bus instance that a device instance is attached to. - //BusNumber = 21, - - /// SPDRP_ENUMERATOR_NAME - /// Represents the name of the enumerator for a device instance. - /// - EnumeratorName = 22, - - ///// SPDRP_SECURITY - Represents a security descriptor structure for a device instance. - //Security = 23, - - ///// SPDRP_SECURITY_SDS - Represents a security descriptor string for a device instance. - //SecuritySds = 24, - - ///// SPDRP_DEVTYPE - Represents the device type of a device instance. - //DeviceType = 25, - - ///// SPDRP_EXCLUSIVE - Represents a Boolean value that determines whether a device instance can be opened for exclusive use. - //Exclusive = 26, - - ///// SPDRP_CHARACTERISTICS - Represents the characteristics of a device instance. - //Characteristics = 27, - - ///// SPDRP_ADDRESS - Represents the bus-specific address of a device instance. - //Address = 28, - - ///// SPDRP_UI_NUMBER_DESC_FORMAT - Represents a printf-compatible format string that you should use to display the value of the device property for a device instance. - //UiNumberDescriptionFormat = 29, - - ///// SPDRP_DEVICE_POWER_DATA - Represents power information about a device instance. - //DevicePowerData = 30, - - ///// SPDRP_REMOVAL_POLICY - Represents the current removal policy for a device instance. - //RemovalPolicy = 31, - - ///// SPDRP_REMOVAL_POLICY_HW_DEFAULT - Represents the default removal policy for a device instance. - //RemovalPolicyDefault = 32, - - ///// SPDRP_REMOVAL_POLICY_OVERRIDE- Represents the removal policy override for a device instance. - //RemovalPolicyOverride = 33, - - ///// SPDRP_INSTALL_STATE - Represents the installation state of a device instance. - //InstallState = 34, - - /// SPDRP_LOCATION_PATHS - /// Represents the location of a device instance in the device tree. - /// - LocationPaths = 35, - - /// SPDRP_BASE_CONTAINERID - /// Represents the value of the base container identifier (ID) .The Windows Plug and Play (PnP) manager assigns this value to the device node (devnode). - /// - BaseContainerId = 36 - } - } -} \ No newline at end of file diff --git a/AlphaFS/Filesystem/Enumerations/StreamAttributes.cs b/AlphaFS/Filesystem/Enumerations/StreamAttributes.cs deleted file mode 100644 index 869c55f..0000000 --- a/AlphaFS/Filesystem/Enumerations/StreamAttributes.cs +++ /dev/null @@ -1,56 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System; - -namespace Alphaleonis.Win32.Filesystem -{ - /// WIN32_STREAM_ID Attributes of data to facilitate cross-operating system transfer. - [Flags] - public enum StreamAttributes - { - /// STREAM_NORMAL_ATTRIBUTE - /// This backup stream has no special attributes. - /// - None = 0, - - /// STREAM_MODIFIED_WHEN_READ - /// Attribute set if the stream contains data that is modified when read. - /// Allows the backup application to know that verification of data will fail. - /// - ModifiedWhenRead = 1, - - /// STREAM_CONTAINS_SECURITY - /// The backup stream contains security information. - /// This attribute applies only to backup stream of type . - /// - ContainsSecurity = 2, - - /// Reserved. - ContainsProperties = 4, - - /// STREAM_SPARSE_ATTRIBUTE - /// The backup stream is part of a sparse file stream. - /// This attribute applies only to backup stream of type , , and . - /// - Sparse = 8 - } -} \ No newline at end of file diff --git a/AlphaFS/Filesystem/Enumerations/SymbolicLinkTarget.cs b/AlphaFS/Filesystem/Enumerations/SymbolicLinkTarget.cs deleted file mode 100644 index 485a094..0000000 --- a/AlphaFS/Filesystem/Enumerations/SymbolicLinkTarget.cs +++ /dev/null @@ -1,34 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -namespace Alphaleonis.Win32.Filesystem -{ - /// Indicates whether the link target is a file or directory. - /// Used by Win32 API CreateSymbolicLink()/CreateSymbolicLinkTransacted() - public enum SymbolicLinkTarget - { - /// The link target is a file. - File = 0, - - /// The link target is a directory. - Directory = 1 - } -} \ No newline at end of file diff --git a/AlphaFS/Filesystem/Enumerations/SymbolicLinkType.cs b/AlphaFS/Filesystem/Enumerations/SymbolicLinkType.cs deleted file mode 100644 index 6559169..0000000 --- a/AlphaFS/Filesystem/Enumerations/SymbolicLinkType.cs +++ /dev/null @@ -1,33 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -namespace Alphaleonis.Win32.Filesystem -{ - /// Specifies the type of a symbolic link. - public enum SymbolicLinkType - { - /// The symbolic link is absolute. - Absolute = 0, - - /// The symbolic link is relative. - Relative = 1, - } -} \ No newline at end of file diff --git a/AlphaFS/Filesystem/Enumerations/VolumeInfoAttributes.cs b/AlphaFS/Filesystem/Enumerations/VolumeInfoAttributes.cs deleted file mode 100644 index e9cc092..0000000 --- a/AlphaFS/Filesystem/Enumerations/VolumeInfoAttributes.cs +++ /dev/null @@ -1,144 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System; - -namespace Alphaleonis.Win32.Filesystem -{ - internal static partial class NativeMethods - { - /// Volume Attributes used by the GetVolumeInfo() function. - [Flags] - internal enum VolumeInfoAttributes - { - /// No VolumeInfo attributes. - None = 0, - - /// FILE_CASE_SENSITIVE_SEARCH - /// The specified volume supports case-sensitive file names. - /// - CaseSensitiveSearch = 1, - - /// FILE_CASE_PRESERVED_NAMES - /// The specified volume supports preserved case of file names when it places a name on disk. - /// - CasePreservedNames = 2, - - /// FILE_UNICODE_ON_DISK - /// The specified volume supports Unicode in file names as they appear on disk. - /// - UnicodeOnDisk = 4, - - /// FILE_PERSISTENT_ACLS - /// - /// The specified volume preserves and enforces access control lists (ACL). - /// For example, the NTFS file system preserves and enforces ACLs, and the FAT file system does not. - /// - /// - PersistentAcls = 8, - - /// FILE_FILE_COMPRESSION - /// The specified volume supports file-based compression. - /// - Compression = 16, - - /// FILE_VOLUME_QUOTAS - /// The specified volume supports disk quotas. - /// - VolumeQuotas = 32, - - /// FILE_SUPPORTS_SPARSE_FILES - /// The specified volume supports sparse files. - /// - SupportsSparseFiles = 64, - - /// FILE_SUPPORTS_REPARSE_POINTS - /// The specified volume supports re-parse points. - /// - SupportsReparsePoints = 128, - - /// (does not appear on MSDN) - SupportsRemoteStorage = 256, - - /// FILE_VOLUME_IS_COMPRESSED - /// The specified volume is a compressed volume, for example, a DoubleSpace volume. - /// - VolumeIsCompressed = 32768, - - /// FILE_SUPPORTS_OBJECT_IDS - /// The specified volume supports object identifiers. - /// - SupportsObjectIds = 65536, - - /// FILE_SUPPORTS_ENCRYPTION - /// The specified volume supports the Encrypted File System (EFS). For more information, see File Encryption. - /// - SupportsEncryption = 131072, - - /// FILE_NAMED_STREAMS - /// The specified volume supports named streams. - /// - NamedStreams = 262144, - - /// FILE_READ_ONLY_VOLUME - /// The specified volume is read-only. - /// - ReadOnlyVolume = 524288, - - /// FILE_SEQUENTIAL_WRITE_ONCE - /// The specified volume is read-only. - /// - SequentialWriteOnce = 1048576, - - /// FILE_SUPPORTS_TRANSACTIONS - /// The specified volume supports transactions.For more information, see About KTM. - /// - SupportsTransactions = 2097152, - - /// FILE_SUPPORTS_HARD_LINKS - /// The specified volume supports hard links. For more information, see Hard Links and Junctions. - /// - /// Windows Server 2008, Windows Vista, Windows Server 2003, and Windows XP: This value is not supported until Windows Server 2008 R2 and Windows 7. - SupportsHardLinks = 4194304, - - /// FILE_SUPPORTS_EXTENDED_ATTRIBUTES - /// - /// The specified volume supports extended attributes. An extended attribute is a piece of application-specific metadata - /// that an application can associate with a file and is not part of the file's data. - /// - /// - /// Windows Server 2008, Windows Vista, Windows Server 2003, and Windows XP: This value is not supported until Windows Server 2008 R2 and Windows 7. - SupportsExtendedAttributes = 8388608, - - /// FILE_SUPPORTS_OPEN_BY_FILE_ID - /// The file system supports open by FileID. For more information, see FILE_ID_BOTH_DIR_INFO. - /// - /// Windows Server 2008, Windows Vista, Windows Server 2003, and Windows XP: This value is not supported until Windows Server 2008 R2 and Windows 7. - SupportsOpenByFileId = 16777216, - - /// FILE_SUPPORTS_USN_JOURNAL - /// The specified volume supports update sequence number (USN) journals. For more information, see Change Journal Records. - /// - /// Windows Server 2008, Windows Vista, Windows Server 2003, and Windows XP: This value is not supported until Windows Server 2008 R2 and Windows 7. - SupportsUsnJournal = 33554432 - } - } -} \ No newline at end of file diff --git a/AlphaFS/Filesystem/Exceptions/AlreadyExistsException.cs b/AlphaFS/Filesystem/Exceptions/AlreadyExistsException.cs deleted file mode 100644 index 5f67e09..0000000 --- a/AlphaFS/Filesystem/Exceptions/AlreadyExistsException.cs +++ /dev/null @@ -1,58 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System; -using System.Runtime.Serialization; - -namespace Alphaleonis.Win32.Filesystem -{ - /// The exception that is thrown when an attempt to create a directory or file that already exists was made. - [Serializable] - public class AlreadyExistsException : System.IO.IOException - { - private static readonly int s_errorCode = Win32Errors.GetHrFromWin32Error(Win32Errors.ERROR_ALREADY_EXISTS); - - /// Initializes a new instance of the class. - public AlreadyExistsException() : base(Resources.File_Or_Directory_Already_Exists, s_errorCode) - { - } - - /// Initializes a new instance of the class. - /// The message. - public AlreadyExistsException(string message) : base(message, s_errorCode) - { - } - - /// Initializes a new instance of the class. - /// The message. - /// The inner exception. - public AlreadyExistsException(string message, Exception innerException) : base(message, innerException) - { - } - - /// Initializes a new instance of the class. - /// The data for serializing or deserializing the object. - /// The source and destination for the object. - protected AlreadyExistsException(SerializationInfo info, StreamingContext context) : base(info, context) - { - } - } -} diff --git a/AlphaFS/Filesystem/Exceptions/DeviceNotReadyException.cs b/AlphaFS/Filesystem/Exceptions/DeviceNotReadyException.cs deleted file mode 100644 index 1c4cd44..0000000 --- a/AlphaFS/Filesystem/Exceptions/DeviceNotReadyException.cs +++ /dev/null @@ -1,62 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System; -using System.Runtime.Serialization; - -namespace Alphaleonis.Win32.Filesystem -{ - /// The requested operation could not be completed because the device was not ready. - [Serializable] - public class DeviceNotReadyException : System.IO.IOException - { - private static readonly int s_errorCode = Win32Errors.GetHrFromWin32Error(Win32Errors.ERROR_NOT_READY); - - /// Initializes a new instance of the class. - public DeviceNotReadyException() - : base(Resources.Device_Not_Ready, s_errorCode) - { - } - - /// Initializes a new instance of the class. - /// The message. - public DeviceNotReadyException(string message) - : base(message, s_errorCode) - { - } - - /// Initializes a new instance of the class. - /// The message. - /// The inner exception. - public DeviceNotReadyException(string message, Exception innerException) - : base(message, innerException) - { - } - - /// Initializes a new instance of the class. - /// The data for serializing or deserializing the object. - /// The source and destination for the object. - protected DeviceNotReadyException(SerializationInfo info, StreamingContext context) - : base(info, context) - { - } - } -} diff --git a/AlphaFS/Filesystem/Exceptions/DirectoryNotEmptyException.cs b/AlphaFS/Filesystem/Exceptions/DirectoryNotEmptyException.cs deleted file mode 100644 index b321980..0000000 --- a/AlphaFS/Filesystem/Exceptions/DirectoryNotEmptyException.cs +++ /dev/null @@ -1,59 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System; -using System.Globalization; -using System.Runtime.Serialization; - -namespace Alphaleonis.Win32.Filesystem -{ - /// The operation could not be completed because the directory was not empty. - [Serializable] - public class DirectoryNotEmptyException : System.IO.IOException - { - private static readonly int s_errorCode = Win32Errors.GetHrFromWin32Error(Win32Errors.ERROR_DIR_NOT_EMPTY); - - /// Initializes a new instance of the class. - public DirectoryNotEmptyException() : base(string.Format(CultureInfo.CurrentCulture, "({0}) The directory is not empty", Win32Errors.ERROR_DIR_NOT_EMPTY), s_errorCode) - { - } - - /// Initializes a new instance of the class. - /// The message. - public DirectoryNotEmptyException(string message) : base(string.Format(CultureInfo.CurrentCulture, "({0}) The directory is not empty: [{1}]", Win32Errors.ERROR_DIR_NOT_EMPTY, message), s_errorCode) - { - } - - /// Initializes a new instance of the class. - /// The message. - /// The inner exception. - public DirectoryNotEmptyException(string message, Exception innerException) : base(string.Format(CultureInfo.CurrentCulture, "({0}) The directory is not empty: [{1}]", Win32Errors.ERROR_DIR_NOT_EMPTY, message), innerException) - { - } - - /// Initializes a new instance of the class. - /// The data for serializing or deserializing the object. - /// The source and destination for the object. - protected DirectoryNotEmptyException(SerializationInfo info, StreamingContext context) : base(info, context) - { - } - } -} \ No newline at end of file diff --git a/AlphaFS/Filesystem/Exceptions/DirectoryReadOnlyException.cs b/AlphaFS/Filesystem/Exceptions/DirectoryReadOnlyException.cs deleted file mode 100644 index be8bd0f..0000000 --- a/AlphaFS/Filesystem/Exceptions/DirectoryReadOnlyException.cs +++ /dev/null @@ -1,59 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System; -using System.Globalization; -using System.Runtime.Serialization; - -namespace Alphaleonis.Win32.Filesystem -{ - /// The operation could not be completed because the directory is read-only. - [Serializable] - public class DirectoryReadOnlyException : System.IO.IOException - { - private static readonly int s_errorCode = Win32Errors.GetHrFromWin32Error(Win32Errors.ERROR_FILE_READ_ONLY); - - /// Initializes a new instance of the class. - public DirectoryReadOnlyException() : base(string.Format(CultureInfo.CurrentCulture, "({0}) The directory is read-only", Win32Errors.ERROR_FILE_READ_ONLY), s_errorCode) - { - } - - /// Initializes a new instance of the class. - /// The message. - public DirectoryReadOnlyException(string message) : base(string.Format(CultureInfo.CurrentCulture, "({0}) The directory is read-only: [{1}]", Win32Errors.ERROR_FILE_READ_ONLY, message), s_errorCode) - { - } - - /// Initializes a new instance of the class. - /// The message. - /// The inner exception. - public DirectoryReadOnlyException(string message, Exception innerException) : base(string.Format(CultureInfo.CurrentCulture, "({0}) The directory is read-only: [{1}]", Win32Errors.ERROR_FILE_READ_ONLY, message), innerException) - { - } - - /// Initializes a new instance of the class. - /// The data for serializing or deserializing the object. - /// The source and destination for the object. - protected DirectoryReadOnlyException(SerializationInfo info, StreamingContext context) : base(info, context) - { - } - } -} \ No newline at end of file diff --git a/AlphaFS/Filesystem/Exceptions/FileReadOnlyException.cs b/AlphaFS/Filesystem/Exceptions/FileReadOnlyException.cs deleted file mode 100644 index 4fb197d..0000000 --- a/AlphaFS/Filesystem/Exceptions/FileReadOnlyException.cs +++ /dev/null @@ -1,57 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System; -using System.Globalization; -using System.Runtime.Serialization; - -namespace Alphaleonis.Win32.Filesystem -{ - /// The operation could not be completed because the file is read-only. - [Serializable] - public class FileReadOnlyException : UnauthorizedAccessException - { - /// Initializes a new instance of the class. - public FileReadOnlyException() : base(string.Format(CultureInfo.CurrentCulture, "({0}) The file is read-only.", Win32Errors.ERROR_FILE_READ_ONLY)) - { - } - - /// Initializes a new instance of the class. - /// The message. - public FileReadOnlyException(string message) : base(string.Format(CultureInfo.CurrentCulture, "({0}) The file is read-only: [{1}]", Win32Errors.ERROR_FILE_READ_ONLY, message)) - { - } - - /// Initializes a new instance of the class. - /// The message. - /// The inner exception. - public FileReadOnlyException(string message, Exception innerException) : base(string.Format(CultureInfo.CurrentCulture, "({0}) The file is read-only: [{1}]", Win32Errors.ERROR_FILE_READ_ONLY, message), innerException) - { - } - - /// Initializes a new instance of the class. - /// The data for serializing or deserializing the object. - /// The source and destination for the object. - protected FileReadOnlyException(SerializationInfo info, StreamingContext context) : base(info, context) - { - } - } -} \ No newline at end of file diff --git a/AlphaFS/Filesystem/Exceptions/InvalidTransactionException.cs b/AlphaFS/Filesystem/Exceptions/InvalidTransactionException.cs deleted file mode 100644 index caa737d..0000000 --- a/AlphaFS/Filesystem/Exceptions/InvalidTransactionException.cs +++ /dev/null @@ -1,59 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System; -using System.Runtime.Serialization; - -namespace Alphaleonis.Win32.Filesystem -{ - /// The transaction handle associated with this operation is not valid. - [SerializableAttribute] - public class InvalidTransactionException : TransactionException - { - /// Initializes a new instance of the class. - public InvalidTransactionException() - { - } - - /// Initializes a new instance of the class. - /// The message. - public InvalidTransactionException(string message) - : base(message) - { - } - - /// Initializes a new instance of the class. - /// The message. - /// The inner exception. - public InvalidTransactionException(string message, Exception innerException) - : base(message, innerException) - { - } - - /// Initializes a new instance of the class. - /// The data for serializing or deserializing the object. - /// The source and destination for the object. - protected InvalidTransactionException(SerializationInfo info, StreamingContext context) - : base(info, context) - { - } - } -} \ No newline at end of file diff --git a/AlphaFS/Filesystem/Exceptions/NotAReparsePointException.cs b/AlphaFS/Filesystem/Exceptions/NotAReparsePointException.cs deleted file mode 100644 index 7124206..0000000 --- a/AlphaFS/Filesystem/Exceptions/NotAReparsePointException.cs +++ /dev/null @@ -1,62 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System; -using System.Runtime.Serialization; - -namespace Alphaleonis.Win32.Filesystem -{ - /// The file or directory was not a reparse point. - [SerializableAttribute] - public class NotAReparsePointException : System.IO.IOException - { - private static readonly int s_errorCode = Win32Errors.GetHrFromWin32Error(Win32Errors.ERROR_NOT_A_REPARSE_POINT); - - /// Initializes a new instance of the class. - public NotAReparsePointException() - : base(Resources.Not_A_Reparse_Point, s_errorCode) - { - } - - /// Initializes a new instance of the class. - /// The message. - public NotAReparsePointException(string message) - : base(message, s_errorCode) - { - } - - /// Initializes a new instance of the class. - /// The message. - /// The inner exception. - public NotAReparsePointException(string message, Exception innerException) - : base(message, innerException) - { - } - - /// Initializes a new instance of the class. - /// The info. - /// The context. - protected NotAReparsePointException(SerializationInfo info, StreamingContext context) - : base(info, context) - { - } - } -} diff --git a/AlphaFS/Filesystem/Exceptions/TransactionAlreadyAbortedException.cs b/AlphaFS/Filesystem/Exceptions/TransactionAlreadyAbortedException.cs deleted file mode 100644 index a6163ab..0000000 --- a/AlphaFS/Filesystem/Exceptions/TransactionAlreadyAbortedException.cs +++ /dev/null @@ -1,59 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System; -using System.Runtime.Serialization; - -namespace Alphaleonis.Win32.Filesystem -{ - /// It is too late to perform the requested operation, since the Transaction has already been aborted. - [SerializableAttribute] - public class TransactionAlreadyAbortedException : TransactionException - { - /// Initializes a new instance of the class. - public TransactionAlreadyAbortedException() - { - } - - /// Initializes a new instance of the class. - /// The message. - public TransactionAlreadyAbortedException(string message) - : base(message) - { - } - - /// Initializes a new instance of the class. - /// The message. - /// The inner exception. - public TransactionAlreadyAbortedException(string message, Exception innerException) - : base(message, innerException) - { - } - - /// Initializes a new instance of the class. - /// The info. - /// The context. - protected TransactionAlreadyAbortedException(SerializationInfo info, StreamingContext context) - : base(info, context) - { - } - } -} \ No newline at end of file diff --git a/AlphaFS/Filesystem/Exceptions/TransactionAlreadyCommittedException.cs b/AlphaFS/Filesystem/Exceptions/TransactionAlreadyCommittedException.cs deleted file mode 100644 index 99dcbe2..0000000 --- a/AlphaFS/Filesystem/Exceptions/TransactionAlreadyCommittedException.cs +++ /dev/null @@ -1,59 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System; -using System.Runtime.Serialization; - -namespace Alphaleonis.Win32.Filesystem -{ - /// It is too late to perform the requested operation, since the Transaction has already been committed. - [SerializableAttribute] - public class TransactionAlreadyCommittedException : TransactionException - { - /// Initializes a new instance of the class. - public TransactionAlreadyCommittedException() - { - } - - /// Initializes a new instance of the class. - /// The message. - public TransactionAlreadyCommittedException(string message) - : base(message) - { - } - - /// Initializes a new instance of the class. - /// The message. - /// The inner exception. - public TransactionAlreadyCommittedException(string message, Exception innerException) - : base(message, innerException) - { - } - - /// Initializes a new instance of the class. - /// The object that holds the serialized object data. - /// The contextual information about the source or destination. - protected TransactionAlreadyCommittedException(SerializationInfo info, StreamingContext context) - : base(info, context) - { - } - } -} \ No newline at end of file diff --git a/AlphaFS/Filesystem/Exceptions/TransactionException.cs b/AlphaFS/Filesystem/Exceptions/TransactionException.cs deleted file mode 100644 index 5b17e3c..0000000 --- a/AlphaFS/Filesystem/Exceptions/TransactionException.cs +++ /dev/null @@ -1,59 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System; -using System.Runtime.Serialization; - -namespace Alphaleonis.Win32.Filesystem -{ - /// The exception that is thrown when an attempt to create a file or directory that already exists was made. - [SerializableAttribute] - public class TransactionException : SystemException - { - /// Initializes a new instance of the class. - public TransactionException() - { - } - - /// Initializes a new instance of the class. - /// The message. - public TransactionException(string message) - : base(message) - { - } - - /// Initializes a new instance of the class. - /// The message. - /// The inner exception. - public TransactionException(string message, Exception innerException) - : base(message, innerException) - { - } - - /// Initializes a new instance of the class. - /// The data for serializing or deserializing the object. - /// The source and destination for the object. - protected TransactionException(SerializationInfo info, StreamingContext context) - : base(info, context) - { - } - } -} \ No newline at end of file diff --git a/AlphaFS/Filesystem/Exceptions/TransactionalConflictException.cs b/AlphaFS/Filesystem/Exceptions/TransactionalConflictException.cs deleted file mode 100644 index 81d69c6..0000000 --- a/AlphaFS/Filesystem/Exceptions/TransactionalConflictException.cs +++ /dev/null @@ -1,59 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System; -using System.Runtime.Serialization; - -namespace Alphaleonis.Win32.Filesystem -{ - /// The function attempted to use a name that is reserved for use by another transaction. - [SerializableAttribute] - public class TransactionalConflictException : TransactionException - { - /// Initializes a new instance of the class. - public TransactionalConflictException() - { - } - - /// Initializes a new instance of the class. - /// The message. - public TransactionalConflictException(string message) - : base(message) - { - } - - /// Initializes a new instance of the class. - /// The message. - /// The inner exception. - public TransactionalConflictException(string message, Exception innerException) - : base(message, innerException) - { - } - - /// Initializes a new instance of the class. - /// The info. - /// The context. - protected TransactionalConflictException(SerializationInfo info, StreamingContext context) - : base(info, context) - { - } - } -} \ No newline at end of file diff --git a/AlphaFS/Filesystem/Exceptions/UnrecognizedReparsePointException.cs b/AlphaFS/Filesystem/Exceptions/UnrecognizedReparsePointException.cs deleted file mode 100644 index 63aec51..0000000 --- a/AlphaFS/Filesystem/Exceptions/UnrecognizedReparsePointException.cs +++ /dev/null @@ -1,59 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System; -using System.Runtime.Serialization; - -namespace Alphaleonis.Win32.Filesystem -{ - /// The function attempted to use a name that is reserved for use by another transaction. - [SerializableAttribute] - public class UnrecognizedReparsePointException : System.IO.IOException - { - /// Initializes a new instance of the class. - public UnrecognizedReparsePointException() - { - } - - /// Initializes a new instance of the class. - /// The message. - public UnrecognizedReparsePointException(string message) - : base(message) - { - } - - /// Initializes a new instance of the class. - /// The message. - /// The inner exception. - public UnrecognizedReparsePointException(string message, Exception innerException) - : base(message, innerException) - { - } - - /// Initializes a new instance of the class. - /// The info. - /// The context. - protected UnrecognizedReparsePointException(SerializationInfo info, StreamingContext context) - : base(info, context) - { - } - } -} \ No newline at end of file diff --git a/AlphaFS/Filesystem/Exceptions/UnsupportedRemoteTransactionException.cs b/AlphaFS/Filesystem/Exceptions/UnsupportedRemoteTransactionException.cs deleted file mode 100644 index 8566508..0000000 --- a/AlphaFS/Filesystem/Exceptions/UnsupportedRemoteTransactionException.cs +++ /dev/null @@ -1,59 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System; -using System.Runtime.Serialization; - -namespace Alphaleonis.Win32.Filesystem -{ - /// The remote server or share does not support transacted file operations. - [SerializableAttribute] - public class UnsupportedRemoteTransactionException : TransactionException - { - /// Initializes a new instance of the class. - public UnsupportedRemoteTransactionException() - { - } - - /// Initializes a new instance of the class. - /// The message. - public UnsupportedRemoteTransactionException(string message) - : base(message) - { - } - - /// Initializes a new instance of the class. - /// The message. - /// The inner exception. - public UnsupportedRemoteTransactionException(string message, Exception innerException) - : base(message, innerException) - { - } - - /// Initializes a new instance of the class. - /// The object that holds the serialized object data. - /// The contextual information about the source or destination. - protected UnsupportedRemoteTransactionException(SerializationInfo info, StreamingContext context) - : base(info, context) - { - } - } -} \ No newline at end of file diff --git a/AlphaFS/Filesystem/File Class/File.AppendText.cs b/AlphaFS/Filesystem/File Class/File.AppendText.cs deleted file mode 100644 index de62be0..0000000 --- a/AlphaFS/Filesystem/File Class/File.AppendText.cs +++ /dev/null @@ -1,194 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System.Diagnostics.CodeAnalysis; -using System.IO; -using System.Security; -using System.Text; - -namespace Alphaleonis.Win32.Filesystem -{ - public static partial class File - { - #region AppendText - - /// - /// Creates a that appends NativeMethods.DefaultFileEncoding encoded text to an existing file, or to a new - /// file if the specified file does not exist. - /// - /// The path to the file to append to. - /// - /// A stream writer that appends NativeMethods.DefaultFileEncoding encoded text to the specified file or to a new file. - /// - [SecurityCritical] - public static StreamWriter AppendText(string path) - { - return AppendTextCore(null, path, NativeMethods.DefaultFileEncoding, PathFormat.RelativePath); - } - - /// - /// Creates a that appends NativeMethods.DefaultFileEncoding encoded text to an existing file, or - /// to a new file if the specified file does not exist. - /// - /// The path to the file to append to. - /// Indicates the format of the path parameter(s). - /// - /// A stream writer that appends NativeMethods.DefaultFileEncoding encoded text to the specified file or to a new file. - /// - [SecurityCritical] - public static StreamWriter AppendText(string path, PathFormat pathFormat) - { - return AppendTextCore(null, path, NativeMethods.DefaultFileEncoding, pathFormat); - } - - /// - /// Creates a that appends NativeMethods.DefaultFileEncoding encoded text to an existing file, or - /// to a new file if the specified file does not exist. - /// - /// The path to the file to append to. - /// The character to use. - /// Indicates the format of the path parameter(s). - /// - /// A stream writer that appends NativeMethods.DefaultFileEncoding encoded text to the specified file or to a new file. - /// - [SecurityCritical] - public static StreamWriter AppendText(string path, Encoding encoding, PathFormat pathFormat) - { - return AppendTextCore(null, path, encoding, pathFormat); - } - - /// - /// Creates a that appends NativeMethods.DefaultFileEncoding encoded text to an existing file, or - /// to a new file if the specified file does not exist. - /// - /// The path to the file to append to. - /// The character to use. - /// - /// A stream writer that appends NativeMethods.DefaultFileEncoding encoded text to the specified file or to a new file. - /// - [SecurityCritical] - public static StreamWriter AppendText(string path, Encoding encoding) - { - return AppendTextCore(null, path, encoding, PathFormat.RelativePath); - } - - #region Transactional - - /// - /// Creates a that appends NativeMethods.DefaultFileEncoding encoded text to an existing file, or - /// to a new file if the specified file does not exist. - /// - /// The transaction. - /// The path to the file to append to. - /// - /// A stream writer that appends NativeMethods.DefaultFileEncoding encoded text to the specified file or to a new file. - /// - [SecurityCritical] - public static StreamWriter AppendTextTransacted(KernelTransaction transaction, string path) - { - return AppendTextCore(transaction, path, NativeMethods.DefaultFileEncoding, PathFormat.RelativePath); - } - - /// - /// Creates a that appends NativeMethods.DefaultFileEncoding encoded text to an existing file, or - /// to a new file if the specified file does not exist. - /// - /// The transaction. - /// The path to the file to append to. - /// Indicates the format of the path parameter(s). - /// - /// A stream writer that appends NativeMethods.DefaultFileEncoding encoded text to the specified file or to a new file. - /// - [SecurityCritical] - public static StreamWriter AppendTextTransacted(KernelTransaction transaction, string path, PathFormat pathFormat) - { - return AppendTextCore(transaction, path, NativeMethods.DefaultFileEncoding, pathFormat); - } - - /// - /// Creates a that appends NativeMethods.DefaultFileEncoding encoded text to an existing file, or - /// to a new file if the specified file does not exist. - /// - /// The transaction. - /// The path to the file to append to. - /// The character to use. - /// Indicates the format of the path parameter(s). - /// - /// A stream writer that appends NativeMethods.DefaultFileEncoding encoded text to the specified file or to a new file. - /// - [SecurityCritical] - public static StreamWriter AppendTextTransacted(KernelTransaction transaction, string path, Encoding encoding, PathFormat pathFormat) - { - return AppendTextCore(transaction, path, encoding, pathFormat); - } - - /// - /// Creates a that appends NativeMethods.DefaultFileEncoding encoded text to an existing file, or - /// to a new file if the specified file does not exist. - /// - /// The transaction. - /// The path to the file to append to. - /// The character to use. - /// - /// A stream writer that appends NativeMethods.DefaultFileEncoding encoded text to the specified file or to a new file. - /// - [SecurityCritical] - public static StreamWriter AppendTextTransacted(KernelTransaction transaction, string path, Encoding encoding) - { - return AppendTextCore(transaction, path, encoding, PathFormat.RelativePath); - } - - #endregion // Transacted - - #endregion // AppendText - - #region Internal Methods - - /// Creates a that appends NativeMethods.DefaultFileEncoding encoded text to an existing file, or to a new file if the specified file does not exist. - /// - /// The transaction. - /// The path to the file to append to. - /// The character to use. - /// Indicates the format of the path parameter(s). - /// - /// A stream writer that appends NativeMethods.DefaultFileEncoding encoded text to the specified file or to a new file. - /// - [SuppressMessage("Microsoft.Reliability", "CA2000:Dispose objects before losing scope")] - [SecurityCritical] - internal static StreamWriter AppendTextCore(KernelTransaction transaction, string path, Encoding encoding, PathFormat pathFormat) - { - FileStream fs = OpenCore(transaction, path, FileMode.OpenOrCreate, FileAccess.Write, FileShare.None, ExtendedFileAttributes.Normal, null, null, pathFormat); - - try - { - fs.Seek(0, SeekOrigin.End); - return new StreamWriter(fs, encoding); - } - catch (IOException) - { - fs.Close(); - throw; - } - } - - #endregion // Internal Methods - } -} diff --git a/AlphaFS/Filesystem/File Class/File.Compress.cs b/AlphaFS/Filesystem/File Class/File.Compress.cs deleted file mode 100644 index ac88380..0000000 --- a/AlphaFS/Filesystem/File Class/File.Compress.cs +++ /dev/null @@ -1,109 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System.Security; - -namespace Alphaleonis.Win32.Filesystem -{ - public static partial class File - { - #region Compress - - /// [AlphaFS] Compresses a file using NTFS compression. - /// A path that describes a file to compress. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static void Compress(string path, PathFormat pathFormat) - { - Device.ToggleCompressionCore(false, null, path, true, pathFormat); - } - - /// [AlphaFS] Compresses a file using NTFS compression. - /// A path that describes a file to compress. - [SecurityCritical] - public static void Compress(string path) - { - Device.ToggleCompressionCore(false, null, path, true, PathFormat.RelativePath); - } - - /// [AlphaFS] Compresses a file using NTFS compression. - /// The transaction. - /// A path that describes a file to compress. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static void CompressTransacted(KernelTransaction transaction, string path, PathFormat pathFormat) - { - Device.ToggleCompressionCore(false, transaction, path, true, pathFormat); - } - - - /// [AlphaFS] Compresses a file using NTFS compression. - /// The transaction. - /// A path that describes a file to compress. - [SecurityCritical] - public static void CompressTransacted(KernelTransaction transaction, string path) - { - Device.ToggleCompressionCore(false, transaction, path, true, PathFormat.RelativePath); - } - - #endregion - - #region Decompress - - /// [AlphaFS] Decompresses an NTFS compressed file. - /// A path that describes a file to decompress. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static void Decompress(string path, PathFormat pathFormat) - { - Device.ToggleCompressionCore(false, null, path, false, pathFormat); - } - - /// [AlphaFS] Decompresses an NTFS compressed file. - /// A path that describes a file to decompress. - [SecurityCritical] - public static void Decompress(string path) - { - Device.ToggleCompressionCore(false, null, path, false, PathFormat.RelativePath); - } - - /// [AlphaFS] Decompresses an NTFS compressed file. - /// The transaction. - /// A path that describes a file to decompress. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static void DecompressTransacted(KernelTransaction transaction, string path, PathFormat pathFormat) - { - Device.ToggleCompressionCore(false, transaction, path, false, pathFormat); - } - - /// [AlphaFS] Decompresses an NTFS compressed file. - /// The transaction. - /// A path that describes a file to decompress. - [SecurityCritical] - public static void DecompressTransacted(KernelTransaction transaction, string path) - { - Device.ToggleCompressionCore(false, transaction, path, false, PathFormat.RelativePath); - } - - #endregion - } -} diff --git a/AlphaFS/Filesystem/File Class/File.CopyMove.cs b/AlphaFS/Filesystem/File Class/File.CopyMove.cs deleted file mode 100644 index 4952e0e..0000000 --- a/AlphaFS/Filesystem/File Class/File.CopyMove.cs +++ /dev/null @@ -1,1332 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System; -using System.Diagnostics.CodeAnalysis; -using System.Globalization; -using System.IO; -using System.Runtime.InteropServices; -using System.Security; - -namespace Alphaleonis.Win32.Filesystem -{ - public static partial class File - { - #region Copy - - #region .NET - - /// Copies an existing file to a new file. Overwriting a file of the same name is not allowed. - /// - /// The attributes of the original file are retained in the copied file. - /// Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - /// If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - /// - /// - /// - /// - /// - /// - /// - /// - /// The file to copy. - /// The name of the destination file. This cannot be a directory or an existing file. - [SecurityCritical] - public static void Copy(string sourceFileName, string destinationFileName) - { - CopyMoveCore(false, null, sourceFileName, destinationFileName, false, CopyOptions.FailIfExists, null, null, null, null, PathFormat.RelativePath); - } - - /// Copies an existing file to a new file. Overwriting a file of the same name is allowed. - /// - /// The attributes of the original file are retained in the copied file. - /// Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - /// If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - /// - /// - /// - /// - /// - /// - /// - /// - /// The file to copy. - /// The name of the destination file. This cannot be a directory. - /// if the destination file should ignoring the read-only and hidden attributes and overwrite; otherwise, . - [SecurityCritical] - public static void Copy(string sourceFileName, string destinationFileName, bool overwrite) - { - CopyMoveCore(false, null, sourceFileName, destinationFileName, false, overwrite ? CopyOptions.None : CopyOptions.FailIfExists, null, null, null, null, PathFormat.RelativePath); - } - - #endregion // .NET - - - #region AlphaFS - - #region Non-Transactional - - /// [AlphaFS] Copies an existing file to a new file. Overwriting a file of the same name is not allowed. - /// - /// The attributes of the original file are retained in the copied file. - /// Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - /// If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - /// - /// - /// - /// - /// - /// - /// - /// - /// The file to copy. - /// The name of the destination file. This cannot be a directory. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static void Copy(string sourceFileName, string destinationFileName, PathFormat pathFormat) - { - CopyMoveCore(false, null, sourceFileName, destinationFileName, false, CopyOptions.FailIfExists, null, null, null, null, pathFormat); - } - - /// [AlphaFS] Copies an existing file to a new file. Overwriting a file of the same name is allowed. - /// - /// The attributes of the original file are retained in the copied file. - /// Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - /// If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - /// - /// - /// - /// - /// - /// - /// - /// - /// The file to copy. - /// The name of the destination file. This cannot be a directory. - /// if the destination file should ignoring the read-only and hidden attributes and overwrite; otherwise, . - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static void Copy(string sourceFileName, string destinationFileName, bool overwrite, PathFormat pathFormat) - { - CopyMoveCore(false, null, sourceFileName, destinationFileName, false, overwrite ? CopyOptions.None : CopyOptions.FailIfExists, null, null, null, null, pathFormat); - } - - #endregion // Non-Transactional - - - #region Transactional - - /// [AlphaFS] Copies an existing file to a new file. Overwriting a file of the same name is not allowed. - /// - /// The attributes of the original file are retained in the copied file. - /// Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - /// If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - /// - /// - /// - /// - /// - /// - /// - /// - /// The transaction. - /// The file to copy. - /// The name of the destination file. This cannot be a directory or an existing file. - [SecurityCritical] - public static void CopyTransacted(KernelTransaction transaction, string sourceFileName, string destinationFileName) - { - CopyMoveCore(false, transaction, sourceFileName, destinationFileName, false, CopyOptions.FailIfExists, null, null, null, null, PathFormat.RelativePath); - } - - /// [AlphaFS] Copies an existing file to a new file. Overwriting a file of the same name is not allowed. - /// - /// The attributes of the original file are retained in the copied file. - /// Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - /// If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - /// - /// - /// - /// - /// - /// - /// - /// - /// The transaction. - /// The file to copy. - /// The name of the destination file. This cannot be a directory. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static void CopyTransacted(KernelTransaction transaction, string sourceFileName, string destinationFileName, PathFormat pathFormat) - { - CopyMoveCore(false, transaction, sourceFileName, destinationFileName, false, CopyOptions.FailIfExists, null, null, null, null, pathFormat); - } - - - /// [AlphaFS] Copies an existing file to a new file. Overwriting a file of the same name is allowed. - /// - /// The attributes of the original file are retained in the copied file. - /// Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - /// If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - /// - /// - /// - /// - /// - /// - /// - /// - /// The transaction. - /// The file to copy. - /// The name of the destination file. This cannot be a directory. - /// if the destination file should ignoring the read-only and hidden attributes and overwrite; otherwise, . - [SecurityCritical] - public static void CopyTransacted(KernelTransaction transaction, string sourceFileName, string destinationFileName, bool overwrite) - { - CopyMoveCore(false, transaction, sourceFileName, destinationFileName, false, overwrite ? CopyOptions.None : CopyOptions.FailIfExists, null, null, null, null, PathFormat.RelativePath); - } - - /// [AlphaFS] Copies an existing file to a new file. Overwriting a file of the same name is allowed. - /// - /// The attributes of the original file are retained in the copied file. - /// Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - /// If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - /// - /// - /// - /// - /// - /// - /// - /// - /// The transaction. - /// The file to copy. - /// The name of the destination file. This cannot be a directory. - /// if the destination file should ignoring the read-only and hidden attributes and overwrite; otherwise, . - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static void CopyTransacted(KernelTransaction transaction, string sourceFileName, string destinationFileName, bool overwrite, PathFormat pathFormat) - { - CopyMoveCore(false, transaction, sourceFileName, destinationFileName, false, overwrite ? CopyOptions.None : CopyOptions.FailIfExists, null, null, null, null, pathFormat); - } - - #endregion // Transactional - - #endregion // AlphaFS - - #endregion // Copy - - - #region Copy (CopyOptions) - - #region Non-Transactional - - /// [AlphaFS] Copies an existing file to a new file. Overwriting a file of the same name is allowed. can be specified. - /// - /// Option is recommended for very large file transfers. - /// The attributes of the original file are retained in the copied file. - /// Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - /// If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - /// - /// - /// - /// - /// - /// - /// - /// - /// The file to copy. - /// The name of the destination file. This cannot be a directory. - /// that specify how the file is to be copied. This parameter can be . - [SecurityCritical] - public static void Copy(string sourceFileName, string destinationFileName, CopyOptions copyOptions) - { - CopyMoveCore(false, null, sourceFileName, destinationFileName, false, copyOptions, null, null, null, null, PathFormat.RelativePath); - } - - /// [AlphaFS] Copies an existing file to a new file. Overwriting a file of the same name is allowed. can be specified. - /// - /// Option is recommended for very large file transfers. - /// The attributes of the original file are retained in the copied file. - /// Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - /// If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - /// - /// - /// - /// - /// - /// - /// - /// - /// The file to copy. - /// The name of the destination file. This cannot be a directory. - /// that specify how the file is to be copied. This parameter can be . - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static void Copy(string sourceFileName, string destinationFileName, CopyOptions copyOptions, PathFormat pathFormat) - { - CopyMoveCore(false, null, sourceFileName, destinationFileName, false, copyOptions, null, null, null, null, pathFormat); - } - - - /// [AlphaFS] Copies an existing file to a new file. Overwriting a file of the same name is allowed. can be specified. - /// - /// Option is recommended for very large file transfers. - /// The attributes of the original file are retained in the copied file. - /// Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - /// If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - /// - /// - /// - /// - /// - /// - /// - /// - /// The file to copy. - /// The name of the destination file. This cannot be a directory. - /// that specify how the file is to be copied. This parameter can be . - /// if original Timestamps must be preserved, otherwise. - [SecurityCritical] - public static void Copy(string sourceFileName, string destinationFileName, CopyOptions copyOptions, bool preserveDates) - { - CopyMoveCore(false, null, sourceFileName, destinationFileName, preserveDates, copyOptions, null, null, null, null, PathFormat.RelativePath); - } - - /// [AlphaFS] Copies an existing file to a new file. Overwriting a file of the same name is allowed. can be specified. - /// - /// Option is recommended for very large file transfers. - /// The attributes of the original file are retained in the copied file. - /// Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - /// If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - /// - /// - /// - /// - /// - /// - /// - /// - /// The file to copy. - /// The name of the destination file. This cannot be a directory. - /// that specify how the file is to be copied. This parameter can be . - /// if original Timestamps must be preserved, otherwise. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static void Copy(string sourceFileName, string destinationFileName, CopyOptions copyOptions, bool preserveDates, PathFormat pathFormat) - { - CopyMoveCore(false, null, sourceFileName, destinationFileName, preserveDates, copyOptions, null, null, null, null, pathFormat); - } - - - /// [AlphaFS] Copies an existing file to a new file. Overwriting a file of the same name is allowed. can be specified, - /// and the possibility of notifying the application of its progress through a callback function. - /// - /// A class with details of the Copy action. - /// - /// Option is recommended for very large file transfers. - /// The attributes of the original file are retained in the copied file. - /// Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - /// If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - /// - /// - /// - /// - /// - /// - /// - /// - /// The file to copy. - /// The name of the destination file. This cannot be a directory. - /// that specify how the file is to be copied. This parameter can be . - /// A callback function that is called each time another portion of the file has been copied. This parameter can be . - /// The argument to be passed to the callback function. This parameter can be . - [SecurityCritical] - public static CopyMoveResult Copy(string sourceFileName, string destinationFileName, CopyOptions copyOptions, CopyMoveProgressRoutine progressHandler, object userProgressData) - { - return CopyMoveCore(false, null, sourceFileName, destinationFileName, false, copyOptions, null, progressHandler, userProgressData, null, PathFormat.RelativePath); - } - - /// [AlphaFS] Copies an existing file to a new file. Overwriting a file of the same name is allowed. can be specified, - /// and the possibility of notifying the application of its progress through a callback function. - /// - /// A class with details of the Copy action. - /// - /// Option is recommended for very large file transfers. - /// The attributes of the original file are retained in the copied file. - /// Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - /// If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - /// - /// - /// - /// - /// - /// - /// - /// - /// The file to copy. - /// The name of the destination file. This cannot be a directory. - /// that specify how the file is to be copied. This parameter can be . - /// A callback function that is called each time another portion of the file has been copied. This parameter can be . - /// The argument to be passed to the callback function. This parameter can be . - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static CopyMoveResult Copy(string sourceFileName, string destinationFileName, CopyOptions copyOptions, CopyMoveProgressRoutine progressHandler, object userProgressData, PathFormat pathFormat) - { - return CopyMoveCore(false, null, sourceFileName, destinationFileName, false, copyOptions, null, progressHandler, userProgressData, null, pathFormat); - } - - - /// [AlphaFS] Copies an existing file to a new file. Overwriting a file of the same name is allowed. can be specified, - /// and the possibility of notifying the application of its progress through a callback function. - /// - /// A class with details of the Copy action. - /// - /// Option is recommended for very large file transfers. - /// The attributes of the original file are retained in the copied file. - /// Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - /// If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - /// - /// - /// - /// - /// - /// - /// - /// - /// The file to copy. - /// The name of the destination file. This cannot be a directory. - /// that specify how the file is to be copied. This parameter can be . - /// if original Timestamps must be preserved, otherwise. - /// A callback function that is called each time another portion of the file has been copied. This parameter can be . - /// The argument to be passed to the callback function. This parameter can be . - [SecurityCritical] - public static CopyMoveResult Copy(string sourceFileName, string destinationFileName, CopyOptions copyOptions, bool preserveDates, CopyMoveProgressRoutine progressHandler, object userProgressData) - { - return CopyMoveCore(false, null, sourceFileName, destinationFileName, preserveDates, copyOptions, null, progressHandler, userProgressData, null, PathFormat.RelativePath); - } - - /// [AlphaFS] Copies an existing file to a new file. Overwriting a file of the same name is allowed. can be specified, - /// and the possibility of notifying the application of its progress through a callback function. - /// - /// A class with details of the Copy action. - /// - /// Option is recommended for very large file transfers. - /// The attributes of the original file are retained in the copied file. - /// Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - /// If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - /// - /// - /// - /// - /// - /// - /// - /// - /// The file to copy. - /// The name of the destination file. This cannot be a directory. - /// that specify how the file is to be copied. This parameter can be . - /// if original Timestamps must be preserved, otherwise. - /// A callback function that is called each time another portion of the file has been copied. This parameter can be . - /// The argument to be passed to the callback function. This parameter can be . - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static CopyMoveResult Copy(string sourceFileName, string destinationFileName, CopyOptions copyOptions, bool preserveDates, CopyMoveProgressRoutine progressHandler, object userProgressData, PathFormat pathFormat) - { - return CopyMoveCore(false, null, sourceFileName, destinationFileName, preserveDates, copyOptions, null, progressHandler, userProgressData, null, pathFormat); - } - - #endregion // Non-Transactional - - - #region Transactional - - /// [AlphaFS] Copies an existing file to a new file. Overwriting a file of the same name is allowed. can be specified. - /// - /// Option is recommended for very large file transfers. - /// The attributes of the original file are retained in the copied file. - /// Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - /// If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - /// - /// - /// - /// - /// - /// - /// - /// - /// The transaction. - /// The file to copy. - /// The name of the destination file. This cannot be a directory. - /// that specify how the file is to be copied. This parameter can be . - [SecurityCritical] - public static void CopyTransacted(KernelTransaction transaction, string sourceFileName, string destinationFileName, CopyOptions copyOptions) - { - CopyMoveCore(false, transaction, sourceFileName, destinationFileName, false, copyOptions, null, null, null, null, PathFormat.RelativePath); - } - - /// [AlphaFS] Copies an existing file to a new file. Overwriting a file of the same name is allowed. can be specified. - /// - /// Option is recommended for very large file transfers. - /// The attributes of the original file are retained in the copied file. - /// Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - /// If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - /// - /// - /// - /// - /// - /// - /// - /// - /// The transaction. - /// The file to copy. - /// The name of the destination file. This cannot be a directory. - /// that specify how the file is to be copied. This parameter can be . - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static void CopyTransacted(KernelTransaction transaction, string sourceFileName, string destinationFileName, CopyOptions copyOptions, PathFormat pathFormat) - { - CopyMoveCore(false, transaction, sourceFileName, destinationFileName, false, copyOptions, null, null, null, null, pathFormat); - } - - - /// [AlphaFS] Copies an existing file to a new file. Overwriting a file of the same name is allowed. can be specified. - /// - /// Option is recommended for very large file transfers. - /// The attributes of the original file are retained in the copied file. - /// Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - /// If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - /// - /// - /// - /// - /// - /// - /// - /// - /// The transaction. - /// The file to copy. - /// The name of the destination file. This cannot be a directory. - /// that specify how the file is to be copied. This parameter can be . - /// if original Timestamps must be preserved, otherwise. - [SecurityCritical] - public static void CopyTransacted(KernelTransaction transaction, string sourceFileName, string destinationFileName, CopyOptions copyOptions, bool preserveDates) - { - CopyMoveCore(false, transaction, sourceFileName, destinationFileName, preserveDates, copyOptions, null, null, null, null, PathFormat.RelativePath); - } - - /// [AlphaFS] Copies an existing file to a new file. Overwriting a file of the same name is allowed. can be specified. - /// - /// Option is recommended for very large file transfers. - /// The attributes of the original file are retained in the copied file. - /// Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - /// If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - /// - /// - /// - /// - /// - /// - /// - /// - /// The transaction. - /// The file to copy. - /// The name of the destination file. This cannot be a directory. - /// that specify how the file is to be copied. This parameter can be . - /// if original Timestamps must be preserved, otherwise. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static void CopyTransacted(KernelTransaction transaction, string sourceFileName, string destinationFileName, CopyOptions copyOptions, bool preserveDates, PathFormat pathFormat) - { - CopyMoveCore(false, transaction, sourceFileName, destinationFileName, preserveDates, copyOptions, null, null, null, null, pathFormat); - } - - - /// [AlphaFS] Copies an existing file to a new file. Overwriting a file of the same name is allowed. can be specified, - /// and the possibility of notifying the application of its progress through a callback function. - /// - /// A class with details of the Copy action. - /// - /// Option is recommended for very large file transfers. - /// The attributes of the original file are retained in the copied file. - /// Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - /// If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - /// - /// - /// - /// - /// - /// - /// - /// - /// The transaction. - /// The file to copy. - /// The name of the destination file. This cannot be a directory. - /// that specify how the file is to be copied. This parameter can be . - /// A callback function that is called each time another portion of the file has been copied. This parameter can be . - /// The argument to be passed to the callback function. This parameter can be . - [SecurityCritical] - public static CopyMoveResult CopyTransacted(KernelTransaction transaction, string sourceFileName, string destinationFileName, CopyOptions copyOptions, CopyMoveProgressRoutine progressHandler, object userProgressData) - { - return CopyMoveCore(false, transaction, sourceFileName, destinationFileName, false, copyOptions, null, progressHandler, userProgressData, null, PathFormat.RelativePath); - } - - /// [AlphaFS] Copies an existing file to a new file. Overwriting a file of the same name is allowed. can be specified, - /// and the possibility of notifying the application of its progress through a callback function. - /// - /// A class with details of the Copy action. - /// - /// Option is recommended for very large file transfers. - /// The attributes of the original file are retained in the copied file. - /// Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - /// If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - /// - /// - /// - /// - /// - /// - /// - /// - /// The transaction. - /// The file to copy. - /// The name of the destination file. This cannot be a directory. - /// that specify how the file is to be copied. This parameter can be . - /// A callback function that is called each time another portion of the file has been copied. This parameter can be . - /// The argument to be passed to the callback function. This parameter can be . - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static CopyMoveResult CopyTransacted(KernelTransaction transaction, string sourceFileName, string destinationFileName, CopyOptions copyOptions, CopyMoveProgressRoutine progressHandler, object userProgressData, PathFormat pathFormat) - { - return CopyMoveCore(false, transaction, sourceFileName, destinationFileName, false, copyOptions, null, progressHandler, userProgressData, null, pathFormat); - } - - - /// [AlphaFS] Copies an existing file to a new file. Overwriting a file of the same name is allowed. can be specified, - /// and the possibility of notifying the application of its progress through a callback function. - /// - /// A class with details of the Copy action. - /// - /// Option is recommended for very large file transfers. - /// The attributes of the original file are retained in the copied file. - /// Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - /// If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - /// - /// - /// - /// - /// - /// - /// - /// - /// The transaction. - /// The file to copy. - /// The name of the destination file. This cannot be a directory. - /// that specify how the file is to be copied. This parameter can be . - /// if original Timestamps must be preserved, otherwise. - /// A callback function that is called each time another portion of the file has been copied. This parameter can be . - /// The argument to be passed to the callback function. This parameter can be . - [SecurityCritical] - public static CopyMoveResult CopyTransacted(KernelTransaction transaction, string sourceFileName, string destinationFileName, CopyOptions copyOptions, bool preserveDates, CopyMoveProgressRoutine progressHandler, object userProgressData) - { - return CopyMoveCore(false, transaction, sourceFileName, destinationFileName, preserveDates, copyOptions, null, progressHandler, userProgressData, null, PathFormat.RelativePath); - } - - /// [AlphaFS] Copies an existing file to a new file. Overwriting a file of the same name is allowed. can be specified, - /// and the possibility of notifying the application of its progress through a callback function. - /// - /// A class with details of the Copy action. - /// - /// Option is recommended for very large file transfers. - /// The attributes of the original file are retained in the copied file. - /// Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - /// If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - /// - /// The transaction. - /// The file to copy. - /// The name of the destination file. This cannot be a directory. - /// that specify how the file is to be copied. This parameter can be . - /// if original Timestamps must be preserved, otherwise. - /// A callback function that is called each time another portion of the file has been copied. This parameter can be . - /// The argument to be passed to the callback function. This parameter can be . - /// Indicates the format of the path parameter(s). - /// - /// - /// - /// - /// - /// - /// - [SecurityCritical] - public static CopyMoveResult CopyTransacted(KernelTransaction transaction, string sourceFileName, string destinationFileName, CopyOptions copyOptions, bool preserveDates, CopyMoveProgressRoutine progressHandler, object userProgressData, PathFormat pathFormat) - { - return CopyMoveCore(false, transaction, sourceFileName, destinationFileName, preserveDates, copyOptions, null, progressHandler, userProgressData, null, pathFormat); - } - - #endregion // Transactional - - #endregion // Copy (CopyOptions) - - - #region Move - - #region .NET - - /// Moves a specified file to a new location, providing the option to specify a new file name. - /// - /// This method works across disk volumes, and it does not throw an exception if the source and destination are the same. - /// Note that if you attempt to replace a file by moving a file of the same name into that directory, you get an . - /// You cannot use the Move method to overwrite an existing file. - /// Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - /// If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - /// - /// - /// - /// - /// - /// - /// - /// - /// The name of the file to move. - /// The new path for the file. - [SecurityCritical] - public static void Move(string sourceFileName, string destinationFileName) - { - CopyMoveCore(false, null, sourceFileName, destinationFileName, false, null, MoveOptions.CopyAllowed, null, null, null, PathFormat.RelativePath); - } - - #endregion // .NET - - #region AlphaFS - - #region Non-Transactional - - /// [AlphaFS] Moves a specified file to a new location, providing the option to specify a new file name. - /// - /// This method works across disk volumes, and it does not throw an exception if the source and destination are the same. - /// Note that if you attempt to replace a file by moving a file of the same name into that directory, you get an . - /// You cannot use the Move method to overwrite an existing file. - /// Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - /// If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - /// - /// - /// - /// - /// - /// - /// - /// - /// The name of the file to move. - /// The new path for the file. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static void Move(string sourceFileName, string destinationFileName, PathFormat pathFormat) - { - CopyMoveCore(false, null, sourceFileName, destinationFileName, false, null, MoveOptions.CopyAllowed, null, null, null, pathFormat); - } - - #endregion // Non-Transactional - - #region Transactional - - /// [AlphaFS] Moves a specified file to a new location, providing the option to specify a new file name. - /// - /// This method works across disk volumes, and it does not throw an exception if the source and destination are the same. - /// Note that if you attempt to replace a file by moving a file of the same name into that directory, you get an . - /// You cannot use the Move method to overwrite an existing file. - /// Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - /// If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - /// - /// - /// - /// - /// - /// - /// - /// - /// The transaction. - /// The name of the file to move. - /// The new path for the file. - [SecurityCritical] - public static void MoveTransacted(KernelTransaction transaction, string sourceFileName, string destinationFileName) - { - CopyMoveCore(false, transaction, sourceFileName, destinationFileName, false, null, MoveOptions.CopyAllowed, null, null, null, PathFormat.RelativePath); - } - - /// [AlphaFS] Moves a specified file to a new location, providing the option to specify a new file name. - /// - /// This method works across disk volumes, and it does not throw an exception if the source and destination are the same. - /// Note that if you attempt to replace a file by moving a file of the same name into that directory, you get an . - /// You cannot use the Move method to overwrite an existing file. - /// Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - /// If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - /// - /// - /// - /// - /// - /// - /// - /// - /// The transaction. - /// The name of the file to move. - /// The new path for the file. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static void MoveTransacted(KernelTransaction transaction, string sourceFileName, string destinationFileName, PathFormat pathFormat) - { - CopyMoveCore(false, transaction, sourceFileName, destinationFileName, false, null, MoveOptions.CopyAllowed, null, null, null, pathFormat); - } - - #endregion // Transactional - - #endregion // AlphaFS - - #endregion // Move - - - #region Move (MoveOptions) - - #region Non-Transactional - - /// [AlphaFS] Moves a specified file to a new location, providing the option to specify a new file name. - /// - /// This method works across disk volumes, and it does not throw an exception if the source and destination are the same. - /// Note that if you attempt to replace a file by moving a file of the same name into that directory, you get an . - /// You cannot use the Move method to overwrite an existing file. - /// Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - /// If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - /// - /// - /// - /// - /// - /// - /// - /// - /// The name of the file to move. - /// The new path for the file. - /// that specify how the file is to be moved. This parameter can be . - [SecurityCritical] - public static void Move(string sourceFileName, string destinationFileName, MoveOptions moveOptions) - { - CopyMoveCore(false, null, sourceFileName, destinationFileName, false, null, moveOptions, null, null, null, PathFormat.RelativePath); - } - - /// [AlphaFS] Moves a specified file to a new location, providing the option to specify a new file name. - /// - /// This method works across disk volumes, and it does not throw an exception if the source and destination are the same. - /// Note that if you attempt to replace a file by moving a file of the same name into that directory, you get an . - /// You cannot use the Move method to overwrite an existing file. - /// Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - /// If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - /// - /// - /// - /// - /// - /// - /// - /// - /// The name of the file to move. - /// The new path for the file. - /// that specify how the file is to be moved. This parameter can be . - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static void Move(string sourceFileName, string destinationFileName, MoveOptions moveOptions, PathFormat pathFormat) - { - CopyMoveCore(false, null, sourceFileName, destinationFileName, false, null, moveOptions, null, null, null, pathFormat); - } - - - - /// [AlphaFS] Moves a specified file to a new location, providing the option to specify a new file name. - /// A class with the status of the Move action. - /// - /// This method works across disk volumes, and it does not throw an exception if the source and destination are the same. - /// Note that if you attempt to replace a file by moving a file of the same name into that directory, you get an . - /// You cannot use the Move method to overwrite an existing file. - /// Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - /// If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - /// - /// - /// - /// - /// - /// - /// - /// - /// The name of the file to move. - /// The new path for the file. - /// that specify how the file is to be moved. This parameter can be . - /// A callback function that is called each time another portion of the file has been moved. This parameter can be . - /// The argument to be passed to the callback function. This parameter can be . - [SecurityCritical] - public static CopyMoveResult Move(string sourceFileName, string destinationFileName, MoveOptions moveOptions, CopyMoveProgressRoutine progressHandler, object userProgressData) - { - return CopyMoveCore(false, null, sourceFileName, destinationFileName, false, null, moveOptions, progressHandler, userProgressData, null, PathFormat.RelativePath); - } - - /// [AlphaFS] Moves a specified file to a new location, providing the option to specify a new file name. - /// A class with the status of the Move action. - /// - /// This method works across disk volumes, and it does not throw an exception if the source and destination are the same. - /// Note that if you attempt to replace a file by moving a file of the same name into that directory, you get an . - /// You cannot use the Move method to overwrite an existing file. - /// Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - /// If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - /// - /// - /// - /// - /// - /// - /// - /// - /// The name of the file to move. - /// The new path for the file. - /// that specify how the file is to be moved. This parameter can be . - /// A callback function that is called each time another portion of the file has been moved. This parameter can be . - /// The argument to be passed to the callback function. This parameter can be . - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static CopyMoveResult Move(string sourceFileName, string destinationFileName, MoveOptions moveOptions, CopyMoveProgressRoutine progressHandler, object userProgressData, PathFormat pathFormat) - { - return CopyMoveCore(false, null, sourceFileName, destinationFileName, false, null, moveOptions, progressHandler, userProgressData, null, pathFormat); - } - - #endregion // Non-Transactional - - #region Transactional - - /// [AlphaFS] Moves a specified file to a new location, providing the option to specify a new file name. - /// - /// This method works across disk volumes, and it does not throw an exception if the source and destination are the same. - /// Note that if you attempt to replace a file by moving a file of the same name into that directory, you get an . - /// You cannot use the Move method to overwrite an existing file. - /// Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - /// If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - /// - /// - /// - /// - /// - /// - /// - /// - /// The transaction. - /// The name of the file to move. - /// The new path for the file. - /// that specify how the file is to be moved. This parameter can be . - [SecurityCritical] - public static void MoveTransacted(KernelTransaction transaction, string sourceFileName, string destinationFileName, MoveOptions moveOptions) - { - CopyMoveCore(false, transaction, sourceFileName, destinationFileName, false, null, moveOptions, null, null, null, PathFormat.RelativePath); - } - - /// [AlphaFS] Moves a specified file to a new location, providing the option to specify a new file name. - /// - /// This method works across disk volumes, and it does not throw an exception if the source and destination are the same. - /// Note that if you attempt to replace a file by moving a file of the same name into that directory, you get an . - /// You cannot use the Move method to overwrite an existing file. - /// Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - /// If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - /// - /// - /// - /// - /// - /// - /// - /// - /// The transaction. - /// The name of the file to move. - /// The new path for the file. - /// that specify how the file is to be moved. This parameter can be . - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static void MoveTransacted(KernelTransaction transaction, string sourceFileName, string destinationFileName, MoveOptions moveOptions, PathFormat pathFormat) - { - CopyMoveCore(false, transaction, sourceFileName, destinationFileName, false, null, moveOptions, null, null, null, pathFormat); - } - - - - /// [AlphaFS] Moves a specified file to a new location, providing the option to specify a new file name. - /// A class with the status of the Move action. - /// - /// This method works across disk volumes, and it does not throw an exception if the source and destination are the same. - /// Note that if you attempt to replace a file by moving a file of the same name into that directory, you get an . - /// You cannot use the Move method to overwrite an existing file. - /// Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - /// If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - /// - /// - /// - /// - /// - /// - /// - /// - /// The transaction. - /// The name of the file to move. - /// The new path for the file. - /// that specify how the file is to be moved. This parameter can be . - /// A callback function that is called each time another portion of the file has been moved. This parameter can be . - /// The argument to be passed to the callback function. This parameter can be . - [SecurityCritical] - public static CopyMoveResult MoveTransacted(KernelTransaction transaction, string sourceFileName, string destinationFileName, MoveOptions moveOptions, CopyMoveProgressRoutine progressHandler, object userProgressData) - { - return CopyMoveCore(false, transaction, sourceFileName, destinationFileName, false, null, moveOptions, progressHandler, userProgressData, null, PathFormat.RelativePath); - } - - /// [AlphaFS] Moves a specified file to a new location, providing the option to specify a new file name. - /// A class with the status of the Move action. - /// - /// This method works across disk volumes, and it does not throw an exception if the source and destination are the same. - /// Note that if you attempt to replace a file by moving a file of the same name into that directory, you get an . - /// You cannot use the Move method to overwrite an existing file. - /// Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - /// If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - /// - /// - /// - /// - /// - /// - /// - /// - /// The transaction. - /// The name of the file to move. - /// The new path for the file. - /// that specify how the file is to be moved. This parameter can be . - /// A callback function that is called each time another portion of the file has been moved. This parameter can be . - /// The argument to be passed to the callback function. This parameter can be . - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static CopyMoveResult MoveTransacted(KernelTransaction transaction, string sourceFileName, string destinationFileName, MoveOptions moveOptions, CopyMoveProgressRoutine progressHandler, object userProgressData, PathFormat pathFormat) - { - return CopyMoveCore(false, transaction, sourceFileName, destinationFileName, false, null, moveOptions, progressHandler, userProgressData, null, pathFormat); - } - - #endregion // Transactional - - #endregion // Move (MoveOptions) - - - #region Internal Methods - - /// Determine the Copy or Move action. - internal static bool DetermineIsCopy(CopyOptions? copyOptions, MoveOptions? moveOptions) - { - // Determine Copy or Move action. - var isCopy = copyOptions != null; - var isMove = !isCopy && moveOptions != null; - - if ((!isCopy && !isMove) || (isCopy && isMove)) - throw new NotSupportedException(Resources.Cannot_Determine_Copy_Or_Move); - - return isCopy; - } - - - /// Copy/move a Non-/Transacted file or directory including its children to a new location, or can be specified, - /// and the possibility of notifying the application of its progress through a callback function. - /// - /// A class with the status of the Copy or Move action. - /// - /// Option is recommended for very large file transfers. - /// You cannot use the Move method to overwrite an existing file, unless - /// contains . - /// This Move method works across disk volumes, and it does not throw an exception if the - /// source and destination are the same. - /// Note that if you attempt to replace a file by moving a file of the same name into - /// that directory, you get an IOException. - /// - /// - /// - /// - /// - /// - /// - /// - /// Specifies that and are a file or directory. - /// The transaction. - /// The source directory path. - /// The destination directory path. - /// if original Timestamps must be preserved, otherwise. This parameter is ignored for move operations. - /// that specify how the file is to be copied. This parameter can be . - /// Flags that specify how the file or directory is to be moved. This parameter can be . - /// A callback function that is called each time another portion of the file has been copied/moved. This parameter can be . - /// The argument to be passed to the callback function. This parameter can be . - /// - /// Indicates the format of the path parameter(s). - [SuppressMessage("Microsoft.Maintainability", "CA1502:AvoidExcessiveComplexity")] - [SecurityCritical] - internal static CopyMoveResult CopyMoveCore(bool isFolder, KernelTransaction transaction, string sourceFileName, string destinationFileName, bool preserveDates, CopyOptions? copyOptions, MoveOptions? moveOptions, CopyMoveProgressRoutine progressHandler, object userProgressData, CopyMoveResult copyMoveResult, PathFormat pathFormat) - { - #region Setup - - var sourceFileNameLp = sourceFileName; - var destFileNameLp = destinationFileName; - var skipPathChecks = pathFormat == PathFormat.LongFullPath; - - - if (!skipPathChecks) - { - Path.CheckSupportedPathFormat(sourceFileName, true, true); - Path.CheckSupportedPathFormat(destinationFileName, true, true); - - sourceFileNameLp = Path.GetExtendedLengthPathCore(transaction, sourceFileName, pathFormat, GetFullPathOptions.RemoveTrailingDirectorySeparator); - destFileNameLp = Path.GetExtendedLengthPathCore(transaction, destinationFileName, pathFormat, GetFullPathOptions.RemoveTrailingDirectorySeparator); - } - - - // MSDN: If this flag is set to TRUE during the copy/move operation, the operation is canceled. - // Otherwise, the copy/move operation will continue to completion. - var cancel = false; - - // Determine Copy or Move action. - var isCopy = DetermineIsCopy(copyOptions, moveOptions); - var isMove = !isCopy; - - - var raiseException = progressHandler == null; - //Task completedTask = null; - - - // Setup callback function for progress notifications. - var routine = progressHandler != null - ? (totalFileSize, totalBytesTransferred, streamSize, streamBytesTransferred, dwStreamNumber, dwCallbackReason, hSourceFile, hDestinationFile, lpData) => - progressHandler(totalFileSize, totalBytesTransferred, streamSize, streamBytesTransferred, dwStreamNumber, dwCallbackReason, userProgressData) - : (NativeMethods.NativeCopyMoveProgressRoutine) null; - - - var cmr = copyMoveResult ?? new CopyMoveResult(sourceFileNameLp, destFileNameLp, false, (int) Win32Errors.ERROR_SUCCESS); - - #endregion // Setup - - - startCopyMove: - - #region Win32 Copy/Move - - var success = transaction == null || !NativeMethods.IsAtLeastWindowsVista - - ? isMove - // MoveFileWithProgress() / MoveFileTransacted() - // In the ANSI version of this function, the name is limited to MAX_PATH characters. - // To extend this limit to 32,767 wide characters, call the Unicode version of the function and prepend "\\?\" to the path. - // 2013-04-15: MSDN confirms LongPath usage. - - // CopyFileEx() / CopyFileTransacted() - // In the ANSI version of this function, the name is limited to MAX_PATH characters. - // To extend this limit to 32,767 wide characters, call the Unicode version of the function and prepend "\\?\" to the path. - // 2013-04-15: MSDN confirms LongPath usage. - - - // Note: The NativeMethod.MoveFileXxx() methods fail if one of the paths is a UNC path, even though both paths refer to the same volume. - // For example, src = C:\TempSrc and dst = \\localhost\C$\TempDst - - - ? NativeMethods.MoveFileWithProgress(sourceFileNameLp, destFileNameLp, routine, IntPtr.Zero, (MoveOptions) moveOptions) - : NativeMethods.CopyFileEx(sourceFileNameLp, destFileNameLp, routine, IntPtr.Zero, out cancel, (CopyOptions) copyOptions) - - : isMove - ? NativeMethods.MoveFileTransacted(sourceFileNameLp, destFileNameLp, routine, IntPtr.Zero, (MoveOptions) moveOptions, transaction.SafeHandle) - : NativeMethods.CopyFileTransacted(sourceFileNameLp, destFileNameLp, routine, IntPtr.Zero, out cancel, (CopyOptions) copyOptions, transaction.SafeHandle); - - - - - var lastError = (uint) Marshal.GetLastWin32Error(); - if (!success) - { - cmr.ErrorCode = (int) lastError; - - if (lastError == Win32Errors.ERROR_REQUEST_ABORTED) - { - // MSDN: - // - // If lpProgressRoutine returns PROGRESS_CANCEL due to the user canceling the operation, - // CopyFileEx will return zero and GetLastError will return ERROR_REQUEST_ABORTED. - // In this case, the partially copied destination file is deleted. - // - // If lpProgressRoutine returns PROGRESS_STOP due to the user stopping the operation, - // CopyFileEx will return zero and GetLastError will return ERROR_REQUEST_ABORTED. - // In this case, the partially copied destination file is left intact. - - cancel = true; - cmr.IsCanceled = cancel; - } - - else if (raiseException) - { - raiseException: - - #region Win32Errors - - switch (lastError) - { - case Win32Errors.ERROR_FILE_NOT_FOUND: - if (isFolder) - { - lastError = Win32Errors.ERROR_PATH_NOT_FOUND; - goto raiseException; - } - - // File.Copy() - // File.Move() - // MSDN: .NET 3.5+: FileNotFoundException: sourceFileName was not found. - NativeError.ThrowException(lastError, sourceFileNameLp); - break; - - case Win32Errors.ERROR_PATH_NOT_FOUND: - // File.Copy() - // File.Move() - // Directory.Move() - // MSDN: .NET 3.5+: DirectoryNotFoundException: The path specified in sourceFileName or destinationFileName is invalid (for example, it is on an unmapped drive). - NativeError.ThrowException(lastError, sourceFileNameLp); - break; - - case Win32Errors.ERROR_FILE_EXISTS: - // File.Copy() - // Directory.Copy() - NativeError.ThrowException(lastError, destFileNameLp); - break; - - default: - var destExists = ExistsCore(isFolder, transaction, destFileNameLp, PathFormat.LongFullPath); - - // For a number of error codes (sharing violation, path not found, etc) - // we don't know if the problem was with the source or destination file. - - // Check if destination directory already exists. - // Directory.Move() - // MSDN: .NET 3.5+: IOException: destDirName already exists. - if (isFolder && destExists) - NativeError.ThrowException(Win32Errors.ERROR_ALREADY_EXISTS, destFileNameLp); - - if (isMove) - { - // Ensure that the source file or directory exists. - // Directory.Move() - // MSDN: .NET 3.5+: DirectoryNotFoundException: The path specified by sourceDirName is invalid (for example, it is on an unmapped drive). - if (!ExistsCore(isFolder, transaction, sourceFileNameLp, PathFormat.LongFullPath)) - NativeError.ThrowException(isFolder ? Win32Errors.ERROR_PATH_NOT_FOUND : Win32Errors.ERROR_FILE_NOT_FOUND, sourceFileNameLp); - } - - - // Try reading the source file. - var fileNameLp = destFileNameLp; - - if (!isFolder) - { - using (var safeHandle = CreateFileCore(transaction, sourceFileNameLp, ExtendedFileAttributes.Normal, null, FileMode.Open, 0, FileShare.Read, false, PathFormat.LongFullPath)) - if (safeHandle != null && safeHandle.IsInvalid) - fileNameLp = sourceFileNameLp; - } - - if (lastError == Win32Errors.ERROR_ACCESS_DENIED) - { - // File.Copy() - // File.Move() - // MSDN: .NET 3.5+: IOException: An I/O error has occurred. - // Directory exists with the same name as the file. - if (!isFolder && destExists) - NativeError.ThrowException(lastError, string.Format(CultureInfo.CurrentCulture, Resources.Target_File_Is_A_Directory, destFileNameLp)); - - if (isMove) - { - var data = new NativeMethods.WIN32_FILE_ATTRIBUTE_DATA(); - FillAttributeInfoCore(transaction, destFileNameLp, ref data, false, true); - - if (data.dwFileAttributes != (FileAttributes) (-1)) - { - if ((data.dwFileAttributes & FileAttributes.ReadOnly) != 0) - { - // MSDN: .NET 3.5+: IOException: The directory specified by path is read-only. - if (((MoveOptions) moveOptions & MoveOptions.ReplaceExisting) != 0) - { - // Reset file system object attributes. - SetAttributesCore(isFolder, transaction, destFileNameLp, FileAttributes.Normal, true, PathFormat.LongFullPath); - - goto startCopyMove; - } - - - // MSDN: .NET 3.5+: UnauthorizedAccessException: destinationFileName is read-only. - // MSDN: Win32 CopyFileXxx: This function fails with ERROR_ACCESS_DENIED if the destination file already exists - // and has the FILE_ATTRIBUTE_HIDDEN or FILE_ATTRIBUTE_READONLY attribute set. - throw new FileReadOnlyException(destFileNameLp); - } - - - // MSDN: Win32 CopyFileXxx: This function fails with ERROR_ACCESS_DENIED if the destination file already exists - // and has the FILE_ATTRIBUTE_HIDDEN or FILE_ATTRIBUTE_READONLY attribute set. - if ((data.dwFileAttributes & FileAttributes.Hidden) != 0) - NativeError.ThrowException(lastError, string.Format(CultureInfo.CurrentCulture, Resources.File_Is_Hidden, destFileNameLp)); - } - } - } - - - // MSDN: .NET 3.5+: An I/O error has occurred. - // File.Copy(): IOException: destinationFileName exists and overwrite is false. - // File.Move(): The destination file already exists or sourceFileName was not found. - NativeError.ThrowException(lastError, fileNameLp); - - break; - } - - #endregion // Win32Errors - } - } - - #endregion // Win32 Copy/Move - - - #region Transfer Timestamps - - // Apply original Timestamps if requested. - // MoveFileWithProgress() / MoveFileTransacted() automatically preserve Timestamps. - // File.Copy() - - if (success && preserveDates && isCopy) - { - // Currently preserveDates is only used with files. - var data = new NativeMethods.WIN32_FILE_ATTRIBUTE_DATA(); - var dataInitialised = FillAttributeInfoCore(transaction, sourceFileNameLp, ref data, false, true); - - if (dataInitialised == Win32Errors.ERROR_SUCCESS && data.dwFileAttributes != (FileAttributes) (-1)) - SetFsoDateTimeCore(false, transaction, destFileNameLp, DateTime.FromFileTimeUtc(data.ftCreationTime), - DateTime.FromFileTimeUtc(data.ftLastAccessTime), DateTime.FromFileTimeUtc(data.ftLastWriteTime), false, PathFormat.LongFullPath); - } - - #endregion // Transfer Timestamps - - - return cmr; - } - - #endregion // Internal Methods - } -} diff --git a/AlphaFS/Filesystem/File Class/File.Create.cs b/AlphaFS/Filesystem/File Class/File.Create.cs deleted file mode 100644 index f1f2703..0000000 --- a/AlphaFS/Filesystem/File Class/File.Create.cs +++ /dev/null @@ -1,427 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using Alphaleonis.Win32.Security; -using Microsoft.Win32.SafeHandles; -using System; -using System.Diagnostics.CodeAnalysis; -using System.IO; -using System.Runtime.InteropServices; -using System.Security; -using System.Security.AccessControl; -using FileStream = System.IO.FileStream; - -namespace Alphaleonis.Win32.Filesystem -{ - public static partial class File - { - #region Non-Transactional - - /// Creates or overwrites a file in the specified path. - /// The path and name of the file to create. - /// A that provides read/write access to the file specified in . - [SecurityCritical] - public static FileStream Create(string path) - { - return CreateFileStreamCore(null, path, ExtendedFileAttributes.Normal, null, FileMode.Create, FileAccess.ReadWrite, FileShare.None, NativeMethods.DefaultFileBufferSize, PathFormat.RelativePath); - } - - /// Creates or overwrites the specified file. - /// The name of the file. - /// The number of bytes buffered for reads and writes to the file. - /// - /// A with the specified buffer size that provides read/write access to the file specified in - /// . - /// - [SecurityCritical] - public static FileStream Create(string path, int bufferSize) - { - return CreateFileStreamCore(null, path, ExtendedFileAttributes.Normal, null, FileMode.Create, FileAccess.ReadWrite, FileShare.None, bufferSize, PathFormat.RelativePath); - } - - /// - /// Creates or overwrites the specified file, specifying a buffer size and a - /// value that describes how to create or overwrite the file. - /// - /// The name of the file. - /// The number of bytes buffered for reads and writes to the file. - /// One of the values that describes how to create or overwrite the file. - /// A new file with the specified buffer size. - [SecurityCritical] - public static FileStream Create(string path, int bufferSize, FileOptions options) - { - return CreateFileStreamCore(null, path, (ExtendedFileAttributes) options, null, FileMode.Create, FileAccess.ReadWrite, FileShare.None, bufferSize, PathFormat.RelativePath); - } - - /// - /// Creates or overwrites the specified file, specifying a buffer size and a - /// value that describes how to create or overwrite the file. - /// - /// The name of the file. - /// The number of bytes buffered for reads and writes to the file. - /// One of the values that describes how to create or overwrite the file. - /// - /// One of the values that determines the access control and audit security for the file. - /// - /// A new file with the specified buffer size, file options, and file security. - [SecurityCritical] - public static FileStream Create(string path, int bufferSize, FileOptions options, FileSecurity fileSecurity) - { - return CreateFileStreamCore(null, path, (ExtendedFileAttributes)options, fileSecurity, FileMode.Create, FileAccess.ReadWrite, FileShare.None, bufferSize, PathFormat.RelativePath); - } - - /// Creates or overwrites a file in the specified path. - /// The path and name of the file to create. - /// Indicates the format of the path parameter(s). - /// - /// A that provides read/write access to the file specified in - /// . - /// - [SecurityCritical] - public static FileStream Create(string path, PathFormat pathFormat) - { - return CreateFileStreamCore(null, path, ExtendedFileAttributes.Normal, null, FileMode.Create, FileAccess.ReadWrite, FileShare.None, NativeMethods.DefaultFileBufferSize, pathFormat); - } - - /// Creates or overwrites the specified file. - /// The name of the file. - /// The number of bytes buffered for reads and writes to the file. - /// Indicates the format of the path parameter(s). - /// - /// A with the specified buffer size that provides read/write access to the file specified in - /// . - /// - [SecurityCritical] - public static FileStream Create(string path, int bufferSize, PathFormat pathFormat) - { - return CreateFileStreamCore(null, path, ExtendedFileAttributes.Normal, null, FileMode.Create, FileAccess.ReadWrite, FileShare.None, bufferSize, pathFormat); - } - - /// - /// Creates or overwrites the specified file, specifying a buffer size and a - /// value that describes how to create or overwrite the file. - /// - /// The name of the file. - /// - /// The number of bytes buffered for reads and writes to the file. - /// - /// - /// One of the values that describes how to create or overwrite the - /// file. - /// - /// Indicates the format of the path parameter(s). - /// A new file with the specified buffer size. - [SecurityCritical] - public static FileStream Create(string path, int bufferSize, FileOptions options, PathFormat pathFormat) - { - return CreateFileStreamCore(null, path, (ExtendedFileAttributes)options, null, FileMode.Create, FileAccess.ReadWrite, FileShare.None, bufferSize, pathFormat); - } - - /// - /// Creates or overwrites the specified file, specifying a buffer size and a - /// value that describes how to create or overwrite the file. - /// - /// The name of the file. - /// - /// The number of bytes buffered for reads and writes to the file. - /// - /// - /// One of the values that describes how to create or overwrite the - /// file. - /// - /// - /// One of the values that determines the access control and audit - /// security for the file. - /// - /// Indicates the format of the path parameter(s). - /// - /// A new file with the specified buffer size, file options, and file security. - /// - [SecurityCritical] - public static FileStream Create(string path, int bufferSize, FileOptions options, FileSecurity fileSecurity, PathFormat pathFormat) - { - return CreateFileStreamCore(null, path, (ExtendedFileAttributes)options, fileSecurity, FileMode.Create, FileAccess.ReadWrite, FileShare.None, bufferSize, pathFormat); - } - - #endregion // .NET - - #region Transactional - - /// Creates or overwrites a file in the specified path. - /// The transaction. - /// The path and name of the file to create. - /// - /// A that provides read/write access to the file specified in - /// . - /// - [SecurityCritical] - public static FileStream CreateTransacted(KernelTransaction transaction, string path) - { - return CreateFileStreamCore(transaction, path, ExtendedFileAttributes.Normal, null, FileMode.Create, FileAccess.ReadWrite, FileShare.None, NativeMethods.DefaultFileBufferSize, PathFormat.RelativePath); - } - - /// Creates or overwrites the specified file. - /// The transaction. - /// The name of the file. - /// - /// The number of bytes buffered for reads and writes to the file. - /// - /// - /// A with the specified buffer size that provides read/write access - /// to the file specified in . - /// - [SecurityCritical] - public static FileStream CreateTransacted(KernelTransaction transaction, string path, int bufferSize) - { - return CreateFileStreamCore(transaction, path, ExtendedFileAttributes.Normal, null, FileMode.Create, FileAccess.ReadWrite, FileShare.None, bufferSize, PathFormat.RelativePath); - } - - /// - /// Creates or overwrites the specified file, specifying a buffer size and a - /// value that describes how to create or overwrite the file. - /// - /// The transaction. - /// The name of the file. - /// The number of bytes buffered for reads and writes to the file. - /// One of the values that describes how to create or overwrite the file. - /// A new file with the specified buffer size. - [SecurityCritical] - public static FileStream CreateTransacted(KernelTransaction transaction, string path, int bufferSize, FileOptions options) - { - return CreateFileStreamCore(transaction, path, (ExtendedFileAttributes)options, null, FileMode.Create, FileAccess.ReadWrite, FileShare.None, bufferSize, PathFormat.RelativePath); - } - - /// - /// Creates or overwrites the specified file, specifying a buffer size and a - /// value that describes how to create or overwrite the file. - /// - /// The transaction. - /// The name of the file. - /// The number of bytes buffered for reads and writes to the file. - /// One of the values that describes how to create or overwrite the file. - /// - /// One of the values that determines the access control and audit security for the file. - /// - /// A new file with the specified buffer size, file options, and file security. - [SecurityCritical] - public static FileStream CreateTransacted(KernelTransaction transaction, string path, int bufferSize, FileOptions options, FileSecurity fileSecurity) - { - return CreateFileStreamCore(transaction, path, (ExtendedFileAttributes)options, fileSecurity, FileMode.Create, FileAccess.ReadWrite, FileShare.None, bufferSize, PathFormat.RelativePath); - } - - /// Creates or overwrites a file in the specified path. - /// The transaction. - /// The path and name of the file to create. - /// Indicates the format of the path parameter(s). - /// - /// A that provides read/write access to the file specified in - /// . - /// - [SecurityCritical] - public static FileStream CreateTransacted(KernelTransaction transaction, string path, PathFormat pathFormat) - { - return CreateFileStreamCore(transaction, path, ExtendedFileAttributes.Normal, null, FileMode.Create, FileAccess.ReadWrite, FileShare.None, NativeMethods.DefaultFileBufferSize, pathFormat); - } - - /// Creates or overwrites the specified file. - /// The transaction. - /// The name of the file. - /// The number of bytes buffered for reads and writes to the file. - /// Indicates the format of the path parameter(s). - /// - /// A with the specified buffer size that provides read/write access to the file specified in - /// . - /// - [SecurityCritical] - public static FileStream CreateTransacted(KernelTransaction transaction, string path, int bufferSize, PathFormat pathFormat) - { - return CreateFileStreamCore(transaction, path, ExtendedFileAttributes.Normal, null, FileMode.Create, FileAccess.ReadWrite, FileShare.None, bufferSize, pathFormat); - } - - /// - /// Creates or overwrites the specified file, specifying a buffer size and a - /// value that describes how to create or overwrite the file. - /// - /// The transaction. - /// The name of the file. - /// The number of bytes buffered for reads and writes to the file. - /// One of the values that describes how to create or overwrite the file. - /// Indicates the format of the path parameter(s). - /// A new file with the specified buffer size. - [SecurityCritical] - public static FileStream CreateTransacted(KernelTransaction transaction, string path, int bufferSize, FileOptions options, PathFormat pathFormat) - { - return CreateFileStreamCore(transaction, path, (ExtendedFileAttributes)options, null, FileMode.Create, FileAccess.ReadWrite, FileShare.None, bufferSize, pathFormat); - } - - /// - /// Creates or overwrites the specified file, specifying a buffer size and a - /// value that describes how to create or overwrite the file. - /// - /// The transaction. - /// The name of the file. - /// The number of bytes buffered for reads and writes to the file. - /// One of the values that describes how to create or overwrite the file. - /// - /// One of the values that determines the access control and audit security for the file. - /// - /// Indicates the format of the path parameter(s). - /// A new file with the specified buffer size, file options, and file security. - [SecurityCritical] - public static FileStream CreateTransacted(KernelTransaction transaction, string path, int bufferSize, FileOptions options, FileSecurity fileSecurity, PathFormat pathFormat) - { - return CreateFileStreamCore(transaction, path, (ExtendedFileAttributes)options, fileSecurity, FileMode.Create, FileAccess.ReadWrite, FileShare.None, bufferSize, pathFormat); - } - - #endregion - - #region Internal - - /// Creates or overwrites a file in the specified path. - /// The transaction. - /// The name of the file. - /// The additional advanced options to create a file. - /// - /// A instance that determines the access control and audit security for the file. - /// - /// The option gives you more precise control over how you want to create a file. - /// - /// The allow you additionally specify to default read/write capability - just write, bypassing any cache. - /// - /// - /// The option controls how you would like to share created file with other requesters. - /// - /// Indicates the format of the parameter. - /// The number of bytes buffered for reads and writes to the file. - /// A that provides read/write access to the file specified in path. - [SuppressMessage("Microsoft.Reliability", "CA2000:Dispose objects before losing scope", Justification = "False positive")] - [SecurityCritical] - internal static FileStream CreateFileStreamCore(KernelTransaction transaction, string path, ExtendedFileAttributes attributes, FileSecurity fileSecurity, FileMode mode, FileAccess access, FileShare share, int bufferSize, PathFormat pathFormat) - { - SafeFileHandle safeHandle = null; - - try - { - safeHandle = CreateFileCore(transaction, path, attributes, fileSecurity, mode, (FileSystemRights) access, share, true, pathFormat); - - return new FileStream(safeHandle, access, bufferSize, (attributes & ExtendedFileAttributes.Overlapped) != 0); - } - catch - { - if (safeHandle != null) - safeHandle.Dispose(); - - throw; - } - } - - /// Creates or opens a file, directory or I/O device. - /// A that provides read/write access to the file or directory specified by . - /// - /// To obtain a directory handle using CreateFile, specify the FILE_FLAG_BACKUP_SEMANTICS flag as part of dwFlagsAndAttributes. - /// The most commonly used I/O devices are as follows: file, file stream, directory, physical disk, volume, console buffer, tape drive, communications resource, mailslot, and pipe. - /// - /// - /// - /// - /// The transaction. - /// The path and name of the file or directory to create. - /// One of the values that describes how to create or overwrite the file or directory. - /// A instance that determines the access control and audit security for the file or directory. - /// A constant that determines how to open or create the file or directory. - /// A constant that determines the access rights to use when creating access and audit rules for the file or directory. - /// A constant that determines how the file or directory will be shared by processes. - /// . - /// Indicates the format of the parameter. - [SuppressMessage("Microsoft.Reliability", "CA2000:Dispose objects before losing scope", Justification = "Object needs to be disposed by caller.")] - [SecurityCritical] - internal static SafeFileHandle CreateFileCore(KernelTransaction transaction, string path, ExtendedFileAttributes attributes, FileSecurity fileSecurity, FileMode fileMode, FileSystemRights fileSystemRights, FileShare fileShare, bool checkPath, PathFormat pathFormat) - { - if (checkPath && pathFormat == PathFormat.RelativePath) - Path.CheckSupportedPathFormat(path, true, true); - - // When isFile == null, we're working with a device. - // When opening a VOLUME or removable media drive (for example, a floppy disk drive or flash memory thumb drive), - // the path string should be the following form: "\\.\X:" - // Do not use a trailing backslash (\), which indicates the root. - - var pathLp = Path.GetExtendedLengthPathCore(transaction, path, pathFormat, GetFullPathOptions.TrimEnd | GetFullPathOptions.RemoveTrailingDirectorySeparator); - - PrivilegeEnabler privilegeEnabler = null; - - - var isAppend = fileMode == FileMode.Append; - - - // CreateFileXxx() does not support FileMode.Append mode. - if (isAppend) - { - fileMode = FileMode.OpenOrCreate; - fileSystemRights &= FileSystemRights.AppendData; // Add right. - } - - - if (fileSecurity != null) - fileSystemRights |= (FileSystemRights) 0x1000000; // Set right. - - // AccessSystemSecurity = 0x1000000 AccessSystemAcl access type. - // MaximumAllowed = 0x2000000 MaximumAllowed access type. - - if ((fileSystemRights & (FileSystemRights) 0x1000000) != 0 || - (fileSystemRights & (FileSystemRights) 0x2000000) != 0) - privilegeEnabler = new PrivilegeEnabler(Privilege.Security); - - - using (privilegeEnabler) - using (var securityAttributes = new Security.NativeMethods.SecurityAttributes(fileSecurity)) - { - var handle = transaction == null || !NativeMethods.IsAtLeastWindowsVista - - // CreateFile() / CreateFileTransacted() - // In the ANSI version of this function, the name is limited to MAX_PATH characters. - // To extend this limit to 32,767 wide characters, call the Unicode version of the function and prepend "\\?\" to the path. - // 2013-01-13: MSDN confirms LongPath usage. - - ? NativeMethods.CreateFile(pathLp, fileSystemRights, fileShare, securityAttributes, fileMode, attributes, IntPtr.Zero) - : NativeMethods.CreateFileTransacted(pathLp, fileSystemRights, fileShare, securityAttributes, fileMode, attributes, IntPtr.Zero, transaction.SafeHandle, IntPtr.Zero, IntPtr.Zero); - - var lastError = Marshal.GetLastWin32Error(); - - if (handle.IsInvalid) - { - handle.Close(); - NativeError.ThrowException(lastError, pathLp); - } - - - if (isAppend) - { - var stream = new FileStream(handle, FileAccess.Write, NativeMethods.DefaultFileBufferSize, (attributes & ExtendedFileAttributes.Overlapped) != 0); - stream.Seek(0, SeekOrigin.End); - } - - return handle; - } - } - - #endregion // CreateFileCore - } -} diff --git a/AlphaFS/Filesystem/File Class/File.CreateHardlink.cs b/AlphaFS/Filesystem/File Class/File.CreateHardlink.cs deleted file mode 100644 index 197a372..0000000 --- a/AlphaFS/Filesystem/File Class/File.CreateHardlink.cs +++ /dev/null @@ -1,129 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System; -using System.Diagnostics.CodeAnalysis; -using System.Runtime.InteropServices; -using System.Security; - -namespace Alphaleonis.Win32.Filesystem -{ - public static partial class File - { - #region CreateHardlink - - /// [AlphaFS] Establishes a hard link between an existing file and a new file. This function is only supported on the NTFS file system, and only for files, not directories. - /// The name of the new file. This parameter cannot specify the name of a directory. - /// The name of the existing file. This parameter cannot specify the name of a directory. - /// Indicates the format of the path parameter(s). - [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Hardlink")] - [SecurityCritical] - public static void CreateHardlink(string fileName, string existingFileName, PathFormat pathFormat) - { - CreateHardlinkCore(null, fileName, existingFileName, pathFormat); - } - - /// [AlphaFS] Establishes a hard link between an existing file and a new file. This function is only supported on the NTFS file system, and only for files, not directories. - /// The name of the new file. This parameter cannot specify the name of a directory. - /// The name of the existing file. This parameter cannot specify the name of a directory. - [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Hardlink")] - [SecurityCritical] - public static void CreateHardlink(string fileName, string existingFileName) - { - CreateHardlinkCore(null, fileName, existingFileName, PathFormat.RelativePath); - } - - /// - /// [AlphaFS] Establishes a hard link between an existing file and a new file. This function is only supported on the NTFS file system, - /// and only for files, not directories. - /// - /// The transaction. - /// The name of the new file. This parameter cannot specify the name of a directory. - /// The name of the existing file. This parameter cannot specify the name of a directory. - /// Indicates the format of the path parameter(s). - [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Hardlink")] - [SecurityCritical] - public static void CreateHardlinkTransacted(KernelTransaction transaction, string fileName, string existingFileName, PathFormat pathFormat) - { - CreateHardlinkCore(transaction, fileName, existingFileName, pathFormat); - } - - /// - /// [AlphaFS] Establishes a hard link between an existing file and a new file. This function is only supported on the NTFS file system, - /// and only for files, not directories. - /// - /// The transaction. - /// The name of the new file. This parameter cannot specify the name of a directory. - /// The name of the existing file. This parameter cannot specify the name of a directory. - [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Hardlink")] - [SecurityCritical] - public static void CreateHardlinkTransacted(KernelTransaction transaction, string fileName, string existingFileName) - { - CreateHardlinkCore(transaction, fileName, existingFileName, PathFormat.RelativePath); - } - - #endregion // CreateHardlink - - #region Internal Methods - - /// Establish a hard link between an existing file and a new file. This function - /// is only supported on the NTFS file system, and only for files, not directories. - /// - /// - /// The transaction. - /// The name of the new file. This parameter cannot specify the name of a directory. - /// The name of the existing file. This parameter cannot specify the name of a directory. - /// Indicates the format of the path parameter(s). - [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Hardlink")] - [SecurityCritical] - internal static void CreateHardlinkCore(KernelTransaction transaction, string fileName, string existingFileName, PathFormat pathFormat) - { - var options = GetFullPathOptions.RemoveTrailingDirectorySeparator | GetFullPathOptions.FullCheck; - - string fileNameLp = Path.GetExtendedLengthPathCore(transaction, fileName, pathFormat, options); - string existingFileNameLp = Path.GetExtendedLengthPathCore(transaction, existingFileName, pathFormat, options); - - if (!(transaction == null || !NativeMethods.IsAtLeastWindowsVista - - // CreateHardLink() / CreateHardLinkTransacted() - // In the ANSI version of this function, the name is limited to MAX_PATH characters. - // To extend this limit to 32,767 wide characters, call the Unicode version of the function and prepend "\\?\" to the path. - // 2013-01-13: MSDN does not confirm LongPath usage but a Unicode version of this function exists. - - ? NativeMethods.CreateHardLink(fileNameLp, existingFileNameLp, IntPtr.Zero) - : NativeMethods.CreateHardLinkTransacted(fileNameLp, existingFileNameLp, IntPtr.Zero, transaction.SafeHandle))) - { - int lastError = Marshal.GetLastWin32Error(); - switch ((uint)lastError) - { - case Win32Errors.ERROR_INVALID_FUNCTION: - throw new NotSupportedException(Resources.HardLinks_Not_Supported); - - default: - NativeError.ThrowException(lastError, fileNameLp, existingFileName); - break; - } - } - } - - #endregion // Internal Methods - } -} diff --git a/AlphaFS/Filesystem/File Class/File.CreateSymbolicLink.cs b/AlphaFS/Filesystem/File Class/File.CreateSymbolicLink.cs deleted file mode 100644 index 237d77c..0000000 --- a/AlphaFS/Filesystem/File Class/File.CreateSymbolicLink.cs +++ /dev/null @@ -1,141 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System; -using System.Diagnostics.CodeAnalysis; -using System.Runtime.InteropServices; -using System.Security; - -namespace Alphaleonis.Win32.Filesystem -{ - partial class File - { - #region CreateSymbolicLink - - /// [AlphaFS] Creates a symbolic link. - /// See to run this method in an elevated state. - /// The name of the target for the symbolic link to be created. - /// The symbolic link to be created. - /// Indicates whether the link target, , is a file or directory. - /// Indicates the format of the path parameter(s). - /// - /// Several Exceptions possible. - [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "symlink")] - [SecurityCritical] - public static void CreateSymbolicLink(string symlinkFileName, string targetFileName, SymbolicLinkTarget targetType, PathFormat pathFormat) - { - CreateSymbolicLinkCore(null, symlinkFileName, targetFileName, targetType, pathFormat); - } - - /// [AlphaFS] Creates a symbolic link. - /// See to run this method in an elevated state. - /// The name of the target for the symbolic link to be created. - /// The symbolic link to be created. - /// Indicates whether the link target, , is a file or directory. - /// - /// Several Exceptions possible. - [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "symlink")] - [SecurityCritical] - public static void CreateSymbolicLink(string symlinkFileName, string targetFileName, SymbolicLinkTarget targetType) - { - CreateSymbolicLinkCore(null, symlinkFileName, targetFileName, targetType, PathFormat.RelativePath); - } - - /// [AlphaFS] Creates a symbolic link. - /// See to run this method in an elevated state. - /// The transaction. - /// The name of the target for the symbolic link to be created. - /// The symbolic link to be created. - /// Indicates whether the link target, , is a file or directory. - /// Indicates the format of the path parameter(s). - /// - /// Several Exceptions possible. - [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "symlink")] - [SecurityCritical] - public static void CreateSymbolicLinkTransacted(KernelTransaction transaction, string symlinkFileName, string targetFileName, SymbolicLinkTarget targetType, PathFormat pathFormat) - { - CreateSymbolicLinkCore(transaction, symlinkFileName, targetFileName, targetType, pathFormat); - } - - - /// [AlphaFS] Creates a symbolic link. - /// See to run this method in an elevated state. - /// The transaction. - /// The name of the target for the symbolic link to be created. - /// The symbolic link to be created. - /// Indicates whether the link target, , is a file or directory. - /// - /// Several Exceptions possible. - [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "symlink")] - [SecurityCritical] - public static void CreateSymbolicLinkTransacted(KernelTransaction transaction, string symlinkFileName, string targetFileName, SymbolicLinkTarget targetType) - { - CreateSymbolicLinkCore(transaction, symlinkFileName, targetFileName, targetType, PathFormat.RelativePath); - } - - #endregion // CreateSymbolicLink - - #region Internal Methods - - /// Creates a symbolic link. - /// See to run this method in an elevated state. - /// The transaction. - /// The name of the target for the symbolic link to be created. - /// The symbolic link to be created. - /// Indicates whether the link target, , is a file or directory. - /// Indicates the format of the path parameter(s). - /// - /// Several Exceptions possible. - [SecurityCritical] - internal static void CreateSymbolicLinkCore(KernelTransaction transaction, string symlinkFileName, string targetFileName, SymbolicLinkTarget targetType, PathFormat pathFormat) - { - if (!NativeMethods.IsAtLeastWindowsVista) - throw new PlatformNotSupportedException(Resources.Requires_Windows_Vista_Or_Higher); - - var options = GetFullPathOptions.RemoveTrailingDirectorySeparator | GetFullPathOptions.FullCheck; - - string symlinkFileNameLp = Path.GetExtendedLengthPathCore(transaction, symlinkFileName, pathFormat, options); - string targetFileNameRp = Path.GetExtendedLengthPathCore(transaction, targetFileName, pathFormat, options); - - // Don't use long path notation, as it will be empty upon creation. - targetFileNameRp = Path.GetRegularPathCore(targetFileNameRp, GetFullPathOptions.None, false); - - - if (!(transaction == null - - // CreateSymbolicLink() / CreateSymbolicLinkTransacted() - // In the ANSI version of this function, the name is limited to MAX_PATH characters. - // To extend this limit to 32,767 wide characters, call the Unicode version of the function and prepend "\\?\" to the path. - // 2014-02-14: MSDN does not confirm LongPath usage but a Unicode version of this function exists. - // 2015-07-17: This function does not support long paths. - - ? NativeMethods.CreateSymbolicLink(symlinkFileNameLp, targetFileNameRp, targetType) - : NativeMethods.CreateSymbolicLinkTransacted(symlinkFileNameLp, targetFileNameRp, targetType, transaction.SafeHandle))) - { - var lastError = Marshal.GetLastWin32Error(); - if (lastError != 0) - NativeError.ThrowException(lastError, symlinkFileNameLp, targetFileNameRp); - } - } - - #endregion // Internal Methods - } -} diff --git a/AlphaFS/Filesystem/File Class/File.CreateText.cs b/AlphaFS/Filesystem/File Class/File.CreateText.cs deleted file mode 100644 index b73d06f..0000000 --- a/AlphaFS/Filesystem/File Class/File.CreateText.cs +++ /dev/null @@ -1,110 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System.Diagnostics.CodeAnalysis; -using System.IO; -using System.Security; -using System.Text; -using StreamWriter = System.IO.StreamWriter; - -namespace Alphaleonis.Win32.Filesystem -{ - public static partial class File - { - #region Public Methods - - /// Creates or opens a file for writing UTF-8 encoded text. - /// The file to be opened for writing. - /// A StreamWriter that writes to the specified file using UTF-8 encoding. - [SuppressMessage("Microsoft.Reliability", "CA2000:Dispose objects before losing scope")] - [SecurityCritical] - public static StreamWriter CreateText(string path) - { - return CreateTextCore(null, path, NativeMethods.DefaultFileEncoding, PathFormat.RelativePath); - } - - /// [AlphaFS] Creates or opens a file for writing UTF-8 encoded text. - /// The file to be opened for writing. - /// Indicates the format of the path parameter(s). - /// A StreamWriter that writes to the specified file using UTF-8 encoding. - [SuppressMessage("Microsoft.Reliability", "CA2000:Dispose objects before losing scope")] - [SecurityCritical] - public static StreamWriter CreateText(string path, PathFormat pathFormat) - { - return CreateTextCore(null, path, NativeMethods.DefaultFileEncoding, pathFormat); - } - - /// [AlphaFS] Creates or opens a file for writing encoded text. - /// The file to be opened for writing. - /// The encoding that is applied to the contents of the file. - /// Indicates the format of the path parameter(s). - /// A StreamWriter that writes to the specified file using UTF-8 encoding. - [SuppressMessage("Microsoft.Reliability", "CA2000:Dispose objects before losing scope")] - [SecurityCritical] - public static StreamWriter CreateText(string path, Encoding encoding, PathFormat pathFormat) - { - return CreateTextCore(null, path, encoding, pathFormat); - } - - /// [AlphaFS] Creates or opens a file for writing UTF-8 encoded text. - /// The transaction. - /// The file to be opened for writing. - /// A StreamWriter that writes to the specified file using UTF-8 encoding. - [SuppressMessage("Microsoft.Reliability", "CA2000:Dispose objects before losing scope")] - [SecurityCritical] - public static StreamWriter CreateTextTransacted(KernelTransaction transaction, string path) - { - return CreateTextCore(transaction, path, NativeMethods.DefaultFileEncoding, PathFormat.RelativePath); - } - - /// [AlphaFS] Creates or opens a file for writing encoded text. - /// The transaction. - /// The file to be opened for writing. - /// The encoding that is applied to the contents of the file. - /// Indicates the format of the path parameter(s). - /// A StreamWriter that writes to the specified file using UTF-8 encoding. - [SuppressMessage("Microsoft.Reliability", "CA2000:Dispose objects before losing scope")] - [SecurityCritical] - public static StreamWriter CreateTextTransacted(KernelTransaction transaction, string path, Encoding encoding, PathFormat pathFormat) - { - return CreateTextCore(transaction, path, encoding, pathFormat); - } - - #endregion - - #region Internal Methods - - /// Creates or opens a file for writing encoded text. - /// The transaction. - /// The file to be opened for writing. - /// The applied to the contents of the file. - /// Indicates the format of the path parameter(s). - /// A that writes to the specified file using NativeMethods.DefaultFileBufferSize encoding. - [SuppressMessage("Microsoft.Reliability", "CA2000:Dispose objects before losing scope")] - [SecurityCritical] - internal static StreamWriter CreateTextCore(KernelTransaction transaction, string path, Encoding encoding, PathFormat pathFormat) - { - return new StreamWriter(CreateFileStreamCore(transaction, path, ExtendedFileAttributes.SequentialScan, null, FileMode.Create, FileAccess.Write, FileShare.Read, NativeMethods.DefaultFileBufferSize, pathFormat), encoding); - } - - #endregion // Internal Methods - } -} diff --git a/AlphaFS/Filesystem/File Class/File.Delete.cs b/AlphaFS/Filesystem/File Class/File.Delete.cs deleted file mode 100644 index 447d1cb..0000000 --- a/AlphaFS/Filesystem/File Class/File.Delete.cs +++ /dev/null @@ -1,238 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System; -using System.Globalization; -using System.IO; -using System.Runtime.InteropServices; -using System.Security; - -namespace Alphaleonis.Win32.Filesystem -{ - public static partial class File - { - #region Delete - - /// Deletes the specified file. - /// If the file to be deleted does not exist, no exception is thrown. - /// - /// The name of the file to be deleted. Wildcard characters are not supported. - /// - /// - /// - /// - /// - [SecurityCritical] - public static void Delete(string path) - { - DeleteFileCore(null, path, false, PathFormat.RelativePath); - } - - /// [AlphaFS] Deletes the specified file. - /// If the file to be deleted does not exist, no exception is thrown. - /// - /// The name of the file to be deleted. Wildcard characters are not supported. - /// - /// - /// overrides the read only of the file. - /// - /// Indicates the format of the path parameter(s). - /// - /// - /// - /// - [SecurityCritical] - public static void Delete(string path, bool ignoreReadOnly, PathFormat pathFormat) - { - DeleteFileCore(null, path, ignoreReadOnly, pathFormat); - } - - - /// [AlphaFS] Deletes the specified file. - /// If the file to be deleted does not exist, no exception is thrown. - /// - /// The name of the file to be deleted. Wildcard characters are not supported. - /// - /// - /// overrides the read only of the file. - /// - /// - /// - /// - /// - [SecurityCritical] - public static void Delete(string path, bool ignoreReadOnly) - { - DeleteFileCore(null, path, ignoreReadOnly, PathFormat.RelativePath); - } - - #region Transactional - - /// [AlphaFS] Deletes the specified file. - /// If the file to be deleted does not exist, no exception is thrown. - /// The transaction. - /// - /// The name of the file to be deleted. Wildcard characters are not supported. - /// - /// - /// - /// - /// - [SecurityCritical] - public static void DeleteTransacted(KernelTransaction transaction, string path) - { - DeleteFileCore(transaction, path, false, PathFormat.RelativePath); - } - - /// [AlphaFS] Deletes the specified file. - /// The transaction. - /// The name of the file to be deleted. Wildcard characters are not supported. - /// overrides the read only of the file. - /// Indicates the format of the path parameter(s). - /// If the file to be deleted does not exist, no exception is thrown. - /// - /// - /// - /// - [SecurityCritical] - public static void DeleteTransacted(KernelTransaction transaction, string path, bool ignoreReadOnly, PathFormat pathFormat) - { - DeleteFileCore(transaction, path, ignoreReadOnly, pathFormat); - } - - /// [AlphaFS] Deletes the specified file. - /// The transaction. - /// The name of the file to be deleted. Wildcard characters are not supported. - /// overrides the read only of the file. - /// If the file to be deleted does not exist, no exception is thrown. - /// - /// - /// - /// - [SecurityCritical] - public static void DeleteTransacted(KernelTransaction transaction, string path, bool ignoreReadOnly) - { - DeleteFileCore(transaction, path, ignoreReadOnly, PathFormat.RelativePath); - } - - #endregion // Transacted - - #endregion // Delete - - #region Internal Methods - - /// Deletes a Non-/Transacted file. - /// If the file to be deleted does not exist, no exception is thrown. - /// - /// - /// - /// - /// The transaction. - /// The name of the file to be deleted. - /// overrides the read only of the file. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - internal static void DeleteFileCore(KernelTransaction transaction, string path, bool ignoreReadOnly, PathFormat pathFormat) - { - #region Setup - - if (pathFormat == PathFormat.RelativePath) - Path.CheckSupportedPathFormat(path, true, true); - - string pathLp = Path.GetExtendedLengthPathCore(transaction, path, pathFormat, GetFullPathOptions.TrimEnd | GetFullPathOptions.RemoveTrailingDirectorySeparator); - - // If the path points to a symbolic link, the symbolic link is deleted, not the target. - - #endregion // Setup - - startDeleteFile: - - if (!(transaction == null || !NativeMethods.IsAtLeastWindowsVista - - // DeleteFile() / DeleteFileTransacted() - // In the ANSI version of this function, the name is limited to MAX_PATH characters. - // To extend this limit to 32,767 wide characters, call the Unicode version of the function and prepend "\\?\" to the path. - // 2013-01-13: MSDN confirms LongPath usage. - - ? NativeMethods.DeleteFile(pathLp) - : NativeMethods.DeleteFileTransacted(pathLp, transaction.SafeHandle))) - { - int lastError = Marshal.GetLastWin32Error(); - switch ((uint)lastError) - { - case Win32Errors.ERROR_FILE_NOT_FOUND: - // MSDN: .NET 3.5+: If the file to be deleted does not exist, no exception is thrown. - return; - - case Win32Errors.ERROR_PATH_NOT_FOUND: - // MSDN: .NET 3.5+: DirectoryNotFoundException: The specified path is invalid (for example, it is on an unmapped drive). - NativeError.ThrowException(lastError, pathLp); - return; - - case Win32Errors.ERROR_SHARING_VIOLATION: - // MSDN: .NET 3.5+: IOException: The specified file is in use or there is an open handle on the file. - NativeError.ThrowException(lastError, pathLp); - break; - - case Win32Errors.ERROR_ACCESS_DENIED: - var data = new NativeMethods.WIN32_FILE_ATTRIBUTE_DATA(); - int dataInitialised = FillAttributeInfoCore(transaction, pathLp, ref data, false, true); - - if (data.dwFileAttributes != (FileAttributes)(-1)) - { - if ((data.dwFileAttributes & FileAttributes.Directory) != 0) - // MSDN: .NET 3.5+: UnauthorizedAccessException: Path is a directory. - throw new UnauthorizedAccessException(string.Format(CultureInfo.CurrentCulture, "({0}) {1}", - Win32Errors.ERROR_INVALID_PARAMETER, string.Format(CultureInfo.CurrentCulture, Resources.Target_File_Is_A_Directory, pathLp))); - - - if ((data.dwFileAttributes & FileAttributes.ReadOnly) != 0) - { - if (ignoreReadOnly) - { - // Reset file attributes. - SetAttributesCore(false, transaction, pathLp, FileAttributes.Normal, true, PathFormat.LongFullPath); - goto startDeleteFile; - } - - // MSDN: .NET 3.5+: UnauthorizedAccessException: Path specified a read-only file. - throw new FileReadOnlyException(pathLp); - } - } - - if (dataInitialised == Win32Errors.ERROR_SUCCESS) - // MSDN: .NET 3.5+: UnauthorizedAccessException: The caller does not have the required permission. - NativeError.ThrowException(lastError, pathLp); - - break; - } - - // MSDN: .NET 3.5+: IOException: - // The specified file is in use. - // There is an open handle on the file, and the operating system is Windows XP or earlier. - - NativeError.ThrowException(lastError, pathLp); - } - } - - #endregion // Internal Methods - } -} diff --git a/AlphaFS/Filesystem/File Class/File.EncryptDecrypt.cs b/AlphaFS/Filesystem/File Class/File.EncryptDecrypt.cs deleted file mode 100644 index 35bbcc5..0000000 --- a/AlphaFS/Filesystem/File Class/File.EncryptDecrypt.cs +++ /dev/null @@ -1,120 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System; -using System.Globalization; -using System.IO; -using System.Runtime.InteropServices; -using System.Security; - -namespace Alphaleonis.Win32.Filesystem -{ - public static partial class File - { - #region Public Methods - - /// Decrypts a file that was encrypted by the current account using the Encrypt method. - /// A path that describes a file to decrypt. - [SecurityCritical] - public static void Decrypt(string path) - { - EncryptDecryptFileCore(false, path, false, PathFormat.RelativePath); - } - - /// [AlphaFS] Decrypts a file that was encrypted by the current account using the Encrypt method. - /// A path that describes a file to decrypt. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static void Decrypt(string path, PathFormat pathFormat) - { - EncryptDecryptFileCore(false, path, false, pathFormat); - } - - /// Encrypts a file so that only the account used to encrypt the file can decrypt it. - /// A path that describes a file to encrypt. - [SecurityCritical] - public static void Encrypt(string path) - { - EncryptDecryptFileCore(false, path, true, PathFormat.RelativePath); - } - - /// [AlphaFS] Encrypts a file so that only the account used to encrypt the file can decrypt it. - /// A path that describes a file to encrypt. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static void Encrypt(string path, PathFormat pathFormat) - { - EncryptDecryptFileCore(false, path, true, pathFormat); - } - - #endregion - - - - - #region Internal Methods - - /// Decrypts/encrypts a file or directory so that only the account used to encrypt the file can decrypt it. - /// - /// Specifies that is a file or directory. - /// A path that describes a file to encrypt. - /// encrypt, decrypt. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - internal static void EncryptDecryptFileCore(bool isFolder, string path, bool encrypt, PathFormat pathFormat) - { - string pathLp = Path.GetExtendedLengthPathCore(null, path, pathFormat, GetFullPathOptions.RemoveTrailingDirectorySeparator | GetFullPathOptions.FullCheck); - - // Reset file/directory attributes. - // MSDN: If lpFileName specifies a read-only file, the function fails and GetLastError returns ERROR_FILE_READ_ONLY. - SetAttributesCore(isFolder, null, pathLp, FileAttributes.Normal, true, PathFormat.LongFullPath); - - // EncryptFile() / DecryptFile() - // In the ANSI version of this function, the name is limited to 248 characters. - // To extend this limit to 32,767 wide characters, call the Unicode version of the function and prepend "\\?\" to the path. - // 2013-01-13: MSDN does not confirm LongPath usage but a Unicode version of this function exists. - - if (!(encrypt - ? NativeMethods.EncryptFile(pathLp) - : NativeMethods.DecryptFile(pathLp, 0))) - { - int lastError = Marshal.GetLastWin32Error(); - switch ((uint)lastError) - { - case Win32Errors.ERROR_ACCESS_DENIED: - string root = Path.GetPathRoot(pathLp, false); - if (!string.Equals("NTFS", new DriveInfo(root).DriveFormat, StringComparison.OrdinalIgnoreCase)) - throw new NotSupportedException(string.Format(CultureInfo.CurrentCulture, "The drive does not support NTFS encryption: [{0}]", root)); - break; - - default: - if (lastError == Win32Errors.ERROR_FILE_NOT_FOUND && isFolder) - lastError = (int)Win32Errors.ERROR_PATH_NOT_FOUND; - - NativeError.ThrowException(lastError, pathLp); - break; - } - } - } - - #endregion // Internal Methods - } -} diff --git a/AlphaFS/Filesystem/File Class/File.EncryptedFileRaw.cs b/AlphaFS/Filesystem/File Class/File.EncryptedFileRaw.cs deleted file mode 100644 index faa5492..0000000 --- a/AlphaFS/Filesystem/File Class/File.EncryptedFileRaw.cs +++ /dev/null @@ -1,291 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System; -using System.IO; -using System.Runtime.InteropServices; - -namespace Alphaleonis.Win32.Filesystem -{ - partial class File - { - #region Export - - /// [AlphaFS] Backs up (export) encrypted files. This is one of a group of Encrypted File System (EFS) functions that is - /// intended to implement backup and restore functionality, while maintaining files in their encrypted state. - /// - /// - /// The file being backed up is not decrypted; it is backed up in its encrypted state. - /// - /// - /// If the caller does not have access to the key for the file, the caller needs - /// to export encrypted files. See - /// . - /// - /// - /// To backup an encrypted file call one of the - /// overloads and specify the file to backup - /// along with the destination stream of the backup data. - /// - /// - /// This function is intended for the backup of only encrypted files; see for backup - /// of unencrypted files. - /// - /// - /// The name of the file to be backed up. - /// The destination stream to which the backup data will be written. - /// - public static void ExportEncryptedFileRaw(string fileName, Stream outputStream) - { - ImportExportEncryptedFileDirectoryRawCore(true, false, outputStream, fileName, PathFormat.RelativePath, false); - } - - /// [AlphaFS] Backs up (export) encrypted files. This is one of a group of Encrypted File System (EFS) functions that is - /// intended to implement backup and restore functionality, while maintaining files in their encrypted state. - /// - /// - /// The file being backed up is not decrypted; it is backed up in its encrypted state. - /// - /// - /// If the caller does not have access to the key for the file, the caller needs - /// to export encrypted files. See - /// . - /// - /// - /// To backup an encrypted file call one of the - /// overloads and specify the file to backup - /// along with the destination stream of the backup data. - /// - /// - /// This function is intended for the backup of only encrypted files; see for backup - /// of unencrypted files. - /// - /// - /// The name of the file to be backed up. - /// The destination stream to which the backup data will be written. - /// The path format of the parameter. - /// - public static void ExportEncryptedFileRaw(string fileName, Stream outputStream, PathFormat pathFormat) - { - ImportExportEncryptedFileDirectoryRawCore(true, false, outputStream, fileName, pathFormat, false); - } - - #endregion // Export - - #region Import - - /// [AlphaFS] Restores (import) encrypted files. This is one of a group of Encrypted File System (EFS) functions that is - /// intended to implement backup and restore functionality, while maintaining files in their encrypted state. - /// - /// - /// If the caller does not have access to the key for the file, the caller needs - /// to restore encrypted files. See - /// . - /// - /// - /// To restore an encrypted file call one of the - /// overloads and specify the file to restore - /// along with the destination stream of the restored data. - /// - /// - /// This function is intended for the restoration of only encrypted files; see for - /// backup of unencrypted files. - /// - /// - /// The stream to read previously backed up data from. - /// The path of the destination file to restore to. - /// - public static void ImportEncryptedFileRaw(Stream inputStream, string destinationFilePath) - { - ImportExportEncryptedFileDirectoryRawCore(false, false, inputStream, destinationFilePath, PathFormat.RelativePath, false); - } - - /// [AlphaFS] Restores (import) encrypted files. This is one of a group of Encrypted File System (EFS) functions that is - /// intended to implement backup and restore functionality, while maintaining files in their encrypted state. - /// - /// - /// If the caller does not have access to the key for the file, the caller needs - /// to restore encrypted files. See - /// . - /// - /// - /// To restore an encrypted file call one of the - /// overloads and specify the file to restore - /// along with the destination stream of the restored data. - /// - /// - /// This function is intended for the restoration of only encrypted files; see for - /// backup of unencrypted files. - /// - /// - /// The stream to read previously backed up data from. - /// The path of the destination file to restore to. - /// The path format of the parameter. - /// - public static void ImportEncryptedFileRaw(Stream inputStream, string destinationFilePath, PathFormat pathFormat) - { - ImportExportEncryptedFileDirectoryRawCore(false, false, inputStream, destinationFilePath, pathFormat, false); - } - - - /// [AlphaFS] Restores (import) encrypted files. This is one of a group of Encrypted File System (EFS) functions that is - /// intended to implement backup and restore functionality, while maintaining files in their encrypted state. - /// - /// - /// If the caller does not have access to the key for the file, the caller needs - /// to restore encrypted files. See - /// . - /// - /// - /// To restore an encrypted file call one of the - /// overloads and specify the file to restore - /// along with the destination stream of the restored data. - /// - /// - /// This function is intended for the restoration of only encrypted files; see for - /// backup of unencrypted files. - /// - /// - /// The stream to read previously backed up data from. - /// The path of the destination file to restore to. - /// If set to a hidden file will be overwritten on import. - /// - public static void ImportEncryptedFileRaw(Stream inputStream, string destinationFilePath, bool overwriteHidden) - { - ImportExportEncryptedFileDirectoryRawCore(false, false, inputStream, destinationFilePath, PathFormat.RelativePath, overwriteHidden); - } - - /// [AlphaFS] Restores (import) encrypted files. This is one of a group of Encrypted File System (EFS) functions that is - /// intended to implement backup and restore functionality, while maintaining files in their encrypted state. - /// - /// - /// If the caller does not have access to the key for the file, the caller needs - /// to restore encrypted files. See - /// . - /// - /// - /// To restore an encrypted file call one of the - /// overloads and specify the file to restore - /// along with the destination stream of the restored data. - /// - /// - /// This function is intended for the restoration of only encrypted files; see for - /// backup of unencrypted files. - /// - /// - /// The stream to read previously backed up data from. - /// The path of the destination file to restore to. - /// If set to a hidden file will be overwritten on import. - /// The path format of the parameter. - /// - public static void ImportEncryptedFileRaw(Stream inputStream, string destinationFilePath, bool overwriteHidden, PathFormat pathFormat) - { - ImportExportEncryptedFileDirectoryRawCore(false, false, inputStream, destinationFilePath, pathFormat, overwriteHidden); - } - - #endregion // Import - - - - - internal static void ImportExportEncryptedFileDirectoryRawCore(bool isExport, bool isFolder, Stream stream, string destinationPath, PathFormat pathFormat, bool overwriteHidden) - { - string destinationPathLp = Path.GetExtendedLengthPathCore(null, destinationPath, pathFormat, GetFullPathOptions.FullCheck | GetFullPathOptions.TrimEnd); - - NativeMethods.EncryptedFileRawMode mode = isExport - ? NativeMethods.EncryptedFileRawMode.CreateForExport - : NativeMethods.EncryptedFileRawMode.CreateForImport; - - if (isFolder) - mode = mode | NativeMethods.EncryptedFileRawMode.CreateForDir; - - if (overwriteHidden) - mode = mode | NativeMethods.EncryptedFileRawMode.OverwriteHidden; - - - // OpenEncryptedFileRaw() - // In the ANSI version of this function, the name is limited to 248 characters. - // To extend this limit to 32,767 wide characters, call the Unicode version of the function and prepend "\\?\" to the path. - // 2015-08-02: MSDN does not confirm LongPath usage but a Unicode version of this function exists. - - SafeEncryptedFileRawHandle context; - var lastError = NativeMethods.OpenEncryptedFileRaw(destinationPathLp, mode, out context); - - try - { - if (lastError != Win32Errors.ERROR_SUCCESS) - NativeError.ThrowException(lastError, destinationPathLp); - - - lastError = isExport - ? NativeMethods.ReadEncryptedFileRaw((pbData, pvCallbackContext, length) => - { - try - { - var data = new byte[length]; - - Marshal.Copy(pbData, data, 0, (int) length); - - stream.Write(data, 0, (int) length); - } - catch (Exception ex) - { - return Marshal.GetHRForException(ex) & NativeMethods.OverflowExceptionBitShift; - } - - return (int) Win32Errors.ERROR_SUCCESS; - - }, IntPtr.Zero, context) - - - : NativeMethods.WriteEncryptedFileRaw((IntPtr pbData, IntPtr pvCallbackContext, ref uint length) => - { - try - { - var data = new byte[length]; - - length = (uint) stream.Read(data, 0, (int) length); - if (length == 0) - return (int) Win32Errors.ERROR_SUCCESS; - - Marshal.Copy(data, 0, pbData, (int) length); - } - catch (Exception ex) - { - return Marshal.GetHRForException(ex) & NativeMethods.OverflowExceptionBitShift; - } - - return (int) Win32Errors.ERROR_SUCCESS; - - }, IntPtr.Zero, context); - - - if (lastError != Win32Errors.ERROR_SUCCESS) - NativeError.ThrowException(lastError, destinationPathLp); - } - finally - { - if (context != null) - context.Dispose(); - } - } - } -} diff --git a/AlphaFS/Filesystem/File Class/File.EnumerateAlternateDataStreams.cs b/AlphaFS/Filesystem/File Class/File.EnumerateAlternateDataStreams.cs deleted file mode 100644 index 788a67e..0000000 --- a/AlphaFS/Filesystem/File Class/File.EnumerateAlternateDataStreams.cs +++ /dev/null @@ -1,121 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System.Collections.Generic; -using System.Runtime.InteropServices; -using System.Security; - -namespace Alphaleonis.Win32.Filesystem -{ - partial class File - { - /// [AlphaFS] Enumerates the streams of type :$DATA from the specified file. - /// The path to the file to enumerate streams of. - /// The streams of type :$DATA in the specified file. - [SecurityCritical] - public static IEnumerable EnumerateAlternateDataStreams(string path) - { - return EnumerateAlternateDataStreamsCore(null, path, PathFormat.RelativePath); - } - - /// [AlphaFS] Enumerates the streams of type :$DATA from the specified file. - /// The path to the file to enumerate streams of. - /// Indicates the format of the path parameter(s). - /// The streams of type :$DATA in the specified file. - [SecurityCritical] - public static IEnumerable EnumerateAlternateDataStreams(string path, PathFormat pathFormat) - { - return EnumerateAlternateDataStreamsCore(null, path, pathFormat); - } - - /// [AlphaFS] Enumerates the streams of type :$DATA from the specified file. - /// The transaction. - /// The path to the file to enumerate streams of. - /// The streams of type :$DATA in the specified file. - [SecurityCritical] - public static IEnumerable EnumerateAlternateDataStreamsTransacted(KernelTransaction transaction, string path) - { - return EnumerateAlternateDataStreamsCore(transaction, path, PathFormat.RelativePath); - } - - /// [AlphaFS] Enumerates the streams of type :$DATA from the specified file. - /// The transaction. - /// The path to the file to enumerate streams of. - /// Indicates the format of the path parameter(s). - /// The streams of type :$DATA in the specified file. - [SecurityCritical] - public static IEnumerable EnumerateAlternateDataStreamsTransacted(KernelTransaction transaction, string path, PathFormat pathFormat) - { - return EnumerateAlternateDataStreamsCore(transaction, path, pathFormat); - } - - - - - #region Internal Methods - - /// [AlphaFS] Enumerates the streams of type :$DATA from the specified file or directory. - /// The transaction. - /// The path to the file or directory to enumerate streams of. - /// Indicates the format of the path parameter(s). - /// The streams of type :$DATA in the specified file or directory. - internal static IEnumerable EnumerateAlternateDataStreamsCore(KernelTransaction transaction, string path, PathFormat pathFormat) - { - using (var buffer = new SafeGlobalMemoryBufferHandle(Marshal.SizeOf(typeof(NativeMethods.WIN32_FIND_STREAM_DATA)))) - { - string pathLp = Path.GetExtendedLengthPathCore(transaction, path, pathFormat, - GetFullPathOptions.RemoveTrailingDirectorySeparator | GetFullPathOptions.CheckInvalidPathChars | - GetFullPathOptions.CheckAdditional); - - using (SafeFindFileHandle handle = transaction == null - ? NativeMethods.FindFirstStreamW(pathLp, NativeMethods.STREAM_INFO_LEVELS.FindStreamInfoStandard, buffer, 0) - : NativeMethods.FindFirstStreamTransactedW(pathLp, NativeMethods.STREAM_INFO_LEVELS.FindStreamInfoStandard, buffer, 0, transaction.SafeHandle)) - { - int errorCode = Marshal.GetLastWin32Error(); - - if (handle.IsInvalid) - { - if (errorCode == Win32Errors.ERROR_HANDLE_EOF) - yield break; - - NativeError.ThrowException(errorCode); - } - - while (true) - { - yield return new AlternateDataStreamInfo(pathLp, buffer.PtrToStructure(0)); - - if (!NativeMethods.FindNextStreamW(handle, buffer)) - { - int lastError = Marshal.GetLastWin32Error(); - if (lastError == Win32Errors.ERROR_HANDLE_EOF) - break; - - NativeError.ThrowException(lastError, pathLp); - } - } - } - } - } - - #endregion // Internal Methods - } -} diff --git a/AlphaFS/Filesystem/File Class/File.EnumerateHardlinks.cs b/AlphaFS/Filesystem/File Class/File.EnumerateHardlinks.cs deleted file mode 100644 index e0edb6f..0000000 --- a/AlphaFS/Filesystem/File Class/File.EnumerateHardlinks.cs +++ /dev/null @@ -1,170 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System; -using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; -using System.Runtime.InteropServices; -using System.Security; -using System.Text; - -namespace Alphaleonis.Win32.Filesystem -{ - public static partial class File - { - #region EnumerateHardlinks - - /// [AlphaFS] Creates an enumeration of all the hard links to the specified . - /// The name of the file. - /// Indicates the format of the path parameter(s). - /// An enumerable collection of of all the hard links to the specified - [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Hardlinks")] - [SecurityCritical] - public static IEnumerable EnumerateHardlinks(string path, PathFormat pathFormat) - { - return EnumerateHardlinksCore(null, path, pathFormat); - } - - /// [AlphaFS] Creates an enumeration of all the hard links to the specified . - /// The name of the file. - /// An enumerable collection of of all the hard links to the specified - [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Hardlinks")] - [SecurityCritical] - public static IEnumerable EnumerateHardlinks(string path) - { - return EnumerateHardlinksCore(null, path, PathFormat.RelativePath); - } - - /// [AlphaFS] Creates an enumeration of all the hard links to the specified . - /// The transaction. - /// The name of the file. - /// Indicates the format of the path parameter(s). - /// An enumerable collection of of all the hard links to the specified - [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Hardlinks")] - [SecurityCritical] - public static IEnumerable EnumerateHardlinksTransacted(KernelTransaction transaction, string path, PathFormat pathFormat) - { - return EnumerateHardlinksCore(transaction, path, pathFormat); - } - - /// [AlphaFS] Creates an enumeration of all the hard links to the specified . - /// The transaction. - /// The name of the file. - /// An enumerable collection of of all the hard links to the specified - [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Hardlinks")] - [SecurityCritical] - public static IEnumerable EnumerateHardlinksTransacted(KernelTransaction transaction, string path) - { - return EnumerateHardlinksCore(transaction, path, PathFormat.RelativePath); - } - - #endregion // EnumerateHardlinks - - #region Internal Methods - - /// [AlphaFS] Creates an enumeration of all the hard links to the specified . - /// - /// The transaction. - /// The name of the file. - /// Indicates the format of the path parameter(s). - /// An enumerable collection of of all the hard links to the specified - internal static IEnumerable EnumerateHardlinksCore(KernelTransaction transaction, string path, PathFormat pathFormat) - { - if (!NativeMethods.IsAtLeastWindowsVista) - throw new PlatformNotSupportedException(Resources.Requires_Windows_Vista_Or_Higher); - - string pathLp = Path.GetExtendedLengthPathCore(transaction, path, pathFormat, GetFullPathOptions.RemoveTrailingDirectorySeparator | GetFullPathOptions.FullCheck); - - // Default buffer length, will be extended if needed, although this should not happen. - uint length = NativeMethods.MaxPathUnicode; - StringBuilder builder = new StringBuilder((int)length); - - - getFindFirstFileName: - - using (SafeFindFileHandle handle = transaction == null - - // FindFirstFileName() / FindFirstFileNameTransacted() - // In the ANSI version of this function, the name is limited to MAX_PATH characters. - // To extend this limit to 32,767 wide characters, call the Unicode version of the function and prepend "\\?\" to the path. - // 2013-01-13: MSDN does not confirm LongPath usage but a Unicode version of this function exists. - - ? NativeMethods.FindFirstFileName(pathLp, 0, out length, builder) - : NativeMethods.FindFirstFileNameTransacted(pathLp, 0, out length, builder, transaction.SafeHandle)) - { - int lastError = Marshal.GetLastWin32Error(); - - if (handle.IsInvalid) - { - handle.Close(); - - switch ((uint) lastError) - { - case Win32Errors.ERROR_MORE_DATA: - builder = new StringBuilder((int) length); - goto getFindFirstFileName; - - default: - // If the function fails, the return value is INVALID_HANDLE_VALUE. - NativeError.ThrowException(lastError, pathLp); - break; - } - } - - yield return builder.ToString(); - - - //length = NativeMethods.MaxPathUnicode; - //builder = new StringBuilder((int)length); - - do - { - while (!NativeMethods.FindNextFileName(handle, out length, builder)) - { - lastError = Marshal.GetLastWin32Error(); - - switch ((uint) lastError) - { - // We've reached the end of the enumeration. - case Win32Errors.ERROR_HANDLE_EOF: - yield break; - - case Win32Errors.ERROR_MORE_DATA: - builder = new StringBuilder((int) length); - continue; - - default: - //If the function fails, the return value is zero (0). - NativeError.ThrowException(lastError); - break; - } - } - - yield return builder.ToString(); - - } while (true); - } - } - - #endregion // Internal Methods - - } -} diff --git a/AlphaFS/Filesystem/File Class/File.Exists.cs b/AlphaFS/Filesystem/File Class/File.Exists.cs deleted file mode 100644 index fa808cd..0000000 --- a/AlphaFS/Filesystem/File Class/File.Exists.cs +++ /dev/null @@ -1,228 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System.Diagnostics.CodeAnalysis; -using System.IO; -using System.Security; - -namespace Alphaleonis.Win32.Filesystem -{ - public static partial class File - { - #region Public Methods - - /// Determines whether the specified file exists. - /// - /// MSDN: .NET 3.5+: Trailing spaces are removed from the end of the - /// parameter before checking whether the directory exists. - /// The Exists method returns if any error occurs while trying to - /// determine if the specified file exists. - /// This can occur in situations that raise exceptions such as passing a file name with - /// invalid characters or too many characters, a failing or missing disk, or if the caller does not have permission to read the - /// file. - /// The Exists method should not be used for path validation, - /// this method merely checks if the file specified in path exists. - /// Passing an invalid path to Exists returns false. - /// Be aware that another process can potentially do something with the file in - /// between the time you call the Exists method and perform another operation on the file, such as Delete. - /// - /// The file to check. - /// - /// Returns if the caller has the required permissions and - /// contains the name of an existing file; otherwise, - /// - /// - [SecurityCritical] - public static bool Exists(string path) - { - return ExistsCore(false, null, path, PathFormat.RelativePath); - } - - /// [AlphaFS] Determines whether the specified file exists. - /// - /// MSDN: .NET 3.5+: Trailing spaces are removed from the end of the - /// parameter before checking whether the directory exists. - /// The Exists method returns if any error occurs while trying to - /// determine if the specified file exists. - /// This can occur in situations that raise exceptions such as passing a file name with - /// invalid characters or too many characters, - /// a failing or missing disk, or if the caller does not have permission to read the - /// file. - /// The Exists method should not be used for path validation, this method merely checks - /// if the file specified in path exists. - /// Passing an invalid path to Exists returns false. - /// Be aware that another process can potentially do something with the file in - /// between the time you call the Exists method and perform another operation on the file, such - /// as Delete. - /// - /// The file to check. - /// Indicates the format of the path parameter(s). - /// - /// Returns if the caller has the required permissions and - /// contains the name of an existing file; otherwise, - /// - /// - [SecurityCritical] - public static bool Exists(string path, PathFormat pathFormat) - { - return ExistsCore(false, null, path, pathFormat); - } - - #region Transactional - - /// - /// [AlphaFS] Determines whether the specified file exists. - /// - /// - /// MSDN: .NET 3.5+: Trailing spaces are removed from the end of the - /// parameter before checking whether the directory exists. - /// The Exists method returns if any error occurs while trying to - /// determine if the specified file exists. - /// This can occur in situations that raise exceptions such as passing a file name with - /// invalid characters or too many characters, - /// a failing or missing disk, or if the caller does not have permission to read the - /// file. - /// The Exists method should not be used for path validation, - /// this method merely checks if the file specified in path exists. - /// Passing an invalid path to Exists returns false. - /// Be aware that another process can potentially do something with the file in - /// between - /// the time you call the Exists method and perform another operation on the file, such - /// as Delete. - /// - /// The transaction. - /// The file to check. - /// - /// Returns if the caller has the required permissions - /// and contains the name of an existing file; otherwise, - /// - /// - [SecurityCritical] - public static bool ExistsTransacted(KernelTransaction transaction, string path) - { - return ExistsCore(false, transaction, path, PathFormat.RelativePath); - } - - /// - /// [AlphaFS] Determines whether the specified file exists. - /// - /// - /// MSDN: .NET 3.5+: Trailing spaces are removed from the end of the - /// parameter before checking whether the directory exists. - /// The Exists method returns if any error occurs while trying to - /// determine if the specified file exists. - /// This can occur in situations that raise exceptions such as passing a file name with - /// invalid characters or too many characters, - /// a failing or missing disk, or if the caller does not have permission to read the - /// file. - /// The Exists method should not be used for path validation, - /// this method merely checks if the file specified in path exists. - /// Passing an invalid path to Exists returns false. - /// Be aware that another process can potentially do something with the file in - /// between - /// the time you call the Exists method and perform another operation on the file, such - /// as Delete. - /// - /// The transaction. - /// The file to check. - /// Indicates the format of the path parameter(s). - /// - /// Returns if the caller has the required permissions - /// and contains the name of an existing file; otherwise, - /// - /// - [SecurityCritical] - public static bool ExistsTransacted(KernelTransaction transaction, string path, PathFormat pathFormat) - { - return ExistsCore(false, transaction, path, pathFormat); - } - - #endregion // Transacted - - #endregion - - #region Internal Methods - - /// Determines whether the specified file or directory exists. - /// - /// MSDN: .NET 3.5+: Trailing spaces are removed from the end of the parameter before checking whether - /// the directory exists. - /// The Exists method returns if any error occurs while trying to determine if the specified file - /// exists. - /// This can occur in situations that raise exceptions such as passing a file name with invalid characters or too many characters, - /// - /// a failing or missing disk, or if the caller does not have permission to read the file. - /// The Exists method should not be used for path validation, - /// this method merely checks if the file specified in path exists. - /// Passing an invalid path to Exists returns false. - /// Be aware that another process can potentially do something with the file in between - /// the time you call the Exists method and perform another operation on the file, such as Delete. - /// - /// Specifies that is a file or directory. - /// The transaction. - /// The file to check. - /// Indicates the format of the path parameter(s). - /// - /// Returns if the caller has the required permissions - /// and contains the name of an existing file or directory; otherwise, - /// - [SuppressMessage("Microsoft.Design", "CA1031:DoNotCatchGeneralExceptionTypes")] - [SecurityCritical] - internal static bool ExistsCore(bool isFolder, KernelTransaction transaction, string path, PathFormat pathFormat) - { - // Will be caught later and be thrown as an ArgumentException or ArgumentNullException. - // Let's take a shorter route, preventing an Exception from being thrown altogether. - if (Utils.IsNullOrWhiteSpace(path)) - return false; - - - // DriveInfo.IsReady() will fail. - // - //// After normalizing, check whether path ends in directory separator. - //// Otherwise, FillAttributeInfoCore removes it and we may return a false positive. - //string pathRp = Path.GetRegularPathCore(path, true, false, false, false); - - //if (pathRp.Length > 0 && Path.IsDVsc(pathRp[pathRp.Length - 1], false)) - // return false; - - - try - { - string pathLp = Path.GetExtendedLengthPathCore(transaction, path, pathFormat, GetFullPathOptions.TrimEnd | GetFullPathOptions.RemoveTrailingDirectorySeparator | GetFullPathOptions.CheckInvalidPathChars | GetFullPathOptions.ContinueOnNonExist); - - var data = new NativeMethods.WIN32_FILE_ATTRIBUTE_DATA(); - int dataInitialised = FillAttributeInfoCore(transaction, pathLp, ref data, false, true); - - return (dataInitialised == Win32Errors.ERROR_SUCCESS && - data.dwFileAttributes != (FileAttributes) (-1) && - (isFolder - ? (data.dwFileAttributes & FileAttributes.Directory) != 0 - : (data.dwFileAttributes & FileAttributes.Directory) == 0)); - } - catch - { - return false; - } - } - - #endregion // Internal Methods - } -} diff --git a/AlphaFS/Filesystem/File Class/File.GetAccessControl.cs b/AlphaFS/Filesystem/File Class/File.GetAccessControl.cs deleted file mode 100644 index 7ff60e6..0000000 --- a/AlphaFS/Filesystem/File Class/File.GetAccessControl.cs +++ /dev/null @@ -1,255 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System; -using System.Diagnostics.CodeAnalysis; -using System.IO; -using System.Runtime.InteropServices; -using System.Security; -using System.Security.AccessControl; -using Alphaleonis.Win32.Security; -using Microsoft.Win32.SafeHandles; - -namespace Alphaleonis.Win32.Filesystem -{ - partial class File - { - /// Gets a object that encapsulates the access control list (ACL) entries for a specified file. - /// A object that encapsulates the access control rules for the file described by the parameter. - /// - /// - /// - /// The path to a file containing a object that describes the file's access control list (ACL) information. - [SecurityCritical] - public static FileSecurity GetAccessControl(string path) - { - return GetAccessControlCore(false, path, AccessControlSections.Access | AccessControlSections.Group | AccessControlSections.Owner, PathFormat.RelativePath); - } - - /// Gets a object that encapsulates the access control list (ACL) entries for a specified file. - /// A object that encapsulates the access control rules for the file described by the parameter. - /// - /// - /// - /// The path to a file containing a object that describes the file's access control list (ACL) information. - /// One (or more) of the values that specifies the type of access control list (ACL) information to receive. - [SecurityCritical] - public static FileSecurity GetAccessControl(string path, AccessControlSections includeSections) - { - return GetAccessControlCore(false, path, includeSections, PathFormat.RelativePath); - } - - - /// [AlphaFS] Gets a object that encapsulates the access control list (ACL) entries for a specified file. - /// A object that encapsulates the access control rules for the file described by the parameter. - /// - /// - /// - /// The path to a file containing a object that describes the file's access control list (ACL) information. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static FileSecurity GetAccessControl(string path, PathFormat pathFormat) - { - return GetAccessControlCore(false, path, AccessControlSections.Access | AccessControlSections.Group | AccessControlSections.Owner, pathFormat); - } - - /// [AlphaFS] Gets a object that encapsulates the access control list (ACL) entries for a specified file. - /// A object that encapsulates the access control rules for the file described by the parameter. - /// - /// - /// - /// The path to a file containing a object that describes the file's access control list (ACL) information. - /// One (or more) of the values that specifies the type of access control list (ACL) information to receive. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static FileSecurity GetAccessControl(string path, AccessControlSections includeSections, PathFormat pathFormat) - { - return GetAccessControlCore(false, path, includeSections, pathFormat); - } - - - /// [AlphaFS] Gets a object that encapsulates the access control list (ACL) entries for a specified file handle. - /// A object that encapsulates the access control rules for the file described by the parameter. - /// - /// - /// - /// A to a file containing a object that describes the file's access control list (ACL) information. - [SecurityCritical] - public static FileSecurity GetAccessControl(SafeFileHandle handle) - { - return GetAccessControlHandleCore(false, false, handle, AccessControlSections.Access | AccessControlSections.Group | AccessControlSections.Owner, SecurityInformation.None); - } - - /// [AlphaFS] Gets a object that encapsulates the access control list (ACL) entries for a specified file handle. - /// A object that encapsulates the access control rules for the file described by the parameter. - /// - /// - /// - /// A to a file containing a object that describes the file's access control list (ACL) information. - /// One (or more) of the values that specifies the type of access control list (ACL) information to receive. - [SecurityCritical] - public static FileSecurity GetAccessControl(SafeFileHandle handle, AccessControlSections includeSections) - { - return GetAccessControlHandleCore(false, false, handle, includeSections, SecurityInformation.None); - } - - - - - /// [AlphaFS] Gets an object for a particular file or directory. - /// An object that encapsulates the access control rules for the file or directory described by the parameter. - /// - /// - /// - /// Generic type parameter. - /// Specifies that is a file or directory. - /// The path to a file/directory containing a / object that describes the file's/directory's access control list (ACL) information. - /// One (or more) of the values that specifies the type of access control list (ACL) information to receive. - /// Indicates the format of the path parameter(s). - [SuppressMessage("Microsoft.Usage", "CA2202:Do not dispose objects multiple times", Justification = "Disposing is controlled.")] - [SecurityCritical] - internal static T GetAccessControlCore(bool isFolder, string path, AccessControlSections includeSections, PathFormat pathFormat) - { - SecurityInformation securityInfo = CreateSecurityInformation(includeSections); - - - // We need the SE_SECURITY_NAME privilege enabled to be able to get the SACL descriptor. - // So we enable it here for the remainder of this function. - - PrivilegeEnabler privilege = null; - - if ((includeSections & AccessControlSections.Audit) != 0) - privilege = new PrivilegeEnabler(Privilege.Security); - - using (privilege) - { - IntPtr pSidOwner, pSidGroup, pDacl, pSacl; - SafeGlobalMemoryBufferHandle pSecurityDescriptor; - - string pathLp = Path.GetExtendedLengthPathCore(null, path, pathFormat, GetFullPathOptions.RemoveTrailingDirectorySeparator | GetFullPathOptions.FullCheck); - - - // Get/SetNamedSecurityInfo does not work with a handle but with a path, hence does not honor the privileges. - // It magically does since Windows Server 2012 / 8 but not in previous OS versions. - - uint lastError = Security.NativeMethods.GetNamedSecurityInfo(pathLp, ObjectType.FileObject, securityInfo, - out pSidOwner, out pSidGroup, out pDacl, out pSacl, out pSecurityDescriptor); - - - // When GetNamedSecurityInfo() fails with ACCESS_DENIED, try again using GetSecurityInfo(). - - if (lastError == Win32Errors.ERROR_ACCESS_DENIED) - using (SafeFileHandle handle = CreateFileCore(null, pathLp, ExtendedFileAttributes.BackupSemantics, null, FileMode.Open, FileSystemRights.Read, FileShare.Read, false, PathFormat.LongFullPath)) - return GetAccessControlHandleCore(true, isFolder, handle, includeSections, securityInfo); - - return GetSecurityDescriptor(lastError, isFolder, pathLp, pSecurityDescriptor); - } - } - - - internal static T GetAccessControlHandleCore(bool internalCall, bool isFolder, SafeFileHandle handle, AccessControlSections includeSections, SecurityInformation securityInfo) - { - if (!internalCall) - securityInfo = CreateSecurityInformation(includeSections); - - - // We need the SE_SECURITY_NAME privilege enabled to be able to get the SACL descriptor. - // So we enable it here for the remainder of this function. - - PrivilegeEnabler privilege = null; - - if (!internalCall && (includeSections & AccessControlSections.Audit) != 0) - privilege = new PrivilegeEnabler(Privilege.Security); - - using (privilege) - { - IntPtr pSidOwner, pSidGroup, pDacl, pSacl; - SafeGlobalMemoryBufferHandle pSecurityDescriptor; - - uint lastError = Security.NativeMethods.GetSecurityInfo(handle, ObjectType.FileObject, securityInfo, - out pSidOwner, out pSidGroup, out pDacl, out pSacl, out pSecurityDescriptor); - - return GetSecurityDescriptor(lastError, isFolder, null, pSecurityDescriptor); - } - } - - - private static SecurityInformation CreateSecurityInformation(AccessControlSections includeSections) - { - var securityInfo = SecurityInformation.None; - - - if ((includeSections & AccessControlSections.Access) != 0) - securityInfo |= SecurityInformation.Dacl; - - if ((includeSections & AccessControlSections.Audit) != 0) - securityInfo |= SecurityInformation.Sacl; - - if ((includeSections & AccessControlSections.Group) != 0) - securityInfo |= SecurityInformation.Group; - - if ((includeSections & AccessControlSections.Owner) != 0) - securityInfo |= SecurityInformation.Owner; - - - return securityInfo; - } - - - private static T GetSecurityDescriptor(uint lastError, bool isFolder, string path, SafeGlobalMemoryBufferHandle securityDescriptor) - { - ObjectSecurity objectSecurity; - - using (securityDescriptor) - { - if (lastError == Win32Errors.ERROR_FILE_NOT_FOUND || lastError == Win32Errors.ERROR_PATH_NOT_FOUND) - lastError = isFolder ? Win32Errors.ERROR_PATH_NOT_FOUND : Win32Errors.ERROR_FILE_NOT_FOUND; - - - // If the function fails, the return value is zero. - if (lastError != Win32Errors.ERROR_SUCCESS) - { - if (!Utils.IsNullOrWhiteSpace(path)) - NativeError.ThrowException(lastError, path); - else - NativeError.ThrowException((int) lastError); - } - - if (!NativeMethods.IsValidHandle(securityDescriptor, false)) - throw new IOException(Resources.Returned_Invalid_Security_Descriptor); - - - uint length = Security.NativeMethods.GetSecurityDescriptorLength(securityDescriptor); - - // Seems not to work: Method .CopyTo: length > Capacity, so an Exception is thrown. - //byte[] managedBuffer = new byte[length]; - //pSecurityDescriptor.CopyTo(managedBuffer, 0, (int) length); - - byte[] managedBuffer = securityDescriptor.ToByteArray(0, (int) length); - - objectSecurity = isFolder ? (ObjectSecurity) new DirectorySecurity() : new FileSecurity(); - objectSecurity.SetSecurityDescriptorBinaryForm(managedBuffer); - } - - return (T) (object) objectSecurity; - } - } -} diff --git a/AlphaFS/Filesystem/File Class/File.GetAttributes.cs b/AlphaFS/Filesystem/File Class/File.GetAttributes.cs deleted file mode 100644 index b58248c..0000000 --- a/AlphaFS/Filesystem/File Class/File.GetAttributes.cs +++ /dev/null @@ -1,227 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System; -using System.Diagnostics.CodeAnalysis; -using System.IO; -using System.Runtime.InteropServices; -using System.Security; - -namespace Alphaleonis.Win32.Filesystem -{ - public static partial class File - { - #region GetAttributes - - /// Gets the of the file on the path. - /// The path to the file. - /// The of the file on the path. - [SecurityCritical] - public static FileAttributes GetAttributes(string path) - { - return GetAttributesExCore(null, path, PathFormat.RelativePath, true); - } - - /// [AlphaFS] Gets the of the file on the path. - /// The path to the file. - /// Indicates the format of the path parameter(s). - /// The of the file on the path. - [SecurityCritical] - public static FileAttributes GetAttributes(string path, PathFormat pathFormat) - { - return GetAttributesExCore(null, path, pathFormat, true); - } - - /// [AlphaFS] Gets the of the file on the path. - /// The transaction. - /// The path to the file. - /// The of the file on the path. - [SecurityCritical] - public static FileAttributes GetAttributesTransacted(KernelTransaction transaction, string path) - { - return GetAttributesExCore(transaction, path, PathFormat.RelativePath, true); - } - - /// [AlphaFS] Gets the of the file on the path. - /// The transaction. - /// The path to the file. - /// Indicates the format of the path parameter(s). - /// The of the file on the path. - [SecurityCritical] - public static FileAttributes GetAttributesTransacted(KernelTransaction transaction, string path, PathFormat pathFormat) - { - return GetAttributesExCore(transaction, path, pathFormat, true); - } - - #endregion - - #region Internal Methods - - /// Gets the or of the specified file or directory. - /// The or of the specified file or directory. - /// - /// - /// Generic type parameter. - /// The transaction. - /// The path to the file or directory. - /// Indicates the format of the path parameter(s). - /// - [SuppressMessage("Microsoft.Interoperability", "CA1404:CallGetLastErrorImmediatelyAfterPInvoke", Justification = "Marshal.GetLastWin32Error() is manipulated.")] - [SecurityCritical] - internal static T GetAttributesExCore(KernelTransaction transaction, string path, PathFormat pathFormat, bool returnErrorOnNotFound) - { - if (pathFormat == PathFormat.RelativePath) - Path.CheckSupportedPathFormat(path, true, true); - - string pathLp = Path.GetExtendedLengthPathCore(transaction, path, pathFormat, GetFullPathOptions.RemoveTrailingDirectorySeparator | GetFullPathOptions.CheckInvalidPathChars); - - var data = new NativeMethods.WIN32_FILE_ATTRIBUTE_DATA(); - int dataInitialised = FillAttributeInfoCore(transaction, pathLp, ref data, false, returnErrorOnNotFound); - - if (dataInitialised != Win32Errors.ERROR_SUCCESS) - NativeError.ThrowException(dataInitialised, pathLp); - - return (T) (typeof (T) == typeof (FileAttributes) ? (object) data.dwFileAttributes : data); - } - - /// - /// Calls NativeMethods.GetFileAttributesEx to retrieve WIN32_FILE_ATTRIBUTE_DATA. - /// Note that classes should use -1 as the uninitialized state for dataInitialized when relying on this method. - /// - /// No path (null, empty string) checking or normalization is performed. - /// . - /// . - /// [in,out]. - /// . - /// . - /// 0 on success, otherwise a Win32 error code. - [SuppressMessage("Microsoft.Design", "CA1031:DoNotCatchGeneralExceptionTypes")] - [SecurityCritical] - internal static int FillAttributeInfoCore(KernelTransaction transaction, string pathLp, ref NativeMethods.WIN32_FILE_ATTRIBUTE_DATA win32AttrData, bool tryagain, bool returnErrorOnNotFound) - { - int dataInitialised = (int)Win32Errors.ERROR_SUCCESS; - - #region Try Again - - // Someone has a handle to the file open, or other error. - if (tryagain) - { - NativeMethods.WIN32_FIND_DATA findData; - - using (new NativeMethods.ChangeErrorMode(NativeMethods.ErrorMode.FailCriticalErrors)) - { - bool error = false; - - SafeFindFileHandle handle = transaction == null || !NativeMethods.IsAtLeastWindowsVista - - // FindFirstFileEx() / FindFirstFileTransacted() - // In the ANSI version of this function, the name is limited to MAX_PATH characters. - // To extend this limit to 32,767 wide characters, call the Unicode version of the function and prepend "\\?\" to the path. - // 2013-01-13: MSDN confirms LongPath usage. - - // A trailing backslash is not allowed. - ? NativeMethods.FindFirstFileEx(Path.RemoveTrailingDirectorySeparator(pathLp, false), NativeMethods.FindexInfoLevels, out findData, NativeMethods.FINDEX_SEARCH_OPS.SearchNameMatch, IntPtr.Zero, NativeMethods.LargeCache) - : NativeMethods.FindFirstFileTransacted(Path.RemoveTrailingDirectorySeparator(pathLp, false), NativeMethods.FindexInfoLevels, out findData, NativeMethods.FINDEX_SEARCH_OPS.SearchNameMatch, IntPtr.Zero, NativeMethods.LargeCache, transaction.SafeHandle); - - try - { - if (handle.IsInvalid) - { - error = true; - dataInitialised = Marshal.GetLastWin32Error(); - - if (dataInitialised == Win32Errors.ERROR_FILE_NOT_FOUND || - dataInitialised == Win32Errors.ERROR_PATH_NOT_FOUND || - dataInitialised == Win32Errors.ERROR_NOT_READY) // Floppy device not ready. - { - if (!returnErrorOnNotFound) - { - // Return default value for backward compatibility - dataInitialised = (int)Win32Errors.ERROR_SUCCESS; - win32AttrData.dwFileAttributes = (FileAttributes)(-1); - } - } - - return dataInitialised; - } - } - finally - { - try - { - if (handle != null) - handle.Close(); - } - catch - { - // If we're already returning an error, don't throw another one. - if (!error) - NativeError.ThrowException(dataInitialised, pathLp); - } - } - } - - // Copy the attribute information. - win32AttrData = new NativeMethods.WIN32_FILE_ATTRIBUTE_DATA(findData); - } - - #endregion // Try Again - - else - { - using (new NativeMethods.ChangeErrorMode(NativeMethods.ErrorMode.FailCriticalErrors)) - { - if (!(transaction == null || !NativeMethods.IsAtLeastWindowsVista - - // GetFileAttributesEx() / GetFileAttributesTransacted() - // In the ANSI version of this function, the name is limited to MAX_PATH characters. - // To extend this limit to 32,767 wide characters, call the Unicode version of the function and prepend "\\?\" to the path. - // 2013-01-13: MSDN confirms LongPath usage. - - ? NativeMethods.GetFileAttributesEx(pathLp, NativeMethods.GetFileExInfoLevels.GetFileExInfoStandard, out win32AttrData) - : NativeMethods.GetFileAttributesTransacted(pathLp, NativeMethods.GetFileExInfoLevels.GetFileExInfoStandard, out win32AttrData, transaction.SafeHandle))) - { - dataInitialised = Marshal.GetLastWin32Error(); - - if (dataInitialised != Win32Errors.ERROR_FILE_NOT_FOUND && - dataInitialised != Win32Errors.ERROR_PATH_NOT_FOUND && - dataInitialised != Win32Errors.ERROR_NOT_READY) // Floppy device not ready. - { - // In case someone latched onto the file. Take the perf hit only for failure. - return FillAttributeInfoCore(transaction, pathLp, ref win32AttrData, true, returnErrorOnNotFound); - } - - if (!returnErrorOnNotFound) - { - // Return default value for backward compbatibility. - dataInitialised = (int)Win32Errors.ERROR_SUCCESS; - win32AttrData.dwFileAttributes = (FileAttributes)(-1); - } - } - } - } - - return dataInitialised; - } - - #endregion // Internal Methods - } -} diff --git a/AlphaFS/Filesystem/File Class/File.GetChangeTime.cs b/AlphaFS/Filesystem/File Class/File.GetChangeTime.cs deleted file mode 100644 index cd50b43..0000000 --- a/AlphaFS/Filesystem/File Class/File.GetChangeTime.cs +++ /dev/null @@ -1,203 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using Microsoft.Win32.SafeHandles; -using System; -using System.Diagnostics.CodeAnalysis; -using System.IO; -using System.Runtime.InteropServices; -using System.Security; -using System.Security.AccessControl; - -namespace Alphaleonis.Win32.Filesystem -{ - public static partial class File - { - #region GetChangeTime - - /// [AlphaFS] Gets the change date and time of the specified file. - /// A structure set to the change date and time for the specified file. This value is expressed in local time. - /// The file for which to obtain creation date and time information. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static DateTime GetChangeTime(string path, PathFormat pathFormat) - { - return GetChangeTimeCore(false, null, null, path, false, pathFormat); - } - - - /// [AlphaFS] Gets the change date and time of the specified file. - /// A structure set to the change date and time for the specified file. This value is expressed in local time. - /// The file for which to obtain creation date and time information. - [SecurityCritical] - public static DateTime GetChangeTime(string path) - { - return GetChangeTimeCore(false, null, null, path, false, PathFormat.RelativePath); - } - - /// [AlphaFS] Gets the change date and time of the specified file. - /// A structure set to the change date and time for the specified file. This value is expressed in local time. - /// An open handle to the file or directory from which to retrieve information. - [SecurityCritical] - public static DateTime GetChangeTime(SafeFileHandle safeHandle) - { - return GetChangeTimeCore(false, null, safeHandle, null, false, PathFormat.LongFullPath); - } - - /// [AlphaFS] Gets the change date and time of the specified file. - /// A structure set to the change date and time for the specified file. This value is expressed in local time. - /// The transaction. - /// The file for which to obtain creation date and time information. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static DateTime GetChangeTimeTransacted(KernelTransaction transaction, string path, PathFormat pathFormat) - { - return GetChangeTimeCore(false, transaction, null, path, false, pathFormat); - } - - /// [AlphaFS] Gets the change date and time of the specified file. - /// A structure set to the change date and time for the specified file. This value is expressed in local time. - /// The transaction. - /// The file for which to obtain creation date and time information. - [SecurityCritical] - public static DateTime GetChangeTimeTransacted(KernelTransaction transaction, string path) - { - return GetChangeTimeCore(false, transaction, null, path, false, PathFormat.RelativePath); - } - - #endregion // GetChangeTime - - #region GetChangeTimeUtc - - /// [AlphaFS] Gets the change date and time, in Coordinated Universal Time (UTC) format, of the specified file. - /// A structure set to the change date and time for the specified file. This value is expressed in UTC time. - /// The file for which to obtain change date and time information, in Coordinated Universal Time (UTC) format. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static DateTime GetChangeTimeUtc(string path, PathFormat pathFormat) - { - return GetChangeTimeCore(false, null, null, path, true, pathFormat); - } - - /// [AlphaFS] Gets the change date and time, in Coordinated Universal Time (UTC) format, of the specified file. - /// A structure set to the change date and time for the specified file. This value is expressed in UTC time. - /// The file for which to obtain change date and time information, in Coordinated Universal Time (UTC) format. - [SecurityCritical] - public static DateTime GetChangeTimeUtc(string path) - { - return GetChangeTimeCore(false, null, null, path, true, PathFormat.RelativePath); - } - - /// [AlphaFS] Gets the change date and time, in Coordinated Universal Time (UTC) format, of the specified file. - /// A structure set to the change date and time for the specified file. This value is expressed in UTC time. - /// An open handle to the file or directory from which to retrieve information. - [SecurityCritical] - public static DateTime GetChangeTimeUtc(SafeFileHandle safeHandle) - { - return GetChangeTimeCore(false, null, safeHandle, null, true, PathFormat.LongFullPath); - } - - /// [AlphaFS] Gets the change date and time, in Coordinated Universal Time (UTC) format, of the specified file. - /// A structure set to the change date and time for the specified file. This value is expressed in UTC time. - /// The transaction. - /// The file for which to obtain change date and time information, in Coordinated Universal Time (UTC) format. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static DateTime GetChangeTimeUtcTransacted(KernelTransaction transaction, string path, PathFormat pathFormat) - { - return GetChangeTimeCore(false, transaction, null, path, true, pathFormat); - } - - /// [AlphaFS] Gets the change date and time, in Coordinated Universal Time (UTC) format, of the specified file. - /// A structure set to the change date and time for the specified file. This value is expressed in UTC time. - /// The transaction. - /// The file for which to obtain change date and time information, in Coordinated Universal Time (UTC) format. - [SecurityCritical] - public static DateTime GetChangeTimeUtcTransacted(KernelTransaction transaction, string path) - { - return GetChangeTimeCore(false, transaction, null, path, true, PathFormat.RelativePath); - } - - #endregion // GetChangeTimeUtc - - #region Internal Methods - - /// Gets the change date and time of the specified file. - /// A structure set to the change date and time for the specified file. This value is expressed in local time. - /// Use either or , not both. - /// - /// - /// - /// Specifies that is a file or directory. - /// The transaction. - /// An open handle to the file or directory from which to retrieve information. - /// The file or directory for which to obtain creation date and time information. - /// gets the Coordinated Universal Time (UTC), gets the local time. - /// Indicates the format of the path parameter(s). - [SuppressMessage("Microsoft.Reliability", "CA2000:Dispose objects before losing scope", Justification = "Disposing is under control.")] - [SecurityCritical] - internal static DateTime GetChangeTimeCore(bool isFolder, KernelTransaction transaction, SafeFileHandle safeHandle, string path, bool getUtc, PathFormat pathFormat) - { - if (!NativeMethods.IsAtLeastWindowsVista) - throw new PlatformNotSupportedException(Resources.Requires_Windows_Vista_Or_Higher); - - bool callerHandle = safeHandle != null; - if (!callerHandle) - { - if (pathFormat != PathFormat.LongFullPath && Utils.IsNullOrWhiteSpace(path)) - throw new ArgumentNullException("path"); - - string pathLp = Path.GetExtendedLengthPathCore(transaction, path, pathFormat, GetFullPathOptions.RemoveTrailingDirectorySeparator | GetFullPathOptions.CheckInvalidPathChars); - - safeHandle = CreateFileCore(transaction, pathLp, isFolder ? ExtendedFileAttributes.BackupSemantics : ExtendedFileAttributes.Normal, null, FileMode.Open, FileSystemRights.ReadData, FileShare.ReadWrite, true, PathFormat.LongFullPath); - } - - - try - { - NativeMethods.IsValidHandle(safeHandle); - - using (var safeBuffer = new SafeGlobalMemoryBufferHandle(IntPtr.Size + Marshal.SizeOf(typeof(NativeMethods.FILE_BASIC_INFO)))) - { - NativeMethods.FILE_BASIC_INFO fbi; - - if (!NativeMethods.GetFileInformationByHandleEx_FileBasicInfo(safeHandle, NativeMethods.FileInfoByHandleClass.FileBasicInfo, out fbi, (uint)safeBuffer.Capacity)) - NativeError.ThrowException(Marshal.GetLastWin32Error()); - - safeBuffer.StructureToPtr(fbi, true); - NativeMethods.FILETIME changeTime = safeBuffer.PtrToStructure(0).ChangeTime; - - return getUtc - ? DateTime.FromFileTimeUtc(changeTime) - : DateTime.FromFileTime(changeTime); - } - } - finally - { - // Handle is ours, dispose. - if (!callerHandle && safeHandle != null) - safeHandle.Close(); - } - } - - #endregion // Internal Methods - } -} diff --git a/AlphaFS/Filesystem/File Class/File.GetCompressedSize.cs b/AlphaFS/Filesystem/File Class/File.GetCompressedSize.cs deleted file mode 100644 index e470195..0000000 --- a/AlphaFS/Filesystem/File Class/File.GetCompressedSize.cs +++ /dev/null @@ -1,134 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System; -using System.Runtime.InteropServices; -using System.Security; - -namespace Alphaleonis.Win32.Filesystem -{ - public static partial class File - { - #region GetCompressedSize - - /// [AlphaFS] Retrieves the actual number of bytes of disk storage used to store a specified file. - /// - /// If the file is located on a volume that supports compression and the file is compressed, the value obtained is the compressed size - /// of the specified file. If the file is located on a volume that supports sparse files and the file is a sparse file, the value - /// obtained is the sparse size of the specified file. - /// - /// The name of the file. - /// Indicates the format of the path parameter(s). - /// The actual number of bytes of disk storage used to store the specified file. - [SecurityCritical] - public static long GetCompressedSize(string path, PathFormat pathFormat) - { - return GetCompressedSizeCore(null, path, pathFormat); - } - - /// [AlphaFS] Retrieves the actual number of bytes of disk storage used to store a specified file. - /// - /// If the file is located on a volume that supports compression and the file is compressed, the value obtained is the compressed size - /// of the specified file. If the file is located on a volume that supports sparse files and the file is a sparse file, the value - /// obtained is the sparse size of the specified file. - /// - /// The name of the file. - /// The actual number of bytes of disk storage used to store the specified file. - [SecurityCritical] - public static long GetCompressedSize(string path) - { - return GetCompressedSizeCore(null, path, PathFormat.RelativePath); - } - - /// - /// [AlphaFS] Retrieves the actual number of bytes of disk storage used to store a specified file as part of a transaction. If the file - /// is located on a volume that supports compression and the file is compressed, the value obtained is the compressed size of the - /// specified file. If the file is located on a volume that supports sparse files and the file is a sparse file, the value obtained is - /// the sparse size of the specified file. - /// - /// The transaction. - /// The name of the file. - /// Indicates the format of the path parameter(s). - /// The actual number of bytes of disk storage used to store the specified file. - [SecurityCritical] - public static long GetCompressedSizeTransacted(KernelTransaction transaction, string path, PathFormat pathFormat) - { - return GetCompressedSizeCore(transaction, path, pathFormat); - } - - /// - /// [AlphaFS] Retrieves the actual number of bytes of disk storage used to store a specified file as part of a transaction. If the file - /// is located on a volume that supports compression and the file is compressed, the value obtained is the compressed size of the - /// specified file. If the file is located on a volume that supports sparse files and the file is a sparse file, the value obtained is - /// the sparse size of the specified file. - /// - /// The transaction. - /// The name of the file. - /// The actual number of bytes of disk storage used to store the specified file. - [SecurityCritical] - public static long GetCompressedSizeTransacted(KernelTransaction transaction, string path) - { - return GetCompressedSizeCore(transaction, path, PathFormat.RelativePath); - } - - #endregion // GetCompressedSize - - #region Internal Methods - - /// Retrieves the actual number of bytes of disk storage used to store a - /// specified file as part of a transaction. If the file is located on a volume that supports compression and the file is compressed, - /// the value obtained is the compressed size of the specified file. If the file is located on a volume that supports sparse files and - /// the file is a sparse file, the value obtained is the sparse size of the specified file. - /// - /// - /// The transaction. - /// The name of the file. - /// Indicates the format of the path parameter(s). - /// The actual number of bytes of disk storage used to store the specified file. - [SecurityCritical] - internal static long GetCompressedSizeCore(KernelTransaction transaction, string path, PathFormat pathFormat) - { - if (pathFormat != PathFormat.LongFullPath && Utils.IsNullOrWhiteSpace(path)) - throw new ArgumentNullException("path"); - - string pathLp = Path.GetExtendedLengthPathCore(transaction, path, pathFormat, GetFullPathOptions.RemoveTrailingDirectorySeparator | GetFullPathOptions.FullCheck); - - uint fileSizeHigh; - uint fileSizeLow = transaction == null || !NativeMethods.IsAtLeastWindowsVista - - // GetCompressedFileSize() / GetCompressedFileSizeTransacted() - // In the ANSI version of this function, the name is limited to 248 characters. - // To extend this limit to 32,767 wide characters, call the Unicode version of the function and prepend "\\?\" to the path. - // 2013-01-13: MSDN does not confirm LongPath usage but a Unicode version of this function exists. - - ? NativeMethods.GetCompressedFileSize(pathLp, out fileSizeHigh) - : NativeMethods.GetCompressedFileSizeTransacted(pathLp, out fileSizeHigh, transaction.SafeHandle); - - // If the function fails, and lpFileSizeHigh is NULL, the return value is INVALID_FILE_SIZE. - if (fileSizeLow == Win32Errors.ERROR_INVALID_FILE_SIZE && fileSizeHigh == 0) - NativeError.ThrowException(Marshal.GetLastWin32Error(), pathLp); - - return NativeMethods.ToLong(fileSizeHigh, fileSizeLow); - } - - #endregion // Internal Methods - } -} diff --git a/AlphaFS/Filesystem/File Class/File.GetCreationTime.cs b/AlphaFS/Filesystem/File Class/File.GetCreationTime.cs deleted file mode 100644 index e9029cb..0000000 --- a/AlphaFS/Filesystem/File Class/File.GetCreationTime.cs +++ /dev/null @@ -1,184 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System; -using System.Security; - -namespace Alphaleonis.Win32.Filesystem -{ - public static partial class File - { - #region GetCreationTime - - /// Gets the creation date and time of the specified file. - /// The file for which to obtain creation date and time information. - /// - /// A structure set to the creation date and time for the specified file. This value is expressed in - /// local time. - /// - [SecurityCritical] - public static DateTime GetCreationTime(string path) - { - return GetCreationTimeCore(null, path, false, PathFormat.RelativePath).ToLocalTime(); - } - - /// [AlphaFS] Gets the creation date and time of the specified file. - /// The file for which to obtain creation date and time information. - /// Indicates the format of the path parameter(s). - /// - /// A structure set to the creation date and time for the specified file. This value is expressed in - /// local time. - /// - [SecurityCritical] - public static DateTime GetCreationTime(string path, PathFormat pathFormat) - { - return GetCreationTimeCore(null, path, false, pathFormat).ToLocalTime(); - } - - #region Transactional - - /// [AlphaFS] Gets the creation date and time of the specified file. - /// The transaction. - /// The file for which to obtain creation date and time information. - /// - /// A structure set to the creation date and time for the specified file. This value is expressed in - /// local time. - /// - [SecurityCritical] - public static DateTime GetCreationTimeTransacted(KernelTransaction transaction, string path) - { - return GetCreationTimeCore(transaction, path, false, PathFormat.RelativePath).ToLocalTime(); - } - - /// [AlphaFS] Gets the creation date and time of the specified file. - /// The transaction. - /// The file for which to obtain creation date and time information. - /// Indicates the format of the path parameter(s). - /// - /// A structure set to the creation date and time for the specified file. This value is expressed in - /// local time. - /// - [SecurityCritical] - public static DateTime GetCreationTimeTransacted(KernelTransaction transaction, string path, PathFormat pathFormat) - { - return GetCreationTimeCore(transaction, path, false, pathFormat).ToLocalTime(); - } - - #endregion // Transacted - - #endregion - - #region GetCreationTimeUtc - - /// Gets the creation date and time, in Coordinated Universal Time (UTC) format, of the specified file. - /// - /// The file for which to obtain creation date and time information, in Coordinated Universal Time (UTC) format. - /// - /// - /// A structure set to the creation date and time for the specified file. This value is expressed in UTC - /// time. - /// - [SecurityCritical] - public static DateTime GetCreationTimeUtc(string path) - { - return GetCreationTimeCore(null, path, true, PathFormat.RelativePath); - } - - /// [AlphaFS] Gets the creation date and time, in Coordinated Universal Time (UTC) format, of the specified file. - /// - /// The file for which to obtain creation date and time information, in Coordinated Universal Time (UTC) format. - /// - /// Indicates the format of the path parameter(s). - /// - /// A structure set to the creation date and time for the specified file. This value is expressed in UTC - /// time. - /// - [SecurityCritical] - public static DateTime GetCreationTimeUtc(string path, PathFormat pathFormat) - { - return GetCreationTimeCore(null, path, true, pathFormat); - } - - #region Transactional - - /// [AlphaFS] Gets the creation date and time, in Coordinated Universal Time (UTC) format, of the specified file. - /// The transaction. - /// - /// The file for which to obtain creation date and time information, in Coordinated Universal Time (UTC) format. - /// - /// - /// A structure set to the creation date and time for the specified file. This value is expressed in UTC - /// time. - /// - [SecurityCritical] - public static DateTime GetCreationTimeUtcTransacted(KernelTransaction transaction, string path) - { - return GetCreationTimeCore(transaction, path, true, PathFormat.RelativePath); - } - - /// [AlphaFS] Gets the creation date and time, in Coordinated Universal Time (UTC) format, of the specified file. - /// The transaction. - /// - /// The file for which to obtain creation date and time information, in Coordinated Universal Time (UTC) format. - /// - /// Indicates the format of the path parameter(s). - /// - /// A structure set to the creation date and time for the specified file. This value is expressed in UTC - /// time. - /// - [SecurityCritical] - public static DateTime GetCreationTimeUtcTransacted(KernelTransaction transaction, string path, PathFormat pathFormat) - { - return GetCreationTimeCore(transaction, path, true, pathFormat); - } - - #endregion // Transacted - - #endregion // GetCreationTimeUtc - - #region Internal Methods - - /// - /// [AlphaFS] Gets the creation date and time, in Coordinated Universal Time (UTC) or local time, of the specified file or directory. - /// - /// The transaction. - /// The file or directory for which to obtain creation date and time information. - /// - /// gets the Coordinated Universal Time (UTC), gets the local time. - /// - /// Indicates the format of the path parameter(s). - /// - /// A structure set to the creation date and time for the specified file or directory. Depending on - /// this value is expressed in UTC- or local time. - /// - [SecurityCritical] - internal static DateTime GetCreationTimeCore(KernelTransaction transaction, string path, bool returnUtc, PathFormat pathFormat) - { - NativeMethods.FILETIME creationTime = GetAttributesExCore(transaction, path, pathFormat, false).ftCreationTime; - - return returnUtc - ? DateTime.FromFileTimeUtc(creationTime) - : DateTime.FromFileTime(creationTime); - } - - #endregion // Internal Methods - } -} diff --git a/AlphaFS/Filesystem/File Class/File.GetEncryptionStatus.cs b/AlphaFS/Filesystem/File Class/File.GetEncryptionStatus.cs deleted file mode 100644 index 3bdb7dc..0000000 --- a/AlphaFS/Filesystem/File Class/File.GetEncryptionStatus.cs +++ /dev/null @@ -1,76 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System; -using System.Runtime.InteropServices; -using System.Security; - -namespace Alphaleonis.Win32.Filesystem -{ - public static partial class File - { - /// [AlphaFS] Retrieves the encryption status of the specified file. - /// The name of the file. - /// Indicates the format of the path parameter(s). - /// The of the specified . - [SecurityCritical] - public static FileEncryptionStatus GetEncryptionStatus(string path, PathFormat pathFormat) - { - return GetEncryptionStatusCore(path, pathFormat); - } - - - /// [AlphaFS] Retrieves the encryption status of the specified file. - /// The name of the file. - /// The of the specified . - [SecurityCritical] - public static FileEncryptionStatus GetEncryptionStatus(string path) - { - return GetEncryptionStatusCore(path, PathFormat.RelativePath); - } - - /// Retrieves the encryption status of the specified file. - /// The name of the file. - /// Indicates the format of the path parameter(s). - /// The of the specified . - [SecurityCritical] - internal static FileEncryptionStatus GetEncryptionStatusCore(string path, PathFormat pathFormat) - { - if (pathFormat != PathFormat.LongFullPath && Utils.IsNullOrWhiteSpace(path)) - throw new ArgumentNullException("path"); - - string pathLp = Path.GetExtendedLengthPathCore(null, path, pathFormat, GetFullPathOptions.RemoveTrailingDirectorySeparator | GetFullPathOptions.FullCheck); - - FileEncryptionStatus status; - - // FileEncryptionStatus() - // In the ANSI version of this function, the name is limited to 248 characters. - // To extend this limit to 32,767 wide characters, call the Unicode version of the function and prepend "\\?\" to the path. - // 2013-01-13: MSDN does not confirm LongPath usage but a Unicode version of this function exists. - - if (!NativeMethods.FileEncryptionStatus(pathLp, out status)) - NativeError.ThrowException(Marshal.GetLastWin32Error(), pathLp); - - return status; - } - - } -} diff --git a/AlphaFS/Filesystem/File Class/File.GetFileInfoByHandleC.cs b/AlphaFS/Filesystem/File Class/File.GetFileInfoByHandleC.cs deleted file mode 100644 index de5a585..0000000 --- a/AlphaFS/Filesystem/File Class/File.GetFileInfoByHandleC.cs +++ /dev/null @@ -1,46 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using Microsoft.Win32.SafeHandles; -using System.Runtime.InteropServices; -using System.Security; - -namespace Alphaleonis.Win32.Filesystem -{ - public static partial class File - { - /// [AlphaFS] Retrieves file information for the specified . - /// A connected to the open file from which to retrieve the information. - /// A object containing the requested information. - [SecurityCritical] - public static ByHandleFileInfo GetFileInfoByHandle(SafeFileHandle handle) - { - NativeMethods.IsValidHandle(handle); - - NativeMethods.BY_HANDLE_FILE_INFORMATION info; - - if (!NativeMethods.GetFileInformationByHandle(handle, out info)) - NativeError.ThrowException(Marshal.GetLastWin32Error()); - - return new ByHandleFileInfo(info); - } - } -} diff --git a/AlphaFS/Filesystem/File Class/File.GetFileSystemEntryInfo.cs b/AlphaFS/Filesystem/File Class/File.GetFileSystemEntryInfo.cs deleted file mode 100644 index b30e4ec..0000000 --- a/AlphaFS/Filesystem/File Class/File.GetFileSystemEntryInfo.cs +++ /dev/null @@ -1,100 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System; -using System.Security; - -namespace Alphaleonis.Win32.Filesystem -{ - public static partial class File - { - #region GetFileSystemEntry - - /// [AlphaFS] Gets the of the file on the path. - /// The instance of the file or directory. - /// The path to the file or directory. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static FileSystemEntryInfo GetFileSystemEntryInfo(string path, PathFormat pathFormat) - { - return GetFileSystemEntryInfoCore(false, null, path, false, pathFormat); - } - - /// [AlphaFS] Gets the of the file on the path. - /// The instance of the file or directory. - /// The path to the file or directory. - [SecurityCritical] - public static FileSystemEntryInfo GetFileSystemEntryInfo(string path) - { - return GetFileSystemEntryInfoCore(false, null, path, false, PathFormat.RelativePath); - } - - /// [AlphaFS] Gets the of the file on the path. - /// The instance of the file or directory. - /// The transaction. - /// The path to the file or directory. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static FileSystemEntryInfo GetFileSystemEntryInfoTransacted(KernelTransaction transaction, string path, PathFormat pathFormat) - { - return GetFileSystemEntryInfoCore(false, transaction, path, false, pathFormat); - } - - /// [AlphaFS] Gets the of the file on the path. - /// The instance of the file or directory. - /// The transaction. - /// The path to the file or directory. - [SecurityCritical] - public static FileSystemEntryInfo GetFileSystemEntryInfoTransacted(KernelTransaction transaction, string path) - { - return GetFileSystemEntryInfoCore(false, transaction, path, false, PathFormat.RelativePath); - } - - #endregion // GetFileSystemEntry - - #region Internal Methods - - /// Gets a FileSystemEntryInfo from a Non-/Transacted directory/file. - /// The instance of the file or directory, or null on Exception when is true. - /// BasicSearch and LargeCache are used by default, if possible. - /// - /// - /// Specifies that is a file or directory. - /// The transaction. - /// The path to the file or directory. - /// - /// true suppress any Exception that might be thrown as a result from a failure, - /// such as ACLs protected directories or non-accessible reparse points. - /// - /// Indicates the format of the path parameter(s). - [SecurityCritical] - internal static FileSystemEntryInfo GetFileSystemEntryInfoCore(bool isFolder, KernelTransaction transaction, string path, bool continueOnException, PathFormat pathFormat) - { - // Enable BasicSearch and LargeCache by default. - var options = DirectoryEnumerationOptions.BasicSearch | DirectoryEnumerationOptions.LargeCache | (continueOnException ? DirectoryEnumerationOptions.ContinueOnException : 0); - - return (new FindFileSystemEntryInfo(isFolder, transaction, path, Path.WildcardStarMatchAll, options, typeof(FileSystemEntryInfo), pathFormat)).Get(); - } - - #endregion // Internal Methods - - } -} diff --git a/AlphaFS/Filesystem/File Class/File.GetHash.cs b/AlphaFS/Filesystem/File Class/File.GetHash.cs deleted file mode 100644 index e509397..0000000 --- a/AlphaFS/Filesystem/File Class/File.GetHash.cs +++ /dev/null @@ -1,159 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System.Globalization; -using System.IO; -using System.Security; -using System.Text; -using Alphaleonis.Win32.Security; - -namespace Alphaleonis.Win32.Filesystem -{ - public static partial class File - { - /// [AlphaFS] Calculates the hash/checksum for the given . - /// The name of the file. - /// One of the values. - [SecurityCritical] - public static string GetHash(string fileFullPath, HashType hashType) - { - return GetHashCore(null, fileFullPath, hashType, PathFormat.RelativePath); - } - - - /// [AlphaFS] Calculates the hash/checksum for the given . - /// The name of the file. - /// One of the values. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static string GetHash(string fileFullPath, HashType hashType, PathFormat pathFormat) - { - return GetHashCore(null, fileFullPath, hashType, pathFormat); - } - - - /// [AlphaFS] Calculates the hash/checksum for the given . - /// The transaction. - /// The name of the file. - /// One of the values. - [SecurityCritical] - public static string GetHash(KernelTransaction transaction, string fileFullPath, HashType hashType) - { - return GetHashCore(transaction, fileFullPath, hashType, PathFormat.RelativePath); - } - - - /// [AlphaFS] Calculates the hash/checksum for the given . - /// The transaction. - /// The name of the file. - /// One of the values. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static string GetHash(KernelTransaction transaction, string fileFullPath, HashType hashType, PathFormat pathFormat) - { - return GetHashCore(transaction, fileFullPath, hashType, pathFormat); - } - - - - - /// [AlphaFS] Calculates the hash/checksum for the given . - /// The transaction. - /// One of the values. - /// The name of the file. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - internal static string GetHashCore(KernelTransaction transaction, string fileFullPath, HashType hashType, PathFormat pathFormat) - { - var options = GetFullPathOptions.RemoveTrailingDirectorySeparator | GetFullPathOptions.FullCheck; - var fileNameLp = Path.GetExtendedLengthPathCore(transaction, fileFullPath, pathFormat, options); - - byte[] hash = null; - - - using (var fs = OpenCore(transaction, fileNameLp, FileMode.Open, FileAccess.Read, FileShare.Read, ExtendedFileAttributes.Normal, null, null, PathFormat.LongFullPath)) - { - switch (hashType) - { - case HashType.CRC32: - using (var hType = new Crc32()) - hash = hType.ComputeHash(fs); - break; - - - case HashType.CRC64ISO3309: - using (var hType = new Crc64()) - hash = hType.ComputeHash(fs); - break; - - - case HashType.MD5: - using (var hType = System.Security.Cryptography.MD5.Create()) - hash = hType.ComputeHash(fs); - break; - - - case HashType.RIPEMD160: - using (var hType = System.Security.Cryptography.RIPEMD160.Create()) - hash = hType.ComputeHash(fs); - break; - - - case HashType.SHA1: - using (var hType = System.Security.Cryptography.SHA1.Create()) - hash = hType.ComputeHash(fs); - break; - - - case HashType.SHA256: - using (var hType = System.Security.Cryptography.SHA256.Create()) - hash = hType.ComputeHash(fs); - break; - - - case HashType.SHA384: - using (var hType = System.Security.Cryptography.SHA384.Create()) - hash = hType.ComputeHash(fs); - break; - - - case HashType.SHA512: - using (var hType = System.Security.Cryptography.SHA512.Create()) - hash = hType.ComputeHash(fs); - break; - } - } - - - if (null != hash) - { - var sb = new StringBuilder(hash.Length); - - foreach (byte b in hash) - sb.Append(b.ToString("X2", CultureInfo.InvariantCulture)); - - return sb.ToString().ToUpperInvariant(); - } - - return string.Empty; - } - } -} diff --git a/AlphaFS/Filesystem/File Class/File.GetLastAccessTime.cs b/AlphaFS/Filesystem/File Class/File.GetLastAccessTime.cs deleted file mode 100644 index 4779752..0000000 --- a/AlphaFS/Filesystem/File Class/File.GetLastAccessTime.cs +++ /dev/null @@ -1,180 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System; -using System.Security; - -namespace Alphaleonis.Win32.Filesystem -{ - public static partial class File - { - #region GetLastAccessTime - - /// Gets the date and time that the specified file was last accessed. - /// The file for which to obtain access date and time information. - /// - /// A structure set to the date and time that the specified file was last accessed. This value is - /// expressed in local time. - /// - [SecurityCritical] - public static DateTime GetLastAccessTime(string path) - { - return GetLastAccessTimeCore(null, path, false, PathFormat.RelativePath).ToLocalTime(); - } - - /// [AlphaFS] Gets the date and time that the specified file was last accessed. - /// The file for which to obtain access date and time information. - /// Indicates the format of the path parameter(s). - /// - /// A structure set to the date and time that the specified file was last accessed. This value is - /// expressed in local time. - /// - [SecurityCritical] - public static DateTime GetLastAccessTime(string path, PathFormat pathFormat) - { - return GetLastAccessTimeCore(null, path, false, pathFormat).ToLocalTime(); - } - - - #region Transactional - - /// [AlphaFS] Gets the date and time that the specified file was last accessed. - /// The transaction. - /// The file for which to obtain access date and time information. - /// - /// A structure set to the date and time that the specified file was last accessed. This value is - /// expressed in local time. - /// - [SecurityCritical] - public static DateTime GetLastAccessTimeTransacted(KernelTransaction transaction, string path) - { - return GetLastAccessTimeCore(transaction, path, false, PathFormat.RelativePath).ToLocalTime(); - } - - /// [AlphaFS] Gets the date and time that the specified file was last accessed. - /// The transaction. - /// The file for which to obtain access date and time information. - /// Indicates the format of the path parameter(s). - /// - /// A structure set to the date and time that the specified file was last accessed. This value is - /// expressed in local time. - /// - [SecurityCritical] - public static DateTime GetLastAccessTimeTransacted(KernelTransaction transaction, string path, PathFormat pathFormat) - { - return GetLastAccessTimeCore(transaction, path, false, pathFormat).ToLocalTime(); - } - - - #endregion // Transacted - - #endregion - - #region GetLastAccessTimeUtc - - /// Gets the date and time, in coordinated universal time (UTC), that the specified file was last accessed. - /// The file for which to obtain access date and time information. - /// - /// A structure set to the date and time that the specified file was last accessed. This value is - /// expressed in UTC time. - /// - [SecurityCritical] - public static DateTime GetLastAccessTimeUtc(string path) - { - return GetLastAccessTimeCore(null, path, true, PathFormat.RelativePath); - } - - /// [AlphaFS] Gets the date and time, in coordinated universal time (UTC), that the specified file was last accessed. - /// The file for which to obtain access date and time information. - /// Indicates the format of the path parameter(s). - /// - /// A structure set to the date and time that the specified file was last accessed. This value is - /// expressed in UTC time. - /// - [SecurityCritical] - public static DateTime GetLastAccessTimeUtc(string path, PathFormat pathFormat) - { - return GetLastAccessTimeCore(null, path, true, pathFormat); - } - - - #region Transactional - - /// [AlphaFS] Gets the date and time, in coordinated universal time (UTC), that the specified file was last accessed. - /// The transaction. - /// The file for which to obtain access date and time information. - /// - /// A structure set to the date and time that the specified file was last accessed. This value is - /// expressed in UTC time. - /// - [SecurityCritical] - public static DateTime GetLastAccessTimeUtcTransacted(KernelTransaction transaction, string path) - { - return GetLastAccessTimeCore(transaction, path, true, PathFormat.RelativePath); - } - - /// [AlphaFS] Gets the date and time, in coordinated universal time (UTC), that the specified file was last accessed. - /// The transaction. - /// The file for which to obtain access date and time information. - /// Indicates the format of the path parameter(s). - /// - /// A structure set to the date and time that the specified file was last accessed. This value is - /// expressed in UTC time. - /// - [SecurityCritical] - public static DateTime GetLastAccessTimeUtcTransacted(KernelTransaction transaction, string path, PathFormat pathFormat) - { - return GetLastAccessTimeCore(transaction, path, true, pathFormat); - } - - #endregion // Transacted - - #endregion // GetLastAccessTimeUtc - - #region Internal Methods - - /// - /// [AlphaFS] Gets the date and time, in coordinated universal time (UTC) or local time, that the specified file or directory was last - /// accessed. - /// - /// The transaction. - /// The file or directory for which to obtain access date and time information. - /// - /// gets the Coordinated Universal Time (UTC), gets the local time. - /// - /// Indicates the format of the path parameter(s). - /// - /// A structure set to the date and time that the specified file or directory was last accessed. - /// Depending on this value is expressed in UTC- or local time. - /// - [SecurityCritical] - internal static DateTime GetLastAccessTimeCore(KernelTransaction transaction, string path, bool returnUtc, PathFormat pathFormat) - { - NativeMethods.FILETIME lastAccessTime = GetAttributesExCore(transaction, path, pathFormat, false).ftLastAccessTime; - - return returnUtc - ? DateTime.FromFileTimeUtc(lastAccessTime) - : DateTime.FromFileTime(lastAccessTime); - } - - #endregion // Internal Methods - } -} diff --git a/AlphaFS/Filesystem/File Class/File.GetLastWriteTime.cs b/AlphaFS/Filesystem/File Class/File.GetLastWriteTime.cs deleted file mode 100644 index 76a4e1d..0000000 --- a/AlphaFS/Filesystem/File Class/File.GetLastWriteTime.cs +++ /dev/null @@ -1,188 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System; -using System.Security; - -namespace Alphaleonis.Win32.Filesystem -{ - public static partial class File - { - #region GetLastWriteTime - - /// Gets the date and time that the specified file was last written to. - /// The file for which to obtain write date and time information. - /// - /// A structure set to the date and time that the specified file was last written to. This value is - /// expressed in local time. - /// - [SecurityCritical] - public static DateTime GetLastWriteTime(string path) - { - return GetLastWriteTimeCore(null, path, false, PathFormat.RelativePath).ToLocalTime(); - } - - /// [AlphaFS] Gets the date and time that the specified file was last written to. - /// The file for which to obtain write date and time information. - /// Indicates the format of the path parameter(s). - /// - /// A structure set to the date and time that the specified file was last written to. This value is - /// expressed in local time. - /// - [SecurityCritical] - public static DateTime GetLastWriteTime(string path, PathFormat pathFormat) - { - return GetLastWriteTimeCore(null, path, false, pathFormat).ToLocalTime(); - } - - - #region Transactional - - /// [AlphaFS] Gets the date and time that the specified file was last written to. - /// The transaction. - /// The file for which to obtain write date and time information. - /// - /// A structure set to the date and time that the specified file was last written to. This value is - /// expressed in local time. - /// - [SecurityCritical] - public static DateTime GetLastWriteTimeTransacted(KernelTransaction transaction, string path) - { - return GetLastWriteTimeCore(transaction, path, false, PathFormat.RelativePath).ToLocalTime(); - } - - /// [AlphaFS] Gets the date and time that the specified file was last written to. - /// The transaction. - /// The file for which to obtain write date and time information. - /// Indicates the format of the path parameter(s). - /// - /// A structure set to the date and time that the specified file was last written to. This value is - /// expressed in local time. - /// - [SecurityCritical] - public static DateTime GetLastWriteTimeTransacted(KernelTransaction transaction, string path, PathFormat pathFormat) - { - return GetLastWriteTimeCore(transaction, path, false, pathFormat).ToLocalTime(); - } - - - #endregion // Transacted - - - #endregion // GetLastWriteTime - - #region GetLastWriteTimeUtc - - /// Gets the date and time, in coordinated universal time (UTC) time, that the specified file was last written to. - /// The file for which to obtain write date and time information. - /// - /// A structure set to the date and time that the specified file was last written to. This value is - /// expressed in UTC time. - /// - [SecurityCritical] - public static DateTime GetLastWriteTimeUtc(string path) - { - return GetLastWriteTimeCore(null, path, true, PathFormat.RelativePath); - } - - /// - /// [AlphaFS] Gets the date and time, in coordinated universal time (UTC) time, that the specified file was last written to. - /// - /// The file for which to obtain write date and time information. - /// Indicates the format of the path parameter(s). - /// - /// A structure set to the date and time that the specified file was last written to. This value is - /// expressed in UTC time. - /// - [SecurityCritical] - public static DateTime GetLastWriteTimeUtc(string path, PathFormat pathFormat) - { - return GetLastWriteTimeCore(null, path, true, pathFormat); - } - - - #region Transactional - - /// - /// [AlphaFS] Gets the date and time, in coordinated universal time (UTC) time, that the specified file was last written to. - /// - /// The transaction. - /// The file for which to obtain write date and time information. - /// - /// A structure set to the date and time that the specified file was last written to. This value is - /// expressed in UTC time. - /// - [SecurityCritical] - public static DateTime GetLastWriteTimeUtcTransacted(KernelTransaction transaction, string path) - { - return GetLastWriteTimeCore(transaction, path, true, PathFormat.RelativePath); - } - - /// - /// [AlphaFS] Gets the date and time, in coordinated universal time (UTC) time, that the specified file was last written to. - /// - /// The transaction. - /// The file for which to obtain write date and time information. - /// Indicates the format of the path parameter(s). - /// - /// A structure set to the date and time that the specified file was last written to. This value is - /// expressed in UTC time. - /// - [SecurityCritical] - public static DateTime GetLastWriteTimeUtcTransacted(KernelTransaction transaction, string path, PathFormat pathFormat) - { - return GetLastWriteTimeCore(transaction, path, true, pathFormat); - } - - #endregion // Transacted - - - #endregion // GetLastWriteTimeUtc - - #region Internal Methods - - /// - /// [AlphaFS] Gets the date and time, in coordinated universal time (UTC) or local time, that the specified file or directory was last - /// written to. - /// - /// The transaction. - /// The file or directory for which to obtain write date and time information. - /// - /// gets the Coordinated Universal Time (UTC), gets the local time. - /// - /// Indicates the format of the path parameter(s). - /// - /// A structure set to the date and time that the specified file or directory was last written to. - /// Depending on this value is expressed in UTC- or local time. - /// - [SecurityCritical] - internal static DateTime GetLastWriteTimeCore(KernelTransaction transaction, string path, bool getUtc, PathFormat pathFormat) - { - NativeMethods.FILETIME lastWriteTime = GetAttributesExCore(transaction, path, pathFormat, false).ftLastWriteTime; - - return getUtc - ? DateTime.FromFileTimeUtc(lastWriteTime) - : DateTime.FromFileTime(lastWriteTime); - } - - #endregion // Internal Methods - } -} diff --git a/AlphaFS/Filesystem/File Class/File.GetLinkTargetInfo.cs b/AlphaFS/Filesystem/File Class/File.GetLinkTargetInfo.cs deleted file mode 100644 index 4697547..0000000 --- a/AlphaFS/Filesystem/File Class/File.GetLinkTargetInfo.cs +++ /dev/null @@ -1,105 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using Microsoft.Win32.SafeHandles; -using System.IO; -using System.Security; - -namespace Alphaleonis.Win32.Filesystem -{ - public static partial class File - { - #region GetLinkTargetInfo - - /// [AlphaFS] Gets information about the target of a mount point or symbolic link on an NTFS file system. - /// The path to the reparse point. - /// Indicates the format of the path parameter(s). - /// - /// An instance of or containing information about the symbolic link - /// or mount point pointed to by . - /// - [SecurityCritical] - public static LinkTargetInfo GetLinkTargetInfo(string path, PathFormat pathFormat) - { - return GetLinkTargetInfoCore(null, path, pathFormat); - } - - /// [AlphaFS] Gets information about the target of a mount point or symbolic link on an NTFS file system. - /// The path to the reparse point. - /// - /// An instance of or containing information about the symbolic link - /// or mount point pointed to by . - /// - [SecurityCritical] - public static LinkTargetInfo GetLinkTargetInfo(string path) - { - return GetLinkTargetInfoCore(null, path, PathFormat.RelativePath); - } - - /// [AlphaFS] Gets information about the target of a mount point or symbolic link on an NTFS file system. - /// The transaction. - /// The path to the reparse point. - /// Indicates the format of the path parameter(s). - /// - /// An instance of or containing information about the symbolic link - /// or mount point pointed to by . - /// - [SecurityCritical] - public static LinkTargetInfo GetLinkTargetInfoTransacted(KernelTransaction transaction, string path, PathFormat pathFormat) - { - return GetLinkTargetInfoCore(transaction, path, pathFormat); - } - - /// [AlphaFS] Gets information about the target of a mount point or symbolic link on an NTFS file system. - /// The transaction. - /// The path to the reparse point. - /// - /// An instance of or containing information about the symbolic link - /// or mount point pointed to by . - /// - [SecurityCritical] - public static LinkTargetInfo GetLinkTargetInfoTransacted(KernelTransaction transaction, string path) - { - return GetLinkTargetInfoCore(transaction, path, PathFormat.RelativePath); - } - - #endregion // GetLinkTargetInfo - - #region GetLinkTargetInfoCore - - /// Gets information about the target of a mount point or symbolic link on an NTFS file system. - /// The transaction. - /// The path to the reparse point. - /// Indicates the format of the path parameter(s). - /// - /// An instance of or containing information about the symbolic link - /// or mount point pointed to by . - /// - [SecurityCritical] - internal static LinkTargetInfo GetLinkTargetInfoCore(KernelTransaction transaction, string path, PathFormat pathFormat) - { - using (SafeFileHandle safeHandle = CreateFileCore(transaction, path, ExtendedFileAttributes.OpenReparsePoint | ExtendedFileAttributes.BackupSemantics, null, FileMode.Open, 0, FileShare.ReadWrite, true, pathFormat)) - return Device.GetLinkTargetInfoCore(safeHandle); - } - - #endregion // GetLinkTargetInfoCore - } -} diff --git a/AlphaFS/Filesystem/File Class/File.GetSize.cs b/AlphaFS/Filesystem/File Class/File.GetSize.cs deleted file mode 100644 index 95ea703..0000000 --- a/AlphaFS/Filesystem/File Class/File.GetSize.cs +++ /dev/null @@ -1,125 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using Microsoft.Win32.SafeHandles; -using System.Diagnostics.CodeAnalysis; -using System.IO; -using System.Security; -using System.Security.AccessControl; - -namespace Alphaleonis.Win32.Filesystem -{ - public static partial class File - { - #region GetSize - - /// [AlphaFS] Retrieves the file size, in bytes to store a specified file. - /// The path to the file. - /// Indicates the format of the path parameter(s). - /// The file size, in bytes. - [SecurityCritical] - public static long GetSize(string path, PathFormat pathFormat) - { - return GetSizeCore(null, null, path, pathFormat); - } - - /// [AlphaFS] Retrieves the file size, in bytes to store a specified file. - /// The path to the file. - /// The file size, in bytes. - [SecurityCritical] - public static long GetSize(string path) - { - return GetSizeCore(null, null, path, PathFormat.RelativePath); - } - - /// [AlphaFS] Retrieves the file size, in bytes to store a specified file. - /// The to the file. - /// The file size, in bytes. - [SecurityCritical] - public static long GetSize(SafeFileHandle handle) - { - return GetSizeCore(null, handle, null, PathFormat.LongFullPath); - } - - /// [AlphaFS] Retrieves the file size, in bytes to store a specified file. - /// The transaction. - /// The path to the file. - /// Indicates the format of the path parameter(s). - /// The number of bytes of disk storage used to store the specified file. - [SecurityCritical] - public static long GetSizeTransacted(KernelTransaction transaction, string path, PathFormat pathFormat) - { - return GetSizeCore(transaction, null, path, pathFormat); - } - - /// [AlphaFS] Retrieves the file size, in bytes to store a specified file. - /// The transaction. - /// The path to the file. - /// The number of bytes of disk storage used to store the specified file. - [SecurityCritical] - public static long GetSizeTransacted(KernelTransaction transaction, string path) - { - return GetSizeCore(transaction, null, path, PathFormat.RelativePath); - } - - #endregion // GetSize - - #region Internal Methods - - /// Retrieves the file size, in bytes to store a specified file. - /// Use either or , not both. - /// The transaction. - /// The to the file. - /// The path to the file. - /// Indicates the format of the path parameter(s). - /// The number of bytes of disk storage used to store the specified file. - [SuppressMessage("Microsoft.Reliability", "CA2000:Dispose objects before losing scope")] - [SecurityCritical] - internal static long GetSizeCore(KernelTransaction transaction, SafeFileHandle safeHandle, string path, PathFormat pathFormat) - { - bool callerHandle = safeHandle != null; - if (!callerHandle) - { - string pathLp = Path.GetExtendedLengthPathCore(transaction, path, pathFormat, GetFullPathOptions.RemoveTrailingDirectorySeparator | GetFullPathOptions.FullCheck); - - safeHandle = CreateFileCore(transaction, pathLp, ExtendedFileAttributes.Normal, null, FileMode.Open, FileSystemRights.ReadData, FileShare.Read, true, PathFormat.LongFullPath); - } - - - long fileSize; - - try - { - NativeMethods.GetFileSizeEx(safeHandle, out fileSize); - } - finally - { - // Handle is ours, dispose. - if (!callerHandle && safeHandle != null) - safeHandle.Close(); - } - - return fileSize; - } - - #endregion // Internal Methods - } -} diff --git a/AlphaFS/Filesystem/File Class/File.IsLocked.cs b/AlphaFS/Filesystem/File Class/File.IsLocked.cs deleted file mode 100644 index a2f83c9..0000000 --- a/AlphaFS/Filesystem/File Class/File.IsLocked.cs +++ /dev/null @@ -1,118 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System; -using System.IO; -using System.Runtime.InteropServices; -using System.Security; - -namespace Alphaleonis.Win32.Filesystem -{ - partial class File - { - /// [AlphaFS] Determines whether the specified file is in use (locked). - /// Returns if the specified file is in use (locked); otherwise, - /// - /// - /// The file to check. - [SecurityCritical] - public static bool IsLocked(string path) - { - return IsLockedCore(null, path, PathFormat.RelativePath); - } - - /// [AlphaFS] Determines whether the specified file is in use (locked). - /// Returns if the specified file is in use (locked); otherwise, - /// - /// - /// - /// The file to check. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static bool IsLocked(string path, PathFormat pathFormat) - { - return IsLockedCore(null, path, pathFormat); - } - - #region Transactional - - /// [AlphaFS] Determines whether the specified file is in use (locked). - /// Returns if the specified file is in use (locked); otherwise, - /// - /// - /// - /// The transaction. - /// The file to check. - [SecurityCritical] - public static bool IsLockedTransacted(KernelTransaction transaction, string path) - { - return IsLockedCore(transaction, path, PathFormat.RelativePath); - } - - /// [AlphaFS] Determines whether the specified file is in use (locked). - /// Returns if the specified file is in use (locked); otherwise, - /// - /// - /// - /// The transaction. - /// The file to check. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static bool IsLockedTransacted(KernelTransaction transaction, string path, PathFormat pathFormat) - { - return IsLockedCore(transaction, path, pathFormat); - } - - #endregion // Transactional - - /// [AlphaFS] Determines whether the specified file is in use (locked). - /// Returns if the specified file is in use (locked); otherwise, - /// - /// - /// - /// The transaction. - /// The file to check. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - internal static bool IsLockedCore(KernelTransaction transaction, string path, PathFormat pathFormat) - { - try - { - // Use FileAccess.Read since FileAccess.ReadWrite always fails when file is read-only. - using (OpenCore(transaction, path, FileMode.Open, FileAccess.Read, FileShare.None, ExtendedFileAttributes.Normal, null, null, pathFormat)) {} - } - catch (IOException ex) - { - int lastError = Marshal.GetHRForException(ex) & NativeMethods.OverflowExceptionBitShift; - if (lastError == Win32Errors.ERROR_SHARING_VIOLATION || lastError == Win32Errors.ERROR_LOCK_VIOLATION) - return true; - - throw; - } - catch (Exception ex) - { - NativeError.ThrowException(Marshal.GetHRForException(ex) & NativeMethods.OverflowExceptionBitShift); - } - - return false; - } - } -} diff --git a/AlphaFS/Filesystem/File Class/File.Open.cs b/AlphaFS/Filesystem/File Class/File.Open.cs deleted file mode 100644 index 5f19df6..0000000 --- a/AlphaFS/Filesystem/File Class/File.Open.cs +++ /dev/null @@ -1,1016 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using Microsoft.Win32.SafeHandles; -using System.IO; -using System.Security; -using System.Security.AccessControl; -using FileStream = System.IO.FileStream; -using System.Diagnostics.CodeAnalysis; - -namespace Alphaleonis.Win32.Filesystem -{ - partial class File - { - #region Using FileAccess - - /// Opens a on the specified path with read/write access. - /// The file to open. - /// A value that specifies whether a file is created if one does not exist, and determines whether the contents of existing files are retained or overwritten. - /// A opened in the specified mode and path, with read/write access and not shared. - [SecurityCritical] - public static FileStream Open(string path, FileMode mode) - { - return OpenCore(null, path, mode, mode == FileMode.Append ? FileAccess.Write : FileAccess.ReadWrite, FileShare.None, ExtendedFileAttributes.Normal, null, null, PathFormat.RelativePath); - } - - /// Opens a on the specified path, with the specified mode and access. - /// The file to open. - /// A value that specifies whether a file is created if one does not exist, and determines whether the contents of existing files are retained or overwritten. - /// A value that specifies the operations that can be performed on the file. - /// An unshared that provides access to the specified file, with the specified mode and access. - [SecurityCritical] - public static FileStream Open(string path, FileMode mode, FileAccess access) - { - return OpenCore(null, path, mode, access, FileShare.None, ExtendedFileAttributes.Normal, null, null, PathFormat.RelativePath); - } - - /// Opens a on the specified path, having the specified mode with read, write, or read/write access and the specified sharing option. - /// The file to open. - /// A value that specifies whether a file is created if one does not exist, and determines whether the contents of existing files are retained or overwritten. - /// A value that specifies the operations that can be performed on the file. - /// A value specifying the type of access other threads have to the file. - /// A on the specified path, having the specified mode with read, write, or read/write access and the specified sharing option. - [SecurityCritical] - public static FileStream Open(string path, FileMode mode, FileAccess access, FileShare share) - { - return OpenCore(null, path, mode, access, share, ExtendedFileAttributes.Normal, null, null, PathFormat.RelativePath); - } - - - /// [AlphaFS] Opens a on the specified path with read/write access. - /// The file to open. - /// - /// A value that specifies whether a file is created if one does not exist, and determines whether the contents - /// of existing files are retained or overwritten. - /// - /// Indicates the format of the path parameter(s). - /// A opened in the specified mode and path, with read/write access and not shared. - [SecurityCritical] - public static FileStream Open(string path, FileMode mode, PathFormat pathFormat) - { - return OpenCore(null, path, mode, mode == FileMode.Append ? FileAccess.Write : FileAccess.ReadWrite, FileShare.None, ExtendedFileAttributes.Normal, null, null, pathFormat); - } - - /// [AlphaFS] Opens a on the specified path, with the specified mode and access. - /// The file to open. - /// - /// A value that specifies whether a file is created if one does not exist, and determines whether the contents - /// of existing files are retained or overwritten. - /// - /// A value that specifies the operations that can be performed on the file. - /// Indicates the format of the path parameter(s). - /// - /// An unshared that provides access to the specified file, with the specified mode and access. - /// - [SecurityCritical] - public static FileStream Open(string path, FileMode mode, FileAccess access, PathFormat pathFormat) - { - return OpenCore(null, path, mode, access, FileShare.None, ExtendedFileAttributes.Normal, null, null, pathFormat); - } - - /// [AlphaFS] Opens a on the specified path, having the specified mode with read, write, or read/write access and the specified sharing option. - /// The file to open. - /// - /// A value that specifies whether a file is created if one does not exist, and determines whether the contents - /// of existing files are retained or overwritten. - /// - /// A value that specifies the operations that can be performed on the file. - /// A value specifying the type of access other threads have to the file. - /// Indicates the format of the path parameter(s). - /// - /// A on the specified path, having the specified mode with read, write, or read/write access and the - /// specified sharing option. - /// - [SecurityCritical] - public static FileStream Open(string path, FileMode mode, FileAccess access, FileShare share, PathFormat pathFormat) - { - return OpenCore(null, path, mode, access, share, ExtendedFileAttributes.Normal, null, null, pathFormat); - } - - /// [AlphaFS] Opens a on the specified path, having the specified mode with read, write, or read/write access and the specified sharing option. - /// The file to open. - /// - /// A value that specifies whether a file is created if one does not exist, and determines whether the contents - /// of existing files are retained or overwritten. - /// - /// A value that specifies the operations that can be performed on the file. - /// A value specifying the type of access other threads have to the file. - /// The extended attributes. - /// Indicates the format of the path parameter(s). - /// - /// A on the specified path, having the specified mode with read, write, or read/write access and the - /// specified sharing option. - /// - [SecurityCritical] - public static FileStream Open(string path, FileMode mode, FileAccess access, FileShare share, ExtendedFileAttributes extendedAttributes, PathFormat pathFormat) - { - return OpenCore(null, path, mode, access, share, extendedAttributes, null, null, pathFormat); - } - - // New below - - /// [AlphaFS] Opens a on the specified path using the specified creation mode, read/write and sharing permission, and buffer size. - /// The file to open. - /// A constant that determines how to open or create the file. - /// A value that specifies the operations that can be performed on the - /// file. - /// A constant that determines how the file will be shared by processes. - /// A positive value greater than 0 indicating the buffer size. The default buffer size is 4096. - /// - /// A on the specified path, having the specified mode with read, write, or read/write - /// access and the specified sharing option. - /// - [SecurityCritical] - public static FileStream Open(string path, FileMode mode, FileAccess access, FileShare share, int bufferSize) - { - return OpenCore(null, path, mode, access, share, ExtendedFileAttributes.Normal, bufferSize, null, PathFormat.RelativePath); - } - - /// [AlphaFS] Opens a on the specified path using the specified creation mode, read/write and sharing permission, and buffer size. - /// The file to open. - /// A constant that determines how to open or create the file. - /// A value that specifies the operations that can be performed on the - /// file. - /// A constant that determines how the file will be shared by processes. - /// A positive value greater than 0 indicating the buffer size. The - /// default buffer size is 4096. - /// Specifies whether to use asynchronous I/O or synchronous I/O. However, note that the - /// underlying operating system might not support asynchronous I/O, so when specifying true, the handle might be - /// opened synchronously depending on the platform. When opened asynchronously, the BeginRead and BeginWrite methods - /// perform better on large reads or writes, but they might be much slower for small reads or writes. If the - /// application is designed to take advantage of asynchronous I/O, set the useAsync parameter to true. Using - /// asynchronous I/O correctly can speed up applications by as much as a factor of 10, but using it without - /// redesigning the application for asynchronous I/O can decrease performance by as much as a factor of 10. - /// - /// A on the specified path, having the specified mode with read, write, or read/write - /// access and the specified sharing option. - /// - [SecurityCritical] - public static FileStream Open(string path, FileMode mode, FileAccess access, FileShare share, int bufferSize, bool useAsync) - { - return OpenCore(null, path, mode, access, share, ExtendedFileAttributes.Normal | (useAsync ? ExtendedFileAttributes.Overlapped : ExtendedFileAttributes.Normal), bufferSize, null, PathFormat.RelativePath); - } - - /// [AlphaFS] Opens a on the specified path using the specified creation mode, read/write and sharing permission, and buffer size. - /// The file to open. - /// A constant that determines how to open or create the file. - /// A value that specifies the operations that can be performed on the - /// file. - /// A constant that determines how the file will be shared by processes. - /// A positive value greater than 0 indicating the buffer size. The - /// default buffer size is 4096. - /// A value that specifies additional file options. - /// - /// A on the specified path, having the specified mode with read, write, or read/write - /// access and the specified sharing option. - /// - [SecurityCritical] - public static FileStream Open(string path, FileMode mode, FileAccess access, FileShare share, int bufferSize, FileOptions options) - { - return OpenCore(null, path, mode, access, share, (ExtendedFileAttributes) options, bufferSize, null, PathFormat.RelativePath); - } - - /// [AlphaFS] Opens a on the specified path using the specified creation mode, read/write and sharing permission, and buffer size. - /// The file to open. - /// A constant that determines how to open or create the file. - /// A value that specifies the operations that can be performed on the - /// file. - /// A constant that determines how the file will be shared by processes. - /// A positive value greater than 0 indicating the buffer size. The - /// default buffer size is 4096. - /// The extended attributes specifying additional options. - /// - /// A on the specified path, having the specified mode with read, write, or read/write - /// access and the specified sharing option. - /// - [SecurityCritical] - public static FileStream Open(string path, FileMode mode, FileAccess access, FileShare share, int bufferSize, ExtendedFileAttributes extendedAttributes) - { - return OpenCore(null, path, mode, access, share, extendedAttributes, bufferSize, null, PathFormat.RelativePath); - } - - /// [AlphaFS] Opens a on the specified path using the specified creation mode, read/write and sharing permission, and buffer size. - /// The file to open. - /// A constant that determines how to open or create the file. - /// A value that specifies the operations that can be performed on the - /// file. - /// A constant that determines how the file will be shared by processes. - /// A positive value greater than 0 indicating the buffer size. The - /// default buffer size is 4096. - /// Indicates the format of the path parameter. - /// - /// A on the specified path, having the specified mode with read, write, or read/write - /// access and the specified sharing option. - /// - [SecurityCritical] - public static FileStream Open(string path, FileMode mode, FileAccess access, FileShare share, int bufferSize, PathFormat pathFormat) - { - return OpenCore(null, path, mode, access, share, ExtendedFileAttributes.Normal, bufferSize, null, pathFormat); - } - - /// [AlphaFS] Opens a on the specified path using the specified creation mode, read/write and sharing permission, and buffer size. - /// The file to open. - /// A constant that determines how to open or create the file. - /// A value that specifies the operations that can be performed on the - /// file. - /// A constant that determines how the file will be shared by processes. - /// A positive value greater than 0 indicating the buffer size. The - /// default buffer size is 4096. - /// Specifies whether to use asynchronous I/O or synchronous I/O. However, note that the - /// underlying operating system might not support asynchronous I/O, so when specifying true, the handle might be - /// opened synchronously depending on the platform. When opened asynchronously, the BeginRead and BeginWrite methods - /// perform better on large reads or writes, but they might be much slower for small reads or writes. If the - /// application is designed to take advantage of asynchronous I/O, set the useAsync parameter to true. Using - /// asynchronous I/O correctly can speed up applications by as much as a factor of 10, but using it without - /// redesigning the application for asynchronous I/O can decrease performance by as much as a factor of 10. - /// Indicates the format of the path parameter. - /// - /// A on the specified path, having the specified mode with read, write, or read/write - /// access and the specified sharing option. - /// - [SecurityCritical] - public static FileStream Open(string path, FileMode mode, FileAccess access, FileShare share, int bufferSize, bool useAsync, PathFormat pathFormat) - { - return OpenCore(null, path, mode, access, share, ExtendedFileAttributes.Normal | (useAsync ? ExtendedFileAttributes.Overlapped : ExtendedFileAttributes.Normal), bufferSize, null, pathFormat); - } - - /// [AlphaFS] Opens a on the specified path using the specified creation mode, read/write and sharing permission, and buffer size. - /// The file to open. - /// A constant that determines how to open or create the file. - /// A value that specifies the operations that can be performed on the - /// file. - /// A constant that determines how the file will be shared by processes. - /// A positive value greater than 0 indicating the buffer size. The - /// default buffer size is 4096. - /// A value that specifies additional file options. - /// Indicates the format of the path parameter. - /// - /// A on the specified path, having the specified mode with read, write, or read/write - /// access and the specified sharing option. - /// - [SecurityCritical] - public static FileStream Open(string path, FileMode mode, FileAccess access, FileShare share, int bufferSize, FileOptions options, PathFormat pathFormat) - { - return OpenCore(null, path, mode, access, share, (ExtendedFileAttributes) options, bufferSize, null, pathFormat); - } - - /// [AlphaFS] Opens a on the specified path using the specified creation mode, read/write and sharing permission, and buffer size. - /// The file to open. - /// A constant that determines how to open or create the file. - /// A value that specifies the operations that can be performed on the - /// file. - /// A constant that determines how the file will be shared by processes. - /// A positive value greater than 0 indicating the buffer size. The - /// default buffer size is 4096. - /// The extended attributes specifying additional options. - /// Indicates the format of the path parameter. - /// - /// A on the specified path, having the specified mode with read, write, or read/write - /// access and the specified sharing option. - /// - [SecurityCritical] - public static FileStream Open(string path, FileMode mode, FileAccess access, FileShare share, int bufferSize, ExtendedFileAttributes extendedAttributes, PathFormat pathFormat) - { - return OpenCore(null, path, mode, access, share, extendedAttributes, bufferSize, null, pathFormat); - } - - #endregion // Using FileAccess - - #region Using FileSystemRights - - /// [AlphaFS] Opens a on the specified path using the specified creation mode, read/write and sharing permission, and buffer size. - /// The file to open. - /// A constant that determines how to open or create the file. - /// A value that specifies the operations that can be performed on the - /// file. - /// A constant that determines how the file will be shared by processes. - /// A positive value greater than 0 indicating the buffer size. The - /// default buffer size is 4096. - /// A value that specifies additional file options. - /// - /// A on the specified path, having the specified mode with read, write, or read/write - /// access and the specified sharing option. - /// - [SecurityCritical] - public static FileStream Open(string path, FileMode mode, FileSystemRights rights, FileShare share, int bufferSize, FileOptions options) - { - return OpenCore(null, path, mode, rights, share, (ExtendedFileAttributes)options, bufferSize, null, PathFormat.RelativePath); - } - - /// [AlphaFS] Opens a on the specified path using the specified creation mode, read/write and sharing permission, and buffer size. - /// The file to open. - /// A constant that determines how to open or create the file. - /// A value that specifies the operations that can be performed on the - /// file. - /// A constant that determines how the file will be shared by processes. - /// A positive value greater than 0 indicating the buffer size. The - /// default buffer size is 4096. - /// Extended attributes specifying additional options. - /// - /// A on the specified path, having the specified mode with read, write, or read/write - /// access and the specified sharing option. - /// - [SecurityCritical] - public static FileStream Open(string path, FileMode mode, FileSystemRights rights, FileShare share, int bufferSize, ExtendedFileAttributes extendedAttributes) - { - return OpenCore(null, path, mode, rights, share, extendedAttributes, bufferSize, null, PathFormat.RelativePath); - } - - /// [AlphaFS] Opens a on the specified path using the specified creation mode, read/write and sharing permission, and buffer size. - /// The file to open. - /// A constant that determines how to open or create the file. - /// A value that specifies the operations that can be performed on the - /// file. - /// A constant that determines how the file will be shared by processes. - /// A positive value greater than 0 indicating the buffer size. The - /// default buffer size is 4096. - /// A value that specifies additional file options. - /// A value that determines the access control and audit security for the file. - /// - /// A on the specified path, having the specified mode with read, write, or read/write - /// access and the specified sharing option. - /// - [SecurityCritical] - public static FileStream Open(string path, FileMode mode, FileSystemRights rights, FileShare share, int bufferSize, FileOptions options, FileSecurity security) - { - return OpenCore(null, path, mode, rights, share, (ExtendedFileAttributes)options, bufferSize, security, PathFormat.RelativePath); - } - - /// [AlphaFS] Opens a on the specified path using the specified creation mode, read/write and sharing permission, and buffer size. - /// The file to open. - /// A constant that determines how to open or create the file. - /// A value that specifies the operations that can be performed on the - /// file. - /// A constant that determines how the file will be shared by processes. - /// A positive value greater than 0 indicating the buffer size. The - /// default buffer size is 4096. - /// Extended attributes specifying additional options. - /// A value that determines the access control and audit security for the file. - /// - /// A on the specified path, having the specified mode with read, write, or read/write - /// access and the specified sharing option. - /// - [SecurityCritical] - public static FileStream Open(string path, FileMode mode, FileSystemRights rights, FileShare share, int bufferSize, ExtendedFileAttributes extendedAttributes, FileSecurity security) - { - return OpenCore(null, path, mode, rights, share, extendedAttributes, bufferSize, security, PathFormat.RelativePath); - } - - /// [AlphaFS] Opens a on the specified path using the specified creation mode, read/write and sharing permission, and buffer size. - /// The file to open. - /// A constant that determines how to open or create the file. - /// A value that specifies the operations that can be performed on the - /// file. - /// A constant that determines how the file will be shared by processes. - /// A positive value greater than 0 indicating the buffer size. The - /// default buffer size is 4096. - /// A value that specifies additional file options. - /// Indicates the format of the path parameter. - /// - /// A on the specified path, having the specified mode with read, write, or read/write - /// access and the specified sharing option. - /// - [SecurityCritical] - public static FileStream Open(string path, FileMode mode, FileSystemRights rights, FileShare share, int bufferSize, FileOptions options, PathFormat pathFormat) - { - return OpenCore(null, path, mode, rights, share, (ExtendedFileAttributes) options, bufferSize, null, pathFormat); - } - - /// [AlphaFS] Opens a on the specified path using the specified creation mode, read/write and sharing permission, and buffer size. - /// The file to open. - /// A constant that determines how to open or create the file. - /// A value that specifies the operations that can be performed on the - /// file. - /// A constant that determines how the file will be shared by processes. - /// A positive value greater than 0 indicating the buffer size. The - /// default buffer size is 4096. - /// Extended attributes specifying additional options. - /// Indicates the format of the path parameter. - /// - /// A on the specified path, having the specified mode with read, write, or read/write - /// access and the specified sharing option. - /// - [SecurityCritical] - public static FileStream Open(string path, FileMode mode, FileSystemRights rights, FileShare share, int bufferSize, ExtendedFileAttributes extendedAttributes, PathFormat pathFormat) - { - return OpenCore(null, path, mode, rights, share, extendedAttributes, bufferSize, null, pathFormat); - } - - /// [AlphaFS] Opens a on the specified path using the specified creation mode, access rights and sharing permission, the buffer size, additional file options, access control and audit security. - /// The file to open. - /// A constant that determines how to open or create the file. - /// A value that specifies the operations that can be performed on the - /// file. - /// A constant that determines how the file will be shared by processes. - /// A positive value greater than 0 indicating the buffer size. The - /// default buffer size is 4096. - /// A value that specifies additional file options. - /// A value that determines the access control and audit security for the file. - /// Indicates the format of the path parameter. - /// - /// A on the specified path, having the specified mode with read, write, or read/write - /// access and the specified sharing option. - /// - [SecurityCritical] - public static FileStream Open(string path, FileMode mode, FileSystemRights rights, FileShare share, int bufferSize, FileOptions options, FileSecurity security, PathFormat pathFormat) - { - return OpenCore(null, path, mode, rights, share, (ExtendedFileAttributes) options, bufferSize, security, pathFormat); - } - - /// [AlphaFS] Opens a on the specified path using the specified creation mode, access rights and sharing permission, the buffer size, additional file options, access control and audit security. - /// The file to open. - /// A constant that determines how to open or create the file. - /// A value that specifies the operations that can be performed on the - /// file. - /// A constant that determines how the file will be shared by processes. - /// A positive value greater than 0 indicating the buffer size. The - /// default buffer size is 4096. - /// Extended attributes specifying additional options. - /// A value that determines the access control and audit security for the file. - /// Indicates the format of the path parameter. - /// - /// A on the specified path, having the specified mode with read, write, or read/write - /// access and the specified sharing option. - /// - [SecurityCritical] - public static FileStream Open(string path, FileMode mode, FileSystemRights rights, FileShare share, int bufferSize, ExtendedFileAttributes extendedAttributes, FileSecurity security, PathFormat pathFormat) - { - return OpenCore(null, path, mode, rights, share, extendedAttributes, bufferSize, security, pathFormat); - } - - #endregion // Using FileSystemRights - - - #region Transactional - - /// [AlphaFS] (Transacted) Opens a on the specified path with read/write access. - /// The transaction. - /// The file to open. - /// - /// A value that specifies whether a file is created if one does not exist, and determines whether the contents - /// of existing files are retained or overwritten. - /// - /// A opened in the specified mode and path, with read/write access and not shared. - [SecurityCritical] - public static FileStream OpenTransacted(KernelTransaction transaction, string path, FileMode mode) - { - return OpenCore(transaction, path, mode, mode == FileMode.Append ? FileAccess.Write : FileAccess.ReadWrite, FileShare.None, ExtendedFileAttributes.Normal, null, null, PathFormat.RelativePath); - } - - /// [AlphaFS] (Transacted) Opens a on the specified path with read/write access. - /// The transaction. - /// The file to open. - /// - /// A value that specifies whether a file is created if one does not exist, and determines whether the contents - /// of existing files are retained or overwritten. - /// - /// Indicates the format of the path parameter(s). - /// A opened in the specified mode and path, with read/write access and not shared. - [SecurityCritical] - public static FileStream OpenTransacted(KernelTransaction transaction, string path, FileMode mode, PathFormat pathFormat) - { - return OpenCore(transaction, path, mode, mode == FileMode.Append ? FileAccess.Write : FileAccess.ReadWrite, FileShare.None, ExtendedFileAttributes.Normal, null, null, pathFormat); - } - - #region Using FileAccess - - /// [AlphaFS] (Transacted) Opens a on the specified path, with the specified mode and access. - /// The transaction. - /// The file to open. - /// - /// A value that specifies whether a file is created if one does not exist, and determines whether the contents - /// of existing files are retained or overwritten. - /// - /// A value that specifies the operations that can be performed on the file. - /// - /// An unshared that provides access to the specified file, with the specified mode and access. - /// - [SecurityCritical] - public static FileStream OpenTransacted(KernelTransaction transaction, string path, FileMode mode, FileAccess access) - { - return OpenCore(transaction, path, mode, access, FileShare.None, ExtendedFileAttributes.Normal, null, null, PathFormat.RelativePath); - } - - /// [AlphaFS] (Transacted) Opens a on the specified path, having the specified mode with read, write, or read/write access and the specified sharing option. - /// The transaction. - /// The file to open. - /// - /// A value that specifies whether a file is created if one does not exist, and determines whether the contents - /// of existing files are retained or overwritten. - /// - /// A value that specifies the operations that can be performed on the file. - /// A value specifying the type of access other threads have to the file. - /// - /// A on the specified path, having the specified mode with read, write, or read/write access and the - /// specified sharing option. - /// - [SecurityCritical] - public static FileStream OpenTransacted(KernelTransaction transaction, string path, FileMode mode, FileAccess access, FileShare share) - { - return OpenCore(transaction, path, mode, access, share, ExtendedFileAttributes.Normal, null, null, PathFormat.RelativePath); - } - - /// [AlphaFS] (Transacted) Opens a on the specified path, with the specified mode and access. - /// The transaction. - /// The file to open. - /// - /// A value that specifies whether a file is created if one does not exist, and determines whether the contents - /// of existing files are retained or overwritten. - /// - /// A value that specifies the operations that can be performed on the file. - /// Indicates the format of the path parameter(s). - /// - /// An unshared that provides access to the specified file, with the specified mode and access. - /// - [SecurityCritical] - public static FileStream OpenTransacted(KernelTransaction transaction, string path, FileMode mode, FileAccess access, PathFormat pathFormat) - { - return OpenCore(transaction, path, mode, access, FileShare.None, ExtendedFileAttributes.Normal, null, null, pathFormat); - } - - /// [AlphaFS] (Transacted) Opens a on the specified path, having the specified mode with read, write, or read/write access and the specified sharing option. - /// The transaction. - /// The file to open. - /// A value that specifies whether a file is created if one does not exist, and determines whether the contents of existing files are retained or overwritten. - /// A value that specifies the operations that can be performed on the file. - /// A value specifying the type of access other threads have to the file. - /// Indicates the format of the path parameter(s). - /// A on the specified path, having the specified mode with read, write, or read/write access and the specified sharing option. - [SecurityCritical] - public static FileStream OpenTransacted(KernelTransaction transaction, string path, FileMode mode, FileAccess access, FileShare share, PathFormat pathFormat) - { - return OpenCore(transaction, path, mode, access, share, ExtendedFileAttributes.Normal, null, null, pathFormat); - } - - /// [AlphaFS] (Transacted) Opens a on the specified path, having the specified mode with read, write, or read/write access and the specified sharing option. - /// The transaction. - /// The file to open. - /// - /// A value that specifies whether a file is created if one does not exist, and determines whether the contents - /// of existing files are retained or overwritten. - /// - /// A value that specifies the operations that can be performed on the file. - /// A value specifying the type of access other threads have to the file. - /// The extended attributes. - /// Indicates the format of the path parameter(s). - /// - /// A on the specified path, having the specified mode with read, write, or read/write access and the - /// specified sharing option. - /// - [SecurityCritical] - public static FileStream OpenTransacted(KernelTransaction transaction, string path, FileMode mode, FileAccess access, FileShare share, ExtendedFileAttributes extendedAttributes, PathFormat pathFormat) - { - return OpenCore(transaction, path, mode, access, share, extendedAttributes, null, null, pathFormat); - } - - // New below - - /// [AlphaFS] (Transacted) Opens a on the specified path using the specified creation mode, read/write and sharing permission, and buffer size. - /// The transaction. - /// The file to open. - /// A constant that determines how to open or create the file. - /// A value that specifies the operations that can be performed on the - /// file. - /// A constant that determines how the file will be shared by processes. - /// A positive value greater than 0 indicating the buffer size. The - /// default buffer size is 4096. - /// - /// A on the specified path, having the specified mode with read, write, or read/write - /// access and the specified sharing option. - /// - [SecurityCritical] - public static FileStream OpenTransacted(KernelTransaction transaction, string path, FileMode mode, FileAccess access, FileShare share, int bufferSize) - { - return OpenCore(transaction, path, mode, access, share, ExtendedFileAttributes.Normal, bufferSize, null, PathFormat.RelativePath); - } - - /// [AlphaFS] (Transacted) Opens a on the specified path using the specified creation mode, read/write and sharing permission, and buffer size. - /// The transaction. - /// The file to open. - /// A constant that determines how to open or create the file. - /// A value that specifies the operations that can be performed on the - /// file. - /// A constant that determines how the file will be shared by processes. - /// A positive value greater than 0 indicating the buffer size. The - /// default buffer size is 4096. - /// Specifies whether to use asynchronous I/O or synchronous I/O. However, note that the - /// underlying operating system might not support asynchronous I/O, so when specifying true, the handle might be - /// opened synchronously depending on the platform. When opened asynchronously, the BeginRead and BeginWrite methods - /// perform better on large reads or writes, but they might be much slower for small reads or writes. If the - /// application is designed to take advantage of asynchronous I/O, set the useAsync parameter to true. Using - /// asynchronous I/O correctly can speed up applications by as much as a factor of 10, but using it without - /// redesigning the application for asynchronous I/O can decrease performance by as much as a factor of 10. - /// - /// A on the specified path, having the specified mode with read, write, or read/write - /// access and the specified sharing option. - /// - [SecurityCritical] - public static FileStream OpenTransacted(KernelTransaction transaction, string path, FileMode mode, FileAccess access, FileShare share, int bufferSize, bool useAsync) - { - return OpenCore(transaction, path, mode, access, share, ExtendedFileAttributes.Normal | (useAsync ? ExtendedFileAttributes.Overlapped : ExtendedFileAttributes.Normal), bufferSize, null, PathFormat.RelativePath); - } - - /// [AlphaFS] (Transacted) Opens a on the specified path using the specified creation mode, read/write and sharing permission, and buffer size. - /// The transaction. - /// The file to open. - /// A constant that determines how to open or create the file. - /// A value that specifies the operations that can be performed on the - /// file. - /// A constant that determines how the file will be shared by processes. - /// A positive value greater than 0 indicating the buffer size. The - /// default buffer size is 4096. - /// A value that specifies additional file options. - /// - /// A on the specified path, having the specified mode with read, write, or read/write - /// access and the specified sharing option. - /// - [SecurityCritical] - public static FileStream OpenTransacted(KernelTransaction transaction, string path, FileMode mode, FileAccess access, FileShare share, int bufferSize, FileOptions options) - { - return OpenCore(transaction, path, mode, access, share, (ExtendedFileAttributes) options, bufferSize, null, PathFormat.RelativePath); - } - - /// [AlphaFS] (Transacted) Opens a on the specified path using the specified creation mode, read/write and sharing permission, and buffer size. - /// The transaction. - /// The file to open. - /// A constant that determines how to open or create the file. - /// A value that specifies the operations that can be performed on the - /// file. - /// A constant that determines how the file will be shared by processes. - /// A positive value greater than 0 indicating the buffer size. The - /// default buffer size is 4096. - /// The extended attributes specifying additional options. - /// - /// A on the specified path, having the specified mode with read, write, or read/write - /// access and the specified sharing option. - /// - [SecurityCritical] - public static FileStream OpenTransacted(KernelTransaction transaction, string path, FileMode mode, FileAccess access, FileShare share, int bufferSize, ExtendedFileAttributes extendedAttributes) - { - return OpenCore(transaction, path, mode, access, share, extendedAttributes, bufferSize, null, PathFormat.RelativePath); - } - - /// [AlphaFS] (Transacted) Opens a on the specified path using the specified creation mode, read/write and sharing permission, and buffer size. - /// The transaction. - /// The file to open. - /// A constant that determines how to open or create the file. - /// A value that specifies the operations that can be performed on the - /// file. - /// A constant that determines how the file will be shared by processes. - /// A positive value greater than 0 indicating the buffer size. The - /// default buffer size is 4096. - /// Indicates the format of the path parameter. - /// - /// A on the specified path, having the specified mode with read, write, or read/write - /// access and the specified sharing option. - /// - [SecurityCritical] - public static FileStream OpenTransacted(KernelTransaction transaction, string path, FileMode mode, FileAccess access, FileShare share, int bufferSize, PathFormat pathFormat) - { - return OpenCore(transaction, path, mode, access, share, ExtendedFileAttributes.Normal, bufferSize, null, pathFormat); - } - - /// [AlphaFS] (Transacted) Opens a on the specified path using the specified creation mode, read/write and sharing permission, and buffer size. - /// The transaction. - /// The file to open. - /// A constant that determines how to open or create the file. - /// A value that specifies the operations that can be performed on the - /// file. - /// A constant that determines how the file will be shared by processes. - /// A positive value greater than 0 indicating the buffer size. The - /// default buffer size is 4096. - /// Specifies whether to use asynchronous I/O or synchronous I/O. However, note that the - /// underlying operating system might not support asynchronous I/O, so when specifying true, the handle might be - /// opened synchronously depending on the platform. When opened asynchronously, the BeginRead and BeginWrite methods - /// perform better on large reads or writes, but they might be much slower for small reads or writes. If the - /// application is designed to take advantage of asynchronous I/O, set the useAsync parameter to true. Using - /// asynchronous I/O correctly can speed up applications by as much as a factor of 10, but using it without - /// redesigning the application for asynchronous I/O can decrease performance by as much as a factor of 10. - /// Indicates the format of the path parameter. - /// - /// A on the specified path, having the specified mode with read, write, or read/write - /// access and the specified sharing option. - /// - [SecurityCritical] - public static FileStream OpenTransacted(KernelTransaction transaction, string path, FileMode mode, FileAccess access, FileShare share, int bufferSize, bool useAsync, PathFormat pathFormat) - { - return OpenCore(transaction, path, mode, access, share, ExtendedFileAttributes.Normal | (useAsync ? ExtendedFileAttributes.Overlapped : ExtendedFileAttributes.Normal), bufferSize, null, pathFormat); - } - - /// [AlphaFS] (Transacted) Opens a on the specified path using the specified creation mode, read/write and sharing permission, and buffer size. - /// The transaction. - /// The file to open. - /// A constant that determines how to open or create the file. - /// A value that specifies the operations that can be performed on the - /// file. - /// A constant that determines how the file will be shared by processes. - /// A positive value greater than 0 indicating the buffer size. The - /// default buffer size is 4096. - /// A value that specifies additional file options. - /// Indicates the format of the path parameter. - /// - /// A on the specified path, having the specified mode with read, write, or read/write - /// access and the specified sharing option. - /// - [SecurityCritical] - public static FileStream OpenTransacted(KernelTransaction transaction, string path, FileMode mode, FileAccess access, FileShare share, int bufferSize, FileOptions options, PathFormat pathFormat) - { - return OpenCore(transaction, path, mode, access, share, (ExtendedFileAttributes) options, bufferSize, null, pathFormat); - } - - /// [AlphaFS] (Transacted) Opens a on the specified path using the specified creation mode, read/write and sharing permission, and buffer size. - /// The transaction. - /// The file to open. - /// A constant that determines how to open or create the file. - /// A value that specifies the operations that can be performed on the - /// file. - /// A constant that determines how the file will be shared by processes. - /// A positive value greater than 0 indicating the buffer size. The - /// default buffer size is 4096. - /// The extended attributes specifying additional options. - /// Indicates the format of the path parameter. - /// - /// A on the specified path, having the specified mode with read, write, or read/write - /// access and the specified sharing option. - /// - [SecurityCritical] - public static FileStream OpenTransacted(KernelTransaction transaction, string path, FileMode mode, FileAccess access, FileShare share, int bufferSize, ExtendedFileAttributes extendedAttributes, PathFormat pathFormat) - { - return OpenCore(transaction, path, mode, access, share, extendedAttributes, bufferSize, null, pathFormat); - } - - #endregion // Using FileAccess - - #region Using FileSystemRights - - /// [AlphaFS] (Transacted) Opens a on the specified path using the specified creation mode, read/write and sharing permission, and buffer size. - /// The transaction. - /// The file to open. - /// A constant that determines how to open or create the file. - /// A value that specifies the operations that can be performed on the - /// file. - /// A constant that determines how the file will be shared by processes. - /// A positive value greater than 0 indicating the buffer size. The - /// default buffer size is 4096. - /// A value that specifies additional file options. - /// - /// A on the specified path, having the specified mode with read, write, or read/write - /// access and the specified sharing option. - /// - [SecurityCritical] - public static FileStream OpenTransacted(KernelTransaction transaction, string path, FileMode mode, FileSystemRights rights, FileShare share, int bufferSize, FileOptions options) - { - return OpenCore(transaction, path, mode, rights, share, (ExtendedFileAttributes) options, bufferSize, null, PathFormat.RelativePath); - } - - /// [AlphaFS] (Transacted) Opens a on the specified path using the specified creation mode, read/write and sharing permission, and buffer size. - /// The transaction. - /// The file to open. - /// A constant that determines how to open or create the file. - /// A value that specifies the operations that can be performed on the - /// file. - /// A constant that determines how the file will be shared by processes. - /// A positive value greater than 0 indicating the buffer size. The - /// default buffer size is 4096. - /// Extended attributes specifying additional options. - /// - /// A on the specified path, having the specified mode with read, write, or read/write - /// access and the specified sharing option. - /// - [SecurityCritical] - public static FileStream OpenTransacted(KernelTransaction transaction, string path, FileMode mode, FileSystemRights rights, FileShare share, int bufferSize, ExtendedFileAttributes extendedAttributes) - { - return OpenCore(transaction, path, mode, rights, share, extendedAttributes, bufferSize, null, PathFormat.RelativePath); - } - - /// [AlphaFS] (Transacted) Opens a on the specified path using the specified creation mode, read/write and sharing permission, and buffer size. - /// The transaction. - /// The file to open. - /// A constant that determines how to open or create the file. - /// A value that specifies the operations that can be performed on the - /// file. - /// A constant that determines how the file will be shared by processes. - /// A positive value greater than 0 indicating the buffer size. The - /// default buffer size is 4096. - /// A value that specifies additional file options. - /// A value that determines the access control and audit security for the file. - /// - /// A on the specified path, having the specified mode with read, write, or read/write - /// access and the specified sharing option. - /// - [SecurityCritical] - public static FileStream OpenTransacted(KernelTransaction transaction, string path, FileMode mode, FileSystemRights rights, FileShare share, int bufferSize, FileOptions options, FileSecurity security) - { - return OpenCore(transaction, path, mode, rights, share, (ExtendedFileAttributes) options, bufferSize, security, PathFormat.RelativePath); - } - - /// [AlphaFS] (Transacted) Opens a on the specified path using the specified creation mode, read/write and sharing permission, and buffer size. - /// The transaction. - /// The file to open. - /// A constant that determines how to open or create the file. - /// A value that specifies the operations that can be performed on the - /// file. - /// A constant that determines how the file will be shared by processes. - /// A positive value greater than 0 indicating the buffer size. The - /// default buffer size is 4096. - /// Extended attributes specifying additional options. - /// A value that determines the access control and audit security for the file. - /// - /// A on the specified path, having the specified mode with read, write, or read/write - /// access and the specified sharing option. - /// - [SecurityCritical] - public static FileStream OpenTransacted(KernelTransaction transaction, string path, FileMode mode, FileSystemRights rights, FileShare share, int bufferSize, ExtendedFileAttributes extendedAttributes, FileSecurity security) - { - return OpenCore(transaction, path, mode, rights, share, extendedAttributes, bufferSize, security, PathFormat.RelativePath); - } - - /// [AlphaFS] (Transacted) Opens a on the specified path using the specified creation mode, read/write and sharing permission, and buffer size. - /// The transaction. - /// The file to open. - /// A constant that determines how to open or create the file. - /// A value that specifies the operations that can be performed on the - /// file. - /// A constant that determines how the file will be shared by processes. - /// A positive value greater than 0 indicating the buffer size. The - /// default buffer size is 4096. - /// A value that specifies additional file options. - /// Indicates the format of the path parameter. - /// - /// A on the specified path, having the specified mode with read, write, or read/write - /// access and the specified sharing option. - /// - [SecurityCritical] - public static FileStream OpenTransacted(KernelTransaction transaction, string path, FileMode mode, FileSystemRights rights, FileShare share, int bufferSize, FileOptions options, PathFormat pathFormat) - { - return OpenCore(transaction, path, mode, rights, share, (ExtendedFileAttributes) options, bufferSize, null, pathFormat); - } - - /// [AlphaFS] (Transacted) Opens a on the specified path using the specified creation mode, read/write and sharing permission, and buffer size. - /// The transaction. - /// The file to open. - /// A constant that determines how to open or create the file. - /// A value that specifies the operations that can be performed on the - /// file. - /// A constant that determines how the file will be shared by processes. - /// A positive value greater than 0 indicating the buffer size. The - /// default buffer size is 4096. - /// Extended attributes specifying additional options. - /// Indicates the format of the path parameter. - /// - /// A on the specified path, having the specified mode with read, write, or read/write - /// access and the specified sharing option. - /// - [SecurityCritical] - public static FileStream OpenTransacted(KernelTransaction transaction, string path, FileMode mode, FileSystemRights rights, FileShare share, int bufferSize, ExtendedFileAttributes extendedAttributes, PathFormat pathFormat) - { - return OpenCore(transaction, path, mode, rights, share, extendedAttributes, bufferSize, null, pathFormat); - } - - /// [AlphaFS] (Transacted) Opens a on the specified path using the specified creation mode, access rights and sharing permission, the buffer size, additional file options, access control and audit security. - /// The transaction. - /// The file to open. - /// A constant that determines how to open or create the file. - /// A value that specifies the operations that can be performed on the - /// file. - /// A constant that determines how the file will be shared by processes. - /// A positive value greater than 0 indicating the buffer size. The - /// default buffer size is 4096. - /// A value that specifies additional file options. - /// A value that determines the access control and audit security for the file. - /// Indicates the format of the path parameter. - /// - /// A on the specified path, having the specified mode with read, write, or read/write - /// access and the specified sharing option. - /// - [SecurityCritical] - public static FileStream OpenTransacted(KernelTransaction transaction, string path, FileMode mode, FileSystemRights rights, FileShare share, int bufferSize, FileOptions options, FileSecurity security, PathFormat pathFormat) - { - return OpenCore(transaction, path, mode, rights, share, (ExtendedFileAttributes) options, bufferSize, security, pathFormat); - } - - /// [AlphaFS] (Transacted) Opens a on the specified path using the specified creation mode, access rights and sharing permission, the buffer size, additional file options, access control and audit security. - /// The transaction. - /// The file to open. - /// A constant that determines how to open or create the file. - /// A value that specifies the operations that can be performed on the - /// file. - /// A constant that determines how the file will be shared by processes. - /// A positive value greater than 0 indicating the buffer size. The - /// default buffer size is 4096. - /// Extended attributes specifying additional options. - /// A value that determines the access control and audit security for the file. - /// Indicates the format of the path parameter. - /// - /// A on the specified path, having the specified mode with read, write, or read/write - /// access and the specified sharing option. - /// - [SecurityCritical] - public static FileStream OpenTransacted(KernelTransaction transaction, string path, FileMode mode, FileSystemRights rights, FileShare share, int bufferSize, ExtendedFileAttributes extendedAttributes, FileSecurity security, PathFormat pathFormat) - { - return OpenCore(transaction, path, mode, rights, share, extendedAttributes, bufferSize, security, pathFormat); - } - - #endregion // Using FileSystemRights - - #endregion // Transacted - - - #region Internal Methods - - /// [AlphaFS] Opens a on the specified path, having the specified mode with read, write, or read/write access, the specified sharing option and additional options specified. - /// The transaction. - /// The file to open. - /// A value that specifies whether a file is created if one does not exist, and determines whether the contents of existing files are retained or overwritten. - /// A value that specifies the operations that can be performed on the file. - /// A value specifying the type of access other threads have to the file. - /// Advanced options for this file. - /// A positive value greater than 0 indicating the buffer size. The default buffer size is 4096. - /// The security. - /// Indicates the format of the path parameter(s). - /// - /// A instance on the specified path, having the specified mode with - /// read, write, or read/write access and the specified sharing option. - /// - internal static FileStream OpenCore(KernelTransaction transaction, string path, FileMode mode, FileAccess access, FileShare share, ExtendedFileAttributes attributes, int? bufferSize, FileSecurity security, PathFormat pathFormat) - { - var rights = access == FileAccess.Read - ? FileSystemRights.Read - : (access == FileAccess.Write ? FileSystemRights.Write : FileSystemRights.Read | FileSystemRights.Write); - - - return OpenCore(transaction, path, mode, rights, share, attributes, bufferSize, security, pathFormat); - } - - /// Opens a on the specified path, having the specified mode with read, write, or read/write access, the specified sharing option and additional options specified. - /// The transaction. - /// The file to open. - /// A value that specifies whether a file is created if one does not exist, and determines whether the contents of existing files are retained or overwritten. - /// A value that specifies whether a file is created if one does not exist, and determines whether the contents of existing files are retained or overwritten along with additional options. - /// A value specifying the type of access other threads have to the file. - /// Advanced options for this file. - /// A positive value greater than 0 indicating the buffer size. The default buffer size is 4096. - /// The security. - /// Indicates the format of the path parameter(s). - /// - /// A instance on the specified path, having the specified mode with - /// read, write, or read/write access and the specified sharing option. - /// - [SuppressMessage("Microsoft.Reliability", "CA2000:Dispose objects before losing scope")] - internal static FileStream OpenCore(KernelTransaction transaction, string path, FileMode mode, FileSystemRights rights, FileShare share, ExtendedFileAttributes attributes, int? bufferSize, FileSecurity security, PathFormat pathFormat) - { - var access = ((rights & FileSystemRights.ReadData) != 0 ? FileAccess.Read : 0) | - ((rights & FileSystemRights.WriteData) != 0 || (rights & FileSystemRights.AppendData) != 0 - ? FileAccess.Write - : 0); - - - SafeFileHandle safeHandle = null; - - try - { - safeHandle = CreateFileCore(transaction, path, attributes, security, mode, rights, share, true, pathFormat); - - return new FileStream(safeHandle, access, bufferSize ?? NativeMethods.DefaultFileBufferSize, (attributes & ExtendedFileAttributes.Overlapped) != 0); - } - catch - { - if (safeHandle != null) - safeHandle.Dispose(); - - throw; - } - } - - #endregion // Internal Methods - } -} diff --git a/AlphaFS/Filesystem/File Class/File.OpenBackupRead.cs b/AlphaFS/Filesystem/File Class/File.OpenBackupRead.cs deleted file mode 100644 index 6922530..0000000 --- a/AlphaFS/Filesystem/File Class/File.OpenBackupRead.cs +++ /dev/null @@ -1,70 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System.IO; -using System.Security; -using System.Security.AccessControl; - -namespace Alphaleonis.Win32.Filesystem -{ - public static partial class File - { - /// [AlphaFS] Opens the specified file for reading purposes bypassing security attributes. - /// The file path to open. - /// Indicates the format of the path parameter(s). - /// A on the specified path, having the read-only mode and sharing options. - [SecurityCritical] - public static FileStream OpenBackupRead(string path, PathFormat pathFormat) - { - return OpenCore(null, path, FileMode.Open, FileSystemRights.ReadData, FileShare.None, ExtendedFileAttributes.BackupSemantics | ExtendedFileAttributes.SequentialScan | ExtendedFileAttributes.ReadOnly, null, null, pathFormat); - } - - /// [AlphaFS] Opens the specified file for reading purposes bypassing security attributes. This method is simpler to use then BackupFileStream to read only file's data stream. - /// The file path to open. - /// A on the specified path, having the read-only mode and sharing options. - [SecurityCritical] - public static FileStream OpenBackupRead(string path) - { - return OpenCore(null, path, FileMode.Open, FileSystemRights.ReadData, FileShare.None, ExtendedFileAttributes.BackupSemantics | ExtendedFileAttributes.SequentialScan | ExtendedFileAttributes.ReadOnly, null, null, PathFormat.RelativePath); - } - - /// [AlphaFS] Opens the specified file for reading purposes bypassing security attributes. - /// The transaction. - /// The file path to open. - /// Indicates the format of the path parameter(s). - /// A on the specified path, having the read-only mode and sharing options. - [SecurityCritical] - public static FileStream OpenBackupReadTransacted(KernelTransaction transaction, string path, PathFormat pathFormat) - { - return OpenCore(transaction, path, FileMode.Open, FileSystemRights.ReadData, FileShare.None, ExtendedFileAttributes.BackupSemantics | ExtendedFileAttributes.SequentialScan | ExtendedFileAttributes.ReadOnly, null, null, pathFormat); - } - - /// [AlphaFS] Opens the specified file for reading purposes bypassing security attributes. - /// The transaction. - /// The file path to open. - /// A on the specified path, having the read-only mode and sharing options. - [SecurityCritical] - public static FileStream OpenBackupReadTransacted(KernelTransaction transaction, string path) - { - return OpenCore(transaction, path, FileMode.Open, FileSystemRights.ReadData, FileShare.None, ExtendedFileAttributes.BackupSemantics | ExtendedFileAttributes.SequentialScan | ExtendedFileAttributes.ReadOnly, null, null, PathFormat.RelativePath); - } - } -} diff --git a/AlphaFS/Filesystem/File Class/File.OpenRead.cs b/AlphaFS/Filesystem/File Class/File.OpenRead.cs deleted file mode 100644 index 1688f6a..0000000 --- a/AlphaFS/Filesystem/File Class/File.OpenRead.cs +++ /dev/null @@ -1,86 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System.IO; -using System.Security; -using FileStream = System.IO.FileStream; - -namespace Alphaleonis.Win32.Filesystem -{ - public static partial class File - { - /// Opens an existing file for reading. - /// The file to be opened for reading. - /// A read-only on the specified path. - /// - /// This method is equivalent to the (string, FileMode, FileAccess, FileShare) constructor overload with a - /// value of Open, a value of Read and a value of Read. - /// - [SecurityCritical] - public static FileStream OpenRead(string path) - { - return Open(path, FileMode.Open, FileAccess.Read); - } - - /// [AlphaFS] Opens an existing file for reading. - /// The file to be opened for reading. - /// Indicates the format of the path parameter(s). - /// A read-only on the specified path. - /// - /// This method is equivalent to the (string, FileMode, FileAccess, FileShare) constructor overload with a - /// value of Open, a value of Read and a value of Read. - /// - [SecurityCritical] - public static FileStream OpenRead(string path, PathFormat pathFormat) - { - return Open(path, FileMode.Open, FileAccess.Read, pathFormat); - } - - /// [AlphaFS] Opens an existing file for reading. - /// The transaction. - /// The file to be opened for reading. - /// A read-only on the specified path. - /// - /// This method is equivalent to the (string, FileMode, FileAccess, FileShare) constructor overload with a - /// value of Open, a value of Read and a value of Read. - /// - [SecurityCritical] - public static FileStream OpenReadTransacted(KernelTransaction transaction, string path) - { - return OpenTransacted(transaction, path, FileMode.Open, FileAccess.Read); - } - - /// [AlphaFS] Opens an existing file for reading. - /// The transaction. - /// The file to be opened for reading. - /// Indicates the format of the path parameter(s). - /// A read-only on the specified path. - /// - /// This method is equivalent to the (string, FileMode, FileAccess, FileShare) constructor overload with a - /// value of Open, a value of Read and a value of Read. - /// - [SecurityCritical] - public static FileStream OpenReadTransacted(KernelTransaction transaction, string path, PathFormat pathFormat) - { - return OpenTransacted(transaction, path, FileMode.Open, FileAccess.Read, pathFormat); - } - } -} diff --git a/AlphaFS/Filesystem/File Class/File.OpenText.cs b/AlphaFS/Filesystem/File Class/File.OpenText.cs deleted file mode 100644 index 45ca276..0000000 --- a/AlphaFS/Filesystem/File Class/File.OpenText.cs +++ /dev/null @@ -1,128 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System.Diagnostics.CodeAnalysis; -using System.IO; -using System.Security; -using System.Text; - -namespace Alphaleonis.Win32.Filesystem -{ - public static partial class File - { - /// Opens an existing UTF-8 encoded text file for reading. - /// The file to be opened for reading. - /// A on the specified path. - /// This method is equivalent to the (String) constructor overload. - [SuppressMessage("Microsoft.Reliability", "CA2000:Dispose objects before losing scope")] - [SecurityCritical] - public static StreamReader OpenText(string path) - { - return new StreamReader(OpenRead(path), NativeMethods.DefaultFileEncoding); - } - - /// [AlphaFS] Opens an existing UTF-8 encoded text file for reading. - /// The file to be opened for reading. - /// Indicates the format of the path parameter(s). - /// A on the specified path. - /// This method is equivalent to the (String) constructor overload. - [SuppressMessage("Microsoft.Reliability", "CA2000:Dispose objects before losing scope")] - [SecurityCritical] - public static StreamReader OpenText(string path, PathFormat pathFormat) - { - return new StreamReader(OpenRead(path, pathFormat), NativeMethods.DefaultFileEncoding); - } - - /// [AlphaFS] Opens an existing encoded text file for reading. - /// The file to be opened for reading. - /// The applied to the contents of the file. - /// Indicates the format of the path parameter(s). - /// A on the specified path. - /// This method is equivalent to the (String) constructor overload. - [SuppressMessage("Microsoft.Reliability", "CA2000:Dispose objects before losing scope")] - [SecurityCritical] - public static StreamReader OpenText(string path, Encoding encoding, PathFormat pathFormat) - { - return new StreamReader(OpenRead(path, pathFormat), encoding); - } - - - /// [AlphaFS] Opens an existing encoded text file for reading. - /// The file to be opened for reading. - /// The applied to the contents of the file. - /// A on the specified path. - /// This method is equivalent to the (String) constructor overload. - [SuppressMessage("Microsoft.Reliability", "CA2000:Dispose objects before losing scope")] - [SecurityCritical] - public static StreamReader OpenText(string path, Encoding encoding) - { - return new StreamReader(OpenRead(path), encoding); - } - - /// [AlphaFS] Opens an existing UTF-8 encoded text file for reading. - /// The transaction. - /// The file to be opened for reading. - /// A on the specified path. - /// This method is equivalent to the (String) constructor overload. - [SuppressMessage("Microsoft.Reliability", "CA2000:Dispose objects before losing scope")] - public static StreamReader OpenTextTransacted(KernelTransaction transaction, string path) - { - return new StreamReader(OpenReadTransacted(transaction, path), NativeMethods.DefaultFileEncoding); - } - - /// [AlphaFS] Opens an existing UTF-8 encoded text file for reading. - /// The transaction. - /// The file to be opened for reading. - /// Indicates the format of the path parameter(s). - /// A on the specified path. - /// This method is equivalent to the (String) constructor overload. - [SuppressMessage("Microsoft.Reliability", "CA2000:Dispose objects before losing scope")] - public static StreamReader OpenTextTransacted(KernelTransaction transaction, string path, PathFormat pathFormat) - { - return new StreamReader(OpenReadTransacted(transaction, path, pathFormat), NativeMethods.DefaultFileEncoding); - } - - /// [AlphaFS] Opens an existing encoded text file for reading. - /// The transaction. - /// The file to be opened for reading. - /// The applied to the contents of the file. - /// Indicates the format of the path parameter(s). - /// A on the specified path. - /// This method is equivalent to the (String) constructor overload. - [SuppressMessage("Microsoft.Reliability", "CA2000:Dispose objects before losing scope")] - public static StreamReader OpenTextTransacted(KernelTransaction transaction, string path, Encoding encoding, PathFormat pathFormat) - { - return new StreamReader(OpenReadTransacted(transaction, path, pathFormat), encoding); - } - - /// [AlphaFS] Opens an existing encoded text file for reading. - /// The transaction. - /// The file to be opened for reading. - /// The applied to the contents of the file. - /// A on the specified path. - /// This method is equivalent to the (String) constructor overload. - [SuppressMessage("Microsoft.Reliability", "CA2000:Dispose objects before losing scope")] - public static StreamReader OpenTextTransacted(KernelTransaction transaction, string path, Encoding encoding) - { - return new StreamReader(OpenReadTransacted(transaction, path), encoding); - } - } -} diff --git a/AlphaFS/Filesystem/File Class/File.OpenWrite.cs b/AlphaFS/Filesystem/File Class/File.OpenWrite.cs deleted file mode 100644 index 7e3d140..0000000 --- a/AlphaFS/Filesystem/File Class/File.OpenWrite.cs +++ /dev/null @@ -1,73 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System.IO; -using System.Security; - -namespace Alphaleonis.Win32.Filesystem -{ - public static partial class File - { - /// Opens an existing file or creates a new file for writing. - /// The file to be opened for writing. - /// An unshared object on the specified path with access. - /// This method is equivalent to the (String, FileMode, FileAccess, FileShare) constructor overload with file mode set to OpenOrCreate, the access set to Write, and the share mode set to None. - [SecurityCritical] - public static FileStream OpenWrite(string path) - { - return Open(path, FileMode.OpenOrCreate, FileAccess.Write); - } - - /// [AlphaFS] Opens an existing file or creates a new file for writing. - /// The file to be opened for writing. - /// Indicates the format of the path parameter(s). - /// An unshared object on the specified path with access. - /// This method is equivalent to the (String, FileMode, FileAccess, FileShare) constructor overload with file mode set to OpenOrCreate, the access set to Write, and the share mode set to None. - [SecurityCritical] - public static FileStream OpenWrite(string path, PathFormat pathFormat) - { - return Open(path, FileMode.OpenOrCreate, FileAccess.Write, pathFormat); - } - - /// [AlphaFS] Opens an existing file or creates a new file for writing. - /// The transaction. - /// The file to be opened for writing. - /// An unshared object on the specified path with access. - /// This method is equivalent to the (String, FileMode, FileAccess, FileShare) constructor overload with file mode set to OpenOrCreate, the access set to Write, and the share mode set to None. - [SecurityCritical] - public static FileStream OpenWriteTransacted(KernelTransaction transaction, string path) - { - return OpenTransacted(transaction, path, FileMode.OpenOrCreate, FileAccess.Write); - } - - /// [AlphaFS] Opens an existing file or creates a new file for writing. - /// The transaction. - /// The file to be opened for writing. - /// Indicates the format of the path parameter(s). - /// An unshared object on the specified path with access. - /// This method is equivalent to the (String, FileMode, FileAccess, FileShare) constructor overload with file mode set to OpenOrCreate, the access set to Write, and the share mode set to None. - [SecurityCritical] - public static FileStream OpenWriteTransacted(KernelTransaction transaction, string path, PathFormat pathFormat) - { - return OpenTransacted(transaction, path, FileMode.OpenOrCreate, FileAccess.Write, pathFormat); - } - } -} diff --git a/AlphaFS/Filesystem/File Class/File.ReadAllBytes.cs b/AlphaFS/Filesystem/File Class/File.ReadAllBytes.cs deleted file mode 100644 index 47ec283..0000000 --- a/AlphaFS/Filesystem/File Class/File.ReadAllBytes.cs +++ /dev/null @@ -1,117 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System.Globalization; -using System.IO; -using System.Security; -using FileStream = System.IO.FileStream; - -namespace Alphaleonis.Win32.Filesystem -{ - public static partial class File - { - #region ReadAllBytes - - /// Opens a binary file, reads the contents of the file into a byte array, and then closes the file. - /// The file to open for reading. - /// A byte array containing the contents of the file. - [SecurityCritical] - public static byte[] ReadAllBytes(string path) - { - return ReadAllBytesCore(null, path, PathFormat.RelativePath); - } - - /// [AlphaFS] Opens a binary file, reads the contents of the file into a byte array, and then closes the file. - /// The file to open for reading. - /// Indicates the format of the path parameter(s). - /// A byte array containing the contents of the file. - [SecurityCritical] - public static byte[] ReadAllBytes(string path, PathFormat pathFormat) - { - return ReadAllBytesCore(null, path, pathFormat); - } - - - #region Transactional - - /// [AlphaFS] Opens a binary file, reads the contents of the file into a byte array, and then closes the file. - /// The transaction. - /// The file to open for reading. - /// A byte array containing the contents of the file. - [SecurityCritical] - public static byte[] ReadAllBytesTransacted(KernelTransaction transaction, string path) - { - return ReadAllBytesCore(transaction, path, PathFormat.RelativePath); - } - - /// [AlphaFS] Opens a binary file, reads the contents of the file into a byte array, and then closes the file. - /// The transaction. - /// The file to open for reading. - /// Indicates the format of the path parameter(s). - /// A byte array containing the contents of the file. - [SecurityCritical] - public static byte[] ReadAllBytesTransacted(KernelTransaction transaction, string path, PathFormat pathFormat) - { - return ReadAllBytesCore(transaction, path, pathFormat); - } - - #endregion // Transacted - - #endregion // ReadAllBytes - - #region Internal Methods - - /// Opens a binary file, reads the contents of the file into a byte array, and then closes the file. - /// - /// The transaction. - /// The file to open for reading. - /// Indicates the format of the path parameter(s). - /// A byte array containing the contents of the file. - [SecurityCritical] - internal static byte[] ReadAllBytesCore(KernelTransaction transaction, string path, PathFormat pathFormat) - { - byte[] buffer; - - using (FileStream fs = OpenReadTransacted(transaction, path, pathFormat)) - { - int offset = 0; - long length = fs.Length; - - if (length > int.MaxValue) - throw new IOException(string.Format(CultureInfo.CurrentCulture, "File larger than 2GB: [{0}]", path)); - - int count = (int)length; - buffer = new byte[count]; - while (count > 0) - { - int n = fs.Read(buffer, offset, count); - if (n == 0) - throw new IOException("Unexpected end of file found"); - offset += n; - count -= n; - } - } - return buffer; - } - - #endregion // Internal Methods - } -} diff --git a/AlphaFS/Filesystem/File Class/File.ReadAllLines.cs b/AlphaFS/Filesystem/File Class/File.ReadAllLines.cs deleted file mode 100644 index 0633df6..0000000 --- a/AlphaFS/Filesystem/File Class/File.ReadAllLines.cs +++ /dev/null @@ -1,148 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; -using System.IO; -using System.Linq; -using System.Security; -using System.Text; -using StreamReader = System.IO.StreamReader; - -namespace Alphaleonis.Win32.Filesystem -{ - public static partial class File - { - #region ReadAllLines - - /// Opens a text file, reads all lines of the file, and then closes the file. - /// The file to open for reading. - /// All lines of the file. - [SecurityCritical] - public static string[] ReadAllLines(string path) - { - return ReadAllLinesCore(null, path, NativeMethods.DefaultFileEncoding, PathFormat.RelativePath).ToArray(); - } - - /// Opens a file, reads all lines of the file with the specified encoding, and then closes the file. - /// The file to open for reading. - /// The applied to the contents of the file. - /// All lines of the file. - [SecurityCritical] - public static string[] ReadAllLines(string path, Encoding encoding) - { - return ReadAllLinesCore(null, path, encoding, PathFormat.RelativePath).ToArray(); - } - - /// [AlphaFS] Opens a text file, reads all lines of the file, and then closes the file. - /// The file to open for reading. - /// Indicates the format of the path parameter(s). - /// All lines of the file. - [SecurityCritical] - public static string[] ReadAllLines(string path, PathFormat pathFormat) - { - return ReadAllLinesCore(null, path, NativeMethods.DefaultFileEncoding, pathFormat).ToArray(); - } - - /// [AlphaFS] Opens a file, reads all lines of the file with the specified encoding, and then closes the file. - /// The file to open for reading. - /// The applied to the contents of the file. - /// Indicates the format of the path parameter(s). - /// All lines of the file. - [SecurityCritical] - public static string[] ReadAllLines(string path, Encoding encoding, PathFormat pathFormat) - { - return ReadAllLinesCore(null, path, encoding, pathFormat).ToArray(); - } - - #region Transactional - - /// [AlphaFS] Opens a text file, reads all lines of the file, and then closes the file. - /// The transaction. - /// The file to open for reading. - /// All lines of the file. - [SecurityCritical] - public static string[] ReadAllLinesTransacted(KernelTransaction transaction, string path) - { - return ReadAllLinesCore(transaction, path, NativeMethods.DefaultFileEncoding, PathFormat.RelativePath).ToArray(); - } - - /// [AlphaFS] Opens a file, reads all lines of the file with the specified encoding, and then closes the file. - /// The transaction. - /// The file to open for reading. - /// The applied to the contents of the file. - /// All lines of the file. - [SecurityCritical] - public static string[] ReadAllLinesTransacted(KernelTransaction transaction, string path, Encoding encoding) - { - return ReadAllLinesCore(transaction, path, encoding, PathFormat.RelativePath).ToArray(); - } - - /// [AlphaFS] Opens a text file, reads all lines of the file, and then closes the file. - /// The transaction. - /// The file to open for reading. - /// Indicates the format of the path parameter(s). - /// All lines of the file. - [SecurityCritical] - public static string[] ReadAllLinesTransacted(KernelTransaction transaction, string path, PathFormat pathFormat) - { - return ReadAllLinesCore(transaction, path, NativeMethods.DefaultFileEncoding, pathFormat).ToArray(); - } - - /// [AlphaFS] Opens a file, reads all lines of the file with the specified encoding, and then closes the file. - /// The transaction. - /// The file to open for reading. - /// The applied to the contents of the file. - /// Indicates the format of the path parameter(s). - /// All lines of the file. - [SecurityCritical] - public static string[] ReadAllLinesTransacted(KernelTransaction transaction, string path, Encoding encoding, PathFormat pathFormat) - { - return ReadAllLinesCore(transaction, path, encoding, pathFormat).ToArray(); - } - - #endregion // Transacted - - #endregion // ReadAllLines - - #region Internal Methods - - /// Opens a file, read all lines of the file with the specified encoding, and then close the file. - /// The transaction. - /// The file to open for reading. - /// The applied to the contents of the file. - /// Indicates the format of the path parameter(s). - /// An IEnumerable string containing all lines of the file. - [SuppressMessage("Microsoft.Reliability", "CA2000:Dispose objects before losing scope")] - [SecurityCritical] - internal static IEnumerable ReadAllLinesCore(KernelTransaction transaction, string path, Encoding encoding, PathFormat pathFormat) - { - using (StreamReader sr = new StreamReader(OpenCore(transaction, path, FileMode.Open, FileAccess.Read, FileShare.Read, ExtendedFileAttributes.SequentialScan, null, null, pathFormat), encoding)) - { - string line; - while ((line = sr.ReadLine()) != null) - yield return line; - } - } - - #endregion // Internal Methods - } -} diff --git a/AlphaFS/Filesystem/File Class/File.ReadAllText.cs b/AlphaFS/Filesystem/File Class/File.ReadAllText.cs deleted file mode 100644 index 938a55a..0000000 --- a/AlphaFS/Filesystem/File Class/File.ReadAllText.cs +++ /dev/null @@ -1,143 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System.Diagnostics.CodeAnalysis; -using System.IO; -using System.Security; -using System.Text; -using StreamReader = System.IO.StreamReader; - -namespace Alphaleonis.Win32.Filesystem -{ - public static partial class File - { - #region ReadAllText - - /// Opens a text file, reads all lines of the file, and then closes the file. - /// The file to open for reading. - /// All lines of the file. - [SecurityCritical] - public static string ReadAllText(string path) - { - return ReadAllTextCore(null, path, NativeMethods.DefaultFileEncoding, PathFormat.RelativePath); - } - - /// Opens a file, reads all lines of the file with the specified encoding, and then closes the file. - /// The file to open for reading. - /// The applied to the contents of the file. - /// All lines of the file. - [SecurityCritical] - public static string ReadAllText(string path, Encoding encoding) - { - return ReadAllTextCore(null, path, encoding, PathFormat.RelativePath); - } - - /// [AlphaFS] Opens a text file, reads all lines of the file, and then closes the file. - /// The file to open for reading. - /// Indicates the format of the path parameter(s). - /// All lines of the file. - [SecurityCritical] - public static string ReadAllText(string path, PathFormat pathFormat) - { - return ReadAllTextCore(null, path, NativeMethods.DefaultFileEncoding, pathFormat); - } - - /// [AlphaFS] Opens a file, reads all lines of the file with the specified encoding, and then closes the file. - /// The file to open for reading. - /// The applied to the contents of the file. - /// Indicates the format of the path parameter(s). - /// All lines of the file. - [SecurityCritical] - public static string ReadAllText(string path, Encoding encoding, PathFormat pathFormat) - { - return ReadAllTextCore(null, path, encoding, pathFormat); - } - - #region Transactional - - /// [AlphaFS] Opens a text file, reads all lines of the file, and then closes the file. - /// The transaction. - /// The file to open for reading. - /// All lines of the file. - [SecurityCritical] - public static string ReadAllTextTransacted(KernelTransaction transaction, string path) - { - return ReadAllTextCore(transaction, path, NativeMethods.DefaultFileEncoding, PathFormat.RelativePath); - } - - /// [AlphaFS] Opens a file, reads all lines of the file with the specified encoding, and then closes the file. - /// The transaction. - /// The file to open for reading. - /// The applied to the contents of the file. - /// All lines of the file. - [SecurityCritical] - public static string ReadAllTextTransacted(KernelTransaction transaction, string path, Encoding encoding) - { - return ReadAllTextCore(transaction, path, encoding, PathFormat.RelativePath); - } - - /// [AlphaFS] Opens a text file, reads all lines of the file, and then closes the file. - /// The transaction. - /// The file to open for reading. - /// Indicates the format of the path parameter(s). - /// All lines of the file. - [SecurityCritical] - public static string ReadAllTextTransacted(KernelTransaction transaction, string path, PathFormat pathFormat) - { - return ReadAllTextCore(transaction, path, NativeMethods.DefaultFileEncoding, pathFormat); - } - - /// [AlphaFS] Opens a file, reads all lines of the file with the specified encoding, and then closes the file. - /// The transaction. - /// The file to open for reading. - /// The applied to the contents of the file. - /// Indicates the format of the path parameter(s). - /// All lines of the file. - [SecurityCritical] - public static string ReadAllTextTransacted(KernelTransaction transaction, string path, Encoding encoding, PathFormat pathFormat) - { - return ReadAllTextCore(transaction, path, encoding, pathFormat); - } - - #endregion // Transacted - - #endregion // ReadAllText - - #region Internal Methods - - /// Open a file, read all lines of the file with the specified encoding, and then close the file. - /// The transaction. - /// The file to open for reading. - /// The applied to the contents of the file. - /// Indicates the format of the path parameter(s). - /// All lines of the file. - [SuppressMessage("Microsoft.Reliability", "CA2000:Dispose objects before losing scope")] - [SecurityCritical] - internal static string ReadAllTextCore(KernelTransaction transaction, string path, Encoding encoding, PathFormat pathFormat) - { - using (StreamReader sr = new StreamReader(OpenCore(transaction, path, FileMode.Open, FileAccess.Read, FileShare.Read, ExtendedFileAttributes.SequentialScan, null, null, pathFormat), encoding)) - return sr.ReadToEnd(); - } - - #endregion // Internal Methods - - } -} diff --git a/AlphaFS/Filesystem/File Class/File.ReadLines.cs b/AlphaFS/Filesystem/File Class/File.ReadLines.cs deleted file mode 100644 index e5ac433..0000000 --- a/AlphaFS/Filesystem/File Class/File.ReadLines.cs +++ /dev/null @@ -1,148 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; -using System.IO; -using System.Security; -using System.Text; -using StreamReader = System.IO.StreamReader; - -namespace Alphaleonis.Win32.Filesystem -{ - public static partial class File - { - #region ReadLines - - /// Reads the lines of a file. - /// The file to read. - /// All the lines of the file, or the lines that are the result of a query. - [SecurityCritical] - public static IEnumerable ReadLines(string path) - { - return ReadLinesCore(null, path, NativeMethods.DefaultFileEncoding, PathFormat.RelativePath); - } - - /// Read the lines of a file that has a specified encoding. - /// The file to read. - /// The encoding that is applied to the contents of the file. - /// All the lines of the file, or the lines that are the result of a query. - [SecurityCritical] - public static IEnumerable ReadLines(string path, Encoding encoding) - { - return ReadLinesCore(null, path, encoding, PathFormat.RelativePath); - } - - /// [AlphaFS] Reads the lines of a file. - /// The file to read. - /// Indicates the format of the path parameter(s). - /// All the lines of the file, or the lines that are the result of a query. - [SecurityCritical] - public static IEnumerable ReadLines(string path, PathFormat pathFormat) - { - return ReadLinesCore(null, path, NativeMethods.DefaultFileEncoding, pathFormat); - } - - /// [AlphaFS] Read the lines of a file that has a specified encoding. - /// The file to read. - /// The encoding that is applied to the contents of the file. - /// Indicates the format of the path parameter(s). - /// All the lines of the file, or the lines that are the result of a query. - [SecurityCritical] - public static IEnumerable ReadLines(string path, Encoding encoding, PathFormat pathFormat) - { - return ReadLinesCore(null, path, encoding, pathFormat); - } - - - #region Transactional - - /// [AlphaFS] Reads the lines of a file. - /// The transaction. - /// The file to read. - /// All the lines of the file, or the lines that are the result of a query. - [SecurityCritical] - public static IEnumerable ReadLinesTransacted(KernelTransaction transaction, string path) - { - return ReadLinesCore(transaction, path, NativeMethods.DefaultFileEncoding, PathFormat.RelativePath); - } - - /// [AlphaFS] Read the lines of a file that has a specified encoding. - /// The transaction. - /// The file to read. - /// The encoding that is applied to the contents of the file. - /// All the lines of the file, or the lines that are the result of a query. - [SecurityCritical] - public static IEnumerable ReadLinesTransacted(KernelTransaction transaction, string path, Encoding encoding) - { - return ReadLinesCore(transaction, path, encoding, PathFormat.RelativePath); - } - - /// [AlphaFS] Reads the lines of a file. - /// The transaction. - /// The file to read. - /// Indicates the format of the path parameter(s). - /// All the lines of the file, or the lines that are the result of a query. - [SecurityCritical] - public static IEnumerable ReadLinesTransacted(KernelTransaction transaction, string path, PathFormat pathFormat) - { - return ReadLinesCore(transaction, path, NativeMethods.DefaultFileEncoding, pathFormat); - } - - /// [AlphaFS] Read the lines of a file that has a specified encoding. - /// The transaction. - /// The file to read. - /// The encoding that is applied to the contents of the file. - /// Indicates the format of the path parameter(s). - /// All the lines of the file, or the lines that are the result of a query. - [SecurityCritical] - public static IEnumerable ReadLinesTransacted(KernelTransaction transaction, string path, Encoding encoding, PathFormat pathFormat) - { - return ReadLinesCore(transaction, path, encoding, pathFormat); - } - - #endregion // Transacted - - #endregion // ReadLines - - #region Internal Methods - - /// Reads the lines of a file that has a specified encoding. - /// The transaction. - /// The file to read. - /// The encoding that is applied to the contents of the file. - /// Indicates the format of the path parameter(s). - /// All the lines of the file, or the lines that are the result of a query. - [SuppressMessage("Microsoft.Reliability", "CA2000:Dispose objects before losing scope")] - [SecurityCritical] - internal static IEnumerable ReadLinesCore(KernelTransaction transaction, string path, Encoding encoding, PathFormat pathFormat) - { - using (StreamReader sr = new StreamReader(OpenCore(transaction, path, FileMode.Open, FileAccess.Read, FileShare.Read, ExtendedFileAttributes.SequentialScan, null, null, pathFormat), encoding)) - { - string line; - while ((line = sr.ReadLine()) != null) - yield return line; - } - } - - #endregion // Internal Methods - } -} diff --git a/AlphaFS/Filesystem/File Class/File.Replace.cs b/AlphaFS/Filesystem/File Class/File.Replace.cs deleted file mode 100644 index a796509..0000000 --- a/AlphaFS/Filesystem/File Class/File.Replace.cs +++ /dev/null @@ -1,182 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System; -using System.Diagnostics.CodeAnalysis; -using System.Runtime.InteropServices; -using System.Security; -using System.Security.AccessControl; - -namespace Alphaleonis.Win32.Filesystem -{ - public static partial class File - { - #region Replace - - /// - /// Replaces the contents of a specified file with the contents of another file, deleting the original file, and creating a backup of - /// the replaced file. - /// - /// - /// The Replace method replaces the contents of a specified file with the contents of another file. It also creates a backup of the - /// file that was replaced. - /// - /// - /// If the and are on different volumes, this method will - /// raise an exception. If the is on a different volume from the source file, the backup - /// file will be deleted. - /// - /// - /// Pass null to the parameter if you do not want to create a backup of the file being - /// replaced. - /// - /// The name of a file that replaces the file specified by . - /// The name of the file being replaced. - /// The name of the backup file. - [SecurityCritical] - public static void Replace(string sourceFileName, string destinationFileName, string destinationBackupFileName) - { - ReplaceCore(sourceFileName, destinationFileName, destinationBackupFileName, false, PathFormat.RelativePath); - } - - /// - /// Replaces the contents of a specified file with the contents of another file, deleting the original file, and creating a backup of - /// the replaced file and optionally ignores merge errors. - /// - /// - /// The Replace method replaces the contents of a specified file with the contents of another file. It also creates a backup of the - /// file that was replaced. - /// - /// - /// If the and are on different volumes, this method will - /// raise an exception. If the is on a different volume from the source file, the backup - /// file will be deleted. - /// - /// - /// Pass null to the parameter if you do not want to create a backup of the file being - /// replaced. - /// - /// The name of a file that replaces the file specified by . - /// The name of the file being replaced. - /// The name of the backup file. - /// - /// to ignore merge errors (such as attributes and access control lists (ACLs)) from the replaced file to the - /// replacement file; otherwise, . - /// - [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "dest")] - [SecurityCritical] - public static void Replace(string sourceFileName, string destinationFileName, string destinationBackupFileName, bool ignoreMetadataErrors) - { - ReplaceCore(sourceFileName, destinationFileName, destinationBackupFileName, ignoreMetadataErrors, PathFormat.RelativePath); - } - - /// - /// [AlphaFS] Replaces the contents of a specified file with the contents of another file, deleting the original file, and creating a - /// backup of the replaced file and optionally ignores merge errors. - /// - /// - /// The Replace method replaces the contents of a specified file with the contents of another file. It also creates a backup of the - /// file that was replaced. - /// - /// - /// If the and are on different volumes, this method will - /// raise an exception. If the is on a different volume from the source file, the backup - /// file will be deleted. - /// - /// - /// Pass null to the parameter if you do not want to create a backup of the file being - /// replaced. - /// - /// The name of a file that replaces the file specified by . - /// The name of the file being replaced. - /// The name of the backup file. - /// - /// to ignore merge errors (such as attributes and access control lists (ACLs)) from the replaced file to the - /// replacement file; otherwise, . - /// - /// Indicates the format of the path parameter(s). - [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "dest")] - [SecurityCritical] - public static void Replace(string sourceFileName, string destinationFileName, string destinationBackupFileName, bool ignoreMetadataErrors, PathFormat pathFormat) - { - ReplaceCore(sourceFileName, destinationFileName, destinationBackupFileName, ignoreMetadataErrors, pathFormat); - } - - #endregion // Replace - - #region ReplaceCore - - /// Replaces the contents of a specified file with the contents of another file, deleting - /// the original file, and creating a backup of the replaced file and optionally ignores merge errors. - /// - /// - /// The Replace method replaces the contents of a specified file with the contents of another file. It also creates a backup of the - /// file that was replaced. - /// - /// - /// If the and are on different volumes, this method will - /// raise an exception. If the is on a different volume from the source file, the backup - /// file will be deleted. - /// - /// - /// Pass null to the parameter if you do not want to create a backup of the file being - /// replaced. - /// - /// The name of a file that replaces the file specified by . - /// The name of the file being replaced. - /// The name of the backup file. - /// - /// to ignore merge errors (such as attributes and access control lists (ACLs)) from the replaced file to the - /// replacement file; otherwise, . - /// - /// Indicates the format of the path parameter(s). - [SecurityCritical] - internal static void ReplaceCore(string sourceFileName, string destinationFileName, string destinationBackupFileName, bool ignoreMetadataErrors, PathFormat pathFormat) - { - var options = GetFullPathOptions.RemoveTrailingDirectorySeparator | GetFullPathOptions.FullCheck; - - string sourceFileNameLp = Path.GetExtendedLengthPathCore(null, sourceFileName, pathFormat, options); - string destinationFileNameLp = Path.GetExtendedLengthPathCore(null, destinationFileName, pathFormat, options); - - // Pass null to the destinationBackupFileName parameter if you do not want to create a backup of the file being replaced. - string destinationBackupFileNameLp = destinationBackupFileName == null - ? null - : Path.GetExtendedLengthPathCore(null, destinationBackupFileName, pathFormat, options); - - const int replacefileWriteThrough = 1; - const int replacefileIgnoreMergeErrors = 2; - - FileSystemRights dwReplaceFlags = (FileSystemRights) replacefileWriteThrough; - if (ignoreMetadataErrors) - dwReplaceFlags |= (FileSystemRights) replacefileIgnoreMergeErrors; - - // ReplaceFile() - // In the ANSI version of this function, the name is limited to MAX_PATH characters. - // To extend this limit to 32,767 wide characters, call the Unicode version of the function and prepend "\\?\" to the path. - // 2013-01-13: MSDN does not confirm LongPath usage but a Unicode version of this function exists. - - if (!NativeMethods.ReplaceFile(destinationFileNameLp, sourceFileNameLp, destinationBackupFileNameLp, dwReplaceFlags, IntPtr.Zero, IntPtr.Zero)) - NativeError.ThrowException(Marshal.GetLastWin32Error(), sourceFileNameLp, destinationFileNameLp); - } - - #endregion // ReplaceCore - } -} diff --git a/AlphaFS/Filesystem/File Class/File.SetAccessControl.cs b/AlphaFS/Filesystem/File Class/File.SetAccessControl.cs deleted file mode 100644 index 611ad78..0000000 --- a/AlphaFS/Filesystem/File Class/File.SetAccessControl.cs +++ /dev/null @@ -1,264 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System; -using System.Diagnostics.CodeAnalysis; -using System.Runtime.InteropServices; -using System.Security; -using System.Security.AccessControl; -using Alphaleonis.Win32.Security; -using Microsoft.Win32.SafeHandles; - -namespace Alphaleonis.Win32.Filesystem -{ - partial class File - { - /// Applies access control list (ACL) entries described by a FileSecurity object to the specified file. - /// - /// - /// - /// A file to add or remove access control list (ACL) entries from. - /// A object that describes an ACL entry to apply to the file described by the parameter. - [SuppressMessage("Microsoft.Design", "CA1011:ConsiderPassingBaseTypesAsParameters")] - [SecurityCritical] - public static void SetAccessControl(string path, FileSecurity fileSecurity) - { - SetAccessControlCore(path, null, fileSecurity, AccessControlSections.All, PathFormat.RelativePath); - } - - /// Applies access control list (ACL) entries described by a object to the specified directory. - /// - /// - /// - /// A directory to add or remove access control list (ACL) entries from. - /// A object that describes an ACL entry to apply to the directory described by the path parameter. - /// One or more of the values that specifies the type of access control list (ACL) information to set. - [SuppressMessage("Microsoft.Design", "CA1011:ConsiderPassingBaseTypesAsParameters")] - [SecurityCritical] - public static void SetAccessControl(string path, FileSecurity fileSecurity, AccessControlSections includeSections) - { - SetAccessControlCore(path, null, fileSecurity, includeSections, PathFormat.RelativePath); - } - - - /// [AlphaFS] Applies access control list (ACL) entries described by a FileSecurity object to the specified file. - /// - /// - /// - /// A file to add or remove access control list (ACL) entries from. - /// A object that describes an ACL entry to apply to the file described by the parameter. - /// Indicates the format of the path parameter(s). - [SuppressMessage("Microsoft.Design", "CA1011:ConsiderPassingBaseTypesAsParameters")] - [SecurityCritical] - public static void SetAccessControl(string path, FileSecurity fileSecurity, PathFormat pathFormat) - { - SetAccessControlCore(path, null, fileSecurity, AccessControlSections.All, pathFormat); - } - - /// [AlphaFS] Applies access control list (ACL) entries described by a object to the specified directory. - /// - /// - /// - /// A directory to add or remove access control list (ACL) entries from. - /// A object that describes an ACL entry to apply to the directory described by the path parameter. - /// One or more of the values that specifies the type of access control list (ACL) information to set. - /// Indicates the format of the path parameter(s). - [SuppressMessage("Microsoft.Design", "CA1011:ConsiderPassingBaseTypesAsParameters")] - [SecurityCritical] - public static void SetAccessControl(string path, FileSecurity fileSecurity, AccessControlSections includeSections, PathFormat pathFormat) - { - SetAccessControlCore(path, null, fileSecurity, includeSections, pathFormat); - } - - - /// Applies access control list (ACL) entries described by a FileSecurity object to the specified file. - /// - /// - /// - /// A to a file to add or remove access control list (ACL) entries from. - /// A object that describes an ACL entry to apply to the file described by the parameter. - [SuppressMessage("Microsoft.Design", "CA1011:ConsiderPassingBaseTypesAsParameters")] - [SecurityCritical] - public static void SetAccessControl(SafeFileHandle handle, FileSecurity fileSecurity) - { - SetAccessControlCore(null, handle, fileSecurity, AccessControlSections.All, PathFormat.LongFullPath); - } - - /// Applies access control list (ACL) entries described by a FileSecurity object to the specified file. - /// - /// - /// - /// A to a file to add or remove access control list (ACL) entries from. - /// A object that describes an ACL entry to apply to the file described by the parameter. - /// One or more of the values that specifies the type of access control list (ACL) information to set. - [SuppressMessage("Microsoft.Design", "CA1011:ConsiderPassingBaseTypesAsParameters")] - [SecurityCritical] - public static void SetAccessControl(SafeFileHandle handle, FileSecurity fileSecurity, AccessControlSections includeSections) - { - SetAccessControlCore(null, handle, fileSecurity, includeSections, PathFormat.LongFullPath); - } - - - - - /// [AlphaFS] Applies access control list (ACL) entries described by a / object to the specified file or directory. - /// Use either or , not both. - /// - /// - /// - /// A file/directory to add or remove access control list (ACL) entries from. This parameter This parameter may be . - /// A to add or remove access control list (ACL) entries from. This parameter This parameter may be . - /// A / object that describes an ACL entry to apply to the file/directory described by the / parameter. - /// One or more of the values that specifies the type of access control list (ACL) information to set. - /// Indicates the format of the path parameter(s). - [SuppressMessage("Microsoft.Maintainability", "CA1502:AvoidExcessiveComplexity")] - [SecurityCritical] - internal static void SetAccessControlCore(string path, SafeFileHandle handle, ObjectSecurity objectSecurity, AccessControlSections includeSections, PathFormat pathFormat) - { - if (pathFormat == PathFormat.RelativePath) - Path.CheckSupportedPathFormat(path, true, true); - - if (objectSecurity == null) - throw new ArgumentNullException("objectSecurity"); - - - byte[] managedDescriptor = objectSecurity.GetSecurityDescriptorBinaryForm(); - - using (var safeBuffer = new SafeGlobalMemoryBufferHandle(managedDescriptor.Length)) - { - string pathLp = Path.GetExtendedLengthPathCore(null, path, pathFormat, GetFullPathOptions.RemoveTrailingDirectorySeparator | GetFullPathOptions.CheckInvalidPathChars); - - safeBuffer.CopyFrom(managedDescriptor, 0, managedDescriptor.Length); - - SecurityDescriptorControl control; - uint revision; - - if (!Security.NativeMethods.GetSecurityDescriptorControl(safeBuffer, out control, out revision)) - NativeError.ThrowException(Marshal.GetLastWin32Error(), pathLp); - - - PrivilegeEnabler privilegeEnabler = null; - - try - { - var securityInfo = SecurityInformation.None; - IntPtr pDacl = IntPtr.Zero; - - if ((includeSections & AccessControlSections.Access) != 0) - { - bool daclDefaulted, daclPresent; - - if (!Security.NativeMethods.GetSecurityDescriptorDacl(safeBuffer, out daclPresent, out pDacl, out daclDefaulted)) - NativeError.ThrowException(Marshal.GetLastWin32Error(), pathLp); - - if (daclPresent) - { - securityInfo |= SecurityInformation.Dacl; - securityInfo |= (control & SecurityDescriptorControl.DaclProtected) != 0 - ? SecurityInformation.ProtectedDacl - : SecurityInformation.UnprotectedDacl; - } - } - - - IntPtr pSacl = IntPtr.Zero; - - if ((includeSections & AccessControlSections.Audit) != 0) - { - bool saclDefaulted, saclPresent; - - if (!Security.NativeMethods.GetSecurityDescriptorSacl(safeBuffer, out saclPresent, out pSacl, out saclDefaulted)) - NativeError.ThrowException(Marshal.GetLastWin32Error(), pathLp); - - if (saclPresent) - { - securityInfo |= SecurityInformation.Sacl; - securityInfo |= (control & SecurityDescriptorControl.SaclProtected) != 0 - ? SecurityInformation.ProtectedSacl - : SecurityInformation.UnprotectedSacl; - - privilegeEnabler = new PrivilegeEnabler(Privilege.Security); - } - } - - - IntPtr pOwner = IntPtr.Zero; - - if ((includeSections & AccessControlSections.Owner) != 0) - { - bool ownerDefaulted; - - if (!Security.NativeMethods.GetSecurityDescriptorOwner(safeBuffer, out pOwner, out ownerDefaulted)) - NativeError.ThrowException(Marshal.GetLastWin32Error(), pathLp); - - if (pOwner != IntPtr.Zero) - securityInfo |= SecurityInformation.Owner; - } - - - IntPtr pGroup = IntPtr.Zero; - - if ((includeSections & AccessControlSections.Group) != 0) - { - bool groupDefaulted; - - if (!Security.NativeMethods.GetSecurityDescriptorGroup(safeBuffer, out pGroup, out groupDefaulted)) - NativeError.ThrowException(Marshal.GetLastWin32Error(), pathLp); - - if (pGroup != IntPtr.Zero) - securityInfo |= SecurityInformation.Group; - } - - - uint lastError; - - if (!Utils.IsNullOrWhiteSpace(pathLp)) - { - // SetNamedSecurityInfo() - // In the ANSI version of this function, the name is limited to MAX_PATH characters. - // To extend this limit to 32,767 wide characters, call the Unicode version of the function and prepend "\\?\" to the path. - // 2013-01-13: MSDN does not confirm LongPath usage but a Unicode version of this function exists. - - lastError = Security.NativeMethods.SetNamedSecurityInfo(pathLp, ObjectType.FileObject, securityInfo, pOwner, pGroup, pDacl, pSacl); - - if (lastError != Win32Errors.ERROR_SUCCESS) - NativeError.ThrowException(lastError, pathLp); - } - else - { - if (NativeMethods.IsValidHandle(handle)) - { - lastError = Security.NativeMethods.SetSecurityInfo(handle, ObjectType.FileObject, securityInfo, pOwner, pGroup, pDacl, pSacl); - - if (lastError != Win32Errors.ERROR_SUCCESS) - NativeError.ThrowException((int) lastError); - } - } - } - finally - { - if (privilegeEnabler != null) - privilegeEnabler.Dispose(); - } - } - } - } -} diff --git a/AlphaFS/Filesystem/File Class/File.SetAttributes.cs b/AlphaFS/Filesystem/File Class/File.SetAttributes.cs deleted file mode 100644 index d1addd0..0000000 --- a/AlphaFS/Filesystem/File Class/File.SetAttributes.cs +++ /dev/null @@ -1,172 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System; -using System.IO; -using System.Runtime.InteropServices; -using System.Security; - -namespace Alphaleonis.Win32.Filesystem -{ - public static partial class File - { - #region SetAttributes - - /// Sets the specified of the file or directory on the specified path. - /// - /// Certain file attributes, such as and , can be combined. - /// Other attributes, such as , must be used alone. - /// - /// - /// It is not possible to change the status of a File object using this method. - /// - /// The path to the file or directory. - /// A bitwise combination of the enumeration values. - /// Sets the specified of the file or directory on the specified path. - [SecurityCritical] - public static void SetAttributes(string path, FileAttributes fileAttributes) - { - SetAttributesCore(false, null, path, fileAttributes, false, PathFormat.RelativePath); - } - - /// [AlphaFS] Sets the specified of the file or directory on the specified path. - /// - /// Certain file attributes, such as and , can be combined. - /// Other attributes, such as , must be used alone. - /// - /// - /// It is not possible to change the status of a File object using this method. - /// - /// The path to the file or directory. - /// A bitwise combination of the enumeration values. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static void SetAttributes(string path, FileAttributes fileAttributes, PathFormat pathFormat) - { - SetAttributesCore(false, null, path, fileAttributes, false, pathFormat); - } - - - #region Transactional - - /// [AlphaFS] Sets the specified of the file on the specified path. - /// - /// Certain file attributes, such as and , can be combined. - /// Other attributes, such as , must be used alone. - /// - /// - /// It is not possible to change the status of a File object using this method. - /// - /// The transaction. - /// The path to the file. - /// A bitwise combination of the enumeration values. - [SecurityCritical] - public static void SetAttributesTransacted(KernelTransaction transaction, string path, FileAttributes fileAttributes) - { - SetAttributesCore(false, transaction, path, fileAttributes, false, PathFormat.RelativePath); - } - - /// [AlphaFS] Sets the specified of the file on the specified path. - /// - /// Certain file attributes, such as and , can be combined. - /// Other attributes, such as , must be used alone. - /// - /// - /// It is not possible to change the status of a File object using this method. - /// - /// The transaction. - /// The path to the file. - /// A bitwise combination of the enumeration values. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static void SetAttributesTransacted(KernelTransaction transaction, string path, FileAttributes fileAttributes, PathFormat pathFormat) - { - SetAttributesCore(false, transaction, path, fileAttributes, false, pathFormat); - } - - #endregion // Transacted - - #endregion // SetAttributes - - #region Internal Methods - - /// Sets the attributes for a Non-/Transacted file/directory. - /// - /// Certain file attributes, such as and , can be combined. - /// Other attributes, such as , must be used alone. - /// - /// - /// It is not possible to change the status of a File object using the SetAttributes method. - /// - /// - /// Specifies that is a file or directory. - /// The transaction. - /// The name of the file or directory whose attributes are to be set. - /// - /// The attributes to set for the file or directory. Note that all other values override . - /// - /// - /// does not throw an Exception when the file system object does not exist. - /// - /// Indicates the format of the path parameter(s). - [SecurityCritical] - internal static void SetAttributesCore(bool isFolder, KernelTransaction transaction, string path, FileAttributes fileAttributes, bool continueOnNotExist, PathFormat pathFormat) - { - string pathLp = Path.GetExtendedLengthPathCore(transaction, path, pathFormat, GetFullPathOptions.RemoveTrailingDirectorySeparator | GetFullPathOptions.FullCheck); - - if (!(transaction == null || !NativeMethods.IsAtLeastWindowsVista - - // SetFileAttributes() - // In the ANSI version of this function, the name is limited to MAX_PATH characters. - // To extend this limit to 32,767 wide characters, call the Unicode version of the function and prepend "\\?\" to the path. - // 2013-01-13: MSDN confirms LongPath usage. - - ? NativeMethods.SetFileAttributes(pathLp, fileAttributes) - : NativeMethods.SetFileAttributesTransacted(pathLp, fileAttributes, transaction.SafeHandle))) - { - if (continueOnNotExist) - return; - - uint lastError = (uint)Marshal.GetLastWin32Error(); - - switch (lastError) - { - // MSDN: .NET 3.5+: ArgumentException: FileSystemInfo().Attributes - case Win32Errors.ERROR_INVALID_PARAMETER: - throw new ArgumentException(Resources.Invalid_File_Attribute); - - case Win32Errors.ERROR_FILE_NOT_FOUND: - if (isFolder) - lastError = (int)Win32Errors.ERROR_PATH_NOT_FOUND; - - // MSDN: .NET 3.5+: DirectoryNotFoundException: The specified path is invalid, (for example, it is on an unmapped drive). - // MSDN: .NET 3.5+: FileNotFoundException: The file cannot be found. - NativeError.ThrowException(lastError, pathLp); - break; - } - - NativeError.ThrowException(lastError, pathLp); - } - } - - #endregion // Internal Methods - } -} diff --git a/AlphaFS/Filesystem/File Class/File.SetFileTime.cs b/AlphaFS/Filesystem/File Class/File.SetFileTime.cs deleted file mode 100644 index 30862d4..0000000 --- a/AlphaFS/Filesystem/File Class/File.SetFileTime.cs +++ /dev/null @@ -1,886 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System; -using System.IO; -using System.Security; -using System.Security.AccessControl; - -namespace Alphaleonis.Win32.Filesystem -{ - public static partial class File - { - #region SetCreationTime - - /// Sets the date and time the file was created. - /// The file for which to set the creation date and time information. - /// - /// A containing the value to set for the creation date and time of . This value - /// is expressed in local time. - /// - [SecurityCritical] - public static void SetCreationTime(string path, DateTime creationTime) - { - SetFsoDateTimeCore(false, null, path, creationTime.ToUniversalTime(), null, null, false, PathFormat.RelativePath); - } - - /// [AlphaFS] Sets the date and time the file was created. - /// The file for which to set the creation date and time information. - /// - /// A containing the value to set for the creation date and time of . This value - /// is expressed in local time. - /// - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static void SetCreationTime(string path, DateTime creationTime, PathFormat pathFormat) - { - SetFsoDateTimeCore(false, null, path, creationTime.ToUniversalTime(), null, null, false, pathFormat); - } - - /// [AlphaFS] Sets the date and time the file was created. - /// The file for which to set the creation date and time information. - /// - /// A containing the value to set for the creation date and time of . This value - /// is expressed in local time. - /// - /// If , the date and time information will apply to the reparse point (symlink or junction) and not the file or directory linked to. No effect if does not refer to a reparse point. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static void SetCreationTime(string path, DateTime creationTime, bool modifyReparsePoint, PathFormat pathFormat) - { - SetFsoDateTimeCore(false, null, path, creationTime.ToUniversalTime(), null, null, modifyReparsePoint, pathFormat); - } - - - #region Transactional - - /// [AlphaFS] Sets the date and time the file was created. - /// The transaction. - /// The file for which to set the creation date and time information. - /// - /// A containing the value to set for the creation date and time of . This value - /// is expressed in local time. - /// - [SecurityCritical] - public static void SetCreationTimeTransacted(KernelTransaction transaction, string path, DateTime creationTime) - { - SetFsoDateTimeCore(false, transaction, path, creationTime.ToUniversalTime(), null, null, false, PathFormat.RelativePath); - } - - /// [AlphaFS] Sets the date and time the file was created. - /// The transaction. - /// The file for which to set the creation date and time information. - /// - /// A containing the value to set for the creation date and time of . This value - /// is expressed in local time. - /// - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static void SetCreationTimeTransacted(KernelTransaction transaction, string path, DateTime creationTime, PathFormat pathFormat) - { - SetFsoDateTimeCore(false, transaction, path, creationTime.ToUniversalTime(), null, null, false, pathFormat); - } - - /// [AlphaFS] Sets the date and time the file was created. - /// The transaction. - /// The file for which to set the creation date and time information. - /// - /// A containing the value to set for the creation date and time of . This value - /// is expressed in local time. - /// - /// If , the date and time information will apply to the reparse point (symlink or junction) and not the file or directory linked to. No effect if does not refer to a reparse point. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static void SetCreationTimeTransacted(KernelTransaction transaction, string path, DateTime creationTime, bool modifyReparsePoint, PathFormat pathFormat) - { - SetFsoDateTimeCore(false, transaction, path, creationTime.ToUniversalTime(), null, null, modifyReparsePoint, pathFormat); - } - - - #endregion // Transacted - - #endregion // SetCreationTime - - #region SetCreationTimeUtc - - /// Sets the date and time, in coordinated universal time (UTC), that the file was created. - /// The file for which to set the creation date and time information. - /// - /// A containing the value to set for the creation date and time of . This value - /// is expressed in UTC time. - /// - [SecurityCritical] - public static void SetCreationTimeUtc(string path, DateTime creationTimeUtc) - { - SetFsoDateTimeCore(false, null, path, creationTimeUtc, null, null, false, PathFormat.RelativePath); - } - - /// [AlphaFS] Sets the date and time, in coordinated universal time (UTC), that the file was created. - /// The file for which to set the creation date and time information. - /// - /// A containing the value to set for the creation date and time of . This value - /// is expressed in UTC time. - /// - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static void SetCreationTimeUtc(string path, DateTime creationTimeUtc, PathFormat pathFormat) - { - SetFsoDateTimeCore(false, null, path, creationTimeUtc, null, null, false, pathFormat); - } - - /// [AlphaFS] Sets the date and time, in coordinated universal time (UTC), that the file was created. - /// The file for which to set the creation date and time information. - /// - /// A containing the value to set for the creation date and time of . This value - /// is expressed in UTC time. - /// - /// If , the date and time information will apply to the reparse point (symlink or junction) and not the file or directory linked to. No effect if does not refer to a reparse point. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static void SetCreationTimeUtc(string path, DateTime creationTimeUtc, bool modifyReparsePoint, PathFormat pathFormat) - { - SetFsoDateTimeCore(false, null, path, creationTimeUtc, null, null, modifyReparsePoint, pathFormat); - } - - #region Transactional - - /// [AlphaFS] Sets the date and time, in coordinated universal time (UTC), that the file was created. - /// The transaction. - /// The file for which to set the creation date and time information. - /// - /// A containing the value to set for the creation date and time of . This value - /// is expressed in UTC time. - /// - [SecurityCritical] - public static void SetCreationTimeUtcTransacted(KernelTransaction transaction, string path, DateTime creationTimeUtc) - { - SetFsoDateTimeCore(false, transaction, path, creationTimeUtc, null, null, false, PathFormat.RelativePath); - } - - /// [AlphaFS] Sets the date and time, in coordinated universal time (UTC), that the file was created. - /// The transaction. - /// The file for which to set the creation date and time information. - /// - /// A containing the value to set for the creation date and time of . This value - /// is expressed in UTC time. - /// - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static void SetCreationTimeUtcTransacted(KernelTransaction transaction, string path, DateTime creationTimeUtc, PathFormat pathFormat) - { - SetFsoDateTimeCore(false, transaction, path, creationTimeUtc, null, null, false, pathFormat); - } - - /// [AlphaFS] Sets the date and time, in coordinated universal time (UTC), that the file was created. - /// The transaction. - /// The file for which to set the creation date and time information. - /// - /// A containing the value to set for the creation date and time of . This value - /// is expressed in UTC time. - /// - /// If , the date and time information will apply to the reparse point (symlink or junction) and not the file or directory linked to. No effect if does not refer to a reparse point. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static void SetCreationTimeUtcTransacted(KernelTransaction transaction, string path, DateTime creationTimeUtc, bool modifyReparsePoint, PathFormat pathFormat) - { - SetFsoDateTimeCore(false, transaction, path, creationTimeUtc, null, null, modifyReparsePoint, pathFormat); - } - - #endregion // Transacted - - #endregion // SetCreationTimeUtc - - #region SetLastAccessTime - - /// Sets the date and time that the specified file was last accessed. - /// The file for which to set the access date and time information. - /// - /// A containing the value to set for the last access date and time of . This - /// value is expressed in local time. - /// - [SecurityCritical] - public static void SetLastAccessTime(string path, DateTime lastAccessTime) - { - SetFsoDateTimeCore(false, null, path, null, lastAccessTime.ToUniversalTime(), null, false, PathFormat.RelativePath); - } - - /// [AlphaFS] Sets the date and time that the specified file was last accessed. - /// The file for which to set the access date and time information. - /// - /// A containing the value to set for the last access date and time of . This - /// value is expressed in local time. - /// - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static void SetLastAccessTime(string path, DateTime lastAccessTime, PathFormat pathFormat) - { - SetFsoDateTimeCore(false, null, path, null, lastAccessTime.ToUniversalTime(), null, false, pathFormat); - } - - /// [AlphaFS] Sets the date and time that the specified file was last accessed. - /// The file for which to set the access date and time information. - /// - /// A containing the value to set for the last access date and time of . This - /// value is expressed in local time. - /// - /// If , the date and time information will apply to the reparse point (symlink or junction) and not the file or directory linked to. No effect if does not refer to a reparse point. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static void SetLastAccessTime(string path, DateTime lastAccessTime, bool modifyReparsePoint, PathFormat pathFormat) - { - SetFsoDateTimeCore(false, null, path, null, lastAccessTime.ToUniversalTime(), null, modifyReparsePoint, pathFormat); - } - - - #region Transaction - - /// [AlphaFS] Sets the date and time that the specified file was last accessed. - /// The transaction. - /// The file for which to set the access date and time information. - /// - /// A containing the value to set for the last access date and time of . This - /// value is expressed in local time. - /// - [SecurityCritical] - public static void SetLastAccessTimeTransacted(KernelTransaction transaction, string path, DateTime lastAccessTime) - { - SetFsoDateTimeCore(false, transaction, path, null, lastAccessTime.ToUniversalTime(), null, false, PathFormat.RelativePath); - } - - /// [AlphaFS] Sets the date and time that the specified file was last accessed. - /// The transaction. - /// The file for which to set the access date and time information. - /// - /// A containing the value to set for the last access date and time of . This - /// value is expressed in local time. - /// - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static void SetLastAccessTimeTransacted(KernelTransaction transaction, string path, DateTime lastAccessTime, PathFormat pathFormat) - { - SetFsoDateTimeCore(false, transaction, path, null, lastAccessTime.ToUniversalTime(), null, false, pathFormat); - } - - /// [AlphaFS] Sets the date and time that the specified file was last accessed. - /// The transaction. - /// The file for which to set the access date and time information. - /// - /// A containing the value to set for the last access date and time of . This - /// value is expressed in local time. - /// - /// If , the date and time information will apply to the reparse point (symlink or junction) and not the file or directory linked to. No effect if does not refer to a reparse point. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static void SetLastAccessTimeTransacted(KernelTransaction transaction, string path, DateTime lastAccessTime, bool modifyReparsePoint, PathFormat pathFormat) - { - SetFsoDateTimeCore(false, transaction, path, null, lastAccessTime.ToUniversalTime(), null, modifyReparsePoint, pathFormat); - } - - - #endregion // Transaction - - #endregion // SetLastAccessTime - - #region SetLastAccessTimeUtc - - /// Sets the date and time, in coordinated universal time (UTC), that the specified file was last accessed. - /// The file for which to set the access date and time information. - /// - /// A containing the value to set for the last access date and time of . This - /// value is expressed in UTC time. - /// - [SecurityCritical] - public static void SetLastAccessTimeUtc(string path, DateTime lastAccessTimeUtc) - { - SetFsoDateTimeCore(false, null, path, null, lastAccessTimeUtc, null, false, PathFormat.RelativePath); - } - - /// [AlphaFS] Sets the date and time, in coordinated universal time (UTC), that the specified file was last accessed. - /// The file for which to set the access date and time information. - /// - /// A containing the value to set for the last access date and time of . This - /// value is expressed in UTC time. - /// - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static void SetLastAccessTimeUtc(string path, DateTime lastAccessTimeUtc, PathFormat pathFormat) - { - SetFsoDateTimeCore(false, null, path, null, lastAccessTimeUtc, null, false, pathFormat); - } - - /// [AlphaFS] Sets the date and time, in coordinated universal time (UTC), that the specified file was last accessed. - /// The file for which to set the access date and time information. - /// - /// A containing the value to set for the last access date and time of . This - /// value is expressed in UTC time. - /// - /// If , the date and time information will apply to the reparse point (symlink or junction) and not the file or directory linked to. No effect if does not refer to a reparse point. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static void SetLastAccessTimeUtc(string path, DateTime lastAccessTimeUtc, bool modifyReparsePoint, PathFormat pathFormat) - { - SetFsoDateTimeCore(false, null, path, null, lastAccessTimeUtc, null, modifyReparsePoint, pathFormat); - } - - - #region Transactional - - /// [AlphaFS] Sets the date and time, in coordinated universal time (UTC), that the specified file was last accessed. - /// The transaction. - /// The file for which to set the access date and time information. - /// - /// A containing the value to set for the last access date and time of . This - /// value is expressed in UTC time. - /// - [SecurityCritical] - public static void SetLastAccessTimeUtcTransacted(KernelTransaction transaction, string path, DateTime lastAccessTimeUtc) - { - SetFsoDateTimeCore(false, transaction, path, null, lastAccessTimeUtc, null, false, PathFormat.RelativePath); - } - - - /// [AlphaFS] Sets the date and time, in coordinated universal time (UTC), that the specified file was last accessed. - /// The transaction. - /// The file for which to set the access date and time information. - /// - /// A containing the value to set for the last access date and time of . This - /// value is expressed in UTC time. - /// - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static void SetLastAccessTimeUtcTransacted(KernelTransaction transaction, string path, DateTime lastAccessTimeUtc, PathFormat pathFormat) - { - SetFsoDateTimeCore(false, transaction, path, null, lastAccessTimeUtc, null, false, pathFormat); - } - - /// [AlphaFS] Sets the date and time, in coordinated universal time (UTC), that the specified file was last accessed. - /// The transaction. - /// The file for which to set the access date and time information. - /// - /// A containing the value to set for the last access date and time of . This - /// value is expressed in UTC time. - /// - /// If , the date and time information will apply to the reparse point (symlink or junction) and not the file or directory linked to. No effect if does not refer to a reparse point. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static void SetLastAccessTimeUtcTransacted(KernelTransaction transaction, string path, DateTime lastAccessTimeUtc, bool modifyReparsePoint, PathFormat pathFormat) - { - SetFsoDateTimeCore(false, transaction, path, null, lastAccessTimeUtc, null, modifyReparsePoint, pathFormat); - } - - - #endregion // Transacted - - #endregion // SetLastAccessTimeUtc - - #region SetLastWriteTime - - /// Sets the date and time that the specified file was last written to. - /// The file for which to set the date and time information. - /// - /// A containing the value to set for the last write date and time of . This value - /// is expressed in local time. - /// - [SecurityCritical] - public static void SetLastWriteTime(string path, DateTime lastWriteTime) - { - SetFsoDateTimeCore(false, null, path, null, null, lastWriteTime.ToUniversalTime(), false, PathFormat.RelativePath); - } - - /// [AlphaFS] Sets the date and time that the specified file was last written to. - /// The file for which to set the date and time information. - /// - /// A containing the value to set for the last write date and time of . This value - /// is expressed in local time. - /// - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static void SetLastWriteTime(string path, DateTime lastWriteTime, PathFormat pathFormat) - { - SetFsoDateTimeCore(false, null, path, null, null, lastWriteTime.ToUniversalTime(), false, pathFormat); - } - - /// [AlphaFS] Sets the date and time that the specified file was last written to. - /// The file for which to set the date and time information. - /// - /// A containing the value to set for the last write date and time of . This value - /// is expressed in local time. - /// - /// If , the date and time information will apply to the reparse point (symlink or junction) and not the file or directory linked to. No effect if does not refer to a reparse point. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static void SetLastWriteTime(string path, DateTime lastWriteTime, bool modifyReparsePoint, PathFormat pathFormat) - { - SetFsoDateTimeCore(false, null, path, null, null, lastWriteTime.ToUniversalTime(), modifyReparsePoint, pathFormat); - } - - #region Transactional - - /// [AlphaFS] Sets the date and time that the specified file was last written to. - /// The transaction. - /// The file for which to set the date and time information. - /// - /// A containing the value to set for the last write date and time of . This value - /// is expressed in local time. - /// - [SecurityCritical] - public static void SetLastWriteTimeTransacted(KernelTransaction transaction, string path, DateTime lastWriteTime) - { - SetFsoDateTimeCore(false, transaction, path, null, null, lastWriteTime.ToUniversalTime(), false, PathFormat.RelativePath); - } - - /// [AlphaFS] Sets the date and time that the specified file was last written to. - /// The transaction. - /// The file for which to set the date and time information. - /// - /// A containing the value to set for the last write date and time of . This value - /// is expressed in local time. - /// - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static void SetLastWriteTimeTransacted(KernelTransaction transaction, string path, DateTime lastWriteTime, PathFormat pathFormat) - { - SetFsoDateTimeCore(false, transaction, path, null, null, lastWriteTime.ToUniversalTime(), false, pathFormat); - } - - /// [AlphaFS] Sets the date and time that the specified file was last written to. - /// The transaction. - /// The file for which to set the date and time information. - /// - /// A containing the value to set for the last write date and time of . This value - /// is expressed in local time. - /// - /// If , the date and time information will apply to the reparse point (symlink or junction) and not the file or directory linked to. No effect if does not refer to a reparse point. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static void SetLastWriteTimeTransacted(KernelTransaction transaction, string path, DateTime lastWriteTime, bool modifyReparsePoint, PathFormat pathFormat) - { - SetFsoDateTimeCore(false, transaction, path, null, null, lastWriteTime.ToUniversalTime(), modifyReparsePoint, pathFormat); - } - - - #endregion // Transacted - - #endregion // SetLastWriteTime - - #region SetLastWriteTimeUtc - - /// Sets the date and time, in coordinated universal time (UTC), that the specified file was last written to. - /// The file for which to set the date and time information. - /// - /// A containing the value to set for the last write date and time of . This value - /// is expressed in UTC time. - /// - [SecurityCritical] - public static void SetLastWriteTimeUtc(string path, DateTime lastWriteTimeUtc) - { - SetFsoDateTimeCore(false, null, path, null, null, lastWriteTimeUtc, false, PathFormat.RelativePath); - } - - /// - /// [AlphaFS] Sets the date and time, in coordinated universal time (UTC), that the specified file was last written to. - /// - /// The file for which to set the date and time information. - /// - /// A containing the value to set for the last write date and time of . This value - /// is expressed in UTC time. - /// - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static void SetLastWriteTimeUtc(string path, DateTime lastWriteTimeUtc, PathFormat pathFormat) - { - SetFsoDateTimeCore(false, null, path, null, null, lastWriteTimeUtc, false, pathFormat); - } - - /// - /// [AlphaFS] Sets the date and time, in coordinated universal time (UTC), that the specified file was last written to. - /// - /// The file for which to set the date and time information. - /// - /// A containing the value to set for the last write date and time of . This value - /// is expressed in UTC time. - /// - /// If , the date and time information will apply to the reparse point (symlink or junction) and not the file or directory linked to. No effect if does not refer to a reparse point. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static void SetLastWriteTimeUtc(string path, DateTime lastWriteTimeUtc, bool modifyReparsePoint, PathFormat pathFormat) - { - SetFsoDateTimeCore(false, null, path, null, null, lastWriteTimeUtc, modifyReparsePoint, pathFormat); - } - - #region Transactional - - /// - /// [AlphaFS] Sets the date and time, in coordinated universal time (UTC), that the specified file was last written to. - /// - /// The transaction. - /// The file for which to set the date and time information. - /// - /// A containing the value to set for the last write date and time of . This value - /// is expressed in UTC time. - /// - [SecurityCritical] - public static void SetLastWriteTimeUtcTransacted(KernelTransaction transaction, string path, DateTime lastWriteTimeUtc) - { - SetFsoDateTimeCore(false, transaction, path, null, null, lastWriteTimeUtc, false, PathFormat.RelativePath); - } - - /// - /// [AlphaFS] Sets the date and time, in coordinated universal time (UTC), that the specified file was last written to. - /// - /// The transaction. - /// The file for which to set the date and time information. - /// - /// A containing the value to set for the last write date and time of . This value - /// is expressed in UTC time. - /// - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static void SetLastWriteTimeUtcTransacted(KernelTransaction transaction, string path, DateTime lastWriteTimeUtc, PathFormat pathFormat) - { - SetFsoDateTimeCore(false, transaction, path, null, null, lastWriteTimeUtc, false, pathFormat); - } - - /// - /// [AlphaFS] Sets the date and time, in coordinated universal time (UTC), that the specified file was last written to. - /// - /// The transaction. - /// The file for which to set the date and time information. - /// - /// A containing the value to set for the last write date and time of . This value - /// is expressed in UTC time. - /// - /// If , the date and time information will apply to the reparse point (symlink or junction) and not the file or directory linked to. No effect if does not refer to a reparse point. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static void SetLastWriteTimeUtcTransacted(KernelTransaction transaction, string path, DateTime lastWriteTimeUtc, bool modifyReparsePoint, PathFormat pathFormat) - { - SetFsoDateTimeCore(false, transaction, path, null, null, lastWriteTimeUtc, modifyReparsePoint, pathFormat); - } - - - #endregion // Transacted - - - #endregion // SetLastWriteTimeUtc - - #region SetTimestamps - - /// [AlphaFS] Sets all the date and time stamps for the specified file, at once. - /// The file for which to set the dates and times information. - /// - /// A containing the value to set for the creation date and time of . This value - /// is expressed in local time. - /// - /// - /// A containing the value to set for the last access date and time of . This - /// value is expressed in local time. - /// - /// - /// A containing the value to set for the last write date and time of . This value - /// is expressed in local time. - /// - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static void SetTimestamps(string path, DateTime creationTime, DateTime lastAccessTime, DateTime lastWriteTime, PathFormat pathFormat) - { - SetFsoDateTimeCore(false, null, path, creationTime.ToUniversalTime(), lastAccessTime.ToUniversalTime(), lastWriteTime.ToUniversalTime(), false, pathFormat); - } - - /// [AlphaFS] Sets all the date and time stamps for the specified file, at once. - /// The file for which to set the dates and times information. - /// - /// A containing the value to set for the creation date and time of . This value - /// is expressed in local time. - /// - /// - /// A containing the value to set for the last access date and time of . This - /// value is expressed in local time. - /// - /// - /// A containing the value to set for the last write date and time of . This value - /// is expressed in local time. - /// - [SecurityCritical] - public static void SetTimestamps(string path, DateTime creationTime, DateTime lastAccessTime, DateTime lastWriteTime) - { - SetFsoDateTimeCore(false, null, path, creationTime.ToUniversalTime(), lastAccessTime.ToUniversalTime(), lastWriteTime.ToUniversalTime(), false, PathFormat.RelativePath); - } - - /// [AlphaFS] Sets all the date and time stamps for the specified file, at once. - /// The file for which to set the dates and times information. - /// - /// A containing the value to set for the creation date and time of . This value - /// is expressed in local time. - /// - /// - /// A containing the value to set for the last access date and time of . This - /// value is expressed in local time. - /// - /// - /// A containing the value to set for the last write date and time of . This value - /// is expressed in local time. - /// - /// If , the date and time information will apply to the reparse point (symlink or junction) and not the file or directory linked to. No effect if does not refer to a reparse point. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static void SetTimestamps(string path, DateTime creationTime, DateTime lastAccessTime, DateTime lastWriteTime, bool modifyReparsePoint, PathFormat pathFormat) - { - SetFsoDateTimeCore(false, null, path, creationTime.ToUniversalTime(), lastAccessTime.ToUniversalTime(), lastWriteTime.ToUniversalTime(), modifyReparsePoint, pathFormat); - } - - /// [AlphaFS] Sets all the date and time stamps for the specified file, at once. - /// The transaction. - /// The file for which to set the dates and times information. - /// - /// A containing the value to set for the creation date and time of . This value - /// is expressed in local time. - /// - /// - /// A containing the value to set for the last access date and time of . This - /// value is expressed in local time. - /// - /// - /// A containing the value to set for the last write date and time of . This value - /// is expressed in local time. - /// - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static void SetTimestampsTransacted(KernelTransaction transaction, string path, DateTime creationTime, DateTime lastAccessTime, DateTime lastWriteTime, PathFormat pathFormat) - { - SetFsoDateTimeCore(false, transaction, path, creationTime.ToUniversalTime(), lastAccessTime.ToUniversalTime(), lastWriteTime.ToUniversalTime(), false, pathFormat); - } - - /// [AlphaFS] Sets all the date and time stamps for the specified file, at once. - /// The transaction. - /// The file for which to set the dates and times information. - /// - /// A containing the value to set for the creation date and time of . This value - /// is expressed in local time. - /// - /// - /// A containing the value to set for the last access date and time of . This - /// value is expressed in local time. - /// - /// - /// A containing the value to set for the last write date and time of . This value - /// is expressed in local time. - /// - [SecurityCritical] - public static void SetTimestampsTransacted(KernelTransaction transaction, string path, DateTime creationTime, DateTime lastAccessTime, DateTime lastWriteTime) - { - SetFsoDateTimeCore(false, transaction, path, creationTime.ToUniversalTime(), lastAccessTime.ToUniversalTime(), lastWriteTime.ToUniversalTime(), false, PathFormat.RelativePath); - } - - /// [AlphaFS] Sets all the date and time stamps for the specified file, at once. - /// The transaction. - /// The file for which to set the dates and times information. - /// - /// A containing the value to set for the creation date and time of . This value - /// is expressed in local time. - /// - /// - /// A containing the value to set for the last access date and time of . This - /// value is expressed in local time. - /// - /// - /// A containing the value to set for the last write date and time of . This value - /// is expressed in local time. - /// - /// If , the date and time information will apply to the reparse point (symlink or junction) and not the file or directory linked to. No effect if does not refer to a reparse point. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static void SetTimestampsTransacted(KernelTransaction transaction, string path, DateTime creationTime, DateTime lastAccessTime, DateTime lastWriteTime, bool modifyReparsePoint, PathFormat pathFormat) - { - SetFsoDateTimeCore(false, transaction, path, creationTime.ToUniversalTime(), lastAccessTime.ToUniversalTime(), lastWriteTime.ToUniversalTime(), modifyReparsePoint, pathFormat); - } - - #endregion // SetTimestamps - - #region SetTimestampsUtc - - /// [AlphaFS] Sets all the date and time stamps, in coordinated universal time (UTC), for the specified file, at once. - /// The file for which to set the dates and times information. - /// - /// A containing the value to set for the creation date and time of . This value - /// is expressed in UTC time. - /// - /// - /// A containing the value to set for the last access date and time of . This - /// value is expressed in UTC time. - /// - /// - /// A containing the value to set for the last write date and time of . This value - /// is expressed in UTC time. - /// - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static void SetTimestampsUtc(string path, DateTime creationTimeUtc, DateTime lastAccessTimeUtc, DateTime lastWriteTimeUtc, PathFormat pathFormat) - { - SetFsoDateTimeCore(false, null, path, creationTimeUtc, lastAccessTimeUtc, lastWriteTimeUtc, false, pathFormat); - } - - /// [AlphaFS] Sets all the date and time stamps, in coordinated universal time (UTC), for the specified file, at once. - /// The file for which to set the dates and times information. - /// - /// A containing the value to set for the creation date and time of . This value - /// is expressed in UTC time. - /// - /// - /// A containing the value to set for the last access date and time of . This - /// value is expressed in UTC time. - /// - /// - /// A containing the value to set for the last write date and time of . This value - /// is expressed in UTC time. - /// - [SecurityCritical] - public static void SetTimestampsUtc(string path, DateTime creationTimeUtc, DateTime lastAccessTimeUtc, DateTime lastWriteTimeUtc) - { - SetFsoDateTimeCore(false, null, path, creationTimeUtc, lastAccessTimeUtc, lastWriteTimeUtc, false, PathFormat.RelativePath); - } - - /// [AlphaFS] Sets all the date and time stamps, in coordinated universal time (UTC), for the specified file, at once. - /// The file for which to set the dates and times information. - /// - /// A containing the value to set for the creation date and time of . This value - /// is expressed in UTC time. - /// - /// - /// A containing the value to set for the last access date and time of . This - /// value is expressed in UTC time. - /// - /// - /// A containing the value to set for the last write date and time of . This value - /// is expressed in UTC time. - /// - /// If , the date and time information will apply to the reparse point (symlink or junction) and not the file or directory linked to. No effect if does not refer to a reparse point. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static void SetTimestampsUtc(string path, DateTime creationTimeUtc, DateTime lastAccessTimeUtc, DateTime lastWriteTimeUtc, bool modifyReparsePoint, PathFormat pathFormat) - { - SetFsoDateTimeCore(false, null, path, creationTimeUtc, lastAccessTimeUtc, lastWriteTimeUtc, modifyReparsePoint, pathFormat); - } - - /// [AlphaFS] Sets all the date and time stamps, in coordinated universal time (UTC), for the specified file, at once. - /// The transaction. - /// The file for which to set the dates and times information. - /// - /// A containing the value to set for the creation date and time of . This value - /// is expressed in UTC time. - /// - /// - /// A containing the value to set for the last access date and time of . This - /// value is expressed in UTC time. - /// - /// - /// A containing the value to set for the last write date and time of . This value - /// is expressed in UTC time. - /// - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static void SetTimestampsUtcTransacted(KernelTransaction transaction, string path, DateTime creationTimeUtc, DateTime lastAccessTimeUtc, DateTime lastWriteTimeUtc, PathFormat pathFormat) - { - SetFsoDateTimeCore(false, transaction, path, creationTimeUtc, lastAccessTimeUtc, lastWriteTimeUtc, false, pathFormat); - } - - /// [AlphaFS] Sets all the date and time stamps, in coordinated universal time (UTC), for the specified file, at once. - /// The transaction. - /// The file for which to set the dates and times information. - /// - /// A containing the value to set for the creation date and time of . This value - /// is expressed in UTC time. - /// - /// - /// A containing the value to set for the last access date and time of . This - /// value is expressed in UTC time. - /// - /// - /// A containing the value to set for the last write date and time of . This value - /// is expressed in UTC time. - /// - [SecurityCritical] - public static void SetTimestampsUtcTransacted(KernelTransaction transaction, string path, DateTime creationTimeUtc, DateTime lastAccessTimeUtc, DateTime lastWriteTimeUtc) - { - SetFsoDateTimeCore(false, transaction, path, creationTimeUtc, lastAccessTimeUtc, lastWriteTimeUtc, false, PathFormat.RelativePath); - } - - /// [AlphaFS] Sets all the date and time stamps, in coordinated universal time (UTC), for the specified file, at once. - /// The transaction. - /// The file for which to set the dates and times information. - /// - /// A containing the value to set for the creation date and time of . This value - /// is expressed in UTC time. - /// - /// - /// A containing the value to set for the last access date and time of . This - /// value is expressed in UTC time. - /// - /// - /// A containing the value to set for the last write date and time of . This value - /// is expressed in UTC time. - /// - /// If , the date and time information will apply to the reparse point (symlink or junction) and not the file or directory linked to. No effect if does not refer to a reparse point. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static void SetTimestampsUtcTransacted(KernelTransaction transaction, string path, DateTime creationTimeUtc, DateTime lastAccessTimeUtc, DateTime lastWriteTimeUtc, bool modifyReparsePoint, PathFormat pathFormat) - { - SetFsoDateTimeCore(false, transaction, path, creationTimeUtc, lastAccessTimeUtc, lastWriteTimeUtc, modifyReparsePoint, pathFormat); - } - - #endregion // SetTimestampsUtc - - #region Internal Methods - - /// Set the date and time, in coordinated universal time (UTC), that the file or directory was created and/or last accessed and/or written to. - /// - /// - /// Specifies that is a file or directory. - /// The transaction. - /// The file or directory for which to set the date and time information. - /// A containing the value to set for the creation date and time of . This value is expressed in UTC time. - /// A containing the value to set for the last access date and time of . This value is expressed in UTC time. - /// A containing the value to set for the last write date and time of . This value is expressed in UTC time. - /// If , the date and time information will apply to the reparse point (symlink or junction) and not the file or directory linked to. No effect if does not refer to a reparse point. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - internal static void SetFsoDateTimeCore(bool isFolder, KernelTransaction transaction, string path, DateTime? creationTimeUtc, DateTime? lastAccessTimeUtc, DateTime? lastWriteTimeUtc, bool modifyReparsePoint, PathFormat pathFormat) - { - // Because we already check here, use false for CreateFileCore() to prevent another check. - if (pathFormat == PathFormat.RelativePath) - Path.CheckSupportedPathFormat(path, false, false); - - var attributes = isFolder ? ExtendedFileAttributes.BackupSemantics : ExtendedFileAttributes.Normal; - - if (modifyReparsePoint) - attributes |= ExtendedFileAttributes.OpenReparsePoint; - - using (var creationTime = SafeGlobalMemoryBufferHandle.FromLong(creationTimeUtc.HasValue ? creationTimeUtc.Value.ToFileTimeUtc() : (long?)null)) - using (var lastAccessTime = SafeGlobalMemoryBufferHandle.FromLong(lastAccessTimeUtc.HasValue ? lastAccessTimeUtc.Value.ToFileTimeUtc() : (long?)null)) - using (var lastWriteTime = SafeGlobalMemoryBufferHandle.FromLong(lastWriteTimeUtc.HasValue ? lastWriteTimeUtc.Value.ToFileTimeUtc() : (long?)null)) - using (var safeHandle = CreateFileCore(transaction, path, attributes, null, FileMode.Open, FileSystemRights.WriteAttributes, FileShare.Delete | FileShare.Write, false, pathFormat)) - if (!NativeMethods.SetFileTime(safeHandle, creationTime, lastAccessTime, lastWriteTime)) - NativeError.ThrowException(path); - } - - #endregion // Internal Methods - } -} diff --git a/AlphaFS/Filesystem/File Class/File.TransferTimestamps.cs b/AlphaFS/Filesystem/File Class/File.TransferTimestamps.cs deleted file mode 100644 index 7e54d41..0000000 --- a/AlphaFS/Filesystem/File Class/File.TransferTimestamps.cs +++ /dev/null @@ -1,100 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System; -using System.Security; - -namespace Alphaleonis.Win32.Filesystem -{ - public static partial class File - { - #region TransferTimestamps - - /// [AlphaFS] Transfers the date and time stamps for the specified files. - /// This method does not change last access time for the source file. - /// The source file to get the date and time stamps from. - /// The destination file to set the date and time stamps. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static void TransferTimestamps(string sourcePath, string destinationPath, PathFormat pathFormat) - { - TransferTimestampsCore(false, null, sourcePath, destinationPath, pathFormat); - } - - /// [AlphaFS] Transfers the date and time stamps for the specified files. - /// This method does not change last access time for the source file. - /// The source file to get the date and time stamps from. - /// The destination file to set the date and time stamps. - [SecurityCritical] - public static void TransferTimestamps(string sourcePath, string destinationPath) - { - TransferTimestampsCore(false, null, sourcePath, destinationPath, PathFormat.RelativePath); - } - - /// [AlphaFS] Transfers the date and time stamps for the specified files. - /// This method does not change last access time for the source file. - /// The transaction. - /// The source file to get the date and time stamps from. - /// The destination file to set the date and time stamps. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static void TransferTimestampsTransacted(KernelTransaction transaction, string sourcePath, string destinationPath, PathFormat pathFormat) - { - TransferTimestampsCore(false, transaction, sourcePath, destinationPath, pathFormat); - } - - /// [AlphaFS] Transfers the date and time stamps for the specified files. - /// This method does not change last access time for the source file. - /// The transaction. - /// The source file to get the date and time stamps from. - /// The destination file to set the date and time stamps. - [SecurityCritical] - public static void TransferTimestampsTransacted(KernelTransaction transaction, string sourcePath, string destinationPath) - { - TransferTimestampsCore(false, transaction, sourcePath, destinationPath, PathFormat.RelativePath); - } - - - #endregion // TransferTimestamps - - #region Internal Methods - - /// Transfer the date and time stamps for the specified files and directories. - /// - /// This method does not change last access time for the source file. - /// This method uses BackupSemantics flag to get Timestamp changed for directories. - /// - /// Specifies that and are a file or directory. - /// The transaction. - /// The source path. - /// The destination path. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - internal static void TransferTimestampsCore(bool isFolder, KernelTransaction transaction, string sourcePath, string destinationPath, PathFormat pathFormat) - { - NativeMethods.WIN32_FILE_ATTRIBUTE_DATA attrs = GetAttributesExCore(transaction, sourcePath, pathFormat, true); - - SetFsoDateTimeCore(isFolder, transaction, destinationPath, DateTime.FromFileTimeUtc(attrs.ftCreationTime), DateTime.FromFileTimeUtc(attrs.ftLastAccessTime), DateTime.FromFileTimeUtc(attrs.ftLastWriteTime), false, pathFormat); - } - - #endregion // Internal Methods - } -} diff --git a/AlphaFS/Filesystem/File Class/File.WriteAllBytes.cs b/AlphaFS/Filesystem/File Class/File.WriteAllBytes.cs deleted file mode 100644 index c12c28f..0000000 --- a/AlphaFS/Filesystem/File Class/File.WriteAllBytes.cs +++ /dev/null @@ -1,119 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System; -using System.Diagnostics.CodeAnalysis; -using System.IO; -using System.Security; -using FileStream = System.IO.FileStream; - -namespace Alphaleonis.Win32.Filesystem -{ - public static partial class File - { - #region WriteAllBytes - - /// - /// Creates a new file, writes the specified byte array to the file, and then closes the file. If the target file already exists, it is - /// overwritten. - /// - /// The file to write to. - /// The bytes to write to the file. - [SuppressMessage("Microsoft.Naming", "CA1720:IdentifiersShouldNotContainTypeNames", MessageId = "bytes")] - [SecurityCritical] - public static void WriteAllBytes(string path, byte[] bytes) - { - WriteAllBytesCore(null, path, bytes, PathFormat.RelativePath); - } - - /// - /// [AlphaFS] Creates a new file, writes the specified byte array to the file, and then closes the file. If the target file already - /// exists, it is overwritten. - /// - /// The file to write to. - /// The bytes to write to the file. - /// Indicates the format of the path parameter(s). - [SuppressMessage("Microsoft.Naming", "CA1720:IdentifiersShouldNotContainTypeNames", MessageId = "bytes")] - [SecurityCritical] - public static void WriteAllBytes(string path, byte[] bytes, PathFormat pathFormat) - { - WriteAllBytesCore(null, path, bytes, pathFormat); - } - - #region Transactional - - /// - /// [AlphaFS] Creates a new file, writes the specified byte array to the file, and then closes the file. If the target file already - /// exists, it is overwritten. - /// - /// The transaction. - /// The file to write to. - /// The bytes to write to the file. - [SuppressMessage("Microsoft.Naming", "CA1720:IdentifiersShouldNotContainTypeNames", MessageId = "bytes")] - [SecurityCritical] - public static void WriteAllBytesTransacted(KernelTransaction transaction, string path, byte[] bytes) - { - WriteAllBytesCore(transaction, path, bytes, PathFormat.RelativePath); - } - - /// - /// [AlphaFS] Creates a new file, writes the specified byte array to the file, and then closes the file. If the target file already - /// exists, it is overwritten. - /// - /// The transaction. - /// The file to write to. - /// The bytes to write to the file. - /// Indicates the format of the path parameter(s). - [SuppressMessage("Microsoft.Naming", "CA1720:IdentifiersShouldNotContainTypeNames", MessageId = "bytes")] - [SecurityCritical] - public static void WriteAllBytesTransacted(KernelTransaction transaction, string path, byte[] bytes, PathFormat pathFormat) - { - WriteAllBytesCore(transaction, path, bytes, pathFormat); - } - - #endregion // Transacted - - #endregion // WriteAllBytes - - #region Internal Methods - - /// Creates a new file as part of a transaction, writes the specified byte array to - /// the file, and then closes the file. If the target file already exists, it is overwritten. - /// - /// - /// The transaction. - /// The file to write to. - /// The bytes to write to the file. - /// Indicates the format of the path parameter(s). - [SuppressMessage("Microsoft.Naming", "CA1720:IdentifiersShouldNotContainTypeNames", MessageId = "bytes")] - [SecurityCritical] - internal static void WriteAllBytesCore(KernelTransaction transaction, string path, byte[] bytes, PathFormat pathFormat) - { - if (bytes == null) - throw new ArgumentNullException("bytes"); - - using (FileStream fs = OpenCore(transaction, path, FileMode.Create, FileAccess.Write, FileShare.Read, ExtendedFileAttributes.Normal, null, null, pathFormat)) - fs.Write(bytes, 0, bytes.Length); - } - - #endregion // Internal Methods - } -} diff --git a/AlphaFS/Filesystem/File Class/File.WriteText.cs b/AlphaFS/Filesystem/File Class/File.WriteText.cs deleted file mode 100644 index 29be618..0000000 --- a/AlphaFS/Filesystem/File Class/File.WriteText.cs +++ /dev/null @@ -1,1009 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System; -using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; -using System.IO; -using System.Security; -using System.Security.AccessControl; -using System.Text; - -namespace Alphaleonis.Win32.Filesystem -{ - public static partial class File - { - #region AppendAllLines - - #region .NET - - /// Appends lines to a file, and then closes the file. If the specified file does not exist, this method creates a file, writes the - /// specified lines to the file, and then closes the file. - /// - /// - /// The method creates the file if it doesn't exist, but it doesn't create new directories. Therefore, the value of the path parameter - /// must contain existing directories. - /// - /// - /// - /// - /// - /// - /// - /// - /// - /// - /// - /// The file to append the lines to. The file is created if it doesn't already exist. - /// The lines to append to the file. - [SecurityCritical] - public static void AppendAllLines(string path, IEnumerable contents) - { - WriteAppendAllLinesCore(null, path, contents, NativeMethods.DefaultFileEncoding, true, true, PathFormat.RelativePath); - } - - /// Appends lines to a file, and then closes the file. If the specified file does not exist, this method creates a file, writes the - /// specified lines to the file, and then closes the file. - /// - /// - /// The method creates the file if it doesn't exist, but it doesn't create new directories. Therefore, the value of the path parameter - /// must contain existing directories. - /// - /// - /// - /// - /// - /// - /// - /// - /// - /// - /// - /// The file to append the lines to. The file is created if it doesn't already exist. - /// The lines to append to the file. - /// The character to use. - [SecurityCritical] - public static void AppendAllLines(string path, IEnumerable contents, Encoding encoding) - { - WriteAppendAllLinesCore(null, path, contents, encoding, true, false, PathFormat.RelativePath); - } - - #endregion // .NET - - /// [AlphaFS] Appends lines to a file, and then closes the file. If the specified file does not exist, this method creates a file, - /// writes the specified lines to the file, and then closes the file. - /// - /// - /// The method creates the file if it doesn't exist, but it doesn't create new directories. Therefore, the value of the path parameter - /// must contain existing directories. - /// - /// - /// - /// - /// - /// - /// - /// - /// - /// - /// - /// The file to append the lines to. The file is created if it doesn't already exist. - /// The lines to append to the file. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static void AppendAllLines(string path, IEnumerable contents, PathFormat pathFormat) - { - WriteAppendAllLinesCore(null, path, contents, NativeMethods.DefaultFileEncoding, true, false, pathFormat); - } - - /// [AlphaFS] Appends lines to a file, and then closes the file. If the specified file does not - /// exist, this method creates a file, writes the specified lines to the file, and then closes - /// the file. - /// - /// - /// The method creates the file if it doesn't exist, but it doesn't create new directories. - /// Therefore, the value of the path parameter must contain existing directories. - /// - /// - /// - /// - /// - /// - /// - /// - /// - /// - /// - /// - /// The file to append the lines to. The file is created if it doesn't already exist. - /// - /// The lines to append to the file. - /// The character to use. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static void AppendAllLines(string path, IEnumerable contents, Encoding encoding, PathFormat pathFormat) - { - WriteAppendAllLinesCore(null, path, contents, encoding, true, false, pathFormat); - } - - #region Transactional - - #region .NET - - /// [AlphaFS] Appends lines to a file, and then closes the file. If the specified file does not exist, this method creates a file, - /// writes the specified lines to the file, and then closes the file. - /// - /// - /// The method creates the file if it doesn't exist, but it doesn't create new directories. Therefore, the value of the path parameter - /// must contain existing directories. - /// - /// - /// - /// - /// - /// - /// - /// - /// - /// - /// - /// The transaction. - /// The file to append the lines to. The file is created if it doesn't already exist. - /// The lines to append to the file. - [SecurityCritical] - public static void AppendAllLinesTransacted(KernelTransaction transaction, string path, IEnumerable contents) - { - WriteAppendAllLinesCore(transaction, path, contents, NativeMethods.DefaultFileEncoding, true, false, PathFormat.RelativePath); - } - - /// [AlphaFS] Appends lines to a file, and then closes the file. If the specified file does not exist, this method creates a file, - /// writes the specified lines to the file, and then closes the file. - /// - /// - /// The method creates the file if it doesn't exist, but it doesn't create new directories. Therefore, the value of the path parameter - /// must contain existing directories. - /// - /// - /// - /// - /// - /// - /// - /// - /// - /// - /// - /// The transaction. - /// The file to append the lines to. The file is created if it doesn't already exist. - /// The lines to append to the file. - /// The character to use. - [SecurityCritical] - public static void AppendAllLinesTransacted(KernelTransaction transaction, string path, IEnumerable contents, Encoding encoding) - { - WriteAppendAllLinesCore(transaction, path, contents, encoding, true, false, PathFormat.RelativePath); - } - - #endregion // .NET - - /// [AlphaFS] Appends lines to a file, and then closes the file. If the specified file does not exist, this method creates a file, writes the - /// specified lines to the file, and then closes the file. - /// - /// - /// The method creates the file if it doesn't exist, but it doesn't create new directories. Therefore, the value of the path parameter - /// must contain existing directories. - /// - /// - /// - /// - /// - /// - /// - /// - /// - /// - /// - /// The transaction. - /// The file to append the lines to. The file is created if it doesn't already exist. - /// The lines to append to the file. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static void AppendAllLinesTransacted(KernelTransaction transaction, string path, IEnumerable contents, PathFormat pathFormat) - { - WriteAppendAllLinesCore(transaction, path, contents, NativeMethods.DefaultFileEncoding, true, false, pathFormat); - } - - /// [AlphaFS] Appends lines to a file, and then closes the file. If the specified file does not exist, this method creates a file, - /// writes the specified lines to the file, and then closes the file. - /// - /// - /// The method creates the file if it doesn't exist, but it doesn't create new directories. Therefore, the value of the path parameter - /// must contain existing directories. - /// - /// - /// - /// - /// - /// - /// - /// - /// - /// - /// - /// The transaction. - /// The file to append the lines to. The file is created if it doesn't already exist. - /// The lines to append to the file. - /// The character to use. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static void AppendAllLinesTransacted(KernelTransaction transaction, string path, IEnumerable contents, Encoding encoding, PathFormat pathFormat) - { - WriteAppendAllLinesCore(transaction, path, contents, encoding, true, false, pathFormat); - } - - #endregion // Transactional - - #endregion // AppendAllLines - - #region AppendAllText - - #region .NET - - /// Appends the specified stringto the file, creating the file if it does not already exist. - /// - /// - /// - /// - /// - /// - /// - /// - /// - /// - /// The file to append the specified string to. - /// The string to append to the file. - [SecurityCritical] - public static void AppendAllText(string path, string contents) - { - WriteAppendAllLinesCore(null, path, new[] { contents }, NativeMethods.DefaultFileEncoding, true, false, PathFormat.RelativePath); - } - - /// Appends the specified string to the file, creating the file if it does not already exist. - /// - /// - /// - /// - /// - /// - /// - /// - /// - /// - /// The file to append the specified string to. - /// The string to append to the file. - /// The character to use. - [SecurityCritical] - public static void AppendAllText(string path, string contents, Encoding encoding) - { - WriteAppendAllLinesCore(null, path, new[] { contents }, encoding, true, false, PathFormat.RelativePath); - } - - #endregion // .NET - - /// [AlphaFS] Appends the specified stringto the file, creating the file if it does not already exist. - /// - /// - /// - /// - /// - /// - /// - /// - /// - /// - /// The file to append the specified string to. - /// The string to append to the file. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static void AppendAllText(string path, string contents, PathFormat pathFormat) - { - WriteAppendAllLinesCore(null, path, new[] { contents }, NativeMethods.DefaultFileEncoding, true, false, pathFormat); - } - - /// [AlphaFS] Appends the specified string to the file, creating the file if it does not already exist. - /// - /// - /// - /// - /// - /// - /// - /// - /// - /// - /// The file to append the specified string to. - /// The string to append to the file. - /// The character to use. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static void AppendAllText(string path, string contents, Encoding encoding, PathFormat pathFormat) - { - WriteAppendAllLinesCore(null, path, new[] { contents }, encoding, true, false, pathFormat); - } - - #region Transactional - - #region .NET - - /// [AlphaFS] Appends the specified stringto the file, creating the file if it does not already exist. - /// - /// - /// - /// - /// - /// - /// - /// - /// - /// - /// The transaction. - /// The file to append the specified string to. - /// The string to append to the file. - [SecurityCritical] - public static void AppendAllTextTransacted(KernelTransaction transaction, string path, string contents) - { - WriteAppendAllLinesCore(transaction, path, new[] { contents }, NativeMethods.DefaultFileEncoding, true, false, PathFormat.RelativePath); - } - - /// [AlphaFS] Appends the specified string to the file, creating the file if it does not already exist. - /// - /// - /// - /// - /// - /// - /// - /// - /// - /// - /// The transaction. - /// The file to append the specified string to. - /// The string to append to the file. - /// The character to use. - [SecurityCritical] - public static void AppendAllTextTransacted(KernelTransaction transaction, string path, string contents, Encoding encoding) - { - WriteAppendAllLinesCore(transaction, path, new[] { contents }, encoding, true, false, PathFormat.RelativePath); - } - - #endregion // .NET - - /// [AlphaFS] Appends the specified stringto the file, creating the file if it does not already exist. - /// - /// - /// - /// - /// - /// - /// - /// - /// - /// - /// The transaction. - /// The file to append the specified string to. - /// The string to append to the file. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static void AppendAllTextTransacted(KernelTransaction transaction, string path, string contents, PathFormat pathFormat) - { - WriteAppendAllLinesCore(transaction, path, new[] { contents }, NativeMethods.DefaultFileEncoding, true, false, pathFormat); - } - - /// [AlphaFS] Appends the specified string to the file, creating the file if it does not already exist. - /// - /// - /// - /// - /// - /// - /// - /// - /// - /// - /// The transaction. - /// The file to append the specified string to. - /// The string to append to the file. - /// The character to use. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static void AppendAllTextTransacted(KernelTransaction transaction, string path, string contents, Encoding encoding, PathFormat pathFormat) - { - WriteAppendAllLinesCore(transaction, path, new[] { contents }, encoding, true, false, pathFormat); - } - - #endregion // Transactional - - #endregion // AppendAllText - - #region WriteAllLines - - #region .NET - - /// Creates a new file, writes a collection of strings to the file, and then closes the file. - /// The default behavior of the method is to write out data by using UTF-8 encoding without a byte order mark (BOM). - /// - /// - /// - /// - /// - /// - /// - /// - /// - /// - /// The file to write to. - /// The lines to write to the file. - [SecurityCritical] - public static void WriteAllLines(string path, IEnumerable contents) - { - WriteAppendAllLinesCore(null, path, contents, new UTF8Encoding(false, true), false, true, PathFormat.RelativePath); - } - - /// Creates a new file by using the specified encoding, writes a collection of strings to the file, and then closes the file. - /// The file to write to. - /// The string array to write to the file. - [SecurityCritical] - public static void WriteAllLines(string path, string[] contents) - { - WriteAppendAllLinesCore(null, path, contents, new UTF8Encoding(false, true), false, true, PathFormat.RelativePath); - } - - /// Creates a new file by using the specified encoding, writes a collection of strings to the file, and then closes the file. - /// - /// - /// - /// - /// - /// - /// - /// - /// - /// - /// The file to write to. - /// The lines to write to the file. - /// The character to use. - [SecurityCritical] - public static void WriteAllLines(string path, IEnumerable contents, Encoding encoding) - { - WriteAppendAllLinesCore(null, path, contents, encoding, false, true, PathFormat.RelativePath); - } - - /// Creates a new file by using the specified encoding, writes a collection of strings to the file, and then closes the file. - /// - /// - /// - /// - /// - /// - /// - /// - /// - /// - /// The file to write to. - /// The string array to write to the file. - /// The character to use. - [SecurityCritical] - public static void WriteAllLines(string path, string[] contents, Encoding encoding) - { - WriteAppendAllLinesCore(null, path, contents, encoding, false, true, PathFormat.RelativePath); - } - - #endregion // .NET - - /// [AlphaFS] Creates a new file, writes a collection of strings to the file, and then closes the file. - /// The default behavior of the method is to write out data by using UTF-8 encoding without a byte order mark (BOM). - /// - /// - /// - /// - /// - /// - /// - /// - /// - /// - /// The file to write to. - /// The lines to write to the file. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static void WriteAllLines(string path, IEnumerable contents, PathFormat pathFormat) - { - WriteAppendAllLinesCore(null, path, contents, new UTF8Encoding(false, true), false, true, pathFormat); - } - - /// [AlphaFS] Creates a new file by using the specified encoding, writes a collection of strings to the file, and then closes the file. - /// - /// - /// - /// - /// - /// - /// - /// - /// - /// - /// The file to write to. - /// The string array to write to the file. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static void WriteAllLines(string path, string[] contents, PathFormat pathFormat) - { - WriteAppendAllLinesCore(null, path, contents, new UTF8Encoding(false, true), false, true, pathFormat); - } - - /// [AlphaFS] Creates a new file by using the specified encoding, writes a collection of strings to the file, and then closes the file. - /// - /// - /// - /// - /// - /// - /// - /// - /// - /// - /// The file to write to. - /// The lines to write to the file. - /// The character to use. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static void WriteAllLines(string path, IEnumerable contents, Encoding encoding, PathFormat pathFormat) - { - WriteAppendAllLinesCore(null, path, contents, encoding, false, true, pathFormat); - } - - /// [AlphaFS] Creates a new file by using the specified encoding, writes a collection of strings to the file, and then closes the file. - /// - /// - /// - /// - /// - /// - /// - /// - /// - /// - /// The file to write to. - /// The string array to write to the file. - /// The character to use. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static void WriteAllLines(string path, string[] contents, Encoding encoding, PathFormat pathFormat) - { - WriteAppendAllLinesCore(null, path, contents, encoding, false, true, pathFormat); - } - - #region Transactional - - #region .NET - - /// [AlphaFS] Creates a new file, writes a collection of strings to the file, and then closes the file. - /// The default behavior of the method is to write out data by using UTF-8 encoding without a byte order mark (BOM). - /// - /// - /// - /// - /// - /// - /// - /// - /// - /// - /// The transaction. - /// The file to write to. - /// The lines to write to the file. - [SecurityCritical] - public static void WriteAllLinesTransacted(KernelTransaction transaction, string path, IEnumerable contents) - { - WriteAppendAllLinesCore(transaction, path, contents, new UTF8Encoding(false, true), false, true, PathFormat.RelativePath); - } - - /// [AlphaFS] Creates a new file, writes a collection of strings to the file, and then closes the file. - /// The default behavior of the method is to write out data by using UTF-8 encoding without a byte order mark (BOM). - /// - /// - /// - /// - /// - /// - /// - /// - /// - /// - /// The transaction. - /// The file to write to. - /// The string array to write to the file. - [SecurityCritical] - public static void WriteAllLinesTransacted(KernelTransaction transaction, string path, string[] contents) - { - WriteAppendAllLinesCore(transaction, path, contents, new UTF8Encoding(false, true), false, true, PathFormat.RelativePath); - } - - /// [AlphaFS] Creates a new file by using the specified encoding, writes a collection of strings to the file, and then closes the file. - /// - /// - /// - /// - /// - /// - /// - /// - /// - /// - /// The transaction. - /// The file to write to. - /// The lines to write to the file. - /// The character to use. - [SecurityCritical] - public static void WriteAllLinesTransacted(KernelTransaction transaction, string path, IEnumerable contents, Encoding encoding) - { - WriteAppendAllLinesCore(transaction, path, contents, encoding, false, true, PathFormat.RelativePath); - } - - /// [AlphaFS] Creates a new file by using the specified encoding, writes a collection of strings to the file, and then closes the file. - /// - /// - /// - /// - /// - /// - /// - /// - /// - /// - /// The transaction. - /// The file to write to. - /// The string array to write to the file. - /// The character to use. - [SecurityCritical] - public static void WriteAllLinesTransacted(KernelTransaction transaction, string path, string[] contents, Encoding encoding) - { - WriteAppendAllLinesCore(transaction, path, contents, encoding, false, true, PathFormat.RelativePath); - } - - #endregion // .NET - - /// [AlphaFS] Creates a new file, writes a collection of strings to the file, and then closes the file. - /// The default behavior of the method is to write out data by using UTF-8 encoding without a byte order mark (BOM). - /// - /// - /// - /// - /// - /// - /// - /// - /// - /// - /// The transaction. - /// The file to write to. - /// The lines to write to the file. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static void WriteAllLinesTransacted(KernelTransaction transaction, string path, IEnumerable contents, PathFormat pathFormat) - { - WriteAppendAllLinesCore(transaction, path, contents, new UTF8Encoding(false, true), false, true, pathFormat); - } - - /// [AlphaFS] Creates a new file by using the specified encoding, writes a collection of strings to the file, and then closes the file. - /// - /// - /// - /// - /// - /// - /// - /// - /// - /// - /// The transaction. - /// The file to write to. - /// The string array to write to the file. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static void WriteAllLinesTransacted(KernelTransaction transaction, string path, string[] contents, PathFormat pathFormat) - { - WriteAppendAllLinesCore(transaction, path, contents, new UTF8Encoding(false, true), false, true, pathFormat); - } - - /// [AlphaFS] Creates a new file by using the specified encoding, writes a collection of strings to the file, and then closes the file. - /// - /// - /// - /// - /// - /// - /// - /// - /// - /// - /// The transaction. - /// The file to write to. - /// The lines to write to the file. - /// The character to use. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static void WriteAllLinesTransacted(KernelTransaction transaction, string path, IEnumerable contents, Encoding encoding, PathFormat pathFormat) - { - WriteAppendAllLinesCore(transaction, path, contents, encoding, false, true, pathFormat); - } - - /// [AlphaFS] Creates a new file by using the specified encoding, writes a collection of strings to the file, and then closes the file. - /// - /// - /// - /// - /// - /// - /// - /// - /// - /// - /// The transaction. - /// The file to write to. - /// The string array to write to the file. - /// The character to use. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static void WriteAllLinesTransacted(KernelTransaction transaction, string path, string[] contents, Encoding encoding, PathFormat pathFormat) - { - WriteAppendAllLinesCore(transaction, path, contents, encoding, false, true, pathFormat); - } - - #endregion // Transactional - - #endregion // WriteAllLines - - #region WriteAllText - - #region .NET - - /// Creates a new file, writes the specified string to the file, and then closes the file. If the target file already exists, it is overwritten. - /// This method uses UTF-8 encoding without a Byte-Order Mark (BOM) - /// - /// - /// - /// - /// - /// - /// - /// - /// - /// - /// The file to write to. - /// The string to write to the file. - [SecurityCritical] - public static void WriteAllText(string path, string contents) - { - WriteAppendAllLinesCore(null, path, new[] { contents }, new UTF8Encoding(false, true), false, false, PathFormat.RelativePath); - } - - /// Creates a new file, writes the specified string to the file using the specified encoding, and then closes the file. If the target file already exists, it is overwritten. - /// The file to write to. - /// The string to write to the file. - /// The applied to the contents of the file. - [SecurityCritical] - public static void WriteAllText(string path, string contents, Encoding encoding) - { - WriteAppendAllLinesCore(null, path, new[] { contents }, encoding, false, false, PathFormat.RelativePath); - } - - #endregion // .NET - - /// [AlphaFS] Creates a new file, writes the specified string to the file, and then closes the file. If the target file already exists, it is overwritten. - /// This method uses UTF-8 encoding without a Byte-Order Mark (BOM) - /// - /// - /// - /// - /// - /// - /// - /// - /// - /// - /// The file to write to. - /// The string to write to the file. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static void WriteAllText(string path, string contents, PathFormat pathFormat) - { - WriteAppendAllLinesCore(null, path, new[] { contents }, new UTF8Encoding(false, true), false, false, pathFormat); - } - - /// [AlphaFS] Creates a new file, writes the specified string to the file using the specified encoding, and then closes the file. If the target file already exists, it is overwritten. - /// - /// - /// - /// - /// - /// - /// - /// - /// - /// - /// The file to write to. - /// The string to write to the file. - /// The applied to the contents of the file. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static void WriteAllText(string path, string contents, Encoding encoding, PathFormat pathFormat) - { - WriteAppendAllLinesCore(null, path, new[] { contents }, encoding, false, false, pathFormat); - } - - #region Transactional - - #region .NET - - /// [AlphaFS] Creates a new file as part of a transaction, write the contents to the file, and then closes the file. If the target file already exists, it is overwritten. - /// This method uses UTF-8 encoding without a Byte-Order Mark (BOM) - /// - /// - /// - /// - /// - /// - /// - /// - /// - /// - /// The transaction. - /// The file to write to. - /// The string to write to the file. - [SecurityCritical] - public static void WriteAllTextTransacted(KernelTransaction transaction, string path, string contents) - { - WriteAppendAllLinesCore(transaction, path, new[] { contents }, new UTF8Encoding(false, true), false, false, PathFormat.RelativePath); - } - - /// [AlphaFS] Creates a new file as part of a transaction, writes the specified string to the file using the specified encoding, and then closes the file. If the target file already exists, it is overwritten. - /// - /// - /// - /// - /// - /// - /// - /// - /// - /// - /// The transaction. - /// The file to write to. - /// The string to write to the file. - /// The applied to the contents of the file. - [SecurityCritical] - public static void WriteAllTextTransacted(KernelTransaction transaction, string path, string contents, Encoding encoding) - { - WriteAppendAllLinesCore(transaction, path, new[] { contents }, encoding, false, false, PathFormat.RelativePath); - } - - #endregion // .NET - - /// [AlphaFS] Creates a new file as part of a transaction, write the contents to the file, and then closes the file. If the target file already exists, it is overwritten. - /// This method uses UTF-8 encoding without a Byte-Order Mark (BOM) - /// - /// - /// - /// - /// - /// - /// - /// - /// - /// - /// The transaction. - /// The file to write to. - /// The string to write to the file. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static void WriteAllTextTransacted(KernelTransaction transaction, string path, string contents, PathFormat pathFormat) - { - WriteAppendAllLinesCore(transaction, path, new[] { contents }, new UTF8Encoding(false, true), false, false, pathFormat); - } - - /// [AlphaFS] Creates a new file as part of a transaction, writes the specified string to the file using the specified encoding, and then closes the file. If the target file already exists, it is overwritten. - /// - /// - /// - /// - /// - /// - /// - /// - /// - /// - /// The transaction. - /// The file to write to. - /// The string to write to the file. - /// The applied to the contents of the file. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public static void WriteAllTextTransacted(KernelTransaction transaction, string path, string contents, Encoding encoding, PathFormat pathFormat) - { - WriteAppendAllLinesCore(transaction, path, new[] { contents }, encoding, false, false, pathFormat); - } - - #endregion // Transactional - - #endregion // WriteAllText - - #region Internal Method - - /// Creates/appends a new file by using the specified encoding, writes a collection of strings to the file, and then closes the file. - /// - /// - /// - /// - /// - /// - /// - /// - /// - /// - /// The transaction. - /// The file to write to. - /// The lines to write to the file. - /// The character to use. - /// for file Append, for file Write. - /// to a line terminator, to ommit the line terminator. - /// Indicates the format of the path parameter(s). - [SuppressMessage("Microsoft.Usage", "CA2202:Do not dispose objects multiple times", Justification = "Disposing is controlled.")] - [SecurityCritical] - internal static void WriteAppendAllLinesCore(KernelTransaction transaction, string path, IEnumerable contents, Encoding encoding, bool isAppend, bool addNewLine, PathFormat pathFormat) - { - if (contents == null) - throw new ArgumentNullException("contents"); - - if (encoding == null) - throw new ArgumentNullException("encoding"); - - - using (FileStream stream = OpenCore(transaction, path, (isAppend ? FileMode.OpenOrCreate : FileMode.Create), FileSystemRights.AppendData, FileShare.ReadWrite, ExtendedFileAttributes.Normal, null, null, pathFormat)) - { - if (isAppend) - stream.Seek(0, SeekOrigin.End); - - using (var writer = new StreamWriter(stream, encoding)) - { - if (addNewLine) - foreach (string line in contents) - writer.WriteLine(line); - - else - foreach (string line in contents) - writer.Write(line); - } - } - } - - #endregion // Method - } -} diff --git a/AlphaFS/Filesystem/File Class/File.cs b/AlphaFS/Filesystem/File Class/File.cs deleted file mode 100644 index 27ac688..0000000 --- a/AlphaFS/Filesystem/File Class/File.cs +++ /dev/null @@ -1,34 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System.Diagnostics.CodeAnalysis; - -namespace Alphaleonis.Win32.Filesystem -{ - /// Provides static methods for the creation, copying, deletion, moving, and opening of files, and aids in the creation of objects. - /// This class cannot be inherited. - /// - [SuppressMessage("Microsoft.Maintainability", "CA1506:AvoidExcessiveClassCoupling")] - public static partial class File - { - // This file only exists for the documentation. - } -} diff --git a/AlphaFS/Filesystem/FileIdBothDirectoryInfo.cs b/AlphaFS/Filesystem/FileIdBothDirectoryInfo.cs deleted file mode 100644 index f9dae48..0000000 --- a/AlphaFS/Filesystem/FileIdBothDirectoryInfo.cs +++ /dev/null @@ -1,204 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System; -using System.Diagnostics.CodeAnalysis; -using System.IO; -using System.Security; - -namespace Alphaleonis.Win32.Filesystem -{ - /// Contains information about files in the specified directory. Used for directory handles. - [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Dir")] - [Serializable] - [SecurityCritical] - public sealed class FileIdBothDirectoryInfo - { - #region Constructor - - #region FileIdBothDirectoryInfo - - internal FileIdBothDirectoryInfo(NativeMethods.FILE_ID_BOTH_DIR_INFO fibdi, string fileName) - { - CreationTimeUtc = DateTime.FromFileTimeUtc(fibdi.CreationTime); - LastAccessTimeUtc = DateTime.FromFileTimeUtc(fibdi.LastAccessTime); - LastWriteTimeUtc = DateTime.FromFileTimeUtc(fibdi.LastWriteTime); - ChangeTimeUtc = DateTime.FromFileTimeUtc(fibdi.ChangeTime); - - AllocationSize = fibdi.AllocationSize; - EndOfFile = fibdi.EndOfFile; - ExtendedAttributesSize = fibdi.EaSize; - - FileAttributes = fibdi.FileAttributes; - FileId = fibdi.FileId; - FileIndex = fibdi.FileIndex; - FileName = fileName; - - // ShortNameLength is the number of bytes in the short name; since we have a unicode string we must divide that by 2. - ShortName = new string(fibdi.ShortName, 0, fibdi.ShortNameLength / 2); - } - - #endregion // FileIdBothDirectoryInfo - - #endregion // Constructor - - #region Properties - - #region AllocationSize - - /// The number of bytes that are allocated for the file. This value is usually a multiple of the sector or cluster size of the underlying physical device. - public long AllocationSize { get; set; } - - #endregion // AllocationSize - - #region ChangeTime - - /// Gets the time this entry was changed. - /// The time this entry was changed. - public DateTime ChangeTime - { - get { return ChangeTimeUtc.ToLocalTime(); } - } - - #endregion // ChangeTime - - #region ChangeTimeUtc - - /// Gets the time, in coordinated universal time (UTC), this entry was changed. - /// The time, in coordinated universal time (UTC), this entry was changed. - public DateTime ChangeTimeUtc { get; set; } - - #endregion // ChangeTimeUtc - - #region CreationTime - - /// Gets the time this entry was created. - /// The time this entry was created. - public DateTime CreationTime - { - get { return CreationTimeUtc.ToLocalTime(); } - } - - #endregion // CreationTime - - #region CreationTimeUtc - - /// Gets the time, in coordinated universal time (UTC), this entry was created. - /// The time, in coordinated universal time (UTC), this entry was created. - public DateTime CreationTimeUtc { get; set; } - - #endregion // CreationTimeUtc - - #region EaSize - - /// The size of the extended attributes for the file. - public int ExtendedAttributesSize { get; set; } - - #endregion // EaSize - - #region EndOfFile - - /// The absolute new end-of-file position as a byte offset from the start of the file to the end of the file. - /// Because this value is zero-based, it actually refers to the first free byte in the file. In other words, EndOfFile is the offset to - /// the byte that immediately follows the last valid byte in the file. - /// - public long EndOfFile { get; set; } - - #endregion // EndOfFile - - #region FileAttributes - - /// The file attributes. - public FileAttributes FileAttributes { get; set; } - - #endregion FileAttributes - - #region FileId - - /// The file ID. - public long FileId { get; set; } - - #endregion // FileId - - #region FileIndex - - /// The byte offset of the file within the parent directory. This member is undefined for file systems, such as NTFS, - /// in which the position of a file within the parent directory is not fixed and can be changed at any time to maintain sort order. - /// - public long FileIndex { get; set; } - - #endregion // FileIndex - - #region FileName - - /// The name of the file. - public string FileName { get; set; } - - #endregion // FileName - - #region LastAccessTime - - /// Gets the time this entry was last accessed. - /// The time this entry was last accessed. - public DateTime LastAccessTime - { - get { return LastAccessTimeUtc.ToLocalTime(); } - } - - #endregion // LastAccessTime - - #region LastAccessTimeUtc - - /// Gets the time, in coordinated universal time (UTC), this entry was last accessed. - /// The time, in coordinated universal time (UTC), this entry was last accessed. - public DateTime LastAccessTimeUtc { get; set; } - - #endregion // LastAccessTimeUtc - - #region LastWriteTime - - /// Gets the time this entry was last modified. - /// The time this entry was last modified. - public DateTime LastWriteTime - { - get { return LastWriteTimeUtc.ToLocalTime(); } - } - - #endregion // LastWriteTime - - #region LastWriteTimeUtc - - /// Gets the time, in coordinated universal time (UTC), this entry was last modified. - /// The time, in coordinated universal time (UTC), this entry was last modified. - public DateTime LastWriteTimeUtc { get; set; } - - #endregion // LastWriteTimeUtc - - #region ShortName - - /// The short 8.3 file naming convention (for example, FILENAME.TXT) name of the file. - public string ShortName { get; set; } - - #endregion // ShortName - - #endregion // Properties - } -} diff --git a/AlphaFS/Filesystem/FileInfo Class/FileInfo.AppendText.cs b/AlphaFS/Filesystem/FileInfo Class/FileInfo.AppendText.cs deleted file mode 100644 index 0a3033d..0000000 --- a/AlphaFS/Filesystem/FileInfo Class/FileInfo.AppendText.cs +++ /dev/null @@ -1,51 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System.IO; -using System.Security; -using System.Text; - -namespace Alphaleonis.Win32.Filesystem -{ - partial class FileInfo - { - #region .NET - - /// Creates a that appends text to the file represented by this instance of the . - /// A new - [SecurityCritical] - public StreamWriter AppendText() - { - return File.AppendTextCore(Transaction, LongFullName, NativeMethods.DefaultFileEncoding, PathFormat.LongFullPath); - } - - /// Creates a that appends text to the file represented by this instance of the . - /// The character to use. - /// A new - [SecurityCritical] - public StreamWriter AppendText(Encoding encoding) - { - return File.AppendTextCore(Transaction, LongFullName, encoding, PathFormat.LongFullPath); - } - - #endregion // .NET - } -} diff --git a/AlphaFS/Filesystem/FileInfo Class/FileInfo.Compress.cs b/AlphaFS/Filesystem/FileInfo Class/FileInfo.Compress.cs deleted file mode 100644 index f9db672..0000000 --- a/AlphaFS/Filesystem/FileInfo Class/FileInfo.Compress.cs +++ /dev/null @@ -1,39 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System.Security; - -namespace Alphaleonis.Win32.Filesystem -{ - partial class FileInfo - { - #region AlphaFS - - /// [AlphaFS] Compresses a file using NTFS compression. - [SecurityCritical] - public void Compress() - { - Device.ToggleCompressionCore(false, Transaction, LongFullName, true, PathFormat.LongFullPath); - } - - #endregion // AlphaFS - } -} diff --git a/AlphaFS/Filesystem/FileInfo Class/FileInfo.CopyToMoveTo.cs b/AlphaFS/Filesystem/FileInfo Class/FileInfo.CopyToMoveTo.cs deleted file mode 100644 index 78cbe79..0000000 --- a/AlphaFS/Filesystem/FileInfo Class/FileInfo.CopyToMoveTo.cs +++ /dev/null @@ -1,631 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System; -using System.IO; -using System.Security; - -namespace Alphaleonis.Win32.Filesystem -{ - partial class FileInfo - { - #region CopyTo - - #region .NET - - /// Copies an existing file to a new file, disallowing the overwriting of an existing file. - /// A new instance with a fully qualified path. - /// - /// Use this method to prevent overwriting of an existing file by default. - /// Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - /// If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - /// - /// - /// A new instance with a fully qualified path. - /// - /// - /// - /// - /// - /// - /// - /// The name of the new file to copy to. - [SecurityCritical] - public FileInfo CopyTo(string destinationPath) - { - string destinationPathLp; - CopyToMoveToCore(destinationPath, false, CopyOptions.FailIfExists, null, null, null, out destinationPathLp, PathFormat.RelativePath); - return new FileInfo(Transaction, destinationPathLp, PathFormat.LongFullPath); - } - - /// Copies an existing file to a new file, allowing the overwriting of an existing file. - /// - /// Use this method to allow or prevent overwriting of an existing file. - /// Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - /// If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - /// - /// - /// A new instance with a fully qualified path. - /// - /// - /// - /// - /// - /// - /// - /// The name of the new file to copy to. - /// to allow an existing file to be overwritten; otherwise, . - [SecurityCritical] - public FileInfo CopyTo(string destinationPath, bool overwrite) - { - string destinationPathLp; - CopyToMoveToCore(destinationPath, false, overwrite ? CopyOptions.None : CopyOptions.FailIfExists, null, null, null, out destinationPathLp, PathFormat.RelativePath); - return new FileInfo(Transaction, destinationPathLp, PathFormat.LongFullPath); - } - - #endregion // .NET - - - #region AlphaFS - - /// [AlphaFS] Copies an existing file to a new file, disallowing the overwriting of an existing file. - /// - /// Use this method to prevent overwriting of an existing file by default. - /// Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - /// If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - /// - /// - /// A new instance with a fully qualified path. - /// - /// - /// - /// - /// - /// - /// - /// The name of the new file to copy to. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public FileInfo CopyTo(string destinationPath, PathFormat pathFormat) - { - string destinationPathLp; - CopyToMoveToCore(destinationPath, false, CopyOptions.FailIfExists, null, null, null, out destinationPathLp, pathFormat); - return new FileInfo(Transaction, destinationPathLp, PathFormat.LongFullPath); - } - - - - /// [AlphaFS] Copies an existing file to a new file, allowing the overwriting of an existing file. - /// - /// Use this method to allow or prevent overwriting of an existing file. - /// Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - /// If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - /// - /// - /// A new instance with a fully qualified path. - /// - /// - /// - /// - /// - /// - /// - /// The name of the new file to copy to. - /// to allow an existing file to be overwritten; otherwise, . - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public FileInfo CopyTo(string destinationPath, bool overwrite, PathFormat pathFormat) - { - string destinationPathLp; - CopyToMoveToCore(destinationPath, false, overwrite ? CopyOptions.None : CopyOptions.FailIfExists, null, null, null, out destinationPathLp, pathFormat); - return new FileInfo(Transaction, destinationPathLp, PathFormat.LongFullPath); - } - - - - /// [AlphaFS] Copies an existing file to a new file, allowing the overwriting of an existing file, can be specified. - /// - /// Option is recommended for very large file transfers. - /// Use this method to allow or prevent overwriting of an existing file. - /// Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - /// If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - /// - /// - /// A new instance with a fully qualified path. - /// - /// - /// - /// - /// - /// - /// - /// The name of the new file to copy to. - /// that specify how the file is to be copied. - [SecurityCritical] - public FileInfo CopyTo(string destinationPath, CopyOptions copyOptions) - { - string destinationPathLp; - CopyToMoveToCore(destinationPath, false, copyOptions, null, null, null, out destinationPathLp, PathFormat.RelativePath); - return new FileInfo(Transaction, destinationPathLp, PathFormat.LongFullPath); - } - - /// [AlphaFS] Copies an existing file to a new file, allowing the overwriting of an existing file, can be specified. - /// - /// Option is recommended for very large file transfers. - /// Use this method to allow or prevent overwriting of an existing file. - /// Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - /// If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - /// - /// - /// A new instance with a fully qualified path. - /// - /// - /// - /// - /// - /// - /// - /// The name of the new file to copy to. - /// that specify how the file is to be copied. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public FileInfo CopyTo(string destinationPath, CopyOptions copyOptions, PathFormat pathFormat) - { - string destinationPathLp; - CopyToMoveToCore(destinationPath, false, copyOptions, null, null, null, out destinationPathLp, pathFormat); - return new FileInfo(Transaction, destinationPathLp, PathFormat.LongFullPath); - } - - - - /// [AlphaFS] Copies an existing file to a new file, allowing the overwriting of an existing file, can be specified. - /// - /// Option is recommended for very large file transfers. - /// Use this method to allow or prevent overwriting of an existing file. - /// Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - /// If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - /// - /// - /// A new instance with a fully qualified path. - /// - /// - /// - /// - /// - /// - /// - /// The name of the new file to copy to. - /// that specify how the file is to be copied. - /// if original Timestamps must be preserved, otherwise. - [SecurityCritical] - public FileInfo CopyTo(string destinationPath, CopyOptions copyOptions, bool preserveDates) - { - string destinationPathLp; - CopyToMoveToCore(destinationPath, preserveDates, copyOptions, null, null, null, out destinationPathLp, PathFormat.RelativePath); - return new FileInfo(Transaction, destinationPathLp, PathFormat.LongFullPath); - } - - /// [AlphaFS] Copies an existing file to a new file, allowing the overwriting of an existing file, can be specified. - /// - /// Option is recommended for very large file transfers. - /// Use this method to allow or prevent overwriting of an existing file. - /// Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - /// If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - /// - /// - /// A new instance with a fully qualified path. - /// - /// - /// - /// - /// - /// - /// - /// The name of the new file to copy to. - /// that specify how the file is to be copied. - /// if original Timestamps must be preserved, otherwise. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public FileInfo CopyTo(string destinationPath, CopyOptions copyOptions, bool preserveDates, PathFormat pathFormat) - { - string destinationPathLp; - CopyToMoveToCore(destinationPath, preserveDates, copyOptions, null, null, null, out destinationPathLp, pathFormat); - return new FileInfo(Transaction, destinationPathLp, PathFormat.LongFullPath); - } - - - - /// [AlphaFS] Copies an existing file to a new file, allowing the overwriting of an existing file, can be specified. - /// and the possibility of notifying the application of its progress through a callback function. - /// - /// Option is recommended for very large file transfers. - /// Use this method to allow or prevent overwriting of an existing file. - /// Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - /// If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - /// - /// - /// A class with details of the Copy action. - /// - /// - /// - /// - /// - /// - /// - /// The name of the new file to copy to. - /// that specify how the file is to be copied. - /// A callback function that is called each time another portion of the file has been copied. This parameter can be . - /// The argument to be passed to the callback function. This parameter can be . - [SecurityCritical] - public CopyMoveResult CopyTo(string destinationPath, CopyOptions copyOptions, CopyMoveProgressRoutine progressHandler, object userProgressData) - { - string destinationPathLp; - var cmr = CopyToMoveToCore(destinationPath, false, copyOptions, null, progressHandler, userProgressData, out destinationPathLp, PathFormat.RelativePath); - CopyToMoveToCoreRefresh(destinationPath, destinationPathLp); - return cmr; - } - - /// [AlphaFS] Copies an existing file to a new file, allowing the overwriting of an existing file, can be specified. - /// - /// Option is recommended for very large file transfers. - /// Use this method to allow or prevent overwriting of an existing file. - /// Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - /// If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - /// - /// - /// A class with details of the Copy action. - /// - /// - /// - /// - /// - /// - /// - /// The name of the new file to copy to. - /// that specify how the file is to be copied. - /// A callback function that is called each time another portion of the file has been copied. This parameter can be . - /// The argument to be passed to the callback function. This parameter can be . - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public CopyMoveResult CopyTo(string destinationPath, CopyOptions copyOptions, CopyMoveProgressRoutine progressHandler, object userProgressData, PathFormat pathFormat) - { - string destinationPathLp; - var cmr = CopyToMoveToCore(destinationPath, false, copyOptions, null, progressHandler, userProgressData, out destinationPathLp, pathFormat); - CopyToMoveToCoreRefresh(destinationPath, destinationPathLp); - return cmr; - } - - - - /// [AlphaFS] Copies an existing file to a new file, allowing the overwriting of an existing file, can be specified. - /// and the possibility of notifying the application of its progress through a callback function. - /// - /// Option is recommended for very large file transfers. - /// Use this method to allow or prevent overwriting of an existing file. - /// Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - /// If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - /// - /// - /// A class with details of the Copy action. - /// - /// - /// - /// - /// - /// - /// - /// The name of the new file to copy to. - /// that specify how the file is to be copied. - /// if original Timestamps must be preserved, otherwise. - /// A callback function that is called each time another portion of the file has been copied. This parameter can be . - /// The argument to be passed to the callback function. This parameter can be . - [SecurityCritical] - public CopyMoveResult CopyTo(string destinationPath, CopyOptions copyOptions, bool preserveDates, CopyMoveProgressRoutine progressHandler, object userProgressData) - { - string destinationPathLp; - var cmr = CopyToMoveToCore(destinationPath, preserveDates, copyOptions, null, progressHandler, userProgressData, out destinationPathLp, PathFormat.RelativePath); - CopyToMoveToCoreRefresh(destinationPath, destinationPathLp); - return cmr; - } - - /// [AlphaFS] Copies an existing file to a new file, allowing the overwriting of an existing file, can be specified. - /// and the possibility of notifying the application of its progress through a callback function. - /// - /// Option is recommended for very large file transfers. - /// Use this method to allow or prevent overwriting of an existing file. - /// Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - /// If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - /// - /// - /// A class with details of the Copy action. - /// - /// - /// - /// - /// - /// - /// - /// The name of the new file to copy to. - /// that specify how the file is to be copied. - /// if original Timestamps must be preserved, otherwise. - /// A callback function that is called each time another portion of the file has been copied. This parameter can be . - /// The argument to be passed to the callback function. This parameter can be . - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public CopyMoveResult CopyTo(string destinationPath, CopyOptions copyOptions, bool preserveDates, CopyMoveProgressRoutine progressHandler, object userProgressData, PathFormat pathFormat) - { - string destinationPathLp; - var cmr = CopyToMoveToCore(destinationPath, preserveDates, copyOptions, null, progressHandler, userProgressData, out destinationPathLp, pathFormat); - CopyToMoveToCoreRefresh(destinationPath, destinationPathLp); - return cmr; - } - - #endregion // AlphaFS - - #endregion // CopyTo - - - #region MoveTo - - #region .NET - - /// Moves a specified file to a new location, providing the option to specify a new file name. - /// - /// Use this method to prevent overwriting of an existing file by default. - /// This method works across disk volumes. - /// For example, the file c:\MyFile.txt can be moved to d:\public and renamed NewFile.txt. - /// Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - /// If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - /// - /// - /// A class with details of the Move action. - /// - /// - /// - /// - /// - /// - /// - /// The path to move the file to, which can specify a different file name. - [SecurityCritical] - public CopyMoveResult MoveTo(string destinationPath) - { - string destinationPathLp; - var copyMoveResult = CopyToMoveToCore(destinationPath, false, null, MoveOptions.CopyAllowed, null, null, out destinationPathLp, PathFormat.RelativePath); - CopyToMoveToCoreRefresh(destinationPath, destinationPathLp); - - return copyMoveResult; - } - - #endregion // .NET - - - #region AlphaFS - - /// [AlphaFS] Moves a specified file to a new location, providing the option to specify a new file name. - /// Returns a new instance with a fully qualified path when successfully moved, - /// - /// Use this method to prevent overwriting of an existing file by default. - /// This method works across disk volumes. - /// For example, the file c:\MyFile.txt can be moved to d:\public and renamed NewFile.txt. - /// Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - /// If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable - /// behavior. - /// - /// - /// - /// - /// - /// - /// - /// - /// - /// The path to move the file to, which can specify a different file name. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public FileInfo MoveTo(string destinationPath, PathFormat pathFormat) - { - string destinationPathLp; - CopyToMoveToCore(destinationPath, false, null, MoveOptions.CopyAllowed, null, null, out destinationPathLp, pathFormat); - return new FileInfo(Transaction, destinationPathLp, PathFormat.LongFullPath); - } - - - - /// [AlphaFS] Moves a specified file to a new location, providing the option to specify a new file name, can be specified. - /// Returns a new instance with a fully qualified path when successfully moved, - /// - /// Use this method to allow or prevent overwriting of an existing file. - /// This method works across disk volumes. - /// For example, the file c:\MyFile.txt can be moved to d:\public and renamed NewFile.txt. - /// Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - /// If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable - /// behavior. - /// - /// - /// - /// - /// - /// - /// - /// - /// - /// The path to move the file to, which can specify a different file name. - /// that specify how the directory is to be moved. This parameter can be . - [SecurityCritical] - public FileInfo MoveTo(string destinationPath, MoveOptions moveOptions) - { - string destinationPathLp; - CopyToMoveToCore(destinationPath, false, null, moveOptions, null, null, out destinationPathLp, PathFormat.RelativePath); - return new FileInfo(Transaction, destinationPathLp, PathFormat.LongFullPath); - } - - /// [AlphaFS] Moves a specified file to a new location, providing the option to specify a new file name, can be specified. - /// Returns a new instance with a fully qualified path when successfully moved, - /// - /// Use this method to allow or prevent overwriting of an existing file. - /// This method works across disk volumes. - /// For example, the file c:\MyFile.txt can be moved to d:\public and renamed NewFile.txt. - /// Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - /// If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable - /// behavior. - /// - /// - /// - /// - /// - /// - /// - /// - /// - /// The path to move the file to, which can specify a different file name. - /// that specify how the directory is to be moved. This parameter can be . - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public FileInfo MoveTo(string destinationPath, MoveOptions moveOptions, PathFormat pathFormat) - { - string destinationPathLp; - CopyToMoveToCore(destinationPath, false, null, moveOptions, null, null, out destinationPathLp, pathFormat); - return new FileInfo(Transaction, destinationPathLp, PathFormat.LongFullPath); - } - - - - /// [AlphaFS] Moves a specified file to a new location, providing the option to specify a new file name, can be specified, - /// and the possibility of notifying the application of its progress through a callback function. - /// - /// Use this method to allow or prevent overwriting of an existing file. - /// This method works across disk volumes. - /// For example, the file c:\MyFile.txt can be moved to d:\public and renamed NewFile.txt. - /// Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - /// If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - /// - /// - /// A class with the status of the Move action. - /// - /// - /// - /// - /// - /// - /// - /// The path to move the file to, which can specify a different file name. - /// that specify how the directory is to be moved. This parameter can be . - /// A callback function that is called each time another portion of the directory has been moved. This parameter can be . - /// The argument to be passed to the callback function. This parameter can be . - [SecurityCritical] - public CopyMoveResult MoveTo(string destinationPath, MoveOptions moveOptions, CopyMoveProgressRoutine progressHandler, object userProgressData) - { - string destinationPathLp; - var cmr = CopyToMoveToCore(destinationPath, false, null, moveOptions, progressHandler, userProgressData, out destinationPathLp, PathFormat.RelativePath); - CopyToMoveToCoreRefresh(destinationPath, destinationPathLp); - return cmr; - } - - /// [AlphaFS] Moves a specified file to a new location, providing the option to specify a new file name, can be specified. - /// - /// Use this method to allow or prevent overwriting of an existing file. - /// This method works across disk volumes. - /// For example, the file c:\MyFile.txt can be moved to d:\public and renamed NewFile.txt. - /// Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - /// If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - /// - /// - /// A class with the status of the Move action. - /// - /// - /// - /// - /// - /// - /// - /// The path to move the file to, which can specify a different file name. - /// that specify how the directory is to be moved. This parameter can be . - /// A callback function that is called each time another portion of the directory has been moved. This parameter can be . - /// The argument to be passed to the callback function. This parameter can be . - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public CopyMoveResult MoveTo(string destinationPath, MoveOptions moveOptions, CopyMoveProgressRoutine progressHandler, object userProgressData, PathFormat pathFormat) - { - string destinationPathLp; - var cmr = CopyToMoveToCore(destinationPath, false, null, moveOptions, progressHandler, userProgressData, out destinationPathLp, pathFormat); - CopyToMoveToCoreRefresh(destinationPath, destinationPathLp); - return cmr; - } - - #endregion // AlphaFS - - #endregion // MoveTo - - - #region Internal Methods - - /// Copy/move an existing file to a new file, allowing the overwriting of an existing file. - /// - /// Option is recommended for very large file transfers. - /// Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - /// If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - /// - /// - /// A class with the status of the Copy or Move action. - /// A full path string to the destination directory - /// if original Timestamps must be preserved, otherwise. - /// This parameter can be . Use to specify how the file is to be copied. - /// This parameter can be . Use that specify how the file is to be moved. - /// This parameter can be . A callback function that is called each time another portion of the file has been copied. - /// This parameter can be . The argument to be passed to the callback function. - /// [out] Returns the retrieved long full path. - /// Indicates the format of the path parameter(s). - /// - /// - /// - /// - /// - /// - [SecurityCritical] - private CopyMoveResult CopyToMoveToCore(string destinationPath, bool preserveDates, CopyOptions? copyOptions, MoveOptions? moveOptions, CopyMoveProgressRoutine progressHandler, object userProgressData, out string longFullPath, PathFormat pathFormat) - { - var destinationPathLp = Path.GetExtendedLengthPathCore(Transaction, destinationPath, pathFormat, GetFullPathOptions.TrimEnd | GetFullPathOptions.RemoveTrailingDirectorySeparator | GetFullPathOptions.FullCheck); - - longFullPath = destinationPathLp; - - // Returns false when CopyMoveProgressResult is PROGRESS_CANCEL or PROGRESS_STOP. - return File.CopyMoveCore(false, Transaction, LongFullName, destinationPathLp, preserveDates, copyOptions, moveOptions, progressHandler, userProgressData, null, PathFormat.LongFullPath); - } - - - private void CopyToMoveToCoreRefresh(string destinationPath, string destinationPathLp) - { - LongFullName = destinationPathLp; - FullPath = Path.GetRegularPathCore(destinationPathLp, GetFullPathOptions.None, false); - - OriginalPath = destinationPath; - DisplayPath = Path.GetRegularPathCore(OriginalPath, GetFullPathOptions.None, false); - - _name = Path.GetFileName(destinationPathLp, true); - - // Flush any cached information about the file. - Reset(); - } - - #endregion // Internal Methods - } -} diff --git a/AlphaFS/Filesystem/FileInfo Class/FileInfo.Create.cs b/AlphaFS/Filesystem/FileInfo Class/FileInfo.Create.cs deleted file mode 100644 index 0a36e19..0000000 --- a/AlphaFS/Filesystem/FileInfo Class/FileInfo.Create.cs +++ /dev/null @@ -1,41 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System.IO; -using System.Security; - -namespace Alphaleonis.Win32.Filesystem -{ - partial class FileInfo - { - #region .NET - - /// Creates a file. - /// A new file. - [SecurityCritical] - public FileStream Create() - { - return File.CreateFileStreamCore(Transaction, LongFullName, ExtendedFileAttributes.Normal, null, FileMode.Create, FileAccess.ReadWrite, FileShare.None, NativeMethods.DefaultFileBufferSize, PathFormat.LongFullPath); - } - - #endregion // .NET - } -} diff --git a/AlphaFS/Filesystem/FileInfo Class/FileInfo.CreateText.cs b/AlphaFS/Filesystem/FileInfo Class/FileInfo.CreateText.cs deleted file mode 100644 index 492769f..0000000 --- a/AlphaFS/Filesystem/FileInfo Class/FileInfo.CreateText.cs +++ /dev/null @@ -1,43 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System.Diagnostics.CodeAnalysis; -using System.IO; -using System.Security; - -namespace Alphaleonis.Win32.Filesystem -{ - partial class FileInfo - { - #region .NET - - /// Creates a instance that writes a new text file. - /// A new - [SuppressMessage("Microsoft.Reliability", "CA2000:Dispose objects before losing scope")] - [SecurityCritical] - public StreamWriter CreateText() - { - return new StreamWriter(File.CreateFileStreamCore(Transaction, LongFullName, ExtendedFileAttributes.Normal, null, FileMode.Create, FileAccess.ReadWrite, FileShare.None, NativeMethods.DefaultFileBufferSize, PathFormat.LongFullPath), NativeMethods.DefaultFileEncoding); - } - - #endregion // .NET - } -} diff --git a/AlphaFS/Filesystem/FileInfo Class/FileInfo.Decompress.cs b/AlphaFS/Filesystem/FileInfo Class/FileInfo.Decompress.cs deleted file mode 100644 index e79b470..0000000 --- a/AlphaFS/Filesystem/FileInfo Class/FileInfo.Decompress.cs +++ /dev/null @@ -1,39 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System.Security; - -namespace Alphaleonis.Win32.Filesystem -{ - partial class FileInfo - { - #region AlphaFS - - /// [AlphaFS] Decompresses an NTFS compressed file. - [SecurityCritical] - public void Decompress() - { - Device.ToggleCompressionCore(false, Transaction, LongFullName, false, PathFormat.LongFullPath); - } - - #endregion // AlphaFS - } -} diff --git a/AlphaFS/Filesystem/FileInfo Class/FileInfo.Decrypt.cs b/AlphaFS/Filesystem/FileInfo Class/FileInfo.Decrypt.cs deleted file mode 100644 index 600f8db..0000000 --- a/AlphaFS/Filesystem/FileInfo Class/FileInfo.Decrypt.cs +++ /dev/null @@ -1,39 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System.Security; - -namespace Alphaleonis.Win32.Filesystem -{ - partial class FileInfo - { - #region .NET - - /// Decrypts a file that was encrypted by the current account using the Encrypt method. - [SecurityCritical] - public void Decrypt() - { - File.EncryptDecryptFileCore(false, LongFullName, false, PathFormat.LongFullPath); - } - - #endregion // .NET - } -} diff --git a/AlphaFS/Filesystem/FileInfo Class/FileInfo.Delete.cs b/AlphaFS/Filesystem/FileInfo Class/FileInfo.Delete.cs deleted file mode 100644 index 122c6b8..0000000 --- a/AlphaFS/Filesystem/FileInfo Class/FileInfo.Delete.cs +++ /dev/null @@ -1,53 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System.IO; - -namespace Alphaleonis.Win32.Filesystem -{ - partial class FileInfo - { - #region .NET - - /// Permanently deletes a file. - /// If the file does not exist, this method does nothing. - /// - /// - public override void Delete() - { - File.DeleteFileCore(Transaction, LongFullName, false, PathFormat.LongFullPath); - } - - #endregion // .NET - - #region AlphaFS - - /// [AlphaFS] Permanently deletes a file. - /// If the file does not exist, this method does nothing. - /// overrides the read only of the file. - public void Delete(bool ignoreReadOnly) - { - File.DeleteFileCore(Transaction, LongFullName, ignoreReadOnly, PathFormat.LongFullPath); - } - - #endregion // AlphaFS - } -} diff --git a/AlphaFS/Filesystem/FileInfo Class/FileInfo.Encrypt.cs b/AlphaFS/Filesystem/FileInfo Class/FileInfo.Encrypt.cs deleted file mode 100644 index e26a0a4..0000000 --- a/AlphaFS/Filesystem/FileInfo Class/FileInfo.Encrypt.cs +++ /dev/null @@ -1,39 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System.Security; - -namespace Alphaleonis.Win32.Filesystem -{ - partial class FileInfo - { - #region .NET - - /// Encrypts a file so that only the account used to encrypt the file can decrypt it. - [SecurityCritical] - public void Encrypt() - { - File.EncryptDecryptFileCore(false, LongFullName, true, PathFormat.LongFullPath); - } - - #endregion // .NET - } -} diff --git a/AlphaFS/Filesystem/FileInfo Class/FileInfo.EnumerateAlternateDataStreams.cs b/AlphaFS/Filesystem/FileInfo Class/FileInfo.EnumerateAlternateDataStreams.cs deleted file mode 100644 index c7202a9..0000000 --- a/AlphaFS/Filesystem/FileInfo Class/FileInfo.EnumerateAlternateDataStreams.cs +++ /dev/null @@ -1,37 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System.Collections.Generic; -using System.Security; - -namespace Alphaleonis.Win32.Filesystem -{ - partial class FileInfo - { - /// [AlphaFS] Returns an enumerable collection of instances for the file. - /// An enumerable collection of instances for the file. - [SecurityCritical] - public IEnumerable EnumerateAlternateDataStreams() - { - return File.EnumerateAlternateDataStreamsCore(Transaction, LongFullName, PathFormat.LongFullPath); - } - } -} diff --git a/AlphaFS/Filesystem/FileInfo Class/FileInfo.GetAccessControl.cs b/AlphaFS/Filesystem/FileInfo Class/FileInfo.GetAccessControl.cs deleted file mode 100644 index 93ab75f..0000000 --- a/AlphaFS/Filesystem/FileInfo Class/FileInfo.GetAccessControl.cs +++ /dev/null @@ -1,50 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System.Security; -using System.Security.AccessControl; - -namespace Alphaleonis.Win32.Filesystem -{ - partial class FileInfo - { - #region .NET - - /// Gets a object that encapsulates the access control list (ACL) entries for the file described by the current object. - /// A FileSecurity object that encapsulates the access control rules for the current file. - [SecurityCritical] - public FileSecurity GetAccessControl() - { - return File.GetAccessControlCore(false, LongFullName, AccessControlSections.Access | AccessControlSections.Group | AccessControlSections.Owner, PathFormat.LongFullPath); - } - - /// Gets a object that encapsulates the specified type of access control list (ACL) entries for the file described by the current FileInfo object. - /// object that encapsulates the specified type of access control list (ACL) entries for the file described by the current FileInfo object. - /// One of the values that specifies which group of access control entries to retrieve. - [SecurityCritical] - public FileSecurity GetAccessControl(AccessControlSections includeSections) - { - return File.GetAccessControlCore(false, LongFullName, includeSections, PathFormat.LongFullPath); - } - - #endregion // .NET - } -} diff --git a/AlphaFS/Filesystem/FileInfo Class/FileInfo.GetHash.cs b/AlphaFS/Filesystem/FileInfo Class/FileInfo.GetHash.cs deleted file mode 100644 index 448d794..0000000 --- a/AlphaFS/Filesystem/FileInfo Class/FileInfo.GetHash.cs +++ /dev/null @@ -1,39 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using Alphaleonis.Win32.Security; - -namespace Alphaleonis.Win32.Filesystem -{ - partial class FileInfo - { - #region AlphaFS - - /// [AlphaFS] Calculates the hash/checksum. - /// One of the values. - public string GetHash(HashType hashType) - { - return File.GetHashCore(Transaction, LongFullName, hashType, PathFormat.LongFullPath); - } - - #endregion // AlphaFS - } -} diff --git a/AlphaFS/Filesystem/FileInfo Class/FileInfo.Open.cs b/AlphaFS/Filesystem/FileInfo Class/FileInfo.Open.cs deleted file mode 100644 index 8930685..0000000 --- a/AlphaFS/Filesystem/FileInfo Class/FileInfo.Open.cs +++ /dev/null @@ -1,89 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System.IO; -using System.Security; -using System.Security.AccessControl; - -namespace Alphaleonis.Win32.Filesystem -{ - partial class FileInfo - { - #region .NET - - /// Opens a file in the specified mode. - /// A file opened in the specified mode, with read/write access and unshared. - /// A constant specifying the mode (for example, Open or Append) in which to open the file. - [SecurityCritical] - public FileStream Open(FileMode mode) - { - return File.OpenCore(Transaction, LongFullName, mode, FileAccess.Read, FileShare.None, ExtendedFileAttributes.Normal, null, null, PathFormat.LongFullPath); - } - - /// Opens a file in the specified mode with read, write, or read/write access. - /// A object opened in the specified mode and access, and unshared. - /// A constant specifying the mode (for example, Open or Append) in which to open the file. - /// A constant specifying whether to open the file with Read, Write, or ReadWrite file access. - [SecurityCritical] - public FileStream Open(FileMode mode, FileAccess access) - { - return File.OpenCore(Transaction, LongFullName, mode, access, FileShare.None, ExtendedFileAttributes.Normal, null, null, PathFormat.LongFullPath); - } - - /// Opens a file in the specified mode with read, write, or read/write access and the specified sharing option. - /// A object opened with the specified mode, access, and sharing options. - /// A constant specifying the mode (for example, Open or Append) in which to open the file. - /// A constant specifying whether to open the file with Read, Write, or ReadWrite file access. - /// A constant specifying the type of access other objects have to this file. - [SecurityCritical] - public FileStream Open(FileMode mode, FileAccess access, FileShare share) - { - return File.OpenCore(Transaction, LongFullName, mode, access, share, ExtendedFileAttributes.Normal, null, null, PathFormat.LongFullPath); - } - - #endregion // .NET - - #region AlphaFS - - /// [AlphaFS] Opens a file in the specified mode with read, write, or read/write access. - /// A object opened in the specified mode and access, and unshared. - /// A constant specifying the mode (for example, Open or Append) in which to open the file. - /// A value that specifies whether a file is created if one does not exist, and determines whether the contents of existing files are retained or overwritten along with additional options. - [SecurityCritical] - public FileStream Open(FileMode mode, FileSystemRights rights) - { - return File.OpenCore(Transaction, LongFullName, mode, rights, FileShare.None, ExtendedFileAttributes.Normal, null, null, PathFormat.LongFullPath); - } - - /// [AlphaFS] Opens a file in the specified mode with read, write, or read/write access and the specified sharing option. - /// A object opened with the specified mode, access, and sharing options. - /// A constant specifying the mode (for example, Open or Append) in which to open the file. - /// A value that specifies whether a file is created if one does not exist, and determines whether the contents of existing files are retained or overwritten along with additional options. - /// A constant specifying the type of access other objects have to this file. - [SecurityCritical] - public FileStream Open(FileMode mode, FileSystemRights rights, FileShare share) - { - return File.OpenCore(Transaction, LongFullName, mode, rights, share, ExtendedFileAttributes.Normal, null, null, PathFormat.LongFullPath); - } - - #endregion // AlphaFS - } -} diff --git a/AlphaFS/Filesystem/FileInfo Class/FileInfo.OpenRead.cs b/AlphaFS/Filesystem/FileInfo Class/FileInfo.OpenRead.cs deleted file mode 100644 index b36478a..0000000 --- a/AlphaFS/Filesystem/FileInfo Class/FileInfo.OpenRead.cs +++ /dev/null @@ -1,38 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System.IO; -using System.Security; - -namespace Alphaleonis.Win32.Filesystem -{ - partial class FileInfo - { - /// Creates a read-only . - /// A new read-only object. - /// This method returns a read-only object with the mode set to Read. - [SecurityCritical] - public FileStream OpenRead() - { - return File.OpenCore(Transaction, LongFullName, FileMode.Open, FileAccess.Read, FileShare.Read, ExtendedFileAttributes.Normal, null, null, PathFormat.LongFullPath); - } - } -} diff --git a/AlphaFS/Filesystem/FileInfo Class/FileInfo.OpenText.cs b/AlphaFS/Filesystem/FileInfo Class/FileInfo.OpenText.cs deleted file mode 100644 index 9a1afe8..0000000 --- a/AlphaFS/Filesystem/FileInfo Class/FileInfo.OpenText.cs +++ /dev/null @@ -1,52 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System.Diagnostics.CodeAnalysis; -using System.IO; -using System.Security; -using System.Text; - -namespace Alphaleonis.Win32.Filesystem -{ - partial class FileInfo - { - /// Creates a with NativeMethods.DefaultFileEncoding encoding that reads from an existing text file. - /// A new with NativeMethods.DefaultFileEncoding encoding. - [SuppressMessage("Microsoft.Reliability", "CA2000:Dispose objects before losing scope")] - [SecurityCritical] - public StreamReader OpenText() - { - return new StreamReader(File.OpenCore(Transaction, LongFullName, FileMode.Open, FileAccess.Read, FileShare.None, ExtendedFileAttributes.Normal, null, null, PathFormat.LongFullPath), NativeMethods.DefaultFileEncoding); - } - - - /// [AlphaFS] Creates a with that reads from an existing text file. - /// A new with the specified . - /// The applied to the contents of the file. - [SuppressMessage("Microsoft.Reliability", "CA2000:Dispose objects before losing scope")] - [SecurityCritical] - public StreamReader OpenText(Encoding encoding) - { - return new StreamReader(File.OpenCore(Transaction, LongFullName, FileMode.Open, FileAccess.Read, FileShare.None, ExtendedFileAttributes.Normal, null, null, PathFormat.LongFullPath), encoding); - } - - } -} diff --git a/AlphaFS/Filesystem/FileInfo Class/FileInfo.OpenWrite.cs b/AlphaFS/Filesystem/FileInfo Class/FileInfo.OpenWrite.cs deleted file mode 100644 index 9482818..0000000 --- a/AlphaFS/Filesystem/FileInfo Class/FileInfo.OpenWrite.cs +++ /dev/null @@ -1,41 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System.IO; -using System.Security; - -namespace Alphaleonis.Win32.Filesystem -{ - partial class FileInfo - { - #region .NET - - /// Creates a write-only . - /// A write-only unshared object for a new or existing file. - [SecurityCritical] - public FileStream OpenWrite() - { - return File.OpenCore(Transaction, LongFullName, FileMode.OpenOrCreate, FileAccess.Write, FileShare.None, ExtendedFileAttributes.Normal, null, null, PathFormat.LongFullPath); - } - - #endregion // .NET - } -} diff --git a/AlphaFS/Filesystem/FileInfo Class/FileInfo.Refresh.cs b/AlphaFS/Filesystem/FileInfo Class/FileInfo.Refresh.cs deleted file mode 100644 index 6687387..0000000 --- a/AlphaFS/Filesystem/FileInfo Class/FileInfo.Refresh.cs +++ /dev/null @@ -1,39 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System.Security; - -namespace Alphaleonis.Win32.Filesystem -{ - partial class FileInfo - { - #region .NET - - /// Refreshes the state of the object. - [SecurityCritical] - public new void Refresh() - { - base.Refresh(); - } - - #endregion // .NET - } -} \ No newline at end of file diff --git a/AlphaFS/Filesystem/FileInfo Class/FileInfo.RefreshEntryInfo.cs b/AlphaFS/Filesystem/FileInfo Class/FileInfo.RefreshEntryInfo.cs deleted file mode 100644 index 8bc93d6..0000000 --- a/AlphaFS/Filesystem/FileInfo Class/FileInfo.RefreshEntryInfo.cs +++ /dev/null @@ -1,39 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System.Security; - -namespace Alphaleonis.Win32.Filesystem -{ - partial class FileInfo - { - #region AlphaFS - - /// Refreshes the state of the EntryInfo instance. - [SecurityCritical] - public new void RefreshEntryInfo() - { - base.RefreshEntryInfo(); - } - - #endregion // AlphaFS - } -} \ No newline at end of file diff --git a/AlphaFS/Filesystem/FileInfo Class/FileInfo.Replace.cs b/AlphaFS/Filesystem/FileInfo Class/FileInfo.Replace.cs deleted file mode 100644 index a616d48..0000000 --- a/AlphaFS/Filesystem/FileInfo Class/FileInfo.Replace.cs +++ /dev/null @@ -1,122 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System.Security; - -namespace Alphaleonis.Win32.Filesystem -{ - partial class FileInfo - { - #region .NET - - /// Replaces the contents of a specified file with the file described by the current object, deleting the original file, and creating a backup of the replaced file. - /// A object that encapsulates information about the file described by the parameter. - /// - /// The Replace method replaces the contents of a specified file with the contents of the file described by the current - /// object. It also creates a backup of the file that was replaced. Finally, it returns a new - /// object that describes the overwritten file. - /// - /// Pass null to the parameter if you do not want to create a backup of the file being replaced. - /// The name of a file to replace with the current file. - /// The name of a file with which to create a backup of the file described by the parameter. - [SecurityCritical] - public FileInfo Replace(string destinationFileName, string destinationBackupFileName) - { - return Replace(destinationFileName, destinationBackupFileName, false, PathFormat.RelativePath); - } - - /// Replaces the contents of a specified file with the file described by the current object, deleting the original file, and creating a backup of the replaced file. Also specifies whether to ignore merge errors. - /// A object that encapsulates information about the file described by the parameter. - /// - /// The Replace method replaces the contents of a specified file with the contents of the file described by the current - /// object. It also creates a backup of the file that was replaced. Finally, it returns a new - /// object that describes the overwritten file. - /// - /// Pass null to the parameter if you do not want to create a backup of the file being replaced. - /// The name of a file to replace with the current file. - /// The name of a file with which to create a backup of the file described by the parameter. - /// to ignore merge errors (such as attributes and ACLs) from the replaced file to the replacement file; otherwise, . - [SecurityCritical] - public FileInfo Replace(string destinationFileName, string destinationBackupFileName, bool ignoreMetadataErrors) - { - return Replace(destinationFileName, destinationBackupFileName, ignoreMetadataErrors, PathFormat.RelativePath); - } - - #endregion // .NET - - #region AlphaFS - - /// [AlphaFS] Replaces the contents of a specified file with the file described by the current object, deleting the original file, and creating a backup of the replaced file. Also specifies whether to ignore merge errors. - /// A object that encapsulates information about the file described by the parameter. - /// - /// The Replace method replaces the contents of a specified file with the contents of the file described by the current - /// object. It also creates a backup of the file that was replaced. Finally, it returns a new - /// object that describes the overwritten file. - /// - /// Pass null to the parameter if you do not want to create a backup of the file being replaced. - /// The name of a file to replace with the current file. - /// The name of a file with which to create a backup of the file described by the parameter. - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public FileInfo Replace(string destinationFileName, string destinationBackupFileName, PathFormat pathFormat) - { - var options = GetFullPathOptions.RemoveTrailingDirectorySeparator | GetFullPathOptions.FullCheck; - - string destinationFileNameLp = Path.GetExtendedLengthPathCore(Transaction, destinationFileName, pathFormat, options); - string destinationBackupFileNameLp = destinationBackupFileName != null - ? Path.GetExtendedLengthPathCore(Transaction, destinationBackupFileName, pathFormat, options) - : null; - - File.ReplaceCore(LongFullName, destinationFileNameLp, destinationBackupFileNameLp, false, PathFormat.LongFullPath); - - return new FileInfo(Transaction, destinationFileNameLp, PathFormat.LongFullPath); - } - - /// [AlphaFS] Replaces the contents of a specified file with the file described by the current object, deleting the original file, and creating a backup of the replaced file. Also specifies whether to ignore merge errors. - /// A object that encapsulates information about the file described by the parameter. - /// - /// The Replace method replaces the contents of a specified file with the contents of the file described by the current - /// object. It also creates a backup of the file that was replaced. Finally, it returns a new - /// object that describes the overwritten file. - /// - /// Pass null to the parameter if you do not want to create a backup of the file being replaced. - /// The name of a file to replace with the current file. - /// The name of a file with which to create a backup of the file described by the parameter. - /// to ignore merge errors (such as attributes and ACLs) from the replaced file to the replacement file; otherwise, . - /// Indicates the format of the path parameter(s). - [SecurityCritical] - public FileInfo Replace(string destinationFileName, string destinationBackupFileName, bool ignoreMetadataErrors, PathFormat pathFormat) - { - var options = GetFullPathOptions.RemoveTrailingDirectorySeparator | GetFullPathOptions.FullCheck; - - string destinationFileNameLp = Path.GetExtendedLengthPathCore(Transaction, destinationFileName, pathFormat, options); - string destinationBackupFileNameLp = destinationBackupFileName != null - ? Path.GetExtendedLengthPathCore(Transaction, destinationBackupFileName, pathFormat, options) - : null; - - File.ReplaceCore(LongFullName, destinationFileNameLp, destinationBackupFileNameLp, ignoreMetadataErrors, PathFormat.LongFullPath); - - return new FileInfo(Transaction, destinationFileNameLp, PathFormat.LongFullPath); - } - - #endregion // AlphaFS - } -} diff --git a/AlphaFS/Filesystem/FileInfo Class/FileInfo.SetAccessControl.cs b/AlphaFS/Filesystem/FileInfo Class/FileInfo.SetAccessControl.cs deleted file mode 100644 index 6f85888..0000000 --- a/AlphaFS/Filesystem/FileInfo Class/FileInfo.SetAccessControl.cs +++ /dev/null @@ -1,57 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System.Diagnostics.CodeAnalysis; -using System.Security; -using System.Security.AccessControl; - -namespace Alphaleonis.Win32.Filesystem -{ - partial class FileInfo - { - /// Applies access control list (ACL) entries described by a FileSecurity object to the file described by the current FileInfo object. - /// - /// The SetAccessControl method applies access control list (ACL) entries to the current file that represents the noninherited ACL - /// list. Use the SetAccessControl method whenever you need to add or remove ACL entries from a file. - /// - /// A object that describes an access control list (ACL) entry to apply to the current file. - [SuppressMessage("Microsoft.Design", "CA1011:ConsiderPassingBaseTypesAsParameters")] - [SecurityCritical] - public void SetAccessControl(FileSecurity fileSecurity) - { - File.SetAccessControlCore(LongFullName, null, fileSecurity, AccessControlSections.All, PathFormat.LongFullPath); - } - - /// Applies access control list (ACL) entries described by a FileSecurity object to the file described by the current FileInfo object. - /// - /// The SetAccessControl method applies access control list (ACL) entries to the current file that represents the noninherited ACL - /// list. Use the SetAccessControl method whenever you need to add or remove ACL entries from a file. - /// - /// A object that describes an access control list (ACL) entry to apply to the current file. - /// One or more of the values that specifies the type of access control list (ACL) information to set. - [SuppressMessage("Microsoft.Design", "CA1011:ConsiderPassingBaseTypesAsParameters")] - [SecurityCritical] - public void SetAccessControl(FileSecurity fileSecurity, AccessControlSections includeSections) - { - File.SetAccessControlCore(LongFullName, null, fileSecurity, includeSections, PathFormat.LongFullPath); - } - } -} diff --git a/AlphaFS/Filesystem/FileInfo Class/FileInfo.ToString.cs b/AlphaFS/Filesystem/FileInfo Class/FileInfo.ToString.cs deleted file mode 100644 index b826686..0000000 --- a/AlphaFS/Filesystem/FileInfo Class/FileInfo.ToString.cs +++ /dev/null @@ -1,33 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -namespace Alphaleonis.Win32.Filesystem -{ - partial class FileInfo - { - /// Returns the path as a string. - /// The path. - public override string ToString() - { - return DisplayPath; - } - } -} diff --git a/AlphaFS/Filesystem/FileInfo Class/FileInfo.cs b/AlphaFS/Filesystem/FileInfo Class/FileInfo.cs deleted file mode 100644 index 89fa10f..0000000 --- a/AlphaFS/Filesystem/FileInfo Class/FileInfo.cs +++ /dev/null @@ -1,250 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System; -using System.Diagnostics.CodeAnalysis; -using System.Globalization; -using System.IO; -using System.Security; - -namespace Alphaleonis.Win32.Filesystem -{ - /// Provides properties and instance methods for the creation, copying, deletion, moving, and opening of files, and aids in the creation of objects. This class cannot be inherited. - [SerializableAttribute] - public sealed partial class FileInfo : FileSystemInfo - { - #region Constructors - - #region .NET - - /// Initializes a new instance of the class, which acts as a wrapper for a file path. - /// The fully qualified name of the new file, or the relative file name. Do not end the path with the directory separator character. - /// This constructor does not check if a file exists. This constructor is a placeholder for a string that is used to access the file in subsequent operations. - public FileInfo(string fileName) : this(null, fileName, PathFormat.RelativePath) - { - } - - #endregion // .NET - - #region AlphaFS - - #region Non-Transactional - - /// [AlphaFS] Initializes a new instance of the class, which acts as a wrapper for a file path. - /// The fully qualified name of the new file, or the relative file name. Do not end the path with the directory separator character. - /// Indicates the format of the path parameter(s). - /// This constructor does not check if a file exists. This constructor is a placeholder for a string that is used to access the file in subsequent operations. - public FileInfo(string fileName, PathFormat pathFormat) : this(null, fileName, pathFormat) - { - } - - #endregion // Non-Transactional - - #region Transactional - - /// [AlphaFS] Initializes a new instance of the class, which acts as a wrapper for a file path. - /// The transaction. - /// The fully qualified name of the new file, or the relative file name. Do not end the path with the directory separator character. - /// This constructor does not check if a file exists. This constructor is a placeholder for a string that is used to access the file in subsequent operations. - public FileInfo(KernelTransaction transaction, string fileName) : this(transaction, fileName, PathFormat.RelativePath) - { - } - - /// [AlphaFS] Initializes a new instance of the class, which acts as a wrapper for a file path. - /// The transaction. - /// The fully qualified name of the new file, or the relative file name. Do not end the path with the directory separator character. - /// Indicates the format of the path parameter(s). - /// This constructor does not check if a file exists. This constructor is a placeholder for a string that is used to access the file in subsequent operations. - public FileInfo(KernelTransaction transaction, string fileName, PathFormat pathFormat) - { - InitializeCore(false, transaction, fileName, pathFormat); - - _name = Path.GetFileName(Path.RemoveTrailingDirectorySeparator(fileName, false), pathFormat != PathFormat.LongFullPath); - } - - #endregion // Transacted - - #endregion // AlphaFS - - #endregion // Constructors - - #region Properties - - #region .NET - - #region Directory - - /// Gets an instance of the parent directory. - /// A object representing the parent directory of this file. - /// To get the parent directory as a string, use the DirectoryName property. - /// - public DirectoryInfo Directory - { - get - { - string dirName = DirectoryName; - return dirName == null ? null : new DirectoryInfo(Transaction, dirName, PathFormat.FullPath); - } - } - - #endregion // Directory - - #region DirectoryName - - /// Gets a string representing the directory's full path. - /// A string representing the directory's full path. - /// - /// To get the parent directory as a DirectoryInfo object, use the Directory property. - /// When first called, FileInfo calls Refresh and caches information about the file. - /// On subsequent calls, you must call Refresh to get the latest copy of the information. - /// - /// - public string DirectoryName - { - [SecurityCritical] get { return Path.GetDirectoryName(FullPath, false); } - } - - #endregion // DirectoryName - - #region Exists - - /// Gets a value indicating whether the file exists. - /// if the file exists; otherwise, . - /// - /// The property returns if any error occurs while trying to determine if the specified file exists. - /// This can occur in situations that raise exceptions such as passing a file name with invalid characters or too many characters, - /// a failing or missing disk, or if the caller does not have permission to read the file. - /// - [SuppressMessage("Microsoft.Design", "CA1031:DoNotCatchGeneralExceptionTypes")] - public override bool Exists - { - [SecurityCritical] - get - { - try - { - if (DataInitialised == -1) - Refresh(); - - FileAttributes attrs = Win32AttributeData.dwFileAttributes; - return DataInitialised == 0 && attrs != (FileAttributes) (-1) && (attrs & FileAttributes.Directory) == 0; - } - catch - { - return false; - } - } - } - - #endregion // Exists - - #region IsReadOnly - - /// Gets or sets a value that determines if the current file is read only. - /// if the current file is read only; otherwise, . - /// - /// Use the IsReadOnly property to quickly determine or change whether the current file is read only. - /// When first called, FileInfo calls Refresh and caches information about the file. - /// On subsequent calls, you must call Refresh to get the latest copy of the information. - /// - /// - /// - public bool IsReadOnly - { - get { return EntryInfo == null || EntryInfo.IsReadOnly; } - - set - { - if (value) - Attributes |= FileAttributes.ReadOnly; - else - Attributes &= ~FileAttributes.ReadOnly; - } - } - - #endregion // IsReadOnly - - #region Length - - /// Gets the size, in bytes, of the current file. - /// The size of the current file in bytes. - /// - /// The value of the Length property is pre-cached - /// To get the latest value, call the Refresh method. - /// - /// - /// - [SuppressMessage("Microsoft.Design", "CA1065:DoNotRaiseExceptionsInUnexpectedLocations")] - public long Length - { - [SecurityCritical] - get - { - if (DataInitialised == -1) - { - Win32AttributeData = new NativeMethods.WIN32_FILE_ATTRIBUTE_DATA(); - Refresh(); - } - - // MSDN: .NET 3.5+: IOException: Refresh cannot initialize the data. - if (DataInitialised != 0) - NativeError.ThrowException(DataInitialised, LongFullName); - - FileAttributes attrs = Win32AttributeData.dwFileAttributes; - - // MSDN: .NET 3.5+: FileNotFoundException: The file does not exist or the Length property is called for a directory. - if (attrs == (FileAttributes) (-1)) - NativeError.ThrowException(Win32Errors.ERROR_FILE_NOT_FOUND, LongFullName); - - // MSDN: .NET 3.5+: FileNotFoundException: The file does not exist or the Length property is called for a directory. - if ((attrs & FileAttributes.Directory) == FileAttributes.Directory) - NativeError.ThrowException(Win32Errors.ERROR_FILE_NOT_FOUND, string.Format(CultureInfo.CurrentCulture, Resources.Target_File_Is_A_Directory, LongFullName)); - - return Win32AttributeData.FileSize; - } - } - - #endregion // Length - - #region Name - - private string _name; - - /// Gets the name of the file. - /// The name of the file. - /// - /// The name of the file includes the file extension. - /// When first called, calls Refresh and caches information about the file. - /// On subsequent calls, you must call Refresh to get the latest copy of the information. - /// The name of the file includes the file extension. - /// - public override string Name - { - get { return _name; } - } - - #endregion // Name - - #endregion // .NET - - #endregion // Properties - } -} diff --git a/AlphaFS/Filesystem/FileSystemEntryInfo.cs b/AlphaFS/Filesystem/FileSystemEntryInfo.cs deleted file mode 100644 index 86c28e3..0000000 --- a/AlphaFS/Filesystem/FileSystemEntryInfo.cs +++ /dev/null @@ -1,254 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System; -using System.IO; -using System.Security; - -namespace Alphaleonis.Win32.Filesystem -{ - /// Represents information about a file system entry. - /// This class cannot be inherited. - /// - [SerializableAttribute] - [SecurityCritical] - public sealed class FileSystemEntryInfo - { - /// Initializes a new instance of the class. - /// The NativeMethods.WIN32_FIND_DATA structure. - internal FileSystemEntryInfo(NativeMethods.WIN32_FIND_DATA findData) - { - Win32FindData = findData; - } - - - #region Properties - - /// Gets the 8.3 version of the filename. - /// the 8.3 version of the filename. - public string AlternateFileName - { - get { return Win32FindData.cAlternateFileName; } - } - - - /// Gets the attributes. - /// The attributes. - public FileAttributes Attributes - { - get { return Win32FindData.dwFileAttributes; } - } - - - /// Gets the time this entry was created. - /// The time this entry was created. - public DateTime CreationTime - { - get { return CreationTimeUtc.ToLocalTime(); } - } - - - /// Gets the time, in coordinated universal time (UTC), this entry was created. - /// The time, in coordinated universal time (UTC), this entry was created. - public DateTime CreationTimeUtc - { - get { return DateTime.FromFileTimeUtc(Win32FindData.ftCreationTime); } - } - - - /// Gets the name of the file. - /// The name of the file. - public string FileName - { - get { return Win32FindData.cFileName; } - } - - - /// Gets the size of the file. - /// The size of the file. - public long FileSize - { - get { return NativeMethods.ToLong(Win32FindData.nFileSizeHigh, Win32FindData.nFileSizeLow); } - } - - - private string _fullPath; - - /// The full path of the file system object. - public string FullPath - { - get { return _fullPath; } - set - { - LongFullPath = value; - _fullPath = Path.GetRegularPathCore(LongFullPath, GetFullPathOptions.None, false); - } - } - - - /// Gets a value indicating whether this instance is compressed. - /// if this instance is compressed; otherwise, . - /// - /// It is not possible to change the compression status of a File object by using the SetAttributes method. - /// Instead, you must actually compress the file using either a compression tool or one of the classes in the namespace. - /// - public bool IsCompressed - { - get { return Attributes != (FileAttributes)(-1) && (Attributes & FileAttributes.Compressed) != 0; } - } - - - /// Gets a value indicating whether this instance is hidden, and thus is not included in an ordinary directory listing. - /// if this instance is hidden; otherwise, . - public bool IsHidden - { - get { return Attributes != (FileAttributes)(-1) && (Attributes & FileAttributes.Hidden) != 0; } - } - - - /// Gets a value indicating whether this instance represents a directory. - /// if this instance represents a directory; otherwise, . - public bool IsDirectory - { - get { return Attributes != (FileAttributes)(-1) && (Attributes & FileAttributes.Directory) != 0; } - } - - - /// Gets a value indicating whether this instance is encrypted (EFS). - /// if this instance is encrypted (EFS); otherwise, . - /// - /// For a file, this means that all data in the file is encrypted. - /// For a directory, this means that encryption is the default for newly created files and directories. - /// - public bool IsEncrypted - { - get { return Attributes != (FileAttributes) (-1) && (Attributes & FileAttributes.Encrypted) != 0; } - } - - - /// Gets a value indicating whether this instance is a mount point. - /// if this instance is a mount point; otherwise, . - public bool IsMountPoint - { - get { return ReparsePointTag == ReparsePointTag.MountPoint; } - } - - - /// Gets a value indicating whether this instance is offline. The data of the file is not immediately available. - /// if this instance is offline; otherwise, . - public bool IsOffline - { - get { return Attributes != (FileAttributes)(-1) && (Attributes & FileAttributes.Offline) != 0; } - } - - - /// Gets a value indicating whether this instance is read-only. - /// if this instance is read-only; otherwise, . - public bool IsReadOnly - { - get { return Attributes != (FileAttributes)(-1) && (Attributes & FileAttributes.ReadOnly) != 0; } - } - - - /// Gets a value indicating whether this instance contains a reparse point, which is a block of user-defined data associated with a file or a directory. - /// if this instance contains a reparse point; otherwise, . - public bool IsReparsePoint - { - get { return Attributes != (FileAttributes)(-1) && (Attributes & FileAttributes.ReparsePoint) != 0; } - } - - - /// Gets a value indicating whether this instance is a symbolic link. - /// if this instance is a symbolic link; otherwise, . - public bool IsSymbolicLink - { - get { return ReparsePointTag == ReparsePointTag.SymLink; } - } - - - /// Gets the time this entry was last accessed. - /// The time this entry was last accessed. - public DateTime LastAccessTime - { - get { return LastAccessTimeUtc.ToLocalTime(); } - } - - - /// Gets the time, in coordinated universal time (UTC), this entry was last accessed. - /// The time, in coordinated universal time (UTC), this entry was last accessed. - public DateTime LastAccessTimeUtc - { - get { return DateTime.FromFileTimeUtc(Win32FindData.ftLastAccessTime); } - } - - - /// Gets the time this entry was last modified. - /// The time this entry was last modified. - public DateTime LastWriteTime - { - get { return LastWriteTimeUtc.ToLocalTime(); } - } - - - /// Gets the time, in coordinated universal time (UTC), this entry was last modified. - /// The time, in coordinated universal time (UTC), this entry was last modified. - public DateTime LastWriteTimeUtc - { - get { return DateTime.FromFileTimeUtc(Win32FindData.ftLastWriteTime); } - } - - - private string _longFullPath; - - /// The full path of the file system object in Unicode (LongPath) format. - public string LongFullPath - { - get { return _longFullPath; } - private set { _longFullPath = Path.GetLongPathCore(value, GetFullPathOptions.None); } - } - - - /// Gets the reparse point tag of this entry. - /// The reparse point tag of this entry. - public ReparsePointTag ReparsePointTag - { - get { return IsReparsePoint ? Win32FindData.dwReserved0 : ReparsePointTag.None; } - } - - - /// Gets internal WIN32 FIND Data - internal NativeMethods.WIN32_FIND_DATA Win32FindData { get; private set; } - - #endregion // Properties - - - #region Methods - - /// Returns the of the instance. - /// The instance as a string. - public override string ToString() - { - return FullPath; - } - - #endregion // Methods - } -} diff --git a/AlphaFS/Filesystem/FileSystemInfo.cs b/AlphaFS/Filesystem/FileSystemInfo.cs deleted file mode 100644 index b89f9ee..0000000 --- a/AlphaFS/Filesystem/FileSystemInfo.cs +++ /dev/null @@ -1,643 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System; -using System.Diagnostics.CodeAnalysis; -using System.IO; -using System.Runtime.InteropServices; -using System.Security; - -namespace Alphaleonis.Win32.Filesystem -{ - /// Provides the base class for both and objects. - [SerializableAttribute] - [ComVisibleAttribute(true)] - public abstract class FileSystemInfo : MarshalByRefObject - { - #region Methods - - #region .NET - - #region Delete - - /// Deletes a file or directory. - [SecurityCritical] - public abstract void Delete(); - - #endregion // Delete - - #region Refresh - - /// Refreshes the state of the object. - /// - /// FileSystemInfo.Refresh() takes a snapshot of the file from the current file system. - /// Refresh cannot correct the underlying file system even if the file system returns incorrect or outdated information. - /// This can happen on platforms such as Windows 98. - /// Calls must be made to Refresh() before attempting to get the attribute information, or the information will be - /// outdated. - /// - [SecurityCritical] - protected void Refresh() - { - DataInitialised = File.FillAttributeInfoCore(Transaction, LongFullName, ref Win32AttributeData, false, false); - } - - #endregion // Refresh - - #region ToString - - /// Returns a string that represents the current object. - /// - /// ToString is the major formatting method in the .NET Framework. It converts an object to its string representation so that it is - /// suitable for display. - /// - /// A string that represents this instance. - public override string ToString() - { - // "Alphaleonis.Win32.Filesystem.FileSystemInfo" - return GetType().ToString(); - } - - #endregion // ToString - - #region Equality - - /// Determines whether the specified Object is equal to the current Object. - /// Another object to compare to. - /// if the specified Object is equal to the current Object; otherwise, . - public override bool Equals(object obj) - { - if (obj == null || GetType() != obj.GetType()) - return false; - - FileSystemInfo other = obj as FileSystemInfo; - - return other != null && (other.Name != null && - (other.FullName.Equals(FullName, StringComparison.OrdinalIgnoreCase) && - other.Attributes.Equals(Attributes) && - other.CreationTimeUtc.Equals(CreationTimeUtc) && - other.LastWriteTimeUtc.Equals(LastWriteTimeUtc))); - } - - // A random prime number will be picked and added to the HashCode, each time an instance is created. - [NonSerialized] - private readonly int _random = new Random().Next(0, 19); - - [NonSerialized] - private static readonly int[] Primes = { 17, 23, 29, 37, 47, 59, 71, 89, 107, 131, 163, 197, 239, 293, 353, 431, 521, 631, 761, 919 }; - - /// Serves as a hash function for a particular type. - /// A hash code for the current Object. - public override int GetHashCode() - { - string fullName = FullName; - string name = Name; - - unchecked - { - int hash = Primes[_random]; - - if (!Utils.IsNullOrWhiteSpace(fullName)) - hash = hash * Primes[1] + fullName.GetHashCode(); - - if (!Utils.IsNullOrWhiteSpace(name)) - hash = hash * Primes[1] + name.GetHashCode(); - - hash = hash * Primes[1] + Attributes.GetHashCode(); - hash = hash * Primes[1] + CreationTimeUtc.GetHashCode(); - hash = hash * Primes[1] + LastWriteTimeUtc.GetHashCode(); - - return hash; - } - } - - /// Implements the operator == - /// A. - /// B. - /// The result of the operator. - public static bool operator ==(FileSystemInfo left, FileSystemInfo right) - { - return ReferenceEquals(left, null) && ReferenceEquals(right, null) || - !ReferenceEquals(left, null) && !ReferenceEquals(right, null) && left.Equals(right); - } - - /// Implements the operator != - /// A. - /// B. - /// The result of the operator. - public static bool operator !=(FileSystemInfo left, FileSystemInfo right) - { - return !(left == right); - } - - #endregion // Equality - - #endregion // .NET - - #region AlphaFS - - #region RefreshEntryInfo - - /// Refreshes the state of the EntryInfo instance. - /// - /// FileSystemInfo.RefreshEntryInfo() takes a snapshot of the file from the current file system. - /// Refresh cannot correct the underlying file system even if the file system returns incorrect or outdated information. - /// This can happen on platforms such as Windows 98. - /// Calls must be made to Refresh() before attempting to get the attribute information, or the information will be outdated. - /// - [SecurityCritical] - protected void RefreshEntryInfo() - { - _entryInfo = File.GetFileSystemEntryInfoCore(IsDirectory, Transaction, LongFullName, true, PathFormat.LongFullPath); - - if (_entryInfo == null) - DataInitialised = -1; - else - { - DataInitialised = 0; - Win32AttributeData = new NativeMethods.WIN32_FILE_ATTRIBUTE_DATA(_entryInfo.Win32FindData); - } - } - - #endregion // RefreshEntryInfo - - #region Reset - - /// [AlphaFS] Resets the state of the file system object to uninitialized. - internal void Reset() - { - DataInitialised = -1; - } - - #endregion // Reset - - #region InitializeCore - - /// Initializes the specified file name. - /// - /// - /// Specifies that is a file or directory. - /// The transaction. - /// The full path and name of the file. - /// Indicates the format of the path parameter(s). - internal void InitializeCore(bool isFolder, KernelTransaction transaction, string path, PathFormat pathFormat) - { - if (pathFormat == PathFormat.RelativePath) - Path.CheckSupportedPathFormat(path, true, true); - - LongFullName = Path.GetExtendedLengthPathCore(transaction, path, pathFormat, GetFullPathOptions.TrimEnd | (isFolder ? GetFullPathOptions.RemoveTrailingDirectorySeparator : 0) | GetFullPathOptions.ContinueOnNonExist); - - // (Not on MSDN): .NET 4+ Trailing spaces are removed from the end of the path parameter before creating the FileSystemInfo instance. - - FullPath = Path.GetRegularPathCore(LongFullName, GetFullPathOptions.None, false); - - IsDirectory = isFolder; - Transaction = transaction; - - OriginalPath = FullPath.Length == 2 && (FullPath[1] == Path.VolumeSeparatorChar) - ? Path.CurrentDirectoryPrefix - : path; - - DisplayPath = OriginalPath.Length != 2 || OriginalPath[1] != Path.VolumeSeparatorChar - ? Path.GetRegularPathCore(OriginalPath, GetFullPathOptions.None, false) - : Path.CurrentDirectoryPrefix; - } - - #endregion // InitializeCore - - #endregion // AlphaFS - - #endregion // Methods - - #region Properties - - #region .NET - - #region Attributes - - /// - /// Gets or sets the attributes for the current file or directory. - /// - /// - /// The value of the CreationTime property is pre-cached - /// To get the latest value, call the Refresh method. - /// - /// of the current . - /// - /// - /// - /// - public FileAttributes Attributes - { - [SecurityCritical] - get - { - if (DataInitialised == -1) - { - Win32AttributeData = new NativeMethods.WIN32_FILE_ATTRIBUTE_DATA(); - Refresh(); - } - - // MSDN: .NET 3.5+: IOException: Refresh cannot initialize the data. - if (DataInitialised != 0) - NativeError.ThrowException(DataInitialised, LongFullName); - - return Win32AttributeData.dwFileAttributes; - } - - [SecurityCritical] - set - { - File.SetAttributesCore(IsDirectory, Transaction, LongFullName, value, false, PathFormat.LongFullPath); - Reset(); - } - } - - #endregion // Attributes - - #region CreationTime - - /// Gets or sets the creation time of the current file or directory. - /// - /// The value of the CreationTime property is pre-cached To get the latest value, call the Refresh method. - /// This method may return an inaccurate value, because it uses native functions whose values may not be continuously updated by - /// the operating system. - /// If the file described in the FileSystemInfo object does not exist, this property will return - /// 12:00 midnight, January 1, 1601 A.D. (C.E.) Coordinated Universal Time (UTC), adjusted to local time. - /// NTFS-formatted drives may cache file meta-info, such as file creation time, for a short period of time. - /// This process is known as file tunneling. As a result, it may be necessary to explicitly set the creation time of a file if you are - /// overwriting or replacing an existing file. - /// - /// The creation date and time of the current object. - /// - /// - /// - public DateTime CreationTime - { - [SecurityCritical] get { return CreationTimeUtc.ToLocalTime(); } - [SecurityCritical] set { CreationTimeUtc = value.ToUniversalTime(); } - } - - #endregion // CreationTime - - #region CreationTimeUtc - - /// Gets or sets the creation time, in coordinated universal time (UTC), of the current file or directory. - /// - /// The value of the CreationTimeUtc property is pre-cached - /// To get the latest value, call the Refresh method. - /// This method may return an inaccurate value, because it uses native functions - /// whose values may not be continuously updated by the operating system. - /// To get the latest value, call the Refresh method. - /// If the file described in the FileSystemInfo object does not exist, this property will return - /// 12:00 midnight, January 1, 1601 A.D. (C.E.) Coordinated Universal Time (UTC). - /// NTFS-formatted drives may cache file meta-info, such as file creation time, for a short period of time. - /// This process is known as file tunneling. As a result, it may be necessary to explicitly set the creation time - /// of a file if you are overwriting or replacing an existing file. - /// - /// The creation date and time in UTC format of the current object. - /// - /// - /// - [ComVisible(false)] - public DateTime CreationTimeUtc - { - [SecurityCritical] - get - { - if (DataInitialised == -1) - { - Win32AttributeData = new NativeMethods.WIN32_FILE_ATTRIBUTE_DATA(); - Refresh(); - } - - // MSDN: .NET 3.5+: IOException: Refresh cannot initialize the data. - if (DataInitialised != 0) - NativeError.ThrowException(DataInitialised, LongFullName); - - return DateTime.FromFileTimeUtc(Win32AttributeData.ftCreationTime); - } - - [SecurityCritical] - set - { - File.SetFsoDateTimeCore(IsDirectory, Transaction, LongFullName, value, null, null, false, PathFormat.LongFullPath); - Reset(); - } - } - - #endregion // CreationTimeUtc - - #region Exists - - /// - /// Gets a value indicating whether the file or directory exists. - /// - /// - /// The property returns if any error occurs while trying to determine if the - /// specified file or directory exists. - /// This can occur in situations that raise exceptions such as passing a directory- or file name with invalid characters or too - /// many characters, - /// a failing or missing disk, or if the caller does not have permission to read the file or directory. - /// - /// if the file or directory exists; otherwise, . - public abstract bool Exists { get; } - - #endregion // Exists - - #region Extension - - /// - /// Gets the string representing the extension part of the file. - /// - /// - /// The Extension property returns the extension, including the period (.). - /// For example, for a file c:\NewFile.txt, this property returns ".txt". - /// - /// A string containing the extension. - public string Extension - { - get { return Path.GetExtension(FullPath, false); } - } - - #endregion // Extension - - #region FullName - - /// - /// Gets the full path of the directory or file. - /// - /// A string containing the full path. - public virtual string FullName - { - [SecurityCritical] - get { return FullPath; } - } - - #endregion // FullName - - #region LastAccessTime - - /// Gets or sets the time the current file or directory was last accessed. - /// - /// The value of the LastAccessTime property is pre-cached - /// To get the latest value, call the Refresh method. - /// This method may return an inaccurate value, because it uses native functions - /// whose values may not be continuously updated by the operating system. - /// If the file described in the FileSystemInfo object does not exist, this property will return - /// 12:00 midnight, January 1, 1601 A.D. (C.E.) Coordinated Universal Time (UTC), adjusted to local time. - /// - /// The time that the current file or directory was last accessed. - /// - /// - public DateTime LastAccessTime - { - [SecurityCritical] get { return LastAccessTimeUtc.ToLocalTime(); } - [SecurityCritical] set { LastAccessTimeUtc = value.ToUniversalTime(); } - } - - #endregion // LastAccessTime - - #region LastAccessTimeUtc - - /// Gets or sets the time, in coordinated universal time (UTC), that the current file or directory was last accessed. - /// - /// The value of the LastAccessTimeUtc property is pre-cached. - /// To get the latest value, call the Refresh method. - /// This method may return an inaccurate value, because it uses native functions - /// whose values may not be continuously updated by the operating system. - /// If the file described in the FileSystemInfo object does not exist, this property will return - /// 12:00 midnight, January 1, 1601 A.D. (C.E.) Coordinated Universal Time (UTC), adjusted to local time. - /// - /// The UTC time that the current file or directory was last accessed. - /// - /// - [ComVisible(false)] - public DateTime LastAccessTimeUtc - { - [SecurityCritical] - get - { - if (DataInitialised == -1) - { - Win32AttributeData = new NativeMethods.WIN32_FILE_ATTRIBUTE_DATA(); - Refresh(); - } - - // MSDN: .NET 3.5+: IOException: Refresh cannot initialize the data. - if (DataInitialised != 0) - NativeError.ThrowException(DataInitialised, LongFullName); - - return DateTime.FromFileTimeUtc(Win32AttributeData.ftLastAccessTime); - } - - [SecurityCritical] - set - { - File.SetFsoDateTimeCore(IsDirectory, Transaction, LongFullName, null, value, null, false, PathFormat.LongFullPath); - Reset(); - } - } - - #endregion // LastAccessTimeUtc - - #region LastWriteTime - - /// Gets or sets the time when the current file or directory was last written to. - /// - /// The value of the LastWriteTime property is pre-cached. - /// To get the latest value, call the Refresh method. - /// This method may return an inaccurate value, because it uses native functions - /// whose values may not be continuously updated by the operating system. - /// If the file described in the FileSystemInfo object does not exist, this property will return - /// 12:00 midnight, January 1, 1601 A.D. (C.E.) Coordinated Universal Time (UTC), adjusted to local time. - /// - /// The time the current file was last written. - /// - /// - public DateTime LastWriteTime - { - get { return LastWriteTimeUtc.ToLocalTime(); } - set { LastWriteTimeUtc = value.ToUniversalTime(); } - } - - #endregion // LastWriteTime - - #region LastWriteTimeUtc - - /// Gets or sets the time, in coordinated universal time (UTC), when the current file or directory was last written to. - /// - /// The value of the LastWriteTimeUtc property is pre-cached. To get the latest value, call the Refresh method. - /// This method may return an inaccurate value, because it uses native functions whose values may not be continuously updated by - /// the operating system. - /// If the file described in the FileSystemInfo object does not exist, this property will return 12:00 midnight, January 1, 1601 - /// A.D. (C.E.) Coordinated Universal Time (UTC), adjusted to local time. - /// - /// The UTC time when the current file was last written to. - [ComVisible(false)] - public DateTime LastWriteTimeUtc - { - [SecurityCritical] - get - { - if (DataInitialised == -1) - { - Win32AttributeData = new NativeMethods.WIN32_FILE_ATTRIBUTE_DATA(); - Refresh(); - } - - // MSDN: .NET 3.5+: IOException: Refresh cannot initialize the data. - if (DataInitialised != 0) - NativeError.ThrowException(DataInitialised, LongFullName); - - return DateTime.FromFileTimeUtc(Win32AttributeData.ftLastWriteTime); - } - - [SecurityCritical] - set - { - File.SetFsoDateTimeCore(IsDirectory, Transaction, LongFullName, null, null, value, false, PathFormat.LongFullPath); - Reset(); - } - } - - #endregion // LastWriteTimeUtc - - #region Name - - /// - /// For files, gets the name of the file. For directories, gets the name of the last directory in the hierarchy if a hierarchy exists. - /// Otherwise, the Name property gets the name of the directory. - /// - /// - /// For a directory, Name returns only the name of the parent directory, such as Dir, not c:\Dir. - /// For a subdirectory, Name returns only the name of the subdirectory, such as Sub1, not c:\Dir\Sub1. - /// For a file, Name returns only the file name and file name extension, such as MyFile.txt, not c:\Dir\Myfile.txt. - /// - /// - /// A string that is the name of the parent directory, the name of the last directory in the hierarchy, - /// or the name of a file, including the file name extension. - /// - public abstract string Name { get; } - - #endregion // Name - - #endregion // .NET - - #region AlphaFS - - #region DisplayPath - - /// Returns the path as a string. - protected internal string DisplayPath { get; set; } - - #endregion // DisplayPath - - #region EntryInfo - - private FileSystemEntryInfo _entryInfo; - - /// [AlphaFS] Gets the instance of the class. - public FileSystemEntryInfo EntryInfo - { - [SecurityCritical] - get - { - if (_entryInfo == null) - { - Win32AttributeData = new NativeMethods.WIN32_FILE_ATTRIBUTE_DATA(); - RefreshEntryInfo(); - } - - // MSDN: .NET 3.5+: IOException: Refresh cannot initialize the data. - if (DataInitialised > 0) - NativeError.ThrowException(DataInitialised, LongFullName); - - return _entryInfo; - } - - internal set - { - _entryInfo = value; - - DataInitialised = value == null ? -1 : 0; - - if (DataInitialised == 0) - Win32AttributeData = new NativeMethods.WIN32_FILE_ATTRIBUTE_DATA(_entryInfo.Win32FindData); - } - } - - #endregion // EntryInfo - - #region IsDirectory - - /// [AlphaFS] The initial "IsDirectory" indicator that was passed to the constructor. - protected internal bool IsDirectory { get; set; } - - #endregion // IsDirectory - - #region LongFullName - - /// The full path of the file system object in Unicode (LongPath) format. - protected string LongFullName { get; set; } - - #endregion // LongFullName - - #region Transaction - - /// [AlphaFS] Represents the KernelTransaction that was passed to the constructor. - public KernelTransaction Transaction { get; set; } - - #endregion // Transaction - - #endregion // AlphaFS - - #endregion // Properties - - #region Fields - - // We use this field in conjunction with the Refresh methods, if we succeed - // we store a zero, on failure we store the HResult in it so that we can - // give back a generic error back. - [NonSerialized] internal int DataInitialised = -1; - - // The pre-cached FileSystemInfo information. - [NonSerialized] internal NativeMethods.WIN32_FILE_ATTRIBUTE_DATA Win32AttributeData; - - #region .NET - - /// Represents the fully qualified path of the file or directory. - /// - /// Classes derived from can use the FullPath field - /// to determine the full path of the object being manipulated. - /// - [SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields")] - protected string FullPath; - - /// The path originally specified by the user, whether relative or absolute. - [SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields")] - protected string OriginalPath; - - #endregion // .NET - - #endregion // Fields - } -} diff --git a/AlphaFS/Filesystem/FindFileSystemEntryInfo.cs b/AlphaFS/Filesystem/FindFileSystemEntryInfo.cs deleted file mode 100644 index 28601e7..0000000 --- a/AlphaFS/Filesystem/FindFileSystemEntryInfo.cs +++ /dev/null @@ -1,387 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System; -using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; -using System.Globalization; -using System.IO; -using System.Runtime.InteropServices; -using System.Security; -using System.Text.RegularExpressions; - -namespace Alphaleonis.Win32.Filesystem -{ - /// Class that retrieves file system entries (i.e. files and directories) using Win32 API FindFirst()/FindNext(). - [SerializableAttribute] - internal sealed class FindFileSystemEntryInfo - { - private static readonly Regex WildcardMatchAll = new Regex(@"^(\*)+(\.\*+)+$", RegexOptions.IgnoreCase | RegexOptions.Compiled); // special case to recognize *.* or *.** etc - private Regex _nameFilter; - private string _searchPattern = Path.WildcardStarMatchAll; - - - public FindFileSystemEntryInfo(bool isFolder, KernelTransaction transaction, string path, string searchPattern, DirectoryEnumerationOptions options, Type typeOfT, PathFormat pathFormat) - { - Transaction = transaction; - - OriginalInputPath = path; - InputPath = Path.GetExtendedLengthPathCore(transaction, path, pathFormat, GetFullPathOptions.RemoveTrailingDirectorySeparator | GetFullPathOptions.FullCheck); - IsRelativePath = !Path.IsPathRooted(OriginalInputPath, false); - - // .NET behaviour. - SearchPattern = searchPattern.TrimEnd(Path.TrimEndChars); - - FileSystemObjectType = null; - - ContinueOnException = (options & DirectoryEnumerationOptions.ContinueOnException) != 0; - - AsLongPath = (options & DirectoryEnumerationOptions.AsLongPath) != 0; - - AsString = typeOfT == typeof(string); - AsFileSystemInfo = !AsString && (typeOfT == typeof(FileSystemInfo) || typeOfT.BaseType == typeof(FileSystemInfo)); - - FindExInfoLevel = NativeMethods.IsAtLeastWindows7 && (options & DirectoryEnumerationOptions.BasicSearch) != 0 - ? NativeMethods.FINDEX_INFO_LEVELS.Basic - : NativeMethods.FINDEX_INFO_LEVELS.Standard; - - LargeCache = NativeMethods.IsAtLeastWindows7 && (options & DirectoryEnumerationOptions.LargeCache) != 0 - ? NativeMethods.FindExAdditionalFlags.LargeFetch - : NativeMethods.FindExAdditionalFlags.None; - - IsDirectory = isFolder; - - if (IsDirectory) - { - // Need files or folders to enumerate. - if ((options & DirectoryEnumerationOptions.FilesAndFolders) == 0) - options |= DirectoryEnumerationOptions.FilesAndFolders; - - FileSystemObjectType = (options & DirectoryEnumerationOptions.FilesAndFolders) == DirectoryEnumerationOptions.FilesAndFolders - ? (bool?) null - : (options & DirectoryEnumerationOptions.Folders) != 0; - - Recursive = (options & DirectoryEnumerationOptions.Recursive) != 0; - - SkipReparsePoints = (options & DirectoryEnumerationOptions.SkipReparsePoints) != 0; - } - } - - - - - private void ThrowPossibleException(uint lastError, string pathLp) - { - //Answer - - switch (lastError) - { - case Win32Errors.ERROR_NO_MORE_FILES: - lastError = Win32Errors.NO_ERROR; - break; - - case Win32Errors.ERROR_FILE_NOT_FOUND: - case Win32Errors.ERROR_PATH_NOT_FOUND: - // MSDN: .NET 3.5+: DirectoryNotFoundException: Path is invalid, such as referring to an unmapped drive. - // Directory.Delete() - - lastError = IsDirectory ? (int) Win32Errors.ERROR_PATH_NOT_FOUND : Win32Errors.ERROR_FILE_NOT_FOUND; - break; - - - //case Win32Errors.ERROR_DIRECTORY: - // // MSDN: .NET 3.5+: IOException: path is a file name. - // // Directory.EnumerateDirectories() - // // Directory.EnumerateFiles() - // // Directory.EnumerateFileSystemEntries() - // // Directory.GetDirectories() - // // Directory.GetFiles() - // // Directory.GetFileSystemEntries() - // break; - - //case Win32Errors.ERROR_ACCESS_DENIED: - // // MSDN: .NET 3.5+: UnauthorizedAccessException: The caller does not have the required permission. - // break; - } - - if (lastError != Win32Errors.NO_ERROR) - NativeError.ThrowException(lastError, pathLp); - } - - - private SafeFindFileHandle FindFirstFile(string pathLp, out NativeMethods.WIN32_FIND_DATA win32FindData) - { - var searchOption = null != FileSystemObjectType && (bool)FileSystemObjectType - ? NativeMethods.FINDEX_SEARCH_OPS.SearchLimitToDirectories - : NativeMethods.FINDEX_SEARCH_OPS.SearchNameMatch; - - - var handle = Transaction == null || !NativeMethods.IsAtLeastWindowsVista - - // FindFirstFileEx() / FindFirstFileTransacted() - // In the ANSI version of this function, the name is limited to MAX_PATH characters. - // To extend this limit to 32,767 wide characters, call the Unicode version of the function and prepend "\\?\" to the path. - // 2013-01-13: MSDN confirms LongPath usage. - - // A trailing backslash is not allowed. - ? NativeMethods.FindFirstFileEx(Path.RemoveTrailingDirectorySeparator(pathLp, false), FindExInfoLevel, out win32FindData, searchOption, IntPtr.Zero, LargeCache) - : NativeMethods.FindFirstFileTransacted(Path.RemoveTrailingDirectorySeparator(pathLp, false), FindExInfoLevel, out win32FindData, searchOption, IntPtr.Zero, LargeCache, Transaction.SafeHandle); - - var lastError = Marshal.GetLastWin32Error(); - - if (handle.IsInvalid) - { - handle.Close(); - handle = null; - - if (!ContinueOnException) - ThrowPossibleException((uint)lastError, pathLp); - } - - return handle; - } - - - private T NewFileSystemEntryType(bool isFolder, NativeMethods.WIN32_FIND_DATA win32FindData, string fileName, string pathLp) - { - // Determine yield, e.g. don't return files when only folders are requested and vice versa. - if (null != FileSystemObjectType && (!(bool) FileSystemObjectType || !isFolder) && (!(bool) !FileSystemObjectType || isFolder)) - return (T) (object) null; - - // Determine yield. - if (null != fileName && !(_nameFilter == null || (_nameFilter != null && _nameFilter.IsMatch(fileName)))) - return (T) (object) null; - - - var fullPathLp = (IsRelativePath ? OriginalInputPath + Path.DirectorySeparator : pathLp) + (!Utils.IsNullOrWhiteSpace(fileName) ? fileName : string.Empty); - - - // Return object instance FullPath property as string, optionally in long path format. - if (AsString) - return (T) (object) (AsLongPath ? fullPathLp : Path.GetRegularPathCore(fullPathLp, GetFullPathOptions.None, false)); - - - // Make sure the requested file system object type is returned. - // null = Return files and directories. - // true = Return only directories. - // false = Return only files. - - var fsei = new FileSystemEntryInfo(win32FindData) {FullPath = fullPathLp}; - - return AsFileSystemInfo - // Return object instance of type FileSystemInfo. - ? (T) (object) (fsei.IsDirectory - ? (FileSystemInfo) - new DirectoryInfo(Transaction, fsei.LongFullPath, PathFormat.LongFullPath) {EntryInfo = fsei} - : new FileInfo(Transaction, fsei.LongFullPath, PathFormat.LongFullPath) {EntryInfo = fsei}) - - // Return object instance of type FileSystemEntryInfo. - : (T) (object) fsei; - } - - - - - /// Get an enumerator that returns all of the file system objects that match the wildcards that are in any of the directories to be searched. - /// An instance: FileSystemEntryInfo, DirectoryInfo, FileInfo or string (full path). - [SecurityCritical] - public IEnumerable Enumerate() - { - // MSDN: Queue - // Represents a first-in, first-out collection of objects. - // The capacity of a Queue is the number of elements the Queue can hold. - // As elements are added to a Queue, the capacity is automatically increased as required through reallocation. The capacity can be decreased by calling TrimToSize. - // The growth factor is the number by which the current capacity is multiplied when a greater capacity is required. The growth factor is determined when the Queue is constructed. - // The capacity of the Queue will always increase by a minimum value, regardless of the growth factor; a growth factor of 1.0 will not prevent the Queue from increasing in size. - // If the size of the collection can be estimated, specifying the initial capacity eliminates the need to perform a number of resizing operations while adding elements to the Queue. - // This constructor is an O(n) operation, where n is capacity. - - var dirs = new Queue(1000); - dirs.Enqueue(InputPath); - - using (new NativeMethods.ChangeErrorMode(NativeMethods.ErrorMode.FailCriticalErrors)) - while (dirs.Count > 0) - { - // Removes the object at the beginning of your Queue. - // The algorithmic complexity of this is O(1). It doesn't loop over elements. - - var path = Path.AddTrailingDirectorySeparator(dirs.Dequeue(), false); - var pathLp = path + Path.WildcardStarMatchAll; - NativeMethods.WIN32_FIND_DATA win32FindData; - - using (var handle = FindFirstFile(pathLp, out win32FindData)) - { - if (handle == null && ContinueOnException) - continue; - - do - { - var fileName = win32FindData.cFileName; - - // Skip entries "." and ".." - if (fileName.Equals(Path.CurrentDirectoryPrefix, StringComparison.OrdinalIgnoreCase) || - fileName.Equals(Path.ParentDirectoryPrefix, StringComparison.OrdinalIgnoreCase)) - continue; - - // Skip reparse points here to cleanly separate regular directories from links. - if (SkipReparsePoints && (win32FindData.dwFileAttributes & FileAttributes.ReparsePoint) != 0) - continue; - - - // If object is a folder, add it to the queue for later traversal. - var isFolder = (win32FindData.dwFileAttributes & FileAttributes.Directory) != 0; - - if (Recursive && (win32FindData.dwFileAttributes & FileAttributes.Directory) != 0) - dirs.Enqueue(path + fileName); - - - var res = NewFileSystemEntryType(isFolder, win32FindData, fileName, path); - if (res == null) - continue; - - yield return res; - - - } while (NativeMethods.FindNextFile(handle, out win32FindData)); - - - var lastError = Marshal.GetLastWin32Error(); - - if (!ContinueOnException) - ThrowPossibleException((uint)lastError, pathLp); - } - } - } - - - /// Gets a specific file system object. - /// - /// The return type is based on C# inference. Possible return types are: - /// - (full path), - ( or ), instance - /// or null in case an Exception is raised and is . - /// - [SecurityCritical] - public T Get() - { - NativeMethods.WIN32_FIND_DATA win32FindData; - - using (new NativeMethods.ChangeErrorMode(NativeMethods.ErrorMode.FailCriticalErrors)) - using (var handle = FindFirstFile(InputPath, out win32FindData)) - return handle == null - ? (T)(object)null - : NewFileSystemEntryType((win32FindData.dwFileAttributes & FileAttributes.Directory) != 0, win32FindData, null, InputPath); - } - - - - - /// Gets or sets the ability to return the object as a instance. - /// returns the object as a instance. - public bool AsFileSystemInfo { get; internal set; } - - - /// Gets or sets the ability to return the full path in long full path format. - /// returns the full path in long full path format, returns the full path in regular path format. - public bool AsLongPath { get; internal set; } - - - /// Gets or sets the ability to return the object instance as a . - /// returns the full path of the object as a - public bool AsString { get; internal set; } - - - /// Gets the value indicating which to use. - public NativeMethods.FINDEX_INFO_LEVELS FindExInfoLevel { get; internal set; } - - - /// Gets or sets the ability to skip on access errors. - /// suppress any Exception that might be thrown as a result from a failure, such as ACLs protected directories or non-accessible reparse points. - public bool ContinueOnException { get; internal set; } - - - /// Gets the file system object type. - /// - /// = Return files and directories. - /// = Return only directories. - /// = Return only files. - /// - public bool? FileSystemObjectType { get; set; } - - - /// Gets or sets if the path is an absolute or relative path. - /// Gets a value indicating whether the specified path string contains absolute or relative path information. - public bool IsRelativePath { get; set; } - - - /// Gets or sets the initial path to the folder. - /// The initial path to the file or folder in long path format. - public string OriginalInputPath { get; internal set; } - - - /// Gets or sets the path to the folder. - /// The path to the file or folder in long path format. - public string InputPath { get; internal set; } - - - /// Gets or sets a value indicating which to use. - /// indicates a folder object, indicates a file object. - public bool IsDirectory { get; internal set; } - - - /// Gets the value indicating which to use. - public NativeMethods.FindExAdditionalFlags LargeCache { get; internal set; } - - - /// Specifies whether the search should include only the current directory or should include all subdirectories. - /// to all subdirectories. - public bool Recursive { get; internal set; } - - - /// Search for file system object-name using a pattern. - /// The path which has wildcard characters, for example, an asterisk () or a question mark (). - [SuppressMessage("Microsoft.Usage", "CA2208:InstantiateArgumentExceptionsCorrectly")] - public string SearchPattern - { - get { return _searchPattern; } - - internal set - { - if (null == value) - throw new ArgumentNullException("SearchPattern"); - - _searchPattern = value; - - _nameFilter = _searchPattern == Path.WildcardStarMatchAll || WildcardMatchAll.IsMatch(_searchPattern) - ? null - : new Regex(string.Format(CultureInfo.CurrentCulture, "^{0}$", Regex.Escape(_searchPattern).Replace(@"\*", ".*").Replace(@"\?", ".")), RegexOptions.IgnoreCase | RegexOptions.Compiled); - } - } - - - /// skips ReparsePoints, will follow ReparsePoints. - public bool SkipReparsePoints { get; internal set; } - - - /// Get or sets the KernelTransaction instance. - /// The transaction. - public KernelTransaction Transaction { get; internal set; } - } -} diff --git a/AlphaFS/Filesystem/KernelTransaction.cs b/AlphaFS/Filesystem/KernelTransaction.cs deleted file mode 100644 index 0501d4a..0000000 --- a/AlphaFS/Filesystem/KernelTransaction.cs +++ /dev/null @@ -1,159 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System; -using System.ComponentModel; -using System.Diagnostics.CodeAnalysis; -using System.Runtime.InteropServices; -using System.Security; -using System.Security.AccessControl; -using System.Security.Permissions; -using System.Transactions; - -namespace Alphaleonis.Win32.Filesystem -{ - [ComImport] - [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] - [Guid("79427A2B-F895-40e0-BE79-B57DC82ED231")] - [SuppressUnmanagedCodeSecurity] - internal interface IKernelTransaction - { - void GetHandle([Out] out SafeKernelTransactionHandle handle); - } - - /// A KTM transaction object for use with the transacted operations in - public sealed class KernelTransaction : MarshalByRefObject, IDisposable - { - /// Initializes a new instance of the class, internally using the specified . - /// This method allows the usage of methods accepting a with an instance of . - /// - /// The transaction to use for any transactional operations. - [SuppressMessage("Microsoft.Security", "CA2122:DoNotIndirectlyExposeMethodsWithLinkDemands")] - [SecurityCritical] - public KernelTransaction(Transaction transaction) - { - ((IKernelTransaction) TransactionInterop.GetDtcTransaction(transaction)).GetHandle(out _hTrans); - } - - /// Initializes a new instance of the class with a default security descriptor, infinite timeout and no description. - [SecurityCritical] - public KernelTransaction() - : this(0, null) - { - } - - /// Initializes a new instance of the class with a default security descriptor. - /// The time, in milliseconds, when the transaction will be aborted if it has not already reached the prepared state. - /// A user-readable description of the transaction. This parameter may be . - [SecurityCritical] - public KernelTransaction(int timeout, string description) - : this(null, timeout, description) - { - } - - /// Initializes a new instance of the class. - /// The security descriptor. - /// The time, in milliseconds, when the transaction will be aborted if it has not already reached the prepared state. - /// Specify 0 to provide an infinite timeout. - /// A user-readable description of the transaction. This parameter may be . - [SecurityCritical] - public KernelTransaction(ObjectSecurity securityDescriptor, int timeout, string description) - { - if (!NativeMethods.IsAtLeastWindowsVista) - throw new PlatformNotSupportedException(Resources.Requires_Windows_Vista_Or_Higher); - - using (var securityAttributes = new Security.NativeMethods.SecurityAttributes(securityDescriptor)) - { - - _hTrans = NativeMethods.CreateTransaction(securityAttributes, IntPtr.Zero, 0, 0, 0, timeout, description); - int lastError = Marshal.GetLastWin32Error(); - - NativeMethods.IsValidHandle(_hTrans, lastError); - } - } - - /// Requests that the specified transaction be committed. - /// - /// - /// - [SecurityCritical] - public void Commit() - { - if (!NativeMethods.IsAtLeastWindowsVista) - throw new PlatformNotSupportedException(Resources.Requires_Windows_Vista_Or_Higher); - - if (!NativeMethods.CommitTransaction(_hTrans)) - CheckTransaction(); - } - - /// Requests that the specified transaction be rolled back. This function is synchronous. - /// - /// - [SecurityCritical] - public void Rollback() - { - if (!NativeMethods.IsAtLeastWindowsVista) - throw new PlatformNotSupportedException(Resources.Requires_Windows_Vista_Or_Higher); - - if (!NativeMethods.RollbackTransaction(_hTrans)) - CheckTransaction(); - } - - private static void CheckTransaction() - { - uint error = (uint) Marshal.GetLastWin32Error(); - int hr = Marshal.GetHRForLastWin32Error(); - - switch (error) - { - case Win32Errors.ERROR_TRANSACTION_ALREADY_ABORTED: - throw new TransactionAlreadyAbortedException("Transaction was already aborted", Marshal.GetExceptionForHR(hr)); - - case Win32Errors.ERROR_TRANSACTION_ALREADY_COMMITTED: - throw new TransactionAlreadyAbortedException("Transaction was already committed", Marshal.GetExceptionForHR(hr)); - - default: - Marshal.ThrowExceptionForHR(Marshal.GetHRForLastWin32Error()); - break; - } - } - - /// Gets the safe handle. - /// The safe handle. - public SafeHandle SafeHandle - { - get { return _hTrans; } - } - - private readonly SafeKernelTransactionHandle _hTrans; - - #region IDisposable Members - - /// Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. - [SecurityPermissionAttribute(SecurityAction.Demand, UnmanagedCode = true)] - public void Dispose() - { - _hTrans.Close(); - } - - #endregion // IDisposable Members - } -} diff --git a/AlphaFS/Filesystem/LinkTargetInfo.cs b/AlphaFS/Filesystem/LinkTargetInfo.cs deleted file mode 100644 index 5e9876a..0000000 --- a/AlphaFS/Filesystem/LinkTargetInfo.cs +++ /dev/null @@ -1,39 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -namespace Alphaleonis.Win32.Filesystem -{ - /// Information about the target of a symbolic link or mount point. - public class LinkTargetInfo - { - internal LinkTargetInfo(string substituteName, string printName) - { - PrintName = printName; - SubstituteName = substituteName; - } - - /// The print name. - public string PrintName { get; private set; } - - /// The substitute name. - public string SubstituteName { get; private set; } - } -} diff --git a/AlphaFS/Filesystem/Native Methods/NativeMethods.BackupStreams.cs b/AlphaFS/Filesystem/Native Methods/NativeMethods.BackupStreams.cs deleted file mode 100644 index 0e56e35..0000000 --- a/AlphaFS/Filesystem/Native Methods/NativeMethods.BackupStreams.cs +++ /dev/null @@ -1,121 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using Microsoft.Win32.SafeHandles; -using System; -using System.Diagnostics.CodeAnalysis; -using System.Runtime.InteropServices; -using System.Security; - -namespace Alphaleonis.Win32.Filesystem -{ - internal static partial class NativeMethods - { - /// The BackupRead function can be used to back up a file or directory, including the security information. - /// The function reads data associated with a specified file or directory into a buffer, - /// which can then be written to the backup medium using the WriteFile function. - /// - /// - /// This function is not intended for use in backing up files encrypted under the Encrypted File System. - /// Use ReadEncryptedFileRaw for that purpose. - /// Minimum supported client: Windows XP [desktop apps only] - /// Minimum supported server: Windows Server 2003 [desktop apps only] - /// - /// The file. - /// The buffer. - /// Number of bytes to reads. - /// [out] Number of bytes reads. - /// true to abort. - /// true to process security. - /// [out] The context. - /// - /// If the function succeeds, the return value is nonzero. - /// If the function fails, the return value is zero, indicating that an I/O error occurred. To get extended error information, - /// call GetLastError. - /// - [SuppressMessage("Microsoft.Security", "CA5122:PInvokesShouldNotBeSafeCriticalFxCopRule")] - [DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Unicode), SuppressUnmanagedCodeSecurity] - [return: MarshalAs(UnmanagedType.Bool)] - internal static extern bool BackupRead(SafeFileHandle hFile, SafeGlobalMemoryBufferHandle lpBuffer, [MarshalAs(UnmanagedType.U4)] uint nNumberOfBytesToRead, [MarshalAs(UnmanagedType.U4)] out uint lpNumberOfBytesRead, [MarshalAs(UnmanagedType.Bool)] bool bAbort, [MarshalAs(UnmanagedType.Bool)] bool bProcessSecurity, ref IntPtr lpContext); - - - /// The BackupSeek function seeks forward in a data stream initially accessed by using the or - /// function. - /// The function reads data associated with a specified file or directory into a buffer, which can then be written to the backup - /// medium using the WriteFile function. - /// - /// - /// Applications use the BackupSeek function to skip portions of a data stream that cause errors. - /// This function does not seek across stream headers. For example, this function cannot be used to skip the stream name. - /// If an application attempts to seek past the end of a substream, the function fails, the lpdwLowByteSeeked and - /// lpdwHighByteSeeked parameters - /// indicate the actual number of bytes the function seeks, and the file position is placed at the start of the next stream - /// header. - ///   - /// Minimum supported client: Windows XP [desktop apps only] - /// Minimum supported server: Windows Server 2003 [desktop apps only] - /// - /// The file. - /// The low bytes to seek. - /// The high bytes to seek. - /// [out] The lpdw low bytes seeked. - /// [out] The lpdw high bytes seeked. - /// [out] The context. - /// - /// If the function could seek the requested amount, the function returns a nonzero value. - /// If the function could not seek the requested amount, the function returns zero. To get extended error information, call - /// GetLastError. - /// - [SuppressMessage("Microsoft.Security", "CA5122:PInvokesShouldNotBeSafeCriticalFxCopRule")] - [DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Unicode), SuppressUnmanagedCodeSecurity] - [return: MarshalAs(UnmanagedType.Bool)] - internal static extern bool BackupSeek(SafeFileHandle hFile, [MarshalAs(UnmanagedType.U4)] uint dwLowBytesToSeek, [MarshalAs(UnmanagedType.U4)] uint dwHighBytesToSeek, [MarshalAs(UnmanagedType.U4)] out uint lpdwLowBytesSeeked, [MarshalAs(UnmanagedType.U4)] out uint lpdwHighBytesSeeked, ref IntPtr lpContext); - - - /// The BackupWrite function can be used to restore a file or directory that was backed up using . - /// Use the ReadFile function to get a stream of data from the backup medium, then use BackupWrite to write the data to the - /// specified file or directory. - ///   - /// - /// - /// This function is not intended for use in restoring files encrypted under the Encrypted File System. Use WriteEncryptedFileRaw - /// for that purpose. - /// Minimum supported client: Windows XP [desktop apps only] - /// Minimum supported server: Windows Server 2003 [desktop apps only] - /// - /// The file. - /// The buffer. - /// Number of bytes to writes. - /// [out] Number of bytes writtens. - /// true to abort. - /// true to process security. - /// [out] The context. - /// - /// If the function succeeds, the return value is nonzero. - /// If the function fails, the return value is zero, indicating that an I/O error occurred. To get extended error information, - /// call GetLastError. - /// - [SuppressMessage("Microsoft.Security", "CA5122:PInvokesShouldNotBeSafeCriticalFxCopRule")] - [DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Unicode), SuppressUnmanagedCodeSecurity] - [return: MarshalAs(UnmanagedType.Bool)] - internal static extern bool BackupWrite(SafeFileHandle hFile, SafeGlobalMemoryBufferHandle lpBuffer, [MarshalAs(UnmanagedType.U4)] uint nNumberOfBytesToWrite, [MarshalAs(UnmanagedType.U4)] out uint lpNumberOfBytesWritten, [MarshalAs(UnmanagedType.Bool)] bool bAbort, [MarshalAs(UnmanagedType.Bool)] bool bProcessSecurity, ref IntPtr lpContext); - } -} diff --git a/AlphaFS/Filesystem/Native Methods/NativeMethods.Constants.cs b/AlphaFS/Filesystem/Native Methods/NativeMethods.Constants.cs deleted file mode 100644 index 6f87972..0000000 --- a/AlphaFS/Filesystem/Native Methods/NativeMethods.Constants.cs +++ /dev/null @@ -1,67 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System.Text; - -namespace Alphaleonis.Win32.Filesystem -{ - internal static partial class NativeMethods - { - public static readonly bool IsAtLeastWindows7 = OperatingSystem.IsAtLeast(OperatingSystem.EnumOsName.Windows7); - public static readonly bool IsAtLeastWindowsVista = OperatingSystem.IsAtLeast(OperatingSystem.EnumOsName.WindowsVista); - - /// The FindFirstFileEx function does not query the short file name, improving overall enumeration speed. - ///   - /// - /// The data is returned in a structure, - /// and cAlternateFileName member is always a NULL string. - /// This value is not supported until Windows Server 2008 R2 and Windows 7. - /// - /// - public static readonly FINDEX_INFO_LEVELS FindexInfoLevels = IsAtLeastWindows7 ? FINDEX_INFO_LEVELS.Basic : FINDEX_INFO_LEVELS.Standard; - - /// Uses a larger buffer for directory queries, which can increase performance of the find operation. - /// This value is not supported until Windows Server 2008 R2 and Windows 7. - public static readonly FindExAdditionalFlags LargeCache = IsAtLeastWindows7 ? FindExAdditionalFlags.LargeFetch : FindExAdditionalFlags.None; - - /// DefaultFileBufferSize = 4096; Default type buffer size used for reading and writing files. - public const int DefaultFileBufferSize = 4096; - - /// DefaultFileEncoding = Encoding.UTF8; Default type of Encoding used for reading and writing files. - public static readonly Encoding DefaultFileEncoding = Encoding.UTF8; - - /// MaxDirectoryLength = 255 - internal const int MaxDirectoryLength = 255; - - /// MaxPath = 260 - /// The specified path, file name, or both exceed the system-defined maximum length. - /// For example, on Windows-based platforms, paths must be less than 248 characters, and file names must be less than 260 characters. - /// - internal const int MaxPath = 260; - - /// MaxPathUnicode = 32000 - internal const int MaxPathUnicode = 32000; - - - /// When an exception is raised, bit shifting is needed to prevent: "System.OverflowException: Arithmetic operation resulted in an overflow." - internal const int OverflowExceptionBitShift = 65535; - } -} diff --git a/AlphaFS/Filesystem/Native Methods/NativeMethods.DeviceManagement.cs b/AlphaFS/Filesystem/Native Methods/NativeMethods.DeviceManagement.cs deleted file mode 100644 index c1265ec..0000000 --- a/AlphaFS/Filesystem/Native Methods/NativeMethods.DeviceManagement.cs +++ /dev/null @@ -1,291 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using Microsoft.Win32.SafeHandles; -using System; -using System.Diagnostics.CodeAnalysis; -using System.Runtime.InteropServices; -using System.Security; - -namespace Alphaleonis.Win32.Filesystem -{ - internal static partial class NativeMethods - { - #region CM_Xxx - - /// The CM_Connect_Machine function creates a connection to a remote machine. - /// - /// Beginning in Windows 8 and Windows Server 2012 functionality to access remote machines has been removed. - /// You cannot access remote machines when running on these versions of Windows. - /// Available in Microsoft Windows 2000 and later versions of Windows. - /// - /// Name of the unc server. - /// [out] The ph machine. - /// - /// If the operation succeeds, the function returns CR_SUCCESS. - /// Otherwise, it returns one of the CR_-prefixed error codes defined in Cfgmgr32.h. - /// - [SuppressMessage("Microsoft.Security", "CA5122:PInvokesShouldNotBeSafeCriticalFxCopRule")] - [DllImport("setupapi.dll", SetLastError = true, CharSet = CharSet.Unicode, EntryPoint = "CM_Connect_MachineW"), SuppressUnmanagedCodeSecurity] - [return: MarshalAs(UnmanagedType.I4)] - public static extern int CM_Connect_Machine([MarshalAs(UnmanagedType.LPWStr)] string uncServerName, out SafeCmConnectMachineHandle phMachine); - - /// - /// The CM_Get_Device_ID_Ex function retrieves the device instance ID for a specified device instance on a local or a remote machine. - /// - /// - /// Beginning in Windows 8 and Windows Server 2012 functionality to access remote machines has been removed. - /// You cannot access remote machines when running on these versions of Windows. - ///   - /// Available in Microsoft Windows 2000 and later versions of Windows. - /// - /// The dn development instance. - /// The buffer. - /// Length of the buffer. - /// The ul flags. - /// The machine. - /// - /// If the operation succeeds, the function returns CR_SUCCESS. - /// Otherwise, it returns one of the CR_-prefixed error codes defined in Cfgmgr32.h. - /// - [SuppressMessage("Microsoft.Security", "CA5122:PInvokesShouldNotBeSafeCriticalFxCopRule")] - [DllImport("setupapi.dll", SetLastError = true, CharSet = CharSet.Unicode, EntryPoint = "CM_Get_Device_ID_ExW"), SuppressUnmanagedCodeSecurity] - [return: MarshalAs(UnmanagedType.I4)] - public static extern int CM_Get_Device_ID_Ex([MarshalAs(UnmanagedType.U4)] uint dnDevInst, SafeGlobalMemoryBufferHandle buffer, [MarshalAs(UnmanagedType.U4)] uint bufferLen, [MarshalAs(UnmanagedType.U4)] uint ulFlags, SafeCmConnectMachineHandle hMachine); - - /// - /// The CM_Disconnect_Machine function removes a connection to a remote machine. - /// - /// - /// Beginning in Windows 8 and Windows Server 2012 functionality to access remote machines has been removed. - /// You cannot access remote machines when running on these versions of Windows. - /// SetLastError is set to . - /// Available in Microsoft Windows 2000 and later versions of Windows. - /// - /// The machine. - /// - /// If the operation succeeds, the function returns CR_SUCCESS. - /// Otherwise, it returns one of the CR_-prefixed error codes defined in Cfgmgr32.h. - /// - [SuppressMessage("Microsoft.Security", "CA5122:PInvokesShouldNotBeSafeCriticalFxCopRule")] - [DllImport("setupapi.dll", SetLastError = false, CharSet = CharSet.Unicode), SuppressUnmanagedCodeSecurity] - [return: MarshalAs(UnmanagedType.I4)] - internal static extern int CM_Disconnect_Machine(IntPtr hMachine); - - /// - /// The CM_Get_Parent_Ex function obtains a device instance handle to the parent node of a specified device node (devnode) in a local - /// or a remote machine's device tree. - /// - /// - /// Beginning in Windows 8 and Windows Server 2012 functionality to access remote machines has been removed. - /// You cannot access remote machines when running on these versions of Windows. - /// Available in Microsoft Windows 2000 and later versions of Windows. - /// - /// [out] The pdn development instance. - /// The dn development instance. - /// The ul flags. - /// The machine. - /// - /// If the operation succeeds, the function returns CR_SUCCESS. - /// Otherwise, it returns one of the CR_-prefixed error codes defined in Cfgmgr32.h. - /// - [SuppressMessage("Microsoft.Security", "CA5122:PInvokesShouldNotBeSafeCriticalFxCopRule")] - [DllImport("setupapi.dll", SetLastError = true, CharSet = CharSet.Unicode), SuppressUnmanagedCodeSecurity] - [return: MarshalAs(UnmanagedType.I4)] - internal static extern int CM_Get_Parent_Ex([MarshalAs(UnmanagedType.U4)] out uint pdnDevInst, [MarshalAs(UnmanagedType.U4)] uint dnDevInst, [MarshalAs(UnmanagedType.U4)] uint ulFlags, SafeCmConnectMachineHandle hMachine); - - #endregion // CM_Xxx - - #region DeviceIoControl - - /// Sends a control code directly to a specified device driver, causing the corresponding device to perform the corresponding operation. - /// - /// If the operation completes successfully, the return value is nonzero. - /// If the operation fails or is pending, the return value is zero. To get extended error information, call GetLastError. - /// - /// - /// To retrieve a handle to the device, you must call the function with either the name of a device or - /// the name of the driver associated with a device. - /// To specify a device name, use the following format: \\.\DeviceName - /// Minimum supported client: Windows XP - /// Minimum supported server: Windows Server 2003 - /// - /// The device. - /// The i/o control code. - /// Buffer for in data. - /// Size of the in buffer. - /// Buffer for out data. - /// Size of the out buffer. - /// [out] The bytes returned. - /// The overlapped. - [SuppressMessage("Microsoft.Security", "CA5122:PInvokesShouldNotBeSafeCriticalFxCopRule")] - [DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Unicode), SuppressUnmanagedCodeSecurity] - [return: MarshalAs(UnmanagedType.Bool)] - internal static extern bool DeviceIoControl(SafeFileHandle hDevice, [MarshalAs(UnmanagedType.U4)] uint dwIoControlCode, IntPtr lpInBuffer, [MarshalAs(UnmanagedType.U4)] uint nInBufferSize, SafeGlobalMemoryBufferHandle lpOutBuffer, [MarshalAs(UnmanagedType.U4)] uint nOutBufferSize, [MarshalAs(UnmanagedType.U4)] out uint lpBytesReturned, IntPtr lpOverlapped); - - /// Sends a control code directly to a specified device driver, causing the corresponding device to perform the corresponding operation. - /// - /// If the operation completes successfully, the return value is nonzero. - /// If the operation fails or is pending, the return value is zero. To get extended error information, call GetLastError. - /// - /// - /// To retrieve a handle to the device, you must call the function with either the name of a device or - /// the name of the driver associated with a device. - /// To specify a device name, use the following format: \\.\DeviceName - /// Minimum supported client: Windows XP - /// Minimum supported server: Windows Server 2003 - /// - /// The device. - /// The i/o control code. - /// Buffer for in data. - /// Size of the in buffer. - /// Buffer for out data. - /// Size of the out buffer. - /// [out] The bytes returned. - /// The overlapped. - [SuppressMessage("Microsoft.Security", "CA5122:PInvokesShouldNotBeSafeCriticalFxCopRule")] - [DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Unicode), SuppressUnmanagedCodeSecurity] - [return: MarshalAs(UnmanagedType.Bool)] - internal static extern bool DeviceIoControl(SafeFileHandle hDevice, [MarshalAs(UnmanagedType.U4)] uint dwIoControlCode, [MarshalAs(UnmanagedType.AsAny)] object lpInBuffer, [MarshalAs(UnmanagedType.U4)] uint nInBufferSize, [MarshalAs(UnmanagedType.AsAny)] [Out] object lpOutBuffer, [MarshalAs(UnmanagedType.U4)] uint nOutBufferSize, [MarshalAs(UnmanagedType.U4)] out uint lpBytesReturned, IntPtr lpOverlapped); - - #endregion // DeviceIoControl - - #region SetupDiXxx - - /// - /// The SetupDiDestroyDeviceInfoList function deletes a device information set and frees all associated memory. - /// - /// - /// SetLastError is set to . - /// Available in Microsoft Windows 2000 and later versions of Windows. - /// - /// Information describing the development. - /// - /// The function returns TRUE if it is successful. - /// Otherwise, it returns FALSE and the logged error can be retrieved with a call to GetLastError. - /// - [SuppressMessage("Microsoft.Security", "CA5122:PInvokesShouldNotBeSafeCriticalFxCopRule")] - [DllImport("setupapi.dll", SetLastError = false, CharSet = CharSet.Unicode), SuppressUnmanagedCodeSecurity] - [return: MarshalAs(UnmanagedType.Bool)] - private static extern bool SetupDiDestroyDeviceInfoList(IntPtr hDevInfo); - - /// - /// The SetupDiEnumDeviceInterfaces function enumerates the device interfaces that are contained in a device information set. - /// - /// - /// Repeated calls to this function return an structure for a different device - /// interface. - /// This function can be called repeatedly to get information about interfaces in a device information set that are - /// associated - /// with a particular device information element or that are associated with all device information elements. - /// Available in Microsoft Windows 2000 and later versions of Windows. - /// - /// Information describing the development. - /// Information describing the development. - /// [in,out] Unique identifier for the interface class. - /// Zero-based index of the member. - /// [in,out] Information describing the device interface. - /// - /// SetupDiEnumDeviceInterfaces returns TRUE if the function completed without error. - /// If the function completed with an error, FALSE is returned and the error code for the failure can be retrieved by calling - /// GetLastError. - /// - [SuppressMessage("Microsoft.Security", "CA5122:PInvokesShouldNotBeSafeCriticalFxCopRule")] - [DllImport("setupapi.dll", SetLastError = true, CharSet = CharSet.Unicode), SuppressUnmanagedCodeSecurity] - [return: MarshalAs(UnmanagedType.Bool)] - internal static extern bool SetupDiEnumDeviceInterfaces(SafeHandle hDevInfo, IntPtr devInfo, ref Guid interfaceClassGuid, [MarshalAs(UnmanagedType.U4)] uint memberIndex, ref SP_DEVICE_INTERFACE_DATA deviceInterfaceData); - - /// - /// The SetupDiGetClassDevsEx function returns a handle to a device information set that contains requested device information elements - /// for a local or a remote computer. - /// - /// - /// The caller of SetupDiGetClassDevsEx must delete the returned device information set when it is no longer needed by calling - /// . - /// Available in Microsoft Windows 2000 and later versions of Windows. - /// - /// [in,out] Unique identifier for the class. - /// The enumerator. - /// The parent. - /// The devs ex flags. - /// Set the device information belongs to. - /// Name of the machine. - /// The reserved. - /// - /// If the operation succeeds, SetupDiGetClassDevsEx returns a handle to a device information set that contains all installed - /// devices that matched the supplied parameters. - /// If the operation fails, the function returns INVALID_HANDLE_VALUE. To get extended error information, call - /// GetLastError. - /// - [SuppressMessage("Microsoft.Security", "CA5122:PInvokesShouldNotBeSafeCriticalFxCopRule")] - [DllImport("setupapi.dll", SetLastError = true, CharSet = CharSet.Unicode), SuppressUnmanagedCodeSecurity] - internal static extern SafeSetupDiClassDevsExHandle SetupDiGetClassDevsEx(ref Guid classGuid, IntPtr enumerator, IntPtr hwndParent, [MarshalAs(UnmanagedType.U4)] SetupDiGetClassDevsExFlags devsExFlags, IntPtr deviceInfoSet, [MarshalAs(UnmanagedType.LPWStr)] string machineName, IntPtr reserved); - - /// - /// The SetupDiGetDeviceInterfaceDetail function returns details about a device interface. - /// - /// - /// The interface detail returned by this function consists of a device path that can be passed to Win32 functions such as - /// CreateFile. - /// Do not attempt to parse the device path symbolic name. The device path can be reused across system starts. - /// Available in Microsoft Windows 2000 and later versions of Windows. - /// - /// Information describing the development. - /// [in,out] Information describing the device interface. - /// [in,out] Information describing the device interface detail. - /// Size of the device interface detail data. - /// Size of the required. - /// [in,out] Information describing the device information. - /// - /// SetupDiGetDeviceInterfaceDetail returns TRUE if the function completed without error. - /// If the function completed with an error, FALSE is returned and the error code for the failure can be retrieved by calling - /// GetLastError. - /// - [SuppressMessage("Microsoft.Security", "CA5122:PInvokesShouldNotBeSafeCriticalFxCopRule")] - [DllImport("setupapi.dll", SetLastError = true, CharSet = CharSet.Unicode), SuppressUnmanagedCodeSecurity] - [return: MarshalAs(UnmanagedType.Bool)] - internal static extern bool SetupDiGetDeviceInterfaceDetail(SafeHandle hDevInfo, ref SP_DEVICE_INTERFACE_DATA deviceInterfaceData, ref SP_DEVICE_INTERFACE_DETAIL_DATA deviceInterfaceDetailData, [MarshalAs(UnmanagedType.U4)] uint deviceInterfaceDetailDataSize, IntPtr requiredSize, ref SP_DEVINFO_DATA deviceInfoData); - - /// - /// The SetupDiGetDeviceRegistryProperty function retrieves a specified Plug and Play device property. - /// - /// Available in Microsoft Windows 2000 and later versions of Windows. - /// Set the device information belongs to. - /// [in,out] Information describing the device information. - /// The property. - /// [out] Type of the property register data. - /// Buffer for property data. - /// Size of the property buffer. - /// Size of the required. - /// - /// SetupDiGetDeviceRegistryProperty returns TRUE if the call was successful. - /// Otherwise, it returns FALSE and the logged error can be retrieved by making a call to GetLastError. - /// SetupDiGetDeviceRegistryProperty returns the ERROR_INVALID_DATA error code if the requested property does not exist for a - /// device or if the property data is not valid. - /// - [SuppressMessage("Microsoft.Security", "CA5122:PInvokesShouldNotBeSafeCriticalFxCopRule")] - [DllImport("setupapi.dll", SetLastError = true, CharSet = CharSet.Unicode), SuppressUnmanagedCodeSecurity] - [return: MarshalAs(UnmanagedType.Bool)] - internal static extern bool SetupDiGetDeviceRegistryProperty(SafeHandle deviceInfoSet, ref SP_DEVINFO_DATA deviceInfoData, SetupDiGetDeviceRegistryPropertyEnum property, [MarshalAs(UnmanagedType.U4)] out uint propertyRegDataType, SafeGlobalMemoryBufferHandle propertyBuffer, [MarshalAs(UnmanagedType.U4)] uint propertyBufferSize, IntPtr requiredSize); - - #endregion // SetupDiXxx - } -} diff --git a/AlphaFS/Filesystem/Native Methods/NativeMethods.DirectoryManagement.cs b/AlphaFS/Filesystem/Native Methods/NativeMethods.DirectoryManagement.cs deleted file mode 100644 index 0ee7079..0000000 --- a/AlphaFS/Filesystem/Native Methods/NativeMethods.DirectoryManagement.cs +++ /dev/null @@ -1,208 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System.Diagnostics.CodeAnalysis; -using System.Runtime.InteropServices; -using System.Security; -using System.Text; - -namespace Alphaleonis.Win32.Filesystem -{ - internal static partial class NativeMethods - { - /// - /// Creates a new directory. - /// If the underlying file system supports security on files and directories, - /// the function applies a specified security descriptor to the new directory. - /// - /// - /// Some file systems, such as the NTFS file system, support compression or encryption for individual files and - /// directories. - /// On volumes formatted for such a file system, a new directory inherits the compression and encryption attributes of its parent - /// directory. - /// An application can obtain a handle to a directory by calling with the FILE_FLAG_BACKUP_SEMANTICS - /// flag set. - /// Minimum supported client: Windows XP [desktop apps | Windows Store apps] - /// Minimum supported server: Windows Server 2003 [desktop apps | Windows Store apps] - /// - /// Full pathname of the file. - /// The security attributes. - /// - /// If the function succeeds, the return value is nonzero. - /// If the function fails, the return value is zero. To get extended error information, call GetLastError. - /// - [SuppressMessage("Microsoft.Security", "CA5122:PInvokesShouldNotBeSafeCriticalFxCopRule")] - [DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Unicode, EntryPoint = "CreateDirectoryW"), SuppressUnmanagedCodeSecurity] - [return: MarshalAs(UnmanagedType.Bool)] - internal static extern bool CreateDirectory([MarshalAs(UnmanagedType.LPWStr)] string lpPathName, [MarshalAs(UnmanagedType.LPStruct)] Security.NativeMethods.SecurityAttributes lpSecurityAttributes); - - /// - /// Creates a new directory with the attributes of a specified template directory. - /// If the underlying file system supports security on files and directories, - /// the function applies a specified security descriptor to the new directory. - /// The new directory retains the other attributes of the specified template directory. - /// - /// - /// The CreateDirectoryEx function allows you to create directories that inherit stream information from other directories. - /// This function is useful, for example, when you are using Macintosh directories, which have a resource stream - /// that is needed to properly identify directory contents as an attribute. - /// Some file systems, such as the NTFS file system, support compression or encryption for individual files and - /// directories. - /// On volumes formatted for such a file system, a new directory inherits the compression and encryption attributes of its parent - /// directory. - /// You can obtain a handle to a directory by calling the function with the FILE_FLAG_BACKUP_SEMANTICS - /// flag set. - /// Minimum supported client: Windows XP [desktop apps only] - /// Minimum supported server: Windows Server 2003 [desktop apps only] - /// - /// Pathname of the template directory. - /// Full pathname of the file. - /// The security attributes. - /// - /// If the function succeeds, the return value is nonzero. - /// If the function fails, the return value is zero (0). To get extended error information, call GetLastError. - /// - [SuppressMessage("Microsoft.Security", "CA5122:PInvokesShouldNotBeSafeCriticalFxCopRule")] - [DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Unicode, EntryPoint = "CreateDirectoryExW"), SuppressUnmanagedCodeSecurity] - [return: MarshalAs(UnmanagedType.Bool)] - internal static extern bool CreateDirectoryEx([MarshalAs(UnmanagedType.LPWStr)] string lpTemplateDirectory, [MarshalAs(UnmanagedType.LPWStr)] string lpPathName, [MarshalAs(UnmanagedType.LPStruct)] Security.NativeMethods.SecurityAttributes lpSecurityAttributes); - - /// - /// Creates a new directory as a transacted operation, with the attributes of a specified template directory. - /// If the underlying file system supports security on files and directories, - /// the function applies a specified security descriptor to the new directory. - /// The new directory retains the other attributes of the specified template directory. - /// - /// - /// The CreateDirectoryTransacted function allows you to create directories that inherit stream information from other - /// directories. - /// This function is useful, for example, when you are using Macintosh directories, which have a resource stream - /// that is needed to properly identify directory contents as an attribute. - /// Some file systems, such as the NTFS file system, support compression or encryption for individual files and - /// directories. - /// On volumes formatted for such a file system, a new directory inherits the compression and encryption attributes of its parent - /// directory. - /// You can obtain a handle to a directory by calling the function with the - /// FILE_FLAG_BACKUP_SEMANTICS flag set. - /// Minimum supported client: Windows XP [desktop apps only] - /// Minimum supported server: Windows Server 2003 [desktop apps only] - /// - /// Pathname of the template directory. - /// Pathname of the new directory. - /// The security attributes. - /// The transaction. - /// - /// If the function succeeds, the return value is nonzero. - /// If the function fails, the return value is zero (0). To get extended error information, call GetLastError. - /// This function fails with ERROR_EFS_NOT_ALLOWED_IN_TRANSACTION if you try to create a - /// child directory with a parent directory that has encryption disabled. - /// - [SuppressMessage("Microsoft.Security", "CA5122:PInvokesShouldNotBeSafeCriticalFxCopRule")] - [DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Unicode, EntryPoint = "CreateDirectoryTransactedW"), SuppressUnmanagedCodeSecurity] - [return: MarshalAs(UnmanagedType.Bool)] - internal static extern bool CreateDirectoryTransacted([MarshalAs(UnmanagedType.LPWStr)] string lpTemplateDirectory, [MarshalAs(UnmanagedType.LPWStr)] string lpNewDirectory, [MarshalAs(UnmanagedType.LPStruct)] Security.NativeMethods.SecurityAttributes lpSecurityAttributes, SafeHandle hTransaction); - - /// - /// Retrieves the current directory for the current process. - /// - /// - /// The RemoveDirectory function marks a directory for deletion on close. - /// Therefore, the directory is not removed until the last handle to the directory is closed. - /// RemoveDirectory removes a directory junction, even if the contents of the target are not empty; - /// the function removes directory junctions regardless of the state of the target object. - /// Minimum supported client: Windows XP [desktop apps | Windows Store apps] - /// Minimum supported server: Windows Server 2003 [desktop apps | Windows Store apps] - /// - /// The length of the buffer for the current directory string, in TCHARs. The buffer length must include room for a terminating null character. - /// - /// A pointer to the buffer that receives the current directory string. This null-terminated string specifies the absolute path to the current directory. - /// To determine the required buffer size, set this parameter to NULL and the nBufferLength parameter to 0. - /// - /// - /// If the function succeeds, the return value specifies the number of characters that are written to the buffer, not including the terminating null character. - /// If the function fails, the return value is zero. To get extended error information, call GetLastError. - /// - [SuppressMessage("Microsoft.Usage", "CA2205:UseManagedEquivalentsOfWin32Api")] - [SuppressMessage("Microsoft.Security", "CA5122:PInvokesShouldNotBeSafeCriticalFxCopRule")] - [DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Unicode, EntryPoint = "GetCurrentDirectoryW"), SuppressUnmanagedCodeSecurity] - [return: MarshalAs(UnmanagedType.U4)] - internal static extern uint GetCurrentDirectory([MarshalAs(UnmanagedType.U4)] uint nBufferLength, StringBuilder lpBuffer); - - /// - /// Deletes an existing empty directory. - /// - /// - /// The RemoveDirectory function marks a directory for deletion on close. - /// Therefore, the directory is not removed until the last handle to the directory is closed. - /// RemoveDirectory removes a directory junction, even if the contents of the target are not empty; - /// the function removes directory junctions regardless of the state of the target object. - /// Minimum supported client: Windows XP [desktop apps | Windows Store apps] - /// Minimum supported server: Windows Server 2003 [desktop apps | Windows Store apps] - /// - /// Full pathname of the file. - /// - /// If the function succeeds, the return value is nonzero. - /// If the function fails, the return value is zero. To get extended error information, call GetLastError. - /// - [SuppressMessage("Microsoft.Security", "CA5122:PInvokesShouldNotBeSafeCriticalFxCopRule")] - [DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Unicode, EntryPoint = "RemoveDirectoryW"), SuppressUnmanagedCodeSecurity] - [return: MarshalAs(UnmanagedType.Bool)] - internal static extern bool RemoveDirectory([MarshalAs(UnmanagedType.LPWStr)] string lpPathName); - - /// - /// Deletes an existing empty directory as a transacted operation. - /// - /// - /// The RemoveDirectoryTransacted function marks a directory for deletion on close. - /// Therefore, the directory is not removed until the last handle to the directory is closed. - /// RemoveDirectory removes a directory junction, even if the contents of the target are not empty; - /// the function removes directory junctions regardless of the state of the target object. - /// Minimum supported client: Windows Vista [desktop apps only] - /// Minimum supported server: Windows Server 2008 [desktop apps only] - /// - /// Full pathname of the file. - /// The transaction. - /// - /// If the function succeeds, the return value is nonzero. - /// If the function fails, the return value is zero. To get extended error information, call GetLastError. - /// - [SuppressMessage("Microsoft.Security", "CA5122:PInvokesShouldNotBeSafeCriticalFxCopRule")] - [DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Unicode, EntryPoint = "RemoveDirectoryTransactedW"), SuppressUnmanagedCodeSecurity] - [return: MarshalAs(UnmanagedType.Bool)] - internal static extern bool RemoveDirectoryTransacted([MarshalAs(UnmanagedType.LPWStr)] string lpPathName, SafeHandle hTransaction); - - /// - /// Changes the current directory for the current process. - /// - /// - /// The path to the new current directory. This parameter may specify a relative path or a full path. In either case, the full path of the specified directory is calculated and stored as the current directory. - /// - /// - /// If the function succeeds, the return value is nonzero. - /// If the function fails, the return value is zero. To get extended error information, call GetLastError. - /// - [SuppressMessage("Microsoft.Usage", "CA2205:UseManagedEquivalentsOfWin32Api")] - [SuppressMessage("Microsoft.Security", "CA5122:PInvokesShouldNotBeSafeCriticalFxCopRule")] - [DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Unicode, EntryPoint = "SetCurrentDirectoryW"), SuppressUnmanagedCodeSecurity] - [return: MarshalAs(UnmanagedType.Bool)] - internal static extern bool SetCurrentDirectory([MarshalAs(UnmanagedType.LPWStr)] string lpPathName); - } -} diff --git a/AlphaFS/Filesystem/Native Methods/NativeMethods.DiskManagement.cs b/AlphaFS/Filesystem/Native Methods/NativeMethods.DiskManagement.cs deleted file mode 100644 index 1853217..0000000 --- a/AlphaFS/Filesystem/Native Methods/NativeMethods.DiskManagement.cs +++ /dev/null @@ -1,84 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System.Diagnostics.CodeAnalysis; -using System.Runtime.InteropServices; -using System.Security; - -namespace Alphaleonis.Win32.Filesystem -{ - internal static partial class NativeMethods - { - /// - /// Retrieves information about the specified disk, including the amount of free space on the disk. - /// - /// - /// Symbolic link behavior: If the path points to a symbolic link, the operation is performed on the target. - /// If this parameter is a UNC name, it must include a trailing backslash (for example, "\\MyServer\MyShare\"). - /// Furthermore, a drive specification must have a trailing backslash (for example, "C:\"). - /// The calling application must have FILE_LIST_DIRECTORY access rights for this directory. - /// Minimum supported client: Windows XP [desktop apps only] - /// Minimum supported server: Windows Server 2003 [desktop apps only] - /// - /// Full pathname of the root file. - /// [out] The sectors per cluster. - /// [out] The bytes per sector. - /// [out] Number of free clusters. - /// [out] The total number of clusters. - /// - /// If the function succeeds, the return value is nonzero. - /// If the function fails, the return value is zero. To get extended error information, call GetLastError. - /// - [SuppressMessage("Microsoft.Security", "CA5122:PInvokesShouldNotBeSafeCriticalFxCopRule")] - [DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Unicode, EntryPoint = "GetDiskFreeSpaceW"), SuppressUnmanagedCodeSecurity] - [return: MarshalAs(UnmanagedType.Bool)] - internal static extern bool GetDiskFreeSpace([MarshalAs(UnmanagedType.LPWStr)] string lpRootPathName, [MarshalAs(UnmanagedType.U4)] out int lpSectorsPerCluster, [MarshalAs(UnmanagedType.U4)] out int lpBytesPerSector, [MarshalAs(UnmanagedType.U4)] out int lpNumberOfFreeClusters, [MarshalAs(UnmanagedType.U4)] out uint lpTotalNumberOfClusters); - - /// - /// Retrieves information about the amount of space that is available on a disk volume, which is the total amount of space, - /// the total amount of free space, and the total amount of free space available to the user that is associated with the calling - /// thread. - /// - /// - /// Symbolic link behavior: If the path points to a symbolic link, the operation is performed on the target. - /// The GetDiskFreeSpaceEx function returns zero (0) for lpTotalNumberOfFreeBytes and lpFreeBytesAvailable - /// for all CD requests unless the disk is an unwritten CD in a CD-RW drive. - /// If this parameter is a UNC name, it must include a trailing backslash, for example, "\\MyServer\MyShare\". - /// This parameter does not have to specify the root directory on a disk. - /// The function accepts any directory on a disk. - /// The calling application must have FILE_LIST_DIRECTORY access rights for this directory. - /// Minimum supported client: Windows XP [desktop apps | Windows Store apps] - /// Minimum supported server: Windows Server 2003 [desktop apps | Windows Store apps] - /// - /// Pathname of the directory. - /// [out] The free bytes available. - /// [out] The total number of in bytes. - /// [out] The total number of free in bytes. - /// - /// If the function succeeds, the return value is nonzero. - /// If the function fails, the return value is zero (0). To get extended error information, call GetLastError. - /// - [SuppressMessage("Microsoft.Security", "CA5122:PInvokesShouldNotBeSafeCriticalFxCopRule")] - [DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Unicode, EntryPoint = "GetDiskFreeSpaceExW"), SuppressUnmanagedCodeSecurity] - [return: MarshalAs(UnmanagedType.Bool)] - internal static extern bool GetDiskFreeSpaceEx([MarshalAs(UnmanagedType.LPWStr)] string lpDirectoryName, [MarshalAs(UnmanagedType.U8)] out long lpFreeBytesAvailable, [MarshalAs(UnmanagedType.U8)] out long lpTotalNumberOfBytes, [MarshalAs(UnmanagedType.U8)] out long lpTotalNumberOfFreeBytes); - } -} diff --git a/AlphaFS/Filesystem/Native Methods/NativeMethods.EncryptedFileRaw.cs b/AlphaFS/Filesystem/Native Methods/NativeMethods.EncryptedFileRaw.cs deleted file mode 100644 index 1e94f71..0000000 --- a/AlphaFS/Filesystem/Native Methods/NativeMethods.EncryptedFileRaw.cs +++ /dev/null @@ -1,62 +0,0 @@ -using System; -using System.Diagnostics.CodeAnalysis; -using System.Runtime.InteropServices; -using System.Security; - -namespace Alphaleonis.Win32.Filesystem -{ - partial class NativeMethods - { - /// Opens an encrypted file in order to backup (export) or restore (import) the file. - /// If the function succeeds, it returns ERROR_SUCCESS. - /// If the function fails, it returns a nonzero error code defined in WinError.h. You can use FormatMessage with the FORMAT_MESSAGE_FROM_SYSTEM flag to get a generic text description of the error. - /// Minimum supported client: Windows XP Professional [desktop apps only] - /// Minimum supported server: Windows Server 2003 [desktop apps only] - /// The name of the file to be opened. - /// The operation to be performed. - /// [out] The address of a context block that must be presented in subsequent calls to - /// ReadEncryptedFileRaw, WriteEncryptedFileRaw, or CloseEncryptedFileRaw. - [SuppressMessage("Microsoft.Security", "CA5122:PInvokesShouldNotBeSafeCriticalFxCopRule")] - [DllImport("Advapi32.dll", SetLastError = true, CharSet = CharSet.Unicode, EntryPoint = "OpenEncryptedFileRawW"), SuppressUnmanagedCodeSecurity] - [return: MarshalAs(UnmanagedType.U4)] - internal static extern uint OpenEncryptedFileRaw([MarshalAs(UnmanagedType.LPWStr)] string lpFileName, EncryptedFileRawMode ulFlags, out SafeEncryptedFileRawHandle pvContext); - - - /// Closes an encrypted file after a backup or restore operation, and frees associated system resources. - /// Minimum supported client: Windows XP Professional [desktop apps only] - /// Minimum supported server: Windows Server 2003 [desktop apps only] - /// A pointer to a system-defined context block. The OpenEncryptedFileRaw function returns the context block. - [SuppressMessage("Microsoft.Security", "CA5122:PInvokesShouldNotBeSafeCriticalFxCopRule")] - [DllImport("Advapi32.dll", SetLastError = true, CharSet = CharSet.Unicode), SuppressUnmanagedCodeSecurity] - internal static extern void CloseEncryptedFileRaw(IntPtr pvContext); - - - /// Backs up (export) encrypted files. This is one of a group of Encrypted File System (EFS) functions that is intended to implement backup and restore functionality, while maintaining files in their encrypted state. - /// If the function succeeds, it returns ERROR_SUCCESS. - /// If the function fails, it returns a nonzero error code defined in WinError.h. You can use FormatMessage with the FORMAT_MESSAGE_FROM_SYSTEM flag to get a generic text description of the error. - /// Minimum supported client: Windows XP Professional [desktop apps only] - /// Minimum supported server: Windows Server 2003 [desktop apps only] - [SuppressMessage("Microsoft.Security", "CA5122:PInvokesShouldNotBeSafeCriticalFxCopRule"), SuppressUnmanagedCodeSecurity] - [DllImport("Advapi32.dll", SetLastError = true, CharSet = CharSet.Unicode), SuppressUnmanagedCodeSecurity] - [return: MarshalAs(UnmanagedType.U4)] - internal static extern uint ReadEncryptedFileRaw([MarshalAs(UnmanagedType.FunctionPtr)] EncryptedFileRawExportCallback pfExportCallback, IntPtr pvCallbackContext, SafeEncryptedFileRawHandle pvContext); - - - /// Restores (import) encrypted files. This is one of a group of Encrypted File System (EFS) functions that is intended to implement backup and restore functionality, while maintaining files in their encrypted state. - /// If the function succeeds, it returns ERROR_SUCCESS. - /// If the function fails, it returns a nonzero error code defined in WinError.h. You can use FormatMessage with the FORMAT_MESSAGE_FROM_SYSTEM flag to get a generic text description of the error. - /// Minimum supported client: Windows XP Professional [desktop apps only] - /// Minimum supported server: Windows Server 2003 [desktop apps only] - [SuppressMessage("Microsoft.Security", "CA5122:PInvokesShouldNotBeSafeCriticalFxCopRule")] - [DllImport("Advapi32.dll", SetLastError = true, CharSet = CharSet.Unicode), SuppressUnmanagedCodeSecurity] - [return: MarshalAs(UnmanagedType.U4)] - internal static extern uint WriteEncryptedFileRaw([MarshalAs(UnmanagedType.FunctionPtr)] EncryptedFileRawImportCallback pfExportCallback, IntPtr pvCallbackContext, SafeEncryptedFileRawHandle pvContext); - - - [SuppressUnmanagedCodeSecurity] - internal delegate int EncryptedFileRawExportCallback(IntPtr pbData, IntPtr pvCallbackContext, uint ulLength); - - [SuppressUnmanagedCodeSecurity] - internal delegate int EncryptedFileRawImportCallback(IntPtr pbData, IntPtr pvCallbackContext, ref uint ulLength); - } -} diff --git a/AlphaFS/Filesystem/Native Methods/NativeMethods.FileManagement.cs b/AlphaFS/Filesystem/Native Methods/NativeMethods.FileManagement.cs deleted file mode 100644 index 40bc36b..0000000 --- a/AlphaFS/Filesystem/Native Methods/NativeMethods.FileManagement.cs +++ /dev/null @@ -1,760 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -using Alphaleonis.Win32.Security; -using Microsoft.Win32.SafeHandles; -using System; -using System.Diagnostics.CodeAnalysis; -using System.IO; -using System.Runtime.InteropServices; -using System.Security; -using System.Security.AccessControl; -using System.Text; - -namespace Alphaleonis.Win32.Filesystem -{ - internal static partial class NativeMethods - { - /// - /// Copies an existing file to a new file, notifying the application of its progress through a callback function. - /// - /// - /// This function fails with ERROR_ACCESS_DENIED if the destination file already exists and has the FILE_ATTRIBUTE_HIDDEN or - /// FILE_ATTRIBUTE_READONLY attribute set. - /// This function preserves extended attributes, OLE structured storage, NTFS file system alternate data streams, security - /// resource attributes, and file attributes. - /// Windows 7, Windows Server 2008 R2, Windows Server 2008, Windows Vista, Windows Server 2003, and Windows XP: - /// Security resource attributes (ATTRIBUTE_SECURITY_INFORMATION) for the existing file are not copied to the new file until - /// Windows 8 and Windows Server 2012. - /// Minimum supported client: Windows XP [desktop apps only] - /// Minimum supported server: Windows Server 2003 [desktop apps only] - /// - /// Filename of the existing file. - /// Filename of the new file. - /// The progress routine. - /// The data. - /// [out] The pb cancel. - /// The copy flags. - /// - /// If the function succeeds, the return value is nonzero. - /// If the function fails, the return value is zero. To get extended error information, call GetLastError. - /// - [SuppressMessage("Microsoft.Security", "CA5122:PInvokesShouldNotBeSafeCriticalFxCopRule")] - [DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Unicode, EntryPoint = "CopyFileExW"), SuppressUnmanagedCodeSecurity] - [return: MarshalAs(UnmanagedType.Bool)] - internal static extern bool CopyFileEx([MarshalAs(UnmanagedType.LPWStr)] string lpExistingFileName, [MarshalAs(UnmanagedType.LPWStr)] string lpNewFileName, NativeCopyMoveProgressRoutine lpProgressRoutine, IntPtr lpData, [MarshalAs(UnmanagedType.Bool)] out bool pbCancel, CopyOptions dwCopyFlags); - - /// - /// Copies an existing file to a new file as a transacted operation, notifying the application of its progress through a callback - /// function. - /// - /// - /// This function fails with ERROR_ACCESS_DENIED if the destination file already exists and has the FILE_ATTRIBUTE_HIDDEN or - /// FILE_ATTRIBUTE_READONLY attribute set. - /// This function preserves extended attributes, OLE structured storage, NTFS file system alternate data streams, security - /// resource attributes, and file attributes. - /// Windows 7, Windows Server 2008 R2, Windows Server 2008, Windows Vista, Windows Server 2003, and Windows XP: - /// Security resource attributes (ATTRIBUTE_SECURITY_INFORMATION) for the existing file are not copied to the new file until - /// Windows 8 and Windows Server 2012. - /// Minimum supported client: Windows Vista [desktop apps only] - /// Minimum supported server: Windows Server 2008 [desktop apps only] - /// - /// - /// If the function succeeds, the return value is nonzero. - /// If the function fails, the return value is zero. To get extended error information, call GetLastError. - /// - [SuppressMessage("Microsoft.Security", "CA5122:PInvokesShouldNotBeSafeCriticalFxCopRule")] - [DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Unicode, EntryPoint = "CopyFileTransactedW"), SuppressUnmanagedCodeSecurity] - [return: MarshalAs(UnmanagedType.Bool)] - internal static extern bool CopyFileTransacted([MarshalAs(UnmanagedType.LPWStr)] string lpExistingFileName, [MarshalAs(UnmanagedType.LPWStr)] string lpNewFileName, NativeCopyMoveProgressRoutine lpProgressRoutine, IntPtr lpData, [MarshalAs(UnmanagedType.Bool)] out bool pbCancel, CopyOptions dwCopyFlags, SafeHandle hTransaction); - - /// - /// Creates or opens a file or I/O device. The most commonly used I/O devices are as follows: file, file stream, directory, physical - /// disk, volume, console buffer, tape drive, communications resource, mailslot, and pipe. - /// - /// Minimum supported client: Windows XP. - /// Minimum supported server: Windows Server 2003. - /// - /// If the function succeeds, the return value is an open handle to the specified file, device, named pipe, or mail slot. If the - /// function fails, the return value is Win32Errors.ERROR_INVALID_HANDLE. To get extended error information, call GetLastError. - /// - [SuppressMessage("Microsoft.Security", "CA5122:PInvokesShouldNotBeSafeCriticalFxCopRule")] - [DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Unicode, EntryPoint = "CreateFileW"), SuppressUnmanagedCodeSecurity] - internal static extern SafeFileHandle CreateFile([MarshalAs(UnmanagedType.LPWStr)] string lpFileName, [MarshalAs(UnmanagedType.U4)] FileSystemRights dwDesiredAccess, [MarshalAs(UnmanagedType.U4)] FileShare dwShareMode, [MarshalAs(UnmanagedType.LPStruct)] Security.NativeMethods.SecurityAttributes lpSecurityAttributes, [MarshalAs(UnmanagedType.U4)] FileMode dwCreationDisposition, [MarshalAs(UnmanagedType.U4)] ExtendedFileAttributes dwFlagsAndAttributes, IntPtr hTemplateFile); - - /// - /// Creates or opens a file or I/O device. The most commonly used I/O devices are as follows: file, file stream, directory, physical - /// disk, volume, console buffer, tape drive, communications resource, mailslot, and pipe. - /// - /// Minimum supported client: Windows Vista [desktop apps only]. - /// Minimum supported server: Windows Server 2008 [desktop apps only]. - /// - /// If the function succeeds, the return value is an open handle to the specified file, device, named pipe, or mail slot. If the - /// function fails, the return value is Win32Errors.ERROR_INVALID_HANDLE". To get extended error information, call GetLastError. - /// - [SuppressMessage("Microsoft.Security", "CA5122:PInvokesShouldNotBeSafeCriticalFxCopRule")] - [DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Unicode, EntryPoint = "CreateFileTransactedW"), SuppressUnmanagedCodeSecurity] - internal static extern SafeFileHandle CreateFileTransacted([MarshalAs(UnmanagedType.LPWStr)] string lpFileName, [MarshalAs(UnmanagedType.U4)] FileSystemRights dwDesiredAccess, [MarshalAs(UnmanagedType.U4)] FileShare dwShareMode, [MarshalAs(UnmanagedType.LPStruct)] Security.NativeMethods.SecurityAttributes lpSecurityAttributes, [MarshalAs(UnmanagedType.U4)] FileMode dwCreationDisposition, [MarshalAs(UnmanagedType.U4)] ExtendedFileAttributes dwFlagsAndAttributes, IntPtr hTemplateFile, SafeHandle hTransaction, IntPtr pusMiniVersion, IntPtr pExtendedParameter); - - /// Creates or opens a named or unnamed file mapping object for a specified file. - /// Minimum supported client: Windows XP. - /// Minimum supported server: Windows Server 2003. - /// - /// If the function succeeds, the return value is a handle to the newly created file mapping object. If the function fails, the return - /// value is . - /// - [SuppressMessage("Microsoft.Security", "CA5122:PInvokesShouldNotBeSafeCriticalFxCopRule")] - [DllImport("kernel32.dll", SetLastError = false, CharSet = CharSet.Unicode, EntryPoint = "CreateFileMappingW"), SuppressUnmanagedCodeSecurity] - internal static extern SafeFileHandle CreateFileMapping(SafeFileHandle hFile, SafeHandle lpSecurityAttributes, [MarshalAs(UnmanagedType.U4)] uint flProtect, [MarshalAs(UnmanagedType.U4)] uint dwMaximumSizeHigh, [MarshalAs(UnmanagedType.U4)] uint dwMaximumSizeLow, [MarshalAs(UnmanagedType.LPWStr)] string lpName); - - /// - /// Establishes a hard link between an existing file and a new file. This function is only supported on the NTFS file system, and only - /// for files, not directories. - /// - /// Minimum supported client: Windows XP [desktop apps only]. - /// Minimum supported server: Windows Server 2003 [desktop apps only]. - /// - /// If the function succeeds, the return value is nonzero. If the function fails, the return value is zero (0). To get extended error - /// information, call GetLastError. - /// - [SuppressMessage("Microsoft.Security", "CA5122:PInvokesShouldNotBeSafeCriticalFxCopRule")] - [DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Unicode, EntryPoint = "CreateHardLinkW"), SuppressUnmanagedCodeSecurity] - [return: MarshalAs(UnmanagedType.Bool)] - internal static extern bool CreateHardLink([MarshalAs(UnmanagedType.LPWStr)] string lpFileName, [MarshalAs(UnmanagedType.LPWStr)] string lpExistingFileName, IntPtr lpSecurityAttributes); - - /// - /// Establishes a hard link between an existing file and a new file as a transacted operation. This function is only supported on the - /// NTFS file system, and only for files, not directories. - /// - /// Minimum supported client: Windows Vista [desktop apps only]. - /// Minimum supported server: Windows Server 2008 [desktop apps only]. - /// - /// If the function succeeds, the return value is nonzero. If the function fails, the return value is zero (0). To get extended error - /// information, call GetLastError. - /// - [SuppressMessage("Microsoft.Security", "CA5122:PInvokesShouldNotBeSafeCriticalFxCopRule")] - [DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Unicode, EntryPoint = "CreateHardLinkTransactedW"), SuppressUnmanagedCodeSecurity] - [return: MarshalAs(UnmanagedType.Bool)] - internal static extern bool CreateHardLinkTransacted([MarshalAs(UnmanagedType.LPWStr)] string lpFileName, [MarshalAs(UnmanagedType.LPWStr)] string lpExistingFileName, IntPtr lpSecurityAttributes, SafeHandle hTransaction); - - /// Creates a symbolic link. - /// Minimum supported client: Windows Vista [desktop apps only]. - /// Minimum supported server: Windows Server 2008 [desktop apps only]. - /// - /// The unmanaged prototype contains a return directive because the CreateSymbolicLink API function returns BOOLEAN, a one-byte data type. - /// The default marshaling for bool is four bytes (to allow seamless integration with BOOL return values). - /// If you were to use the default marshaling for BOOLEAN values, it's likely that you will get erroneous results. - /// The return directive forces PInvoke to marshal just one byte of the return value. - /// Source: http://www.informit.com/guides/content.aspx?g=dotnet&seqNum=762&ns=16196 - /// - /// - /// If the function succeeds, the return value is nonzero. If the function fails, the return value is zero (0). To get extended error - /// information, call GetLastError. - /// - [SuppressMessage("Microsoft.Security", "CA5122:PInvokesShouldNotBeSafeCriticalFxCopRule")] - [DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Unicode, EntryPoint = "CreateSymbolicLinkW"), SuppressUnmanagedCodeSecurity] - [return: MarshalAs(UnmanagedType.I1)] - internal static extern bool CreateSymbolicLink([MarshalAs(UnmanagedType.LPWStr)] string lpSymlinkFileName, [MarshalAs(UnmanagedType.LPWStr)] string lpTargetFileName, [MarshalAs(UnmanagedType.U4)] SymbolicLinkTarget dwFlags); - - /// Creates a symbolic link as a transacted operation. - /// Minimum supported client: Windows Vista [desktop apps only]. - /// Minimum supported server: Windows Server 2008 [desktop apps only]. - /// - /// The unmanaged prototype contains a return directive because the CreateSymbolicLink API function returns BOOLEAN, a one-byte data type. - /// The default marshaling for bool is four bytes (to allow seamless integration with BOOL return values). - /// If you were to use the default marshaling for BOOLEAN values, it's likely that you will get erroneous results. - /// The return directive forces PInvoke to marshal just one byte of the return value. - /// Source: http://www.informit.com/guides/content.aspx?g=dotnet&seqNum=762&ns=16196 - /// - /// - /// If the function succeeds, the return value is nonzero. If the function fails, the return value is zero (0). To get extended error - /// information, call GetLastError. - /// - [SuppressMessage("Microsoft.Security", "CA5122:PInvokesShouldNotBeSafeCriticalFxCopRule")] - [DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Unicode, EntryPoint = "CreateSymbolicLinkTransactedW"), SuppressUnmanagedCodeSecurity] - [return: MarshalAs(UnmanagedType.I1)] - internal static extern bool CreateSymbolicLinkTransacted([MarshalAs(UnmanagedType.LPWStr)] string lpSymlinkFileName, [MarshalAs(UnmanagedType.LPWStr)] string lpTargetFileName, [MarshalAs(UnmanagedType.U4)] SymbolicLinkTarget dwFlags, SafeHandle hTransaction); - - /// Decrypts an encrypted file or directory. - /// - /// The DecryptFile function requires exclusive access to the file being decrypted, and will fail if another process is using the file. - /// If the file is not encrypted, DecryptFile simply returns a nonzero value, which indicates success. If lpFileName specifies a read- - /// only file, the function fails and GetLastError returns ERROR_FILE_READ_ONLY. If lpFileName specifies a directory that contains a - /// read-only file, the functions succeeds but the directory is not decrypted. - /// - /// Minimum supported client: Windows XP. - /// Minimum supported server: Windows Server 2003. - /// - /// If the function succeeds, the return value is nonzero. If the function fails, the return value is zero. To get extended error - /// information, call GetLastError. - /// - [SuppressMessage("Microsoft.Security", "CA5122:PInvokesShouldNotBeSafeCriticalFxCopRule")] - [DllImport("advapi32.dll", SetLastError = true, CharSet = CharSet.Unicode, EntryPoint = "DecryptFileW"), SuppressUnmanagedCodeSecurity] - [return: MarshalAs(UnmanagedType.Bool)] - internal static extern bool DecryptFile([MarshalAs(UnmanagedType.LPWStr)] string lpFileName, [MarshalAs(UnmanagedType.U4)] uint dwReserved); - - /// Deletes an existing file. - /// - /// If an application attempts to delete a file that does not exist, the DeleteFile function fails with ERROR_FILE_NOT_FOUND. - /// - /// If the file is a read-only file, the function fails with ERROR_ACCESS_DENIED. - /// - /// If the path points to a symbolic link, the symbolic link is deleted, not the target. To delete a target, you must call CreateFile - /// and specify FILE_FLAG_DELETE_ON_CLOSE. - /// - /// Minimum supported client: Windows XP [desktop apps | Windows Store apps]. - /// Minimum supported server: Windows Server 2003 [desktop apps | Windows Store apps]. - /// - /// If the function succeeds, the return value is nonzero. If the function fails, the return value is zero (0). To get extended error - /// information, call GetLastError. - /// - [SuppressMessage("Microsoft.Security", "CA5122:PInvokesShouldNotBeSafeCriticalFxCopRule")] - [DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Unicode, EntryPoint = "DeleteFileW"), SuppressUnmanagedCodeSecurity] - [return: MarshalAs(UnmanagedType.Bool)] - internal static extern bool DeleteFile([MarshalAs(UnmanagedType.LPWStr)] string lpFileName); - - /// Deletes an existing file as a transacted operation. - /// Minimum supported client: Windows Vista [desktop apps only]. - /// Minimum supported server: Windows Server 2008 [desktop apps only]. - /// - /// If the function succeeds, the return value is nonzero. If the function fails, the return value is zero (0). To get extended error - /// information, call GetLastError. - /// - [SuppressMessage("Microsoft.Security", "CA5122:PInvokesShouldNotBeSafeCriticalFxCopRule")] - [DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Unicode, EntryPoint = "DeleteFileTransactedW"), SuppressUnmanagedCodeSecurity] - [return: MarshalAs(UnmanagedType.Bool)] - internal static extern bool DeleteFileTransacted([MarshalAs(UnmanagedType.LPWStr)] string lpFileName, SafeHandle hTransaction); - - /// - /// Encrypts a file or directory. All data streams in a file are encrypted. All new files created in an encrypted directory are - /// encrypted. - /// - /// - /// The EncryptFile function requires exclusive access to the file being encrypted, and will fail if another process is using the file. - /// If the file is already encrypted, EncryptFile simply returns a nonzero value, which indicates success. If the file is compressed, - /// EncryptFile will decompress the file before encrypting it. If lpFileName specifies a read-only file, the function fails and - /// GetLastError returns ERROR_FILE_READ_ONLY. If lpFileName specifies a directory that contains a read-only file, the functions - /// succeeds but the directory is not encrypted. - /// - /// Minimum supported client: Windows XP. - /// Minimum supported server: Windows Server 2003. - /// - /// If the function succeeds, the return value is nonzero. If the function fails, the return value is zero. To get extended error - /// information, call GetLastError. - /// - [SuppressMessage("Microsoft.Security", "CA5122:PInvokesShouldNotBeSafeCriticalFxCopRule")] - [DllImport("advapi32.dll", SetLastError = true, CharSet = CharSet.Unicode, EntryPoint = "EncryptFileW"), SuppressUnmanagedCodeSecurity] - [return: MarshalAs(UnmanagedType.Bool)] - internal static extern bool EncryptFile([MarshalAs(UnmanagedType.LPWStr)] string lpFileName); - - /// - /// Disables or enables encryption of the specified directory and the files in it. It does not affect encryption of subdirectories - /// below the indicated directory. - /// - /// - /// EncryptionDisable() disables encryption of directories and files. It does not affect the visibility of files with the - /// FILE_ATTRIBUTE_SYSTEM attribute set. This method will create/change the file "Desktop.ini" and wil set Encryption value: - /// "Disable=0|1". - /// - /// Minimum supported client: Windows XP Professional [desktop apps only]. - /// Minimum supported server: Windows Server 2003 [desktop apps only]. - /// - /// If the function succeeds, the return value is nonzero. If the function fails, the return value is zero. To get extended error - /// information, call GetLastError. - /// - [SuppressMessage("Microsoft.Security", "CA5122:PInvokesShouldNotBeSafeCriticalFxCopRule"), SuppressUnmanagedCodeSecurity] - [DllImport("advapi32.dll", SetLastError = true, CharSet = CharSet.Unicode), SuppressUnmanagedCodeSecurity] - [return: MarshalAs(UnmanagedType.Bool)] - internal static extern bool EncryptionDisable([MarshalAs(UnmanagedType.LPWStr)] string dirPath, [MarshalAs(UnmanagedType.Bool)] bool disable); - - /// Retrieves the encryption status of the specified file. - /// Minimum supported client: Windows XP Professional [desktop apps only]. - /// Minimum supported server: Windows Server 2003 [desktop apps only]. - /// - /// If the function succeeds, the return value is nonzero. If the function fails, the return value is zero. To get extended error - /// information, call GetLastError. - /// - [SuppressMessage("Microsoft.Security", "CA5122:PInvokesShouldNotBeSafeCriticalFxCopRule")] - [DllImport("advapi32.dll", SetLastError = true, CharSet = CharSet.Unicode, EntryPoint = "FileEncryptionStatusW"), SuppressUnmanagedCodeSecurity] - [return: MarshalAs(UnmanagedType.Bool)] - internal static extern bool FileEncryptionStatus([MarshalAs(UnmanagedType.LPWStr)] string lpFileName, out FileEncryptionStatus lpStatus); - - /// - /// Closes a file search handle opened by the FindFirstFile, FindFirstFileEx, FindFirstFileNameW, FindFirstFileNameTransactedW, - /// FindFirstFileTransacted, FindFirstStreamTransactedW, or FindFirstStreamW functions. - /// - /// Minimum supported client: Windows XP [desktop apps | Windows Store apps]. - /// Minimum supported server: Windows Server 2003 [desktop apps | Windows Store apps]. - /// - /// If the function succeeds, the return value is nonzero. If the function fails, the return value is zero. To get extended error - /// information, call GetLastError. - /// - [SuppressMessage("Microsoft.Security", "CA5122:PInvokesShouldNotBeSafeCriticalFxCopRule"), SuppressUnmanagedCodeSecurity] - [DllImport("kernel32.dll", SetLastError = false, CharSet = CharSet.Unicode), SuppressUnmanagedCodeSecurity] - [return: MarshalAs(UnmanagedType.Bool)] - internal static extern bool FindClose(IntPtr hFindFile); - - /// Searches a directory for a file or subdirectory with a name and attributes that match those specified. - /// A trailing backslash is not allowed and will be removed. - /// Minimum supported client: Windows XP [desktop apps | Windows Store apps]. - /// Minimum supported server: Windows Server 2003 [desktop apps | Windows Store apps]. - /// - /// If the function succeeds, the return value is a search handle used in a subsequent call to FindNextFile or FindClose, and the - /// lpFindFileData parameter contains information about the first file or directory found. If the function fails or fails to locate - /// files from the search string in the lpFileName parameter, the return value is INVALID_HANDLE_VALUE and the contents of - /// lpFindFileData are indeterminate. To get extended error information, call the GetLastError function. - /// - [SuppressMessage("Microsoft.Security", "CA5122:PInvokesShouldNotBeSafeCriticalFxCopRule")] - [DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Unicode, EntryPoint = "FindFirstFileExW"), SuppressUnmanagedCodeSecurity] - internal static extern SafeFindFileHandle FindFirstFileEx([MarshalAs(UnmanagedType.LPWStr)] string lpFileName, FINDEX_INFO_LEVELS fInfoLevelId, out WIN32_FIND_DATA lpFindFileData, FINDEX_SEARCH_OPS fSearchOp, IntPtr lpSearchFilter, FindExAdditionalFlags dwAdditionalFlags); - - /// - /// Searches a directory for a file or subdirectory with a name that matches a specific name as a transacted operation. - /// - /// A trailing backslash is not allowed and will be removed. - /// Minimum supported client: Windows Vista [desktop apps only]. - /// Minimum supported server: Windows Server 2008 [desktop apps only]. - /// - /// If the function succeeds, the return value is a search handle used in a subsequent call to FindNextFile or FindClose, and the - /// lpFindFileData parameter contains information about the first file or directory found. If the function fails or fails to locate - /// files from the search string in the lpFileName parameter, the return value is INVALID_HANDLE_VALUE and the contents of - /// lpFindFileData are indeterminate. To get extended error information, call the GetLastError function. - /// - [SuppressMessage("Microsoft.Security", "CA5122:PInvokesShouldNotBeSafeCriticalFxCopRule")] - [DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Unicode, EntryPoint = "FindFirstFileTransactedW"), SuppressUnmanagedCodeSecurity] - internal static extern SafeFindFileHandle FindFirstFileTransacted([MarshalAs(UnmanagedType.LPWStr)] string lpFileName, FINDEX_INFO_LEVELS fInfoLevelId, out WIN32_FIND_DATA lpFindFileData, FINDEX_SEARCH_OPS fSearchOp, IntPtr lpSearchFilter, FindExAdditionalFlags dwAdditionalFlags, SafeHandle hTransaction); - - /// - /// Creates an enumeration of all the hard links to the specified file. The FindFirstFileNameW function returns a handle to the - /// enumeration that can be used on subsequent calls to the FindNextFileNameW function. - /// - /// Minimum supported client: Windows Vista [desktop apps only]. - /// Minimum supported server: Windows Server 2008 [desktop apps only]. - /// - /// If the function succeeds, the return value is a search handle that can be used with the FindNextFileNameW function or closed with - /// the FindClose function. If the function fails, the return value is INVALID_HANDLE_VALUE (0xffffffff). To get extended error - /// information, call the GetLastError function. - /// - [SuppressMessage("Microsoft.Security", "CA5122:PInvokesShouldNotBeSafeCriticalFxCopRule")] - [DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Unicode, EntryPoint = "FindFirstFileNameW"), SuppressUnmanagedCodeSecurity] - internal static extern SafeFindFileHandle FindFirstFileName([MarshalAs(UnmanagedType.LPWStr)] string lpFileName, [MarshalAs(UnmanagedType.U4)] uint dwFlags, [MarshalAs(UnmanagedType.U4)] out uint stringLength, StringBuilder linkName); - - /// - /// Creates an enumeration of all the hard links to the specified file as a transacted operation. The function returns a handle to the - /// enumeration that can be used on subsequent calls to the FindNextFileNameW function. - /// - /// Minimum supported client: Windows Vista [desktop apps only]. - /// Minimum supported server: Windows Server 2008 [desktop apps only]. - /// - /// If the function succeeds, the return value is a search handle that can be used with the FindNextFileNameW function or closed with - /// the FindClose function. If the function fails, the return value is INVALID_HANDLE_VALUE (0xffffffff). To get extended error - /// information, call the GetLastError function. - /// - [SuppressMessage("Microsoft.Security", "CA5122:PInvokesShouldNotBeSafeCriticalFxCopRule")] - [DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Unicode, EntryPoint = "FindFirstFileNameTransactedW"), SuppressUnmanagedCodeSecurity] - internal static extern SafeFindFileHandle FindFirstFileNameTransacted([MarshalAs(UnmanagedType.LPWStr)] string lpFileName, [MarshalAs(UnmanagedType.U4)] uint dwFlags, [MarshalAs(UnmanagedType.U4)] out uint stringLength, StringBuilder linkName, SafeHandle hTransaction); - - /// - /// Continues a file search from a previous call to the FindFirstFile, FindFirstFileEx, or FindFirstFileTransacted functions. - /// - /// Minimum supported client: Windows XP [desktop apps | Windows Store apps]. - /// Minimum supported server: Windows Server 2003 [desktop apps | Windows Store apps]. - /// - /// If the function succeeds, the return value is nonzero and the lpFindFileData parameter contains information about the next file or - /// directory found. If the function fails, the return value is zero and the contents of lpFindFileData are indeterminate. To get - /// extended error information, call the GetLastError function. If the function fails because no more matching files can be found, the - /// GetLastError function returns ERROR_NO_MORE_FILES. - /// - [SuppressMessage("Microsoft.Security", "CA5122:PInvokesShouldNotBeSafeCriticalFxCopRule")] - [DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Unicode, EntryPoint = "FindNextFileW"), SuppressUnmanagedCodeSecurity] - [return: MarshalAs(UnmanagedType.Bool)] - internal static extern bool FindNextFile(SafeFindFileHandle hFindFile, out WIN32_FIND_DATA lpFindFileData); - - /// - /// Continues enumerating the hard links to a file using the handle returned by a successful call to the FindFirstFileName function. - /// - /// Minimum supported client: Windows Vista [desktop apps only]. - /// Minimum supported server: Windows Server 2008 [desktop apps only]. - /// - /// If the function succeeds, the return value is nonzero. If the function fails, the return value is zero (0). To get extended error - /// information, call GetLastError. If no matching files can be found, the GetLastError function returns ERROR_HANDLE_EOF. - /// - [SuppressMessage("Microsoft.Security", "CA5122:PInvokesShouldNotBeSafeCriticalFxCopRule")] - [DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Unicode, EntryPoint = "FindNextFileNameW"), SuppressUnmanagedCodeSecurity] - [return: MarshalAs(UnmanagedType.Bool)] - internal static extern bool FindNextFileName(SafeFindFileHandle hFindStream, [MarshalAs(UnmanagedType.U4)] out uint stringLength, StringBuilder linkName); - - /// Flushes the buffers of a specified file and causes all buffered data to be written to a file. - /// Minimum supported client: Windows XP [desktop apps | Windows Store apps]. - /// Minimum supported server: Windows Server 2003 [desktop apps | Windows Store apps]. - /// - /// If the function succeeds, the return value is nonzero. If the function fails, the return value is zero. To get extended error - /// information, call GetLastError. - /// - [SuppressMessage("Microsoft.Security", "CA5122:PInvokesShouldNotBeSafeCriticalFxCopRule")] - [DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Unicode), SuppressUnmanagedCodeSecurity] - [return: MarshalAs(UnmanagedType.Bool)] - internal static extern bool FlushFileBuffers(SafeFileHandle hFile); - - /// Retrieves the actual number of bytes of disk storage used to store a specified file. - /// Minimum supported client: Windows XP [desktop apps only]. - /// Minimum supported server: Windows Server 2003 [desktop apps only]. - /// - /// If the function succeeds, the return value is the low-order DWORD of the actual number of bytes of disk storage used to store the - /// specified file, and if lpFileSizeHigh is non-NULL, the function puts the high-order DWORD of that actual value into the DWORD - /// pointed to by that parameter. This is the compressed file size for compressed files, the actual file size for noncompressed files. - /// If the function fails, and lpFileSizeHigh is NULL, the return value is INVALID_FILE_SIZE. To get extended error information, call - /// GetLastError. If the return value is INVALID_FILE_SIZE and lpFileSizeHigh is non-NULL, an application must call GetLastError to - /// determine whether the function has succeeded (value is NO_ERROR) or failed (value is other than NO_ERROR). - /// - [SuppressMessage("Microsoft.Security", "CA5122:PInvokesShouldNotBeSafeCriticalFxCopRule")] - [DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Unicode, EntryPoint = "GetCompressedFileSizeW"), SuppressUnmanagedCodeSecurity] - [return: MarshalAs(UnmanagedType.U4)] - internal static extern uint GetCompressedFileSize([MarshalAs(UnmanagedType.LPWStr)] string lpFileName, [MarshalAs(UnmanagedType.U4)] out uint lpFileSizeHigh); - - /// Retrieves the actual number of bytes of disk storage used to store a specified file as a transacted operation. - /// Minimum supported client: Windows Vista [desktop apps only]. - /// Minimum supported server: Windows Server 2008 [desktop apps only]. - /// - /// If the function succeeds, the return value is the low-order DWORD of the actual number of bytes of disk storage used to store the - /// specified file, and if lpFileSizeHigh is non-NULL, the function puts the high-order DWORD of that actual value into the DWORD - /// pointed to by that parameter. This is the compressed file size for compressed files, the actual file size for noncompressed files. - /// If the function fails, and lpFileSizeHigh is NULL, the return value is INVALID_FILE_SIZE. To get extended error information, call - /// GetLastError. If the return value is INVALID_FILE_SIZE and lpFileSizeHigh is non-NULL, an application must call GetLastError to - /// determine whether the function has succeeded (value is NO_ERROR) or failed (value is other than NO_ERROR). - /// - [SuppressMessage("Microsoft.Security", "CA5122:PInvokesShouldNotBeSafeCriticalFxCopRule")] - [DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Unicode, EntryPoint = "GetCompressedFileSizeTransactedW"), SuppressUnmanagedCodeSecurity] - [return: MarshalAs(UnmanagedType.U4)] - internal static extern uint GetCompressedFileSizeTransacted([MarshalAs(UnmanagedType.LPWStr)] string lpFileName, [MarshalAs(UnmanagedType.U4)] out uint lpFileSizeHigh, SafeHandle hTransaction); - - /// - /// Retrieves attributes for a specified file or directory. - /// - /// - /// The GetFileAttributes function retrieves file system attribute information. - /// GetFileAttributesEx can obtain other sets of file or directory attribute information. - /// Currently, GetFileAttributesEx retrieves a set of standard attributes that is a superset of the file system attribute - /// information. - /// When the GetFileAttributesEx function is called on a directory that is a mounted folder, it returns the attributes of the directory, - /// not those of the root directory in the volume that the mounted folder associates with the directory. To obtain the attributes of - /// the associated volume, call GetVolumeNameForVolumeMountPoint to obtain the name of the associated volume. Then use the resulting - /// name in a call to GetFileAttributesEx. The results are the attributes of the root directory on the associated volume. - /// Symbolic link behavior: If the path points to a symbolic link, the function returns attributes for the symbolic link. - /// Minimum supported client: Windows XP [desktop apps only] - /// Minimum supported server: Windows Server 2003 [desktop apps only] - /// - /// - /// If the function succeeds, the return value is nonzero. - /// If the function fails, the return value is zero. To get extended error information, call GetLastError. - /// - [SuppressMessage("Microsoft.Security", "CA5122:PInvokesShouldNotBeSafeCriticalFxCopRule")] - [DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Unicode, EntryPoint = "GetFileAttributesExW"), SuppressUnmanagedCodeSecurity] - [return: MarshalAs(UnmanagedType.Bool)] - internal static extern bool GetFileAttributesEx([MarshalAs(UnmanagedType.LPWStr)] string lpFileName, [MarshalAs(UnmanagedType.U4)] GetFileExInfoLevels fInfoLevelId, out WIN32_FILE_ATTRIBUTE_DATA lpFileInformation); - - /// Retrieves attributes for a specified file or directory. - /// - /// The GetFileAttributes function retrieves file system attribute information. - /// GetFileAttributesEx can obtain other sets of file or directory attribute information. - /// - /// Currently, GetFileAttributesEx retrieves a set of standard attributes that is a superset of the file system attribute information. - /// When the GetFileAttributesEx function is called on a directory that is a mounted folder, it returns the attributes of the directory, - /// not those of the root directory in the volume that the mounted folder associates with the directory. To obtain the attributes of - /// the associated volume, call GetVolumeNameForVolumeMountPoint to obtain the name of the associated volume. Then use the resulting - /// name in a call to GetFileAttributesEx. The results are the attributes of the root directory on the associated volume. - /// Symbolic link behavior: If the path points to a symbolic link, the function returns attributes for the symbolic link. - /// Transacted Operations - /// If a file is open for modification in a transaction, no other thread can open the file for modification until the transaction - /// is committed. Conversely, if a file is open for modification outside of a transaction, no transacted thread can open the file for - /// modification until the non-transacted handle is closed. If a non-transacted thread has a handle opened to modify a file, a call to - /// GetFileAttributesTransacted for that file will fail with an ERROR_TRANSACTIONAL_CONFLICT error. - /// Minimum supported client: Windows Vista [desktop apps only] - /// Minimum supported server: Windows Server 2008 [desktop apps only] - /// - /// - /// If the function succeeds, the return value is nonzero. - /// If the function fails, the return value is zero. To get extended error information, call GetLastError. - /// - [SuppressMessage("Microsoft.Security", "CA5122:PInvokesShouldNotBeSafeCriticalFxCopRule")] - [DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Unicode, EntryPoint = "GetFileAttributesTransactedW"), SuppressUnmanagedCodeSecurity] - [return: MarshalAs(UnmanagedType.Bool)] - internal static extern bool GetFileAttributesTransacted([MarshalAs(UnmanagedType.LPWStr)] string lpFileName, [MarshalAs(UnmanagedType.U4)] GetFileExInfoLevels fInfoLevelId, out WIN32_FILE_ATTRIBUTE_DATA lpFileInformation, SafeHandle hTransaction); - - /// Retrieves file information for the specified file. - /// - /// If the function succeeds, the return value is nonzero and file information data is contained in the buffer pointed to by the lpByHandleFileInformation parameter. - /// If the function fails, the return value is zero. To get extended error information, call GetLastError. - /// - /// - /// Depending on the underlying network features of the operating system and the type of server connected to, - /// the GetFileInformationByHandle function may fail, return partial information, or full information for the given file. - /// - /// Minimum supported client: Windows XP [desktop apps only] - /// Minimum supported server: Windows Server 2003 [desktop apps only] - [SuppressMessage("Microsoft.Security", "CA5122:PInvokesShouldNotBeSafeCriticalFxCopRule")] - [DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Unicode), SuppressUnmanagedCodeSecurity] - [return: MarshalAs(UnmanagedType.Bool)] - internal static extern bool GetFileInformationByHandle(SafeFileHandle hFile, [MarshalAs(UnmanagedType.Struct)] out BY_HANDLE_FILE_INFORMATION lpByHandleFileInformation); - - /// - /// Retrieves file information for the specified file. - /// - /// - /// Minimum supported client: Windows Vista [desktop apps | Windows Store apps] - /// Minimum supported server: Windows Server 2008 [desktop apps | Windows Store apps] - /// Redistributable: Windows SDK on Windows Server 2003 and Windows XP. - /// - /// The file. - /// The file information by handle class. - /// Information describing the file. - /// Size of the buffer. - /// - /// If the function succeeds, the return value is nonzero and file information data is contained in the buffer pointed to by the - /// lpByHandleFileInformation parameter. - /// If the function fails, the return value is zero. To get extended error information, call GetLastError. - /// - [SuppressMessage("Microsoft.Security", "CA5122:PInvokesShouldNotBeSafeCriticalFxCopRule")] - [DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Unicode), SuppressUnmanagedCodeSecurity] - [return: MarshalAs(UnmanagedType.Bool)] - internal static extern bool GetFileInformationByHandleEx(SafeFileHandle hFile, [MarshalAs(UnmanagedType.I4)] FileInfoByHandleClass fileInfoByHandleClass, SafeGlobalMemoryBufferHandle lpFileInformation, [MarshalAs(UnmanagedType.U4)] uint dwBufferSize); - - /// Retrieves file information for the specified file. - /// - /// Minimum supported client: Windows Vista [desktop apps | Windows Store apps] - /// Minimum supported server: Windows Server 2008 [desktop apps | Windows Store apps] - /// Redistributable: Windows SDK on Windows Server 2003 and Windows XP. - /// - /// - /// If the function succeeds, the return value is nonzero and file information data is contained in the buffer pointed to by the - /// lpByHandleFileInformation parameter. - /// If the function fails, the return value is zero. To get extended error information, call GetLastError. - /// - /// The file. - /// The file information by handle class. - /// Information describing the file. - /// Size of the buffer. - [SuppressMessage("Microsoft.Security", "CA5122:PInvokesShouldNotBeSafeCriticalFxCopRule")] - [DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Unicode, EntryPoint = "GetFileInformationByHandleEx"), SuppressUnmanagedCodeSecurity] - [return: MarshalAs(UnmanagedType.Bool)] - internal static extern bool GetFileInformationByHandleEx_FileBasicInfo(SafeFileHandle hFile, [MarshalAs(UnmanagedType.I4)] FileInfoByHandleClass fileInfoByHandleClass, [MarshalAs(UnmanagedType.Struct)] out FILE_BASIC_INFO lpFileInformation, [MarshalAs(UnmanagedType.U4)] uint dwBufferSize); - - /// - /// Retrieves the size of the specified file. - /// - /// - /// Minimum supported client: Windows XP [desktop apps only] - /// Minimum supported server: Windows Server 2003 [desktop apps only] - /// - /// - /// If the function succeeds, the return value is nonzero. - /// If the function fails, the return value is zero. To get extended error information, call GetLastError. - /// - [SuppressMessage("Microsoft.Security", "CA5122:PInvokesShouldNotBeSafeCriticalFxCopRule")] - [DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Unicode), SuppressUnmanagedCodeSecurity] - [return: MarshalAs(UnmanagedType.Bool)] - internal static extern bool GetFileSizeEx(SafeFileHandle hFile, out long lpFileSize); - - /// Retrieves the final path for the specified file. - /// Minimum supported client: Windows Vista [desktop apps only]. - /// Minimum supported server: Windows Server 2008 [desktop apps only]. - /// - /// If the function succeeds, the return value is nonzero. If the function fails, the return value is zero. To get extended error - /// information, call GetLastError. - /// - [SuppressMessage("Microsoft.Security", "CA5122:PInvokesShouldNotBeSafeCriticalFxCopRule")] - [DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Unicode, EntryPoint = "GetFinalPathNameByHandleW"), SuppressUnmanagedCodeSecurity] - [return: MarshalAs(UnmanagedType.U4)] - internal static extern uint GetFinalPathNameByHandle(SafeFileHandle hFile, StringBuilder lpszFilePath, [MarshalAs(UnmanagedType.U4)] uint cchFilePath, FinalPathFormats dwFlags); - - /// - /// Checks whether the specified address is within a memory-mapped file in the address space of the specified process. If so, the - /// function returns the name of the memory-mapped file. - /// - /// Minimum supported client: Windows XP. - /// Minimum supported server: Windows Server 2003. - /// - /// If the function succeeds, the return value is nonzero. If the function fails, the return value is zero. To get extended error - /// information, call GetLastError. - /// - [SuppressMessage("Microsoft.Security", "CA5122:PInvokesShouldNotBeSafeCriticalFxCopRule")] - [DllImport("psapi.dll", SetLastError = false, CharSet = CharSet.Unicode, EntryPoint = "GetMappedFileNameW"), SuppressUnmanagedCodeSecurity] - [return: MarshalAs(UnmanagedType.Bool)] - internal static extern bool GetMappedFileName(IntPtr hProcess, SafeLocalMemoryBufferHandle lpv, StringBuilder lpFilename, [MarshalAs(UnmanagedType.U4)] uint nSize); - - /// Locks the specified file for exclusive access by the calling process. - /// Minimum supported client: Windows XP. - /// Minimum supported server: Windows Server 2003. - /// - /// If the function succeeds, the return value is nonzero (TRUE). If the function fails, the return value is zero (FALSE). To get - /// extended error information, call GetLastError. - /// - [SuppressMessage("Microsoft.Security", "CA5122:PInvokesShouldNotBeSafeCriticalFxCopRule")] - [DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Unicode), SuppressUnmanagedCodeSecurity] - [return: MarshalAs(UnmanagedType.Bool)] - internal static extern bool LockFile(SafeFileHandle hFile, [MarshalAs(UnmanagedType.U4)] uint dwFileOffsetLow, [MarshalAs(UnmanagedType.U4)] uint dwFileOffsetHigh, [MarshalAs(UnmanagedType.U4)] uint nNumberOfBytesToLockLow, [MarshalAs(UnmanagedType.U4)] uint nNumberOfBytesToLockHigh); - - /// Maps a view of a file mapping into the address space of a calling process. - /// Minimum supported client: Windows XP. - /// Minimum supported server: Windows Server 2003. - /// - /// If the function succeeds, the return value is the starting address of the mapped view. If the function fails, the return value is - /// . - /// - [SuppressMessage("Microsoft.Security", "CA5122:PInvokesShouldNotBeSafeCriticalFxCopRule")] - [DllImport("kernel32.dll", SetLastError = false, CharSet = CharSet.Unicode), SuppressUnmanagedCodeSecurity] - internal static extern SafeLocalMemoryBufferHandle MapViewOfFile(SafeFileHandle hFileMappingObject, [MarshalAs(UnmanagedType.U4)] uint dwDesiredAccess, [MarshalAs(UnmanagedType.U4)] uint dwFileOffsetHigh, [MarshalAs(UnmanagedType.U4)] uint dwFileOffsetLow, UIntPtr dwNumberOfBytesToMap); - - /// - /// Moves a file or directory, including its children. - /// You can provide a callback function that receives progress notifications. - /// - /// - /// The MoveFileWithProgress function coordinates its operation with the link tracking service, so link sources can be tracked as they are moved. - /// Minimum supported client: Windows XP [desktop apps only] - /// Minimum supported server: Windows Server 2003 [desktop apps only] - /// - /// Filename of the existing file. - /// Filename of the new file. - /// The progress routine. - /// The data. - /// The flags. - /// - /// If the function succeeds, the return value is nonzero. - /// If the function fails, the return value is zero. To get extended error information, call GetLastError. - /// - [SuppressMessage("Microsoft.Security", "CA5122:PInvokesShouldNotBeSafeCriticalFxCopRule")] - [DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Unicode, EntryPoint = "MoveFileWithProgressW"), SuppressUnmanagedCodeSecurity] - [return: MarshalAs(UnmanagedType.Bool)] - internal static extern bool MoveFileWithProgress([MarshalAs(UnmanagedType.LPWStr)] string lpExistingFileName, [MarshalAs(UnmanagedType.LPWStr)] string lpNewFileName, NativeCopyMoveProgressRoutine lpProgressRoutine, IntPtr lpData, [MarshalAs(UnmanagedType.U4)] MoveOptions dwFlags); - - /// - /// Moves an existing file or a directory, including its children, as a transacted operation. - /// You can provide a callback function that receives progress notifications. - /// - /// - /// Minimum supported client: Windows Vista [desktop apps only] - /// Minimum supported server: Windows Server 2008 [desktop apps only] - /// - /// - /// If the function succeeds, the return value is nonzero. - /// If the function fails, the return value is zero. To get extended error information, call GetLastError. - /// - [SuppressMessage("Microsoft.Security", "CA5122:PInvokesShouldNotBeSafeCriticalFxCopRule")] - [DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Unicode, EntryPoint = "MoveFileTransactedW"), SuppressUnmanagedCodeSecurity] - [return: MarshalAs(UnmanagedType.Bool)] - internal static extern bool MoveFileTransacted([MarshalAs(UnmanagedType.LPWStr)] string lpExistingFileName, [MarshalAs(UnmanagedType.LPWStr)] string lpNewFileName, NativeCopyMoveProgressRoutine lpProgressRoutine, IntPtr lpData, [MarshalAs(UnmanagedType.U4)] MoveOptions dwCopyFlags, SafeHandle hTransaction); - - /// An application-defined callback function used with the CopyFileEx, MoveFileTransacted, and MoveFileWithProgress functions. - /// It is called when a portion of a copy or move operation is completed. - /// The LPPROGRESS_ROUTINE type defines a pointer to this callback function. - /// NativeCopyMoveProgressRoutine (NativeCopyMoveProgressRoutine) is a placeholder for the application-defined function name. - /// - [SuppressUnmanagedCodeSecurity] - internal delegate CopyMoveProgressResult NativeCopyMoveProgressRoutine(long totalFileSize, long totalBytesTransferred, long streamSize, long streamBytesTransferred, [MarshalAs(UnmanagedType.U4)] int dwStreamNumber, CopyMoveProgressCallbackReason dwCallbackReason, IntPtr hSourceFile, IntPtr hDestinationFile, IntPtr lpData); - - /// Replaces one file with another file, with the option of creating a backup copy of the original file. The replacement file assumes the name of the replaced file and its identity. - /// - /// If the function succeeds, the return value is nonzero. - /// If the function fails, the return value is zero. To get extended error information, call GetLastError. - /// - /// Minimum supported client: Windows XP [desktop apps only] - /// Minimum supported server: Windows Server 2003 [desktop apps only] - [SuppressMessage("Microsoft.Security", "CA5122:PInvokesShouldNotBeSafeCriticalFxCopRule")] - [DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Unicode, EntryPoint = "ReplaceFileW"), SuppressUnmanagedCodeSecurity] - [return: MarshalAs(UnmanagedType.Bool)] - internal static extern bool ReplaceFile([MarshalAs(UnmanagedType.LPWStr)] string lpReplacedFileName, [MarshalAs(UnmanagedType.LPWStr)] string lpReplacementFileName, [MarshalAs(UnmanagedType.LPWStr)] string lpBackupFileName, FileSystemRights dwReplaceFlags, IntPtr lpExclude, IntPtr lpReserved); - - /// Sets the attributes for a file or directory. - /// - /// If the function succeeds, the return value is nonzero. - /// If the function fails, the return value is zero. To get extended error information, call GetLastError. - /// - /// Minimum supported client: Windows XP - /// Minimum supported server: Windows Server 2003 - [SuppressMessage("Microsoft.Security", "CA5122:PInvokesShouldNotBeSafeCriticalFxCopRule")] - [SuppressMessage("Microsoft.Usage", "CA2205:UseManagedEquivalentsOfWin32Api")] - [DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Unicode, EntryPoint = "SetFileAttributesW"), SuppressUnmanagedCodeSecurity] - [return: MarshalAs(UnmanagedType.Bool)] - internal static extern bool SetFileAttributes([MarshalAs(UnmanagedType.LPWStr)] string lpFileName, [MarshalAs(UnmanagedType.U4)] FileAttributes dwFileAttributes); - - /// Sets the attributes for a file or directory as a transacted operation. - /// - /// If the function succeeds, the return value is nonzero. - /// If the function fails, the return value is zero. To get extended error information, call GetLastError. - /// - /// Minimum supported client: Windows Vista [desktop apps only] - /// Minimum supported server: Windows Server 2008 [desktop apps only] - [SuppressMessage("Microsoft.Security", "CA5122:PInvokesShouldNotBeSafeCriticalFxCopRule")] - [DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Unicode, EntryPoint = "SetFileAttributesTransactedW"), SuppressUnmanagedCodeSecurity] - [return: MarshalAs(UnmanagedType.Bool)] - internal static extern bool SetFileAttributesTransacted([MarshalAs(UnmanagedType.LPWStr)] string lpFileName, [MarshalAs(UnmanagedType.U4)] FileAttributes dwFileAttributes, SafeHandle hTransaction); - - /// Sets the date and time that the specified file or directory was created, last accessed, or last modified. - /// - /// If the function succeeds, the return value is nonzero. - /// If the function fails, the return value is zero. To get extended error information, call GetLastError. - /// - /// Minimum supported client: Windows XP [desktop apps only] - /// Minimum supported server: Windows Server 2003 [desktop apps only] - [SuppressMessage("Microsoft.Security", "CA5122:PInvokesShouldNotBeSafeCriticalFxCopRule")] - [DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Unicode), SuppressUnmanagedCodeSecurity] - [return: MarshalAs(UnmanagedType.Bool)] - internal static extern bool SetFileTime(SafeFileHandle hFile, SafeGlobalMemoryBufferHandle lpCreationTime, SafeGlobalMemoryBufferHandle lpLastAccessTime, SafeGlobalMemoryBufferHandle lpLastWriteTime); - - /// Unlocks a region in an open file. Unlocking a region enables other processes to access the region. - /// - /// If the function succeeds, the return value is nonzero. - /// If the function fails, the return value is zero. To get extended error information, call GetLastError. - /// - /// Minimum supported client: Windows XP - /// Minimum supported server: Windows Server 2003 - [SuppressMessage("Microsoft.Security", "CA5122:PInvokesShouldNotBeSafeCriticalFxCopRule")] - [DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Unicode), SuppressUnmanagedCodeSecurity] - [return: MarshalAs(UnmanagedType.Bool)] - internal static extern bool UnlockFile(SafeFileHandle hFile, [MarshalAs(UnmanagedType.U4)] uint dwFileOffsetLow, [MarshalAs(UnmanagedType.U4)] uint dwFileOffsetHigh, [MarshalAs(UnmanagedType.U4)] uint nNumberOfBytesToUnlockLow, [MarshalAs(UnmanagedType.U4)] uint nNumberOfBytesToUnlockHigh); - - /// Unmaps a mapped view of a file from the calling process's address space. - /// Minimum supported client: Windows XP. - /// Minimum supported server: Windows Server 2003. - /// The base address. - /// - /// If the function succeeds, the return value is nonzero. If the function fails, the return value is zero. To get extended error - /// information, call GetLastError. - /// - [SuppressMessage("Microsoft.Security", "CA5122:PInvokesShouldNotBeSafeCriticalFxCopRule")] - [DllImport("kernel32.dll", SetLastError = false, CharSet = CharSet.Unicode), SuppressUnmanagedCodeSecurity] - [return: MarshalAs(UnmanagedType.Bool)] - internal static extern bool UnmapViewOfFile(SafeLocalMemoryBufferHandle lpBaseAddress); - - [SuppressMessage("Microsoft.Security", "CA5122:PInvokesShouldNotBeSafeCriticalFxCopRule")] - [DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Unicode), SuppressUnmanagedCodeSecurity] - internal static extern SafeFindFileHandle FindFirstStreamTransactedW(string fileName, STREAM_INFO_LEVELS infoLevel, SafeGlobalMemoryBufferHandle lpFindStreamData, int flags, SafeHandle hTransaction); - - [SuppressMessage("Microsoft.Security", "CA5122:PInvokesShouldNotBeSafeCriticalFxCopRule")] - [DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Unicode), SuppressUnmanagedCodeSecurity] - internal static extern SafeFindFileHandle FindFirstStreamW(string fileName, STREAM_INFO_LEVELS infoLevel, SafeGlobalMemoryBufferHandle lpFindStreamData, int flags); - - [SuppressMessage("Microsoft.Security", "CA5122:PInvokesShouldNotBeSafeCriticalFxCopRule")] - [DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Unicode), SuppressUnmanagedCodeSecurity] - [return: MarshalAs(UnmanagedType.Bool)] - internal static extern bool FindNextStreamW(SafeFindFileHandle handle, SafeGlobalMemoryBufferHandle lpFindStreamData); - } -} diff --git a/AlphaFS/Filesystem/Native Methods/NativeMethods.Handles.cs b/AlphaFS/Filesystem/Native Methods/NativeMethods.Handles.cs deleted file mode 100644 index 0a78c2d..0000000 --- a/AlphaFS/Filesystem/Native Methods/NativeMethods.Handles.cs +++ /dev/null @@ -1,52 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -using System; -using System.Diagnostics.CodeAnalysis; -using System.Runtime.InteropServices; -using System.Security; - -namespace Alphaleonis.Win32.Filesystem -{ - internal static partial class NativeMethods - { - /// Closes an open object handle. - /// - /// The CloseHandle function closes handles to the following objects: - /// Access token, Communications device, Console input, Console screen buffer, Event, File, File mapping, I/O completion port, - /// Job, Mailslot, Memory resource notification, Mutex, Named pipe, Pipe, Process, Semaphore, Thread, Transaction, Waitable - /// timer. - /// SetLastError is set to . - /// Minimum supported client: Windows 2000 Professional [desktop apps | Windows Store apps] - /// Minimum supported server: Windows 2000 Server [desktop apps | Windows Store apps] - /// - /// - /// If the function succeeds, the return value is nonzero. - /// If the function fails, the return value is zero. To get extended error information, call GetLastError. - /// If the application is running under a debugger, the function will throw an exception if it receives either a handle value - /// that is not valid or a pseudo-handle value.This can happen if you close a handle twice, or if you call CloseHandle on a handle - /// returned by the FindFirstFile function instead of calling the FindClose function. - /// - [SuppressMessage("Microsoft.Security", "CA5122:PInvokesShouldNotBeSafeCriticalFxCopRule")] - [DllImport("kernel32.dll", SetLastError = false, CharSet = CharSet.Unicode), SuppressUnmanagedCodeSecurity] - [return: MarshalAs(UnmanagedType.Bool)] - internal static extern bool CloseHandle(IntPtr hObject); - } -} diff --git a/AlphaFS/Filesystem/Native Methods/NativeMethods.KernelTransactions.cs b/AlphaFS/Filesystem/Native Methods/NativeMethods.KernelTransactions.cs deleted file mode 100644 index ba5fc03..0000000 --- a/AlphaFS/Filesystem/Native Methods/NativeMethods.KernelTransactions.cs +++ /dev/null @@ -1,77 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -using System; -using System.Diagnostics.CodeAnalysis; -using System.Runtime.InteropServices; -using System.Security; - -namespace Alphaleonis.Win32.Filesystem -{ - internal static partial class NativeMethods - { - /// - /// Creates a new transaction object. - /// - /// - /// Use the function to close the transaction handle. If the last transaction handle is closed - /// beforea client calls the CommitTransaction function with the transaction handle, then KTM rolls back the transaction. - /// Minimum supported client: Windows Vista - /// Minimum supported server:Windows Server 2008 - /// - /// - /// If the function succeeds, the return value is a handle to the transaction. - /// If the function fails, the return value is INVALID_HANDLE_VALUE. To get extended error information, call the GetLastError - /// function. - /// - [SuppressMessage("Microsoft.Security", "CA5122:PInvokesShouldNotBeSafeCriticalFxCopRule")] - [DllImport("ktmw32.dll", SetLastError = true, CharSet = CharSet.Unicode), SuppressUnmanagedCodeSecurity] - internal static extern SafeKernelTransactionHandle CreateTransaction([MarshalAs(UnmanagedType.LPStruct)] Security.NativeMethods.SecurityAttributes lpTransactionAttributes, IntPtr uow, [MarshalAs(UnmanagedType.U4)] uint createOptions, [MarshalAs(UnmanagedType.U4)] uint isolationLevel, [MarshalAs(UnmanagedType.U4)] uint isolationFlags, [MarshalAs(UnmanagedType.U4)] int timeout, [MarshalAs(UnmanagedType.LPWStr)] string description); - - /// Requests that the specified transaction be committed. - /// - /// You can commit any transaction handle that has been opened or created using the TRANSACTION_COMMIT permission; any - /// application can commit a transaction, not just the creator. - /// This function can only be called if the transaction is still active, not prepared, pre-prepared, or rolled back. - /// Minimum supported client: Windows Vista - /// Minimum supported server:Windows Server 2008 - /// - /// - /// If the function succeeds, the return value is nonzero. - /// If the function fails, the return value is 0 (zero). To get extended error information, call the GetLastError function. - /// - [SuppressMessage("Microsoft.Security", "CA5122:PInvokesShouldNotBeSafeCriticalFxCopRule")] - [DllImport("ktmw32.dll", SetLastError = true, CharSet = CharSet.Unicode), SuppressUnmanagedCodeSecurity] - [return: MarshalAs(UnmanagedType.Bool)] - internal static extern bool CommitTransaction(SafeHandle hTrans); - - /// - /// Requests that the specified transaction be rolled back. This function is synchronous. - /// - /// - /// If the function succeeds, the return value is nonzero. - /// If the function fails, the return value is zero. To get extended error information, call the GetLastError function. - /// - [SuppressMessage("Microsoft.Security", "CA5122:PInvokesShouldNotBeSafeCriticalFxCopRule")] - [DllImport("ktmw32.dll", SetLastError = true, CharSet = CharSet.Unicode), SuppressUnmanagedCodeSecurity] - [return: MarshalAs(UnmanagedType.Bool)] - internal static extern bool RollbackTransaction(SafeHandle hTrans); - } -} diff --git a/AlphaFS/Filesystem/Native Methods/NativeMethods.PathManagement.cs b/AlphaFS/Filesystem/Native Methods/NativeMethods.PathManagement.cs deleted file mode 100644 index 514b182..0000000 --- a/AlphaFS/Filesystem/Native Methods/NativeMethods.PathManagement.cs +++ /dev/null @@ -1,86 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -using System; -using System.Diagnostics.CodeAnalysis; -using System.Runtime.InteropServices; -using System.Security; -using System.Text; - -namespace Alphaleonis.Win32.Filesystem -{ - internal static partial class NativeMethods - { - /// Retrieves the full path and file name of the specified file or directory. - /// If the function fails for any other reason, the return value is zero. To get extended error information, call GetLastError. - /// The GetFullPathName function is not recommended for multithreaded applications or shared library code. - /// Minimum supported client: Windows XP [desktop apps only] - /// Minimum supported server: Windows Server 2003 [desktop apps only] - [SuppressMessage("Microsoft.Security", "CA5122:PInvokesShouldNotBeSafeCriticalFxCopRule")] - [DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Unicode, EntryPoint = "GetFullPathNameW"), SuppressUnmanagedCodeSecurity] - [return: MarshalAs(UnmanagedType.U4)] - internal static extern uint GetFullPathName([MarshalAs(UnmanagedType.LPWStr)] string lpFileName, [MarshalAs(UnmanagedType.U4)] uint nBufferLength, StringBuilder lpBuffer, IntPtr lpFilePart); - - /// Retrieves the full path and file name of the specified file or directory as a transacted operation. - /// If the function fails for any other reason, the return value is zero. To get extended error information, call GetLastError. - /// Minimum supported client: Windows Vista [desktop apps only] - /// Minimum supported server: Windows Server 2008 [desktop apps only] - [SuppressMessage("Microsoft.Security", "CA5122:PInvokesShouldNotBeSafeCriticalFxCopRule")] - [DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Unicode, EntryPoint = "GetFullPathNameTransactedW"), SuppressUnmanagedCodeSecurity] - [return: MarshalAs(UnmanagedType.U4)] - internal static extern uint GetFullPathNameTransacted([MarshalAs(UnmanagedType.LPWStr)] string lpFileName, [MarshalAs(UnmanagedType.U4)] uint nBufferLength, StringBuilder lpBuffer, IntPtr lpFilePart, SafeHandle hTransaction); - - /// Converts the specified path to its long form. - /// - /// If the function succeeds, the return value is nonzero. - /// If the function fails, the return value is zero. To get extended error information, call GetLastError. - /// - /// Minimum supported client: Windows XP [desktop apps only] - /// Minimum supported server: Windows Server 2003 [desktop apps only] - [SuppressMessage("Microsoft.Security", "CA5122:PInvokesShouldNotBeSafeCriticalFxCopRule")] - [DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Unicode, EntryPoint = "GetLongPathNameW"), SuppressUnmanagedCodeSecurity] - [return: MarshalAs(UnmanagedType.U4)] - internal static extern uint GetLongPathName([MarshalAs(UnmanagedType.LPWStr)] string lpszShortPath, StringBuilder lpszLongPath, [MarshalAs(UnmanagedType.U4)] uint cchBuffer); - - /// Converts the specified path to its long form as a transacted operation. - /// - /// If the function succeeds, the return value is nonzero. - /// If the function fails, the return value is zero. To get extended error information, call GetLastError. - /// - /// Minimum supported client: Windows Vista [desktop apps only] - /// Minimum supported server: Windows Server 2008 [desktop apps only] - [SuppressMessage("Microsoft.Security", "CA5122:PInvokesShouldNotBeSafeCriticalFxCopRule")] - [DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Unicode, EntryPoint = "GetLongPathNameTransactedW"), SuppressUnmanagedCodeSecurity] - [return: MarshalAs(UnmanagedType.U4)] - internal static extern uint GetLongPathNameTransacted([MarshalAs(UnmanagedType.LPWStr)] string lpszShortPath, StringBuilder lpszLongPath, [MarshalAs(UnmanagedType.U4)] uint cchBuffer, SafeHandle hTransaction); - - /// Retrieves the short path form of the specified path. - /// - /// If the function succeeds, the return value is nonzero. - /// If the function fails, the return value is zero. To get extended error information, call GetLastError. - /// - /// Minimum supported client: Windows XP - /// Minimum supported server: Windows Server 2003 - [SuppressMessage("Microsoft.Security", "CA5122:PInvokesShouldNotBeSafeCriticalFxCopRule")] - [DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Unicode, EntryPoint = "GetShortPathNameW"), SuppressUnmanagedCodeSecurity] - [return: MarshalAs(UnmanagedType.U4)] - internal static extern uint GetShortPathName([MarshalAs(UnmanagedType.LPWStr)] string lpszLongPath, StringBuilder lpszShortPath, [MarshalAs(UnmanagedType.U4)] uint cchBuffer); - } -} diff --git a/AlphaFS/Filesystem/Native Methods/NativeMethods.Shell32.cs b/AlphaFS/Filesystem/Native Methods/NativeMethods.Shell32.cs deleted file mode 100644 index 04908bf..0000000 --- a/AlphaFS/Filesystem/Native Methods/NativeMethods.Shell32.cs +++ /dev/null @@ -1,197 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System; -using System.Diagnostics.CodeAnalysis; -using System.IO; -using System.Runtime.InteropServices; -using System.Security; -using System.Text; - -namespace Alphaleonis.Win32.Filesystem -{ - internal static partial class NativeMethods - { - #region AssocXxx - - /// Returns a pointer to an IQueryAssociations object. - /// If this function succeeds, it returns S_OK. Otherwise, it returns an HRESULT error code. - /// Minimum supported client: Windows 2000 Professional, Windows XP [desktop apps only] - /// Minimum supported server: Windows 2000 Server [desktop apps only] - [SuppressMessage("Microsoft.Security", "CA5122:PInvokesShouldNotBeSafeCriticalFxCopRule")] - [DllImport("shlwapi.dll", SetLastError = true, CharSet = CharSet.Unicode), SuppressUnmanagedCodeSecurity] - [return: MarshalAs(UnmanagedType.U4)] - internal static extern uint AssocCreate(Guid clsid, ref Guid riid, [MarshalAs(UnmanagedType.Interface)] out IQueryAssociations ppv); - - /// Searches for and retrieves a file or protocol association-related string from the registry. - /// Return value Type: HRESULT. Returns a standard COM error value, including the following: S_OK, E_POINTER and S_FALSE. - /// Minimum supported client: Windows 2000 Professional - /// Minimum supported server: Windows 2000 Server - [SuppressMessage("Microsoft.Security", "CA5122:PInvokesShouldNotBeSafeCriticalFxCopRule")] - [DllImport("shlwapi.dll", SetLastError = true, CharSet = CharSet.Unicode, EntryPoint = "AssocQueryStringW"), SuppressUnmanagedCodeSecurity] - [return: MarshalAs(UnmanagedType.U4)] - internal static extern uint AssocQueryString(Shell32.AssociationAttributes flags, Shell32.AssociationString str, [MarshalAs(UnmanagedType.LPWStr)] string pszAssoc, [MarshalAs(UnmanagedType.LPWStr)] string pszExtra, StringBuilder pszOut, [MarshalAs(UnmanagedType.U4)] out uint pcchOut); - - - #region IQueryAssociations - - internal static readonly Guid ClsidQueryAssociations = new Guid("A07034FD-6CAA-4954-AC3F-97A27216F98A"); - internal const string QueryAssociationsGuid = "C46CA590-3C3F-11D2-BEE6-0000F805CA57"; - - /// Exposes methods that simplify the process of retrieving information stored in the registry in association with defining a file type or protocol and associating it with an application. - [Guid(QueryAssociationsGuid), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] - [SuppressUnmanagedCodeSecurity] - internal interface IQueryAssociations - { - /// Initializes the IQueryAssociations interface and sets the root key to the appropriate ProgID. - /// If this method succeeds, it returns S_OK. Otherwise, it returns an HRESULT error code. - /// Minimum supported client: Windows 2000 Professional, Windows XP [desktop apps only] - /// Minimum supported server: Windows 2000 Server [desktop apps only] - void Init(Shell32.AssociationAttributes flags, [MarshalAs(UnmanagedType.LPWStr)] string pszAssoc, IntPtr hkProgid, IntPtr hwnd); - - //[return: MarshalAs(UnmanagedType.U4)] - //uint Init(Shell32.AssociationAttributes flags, [MarshalAs(UnmanagedType.LPWStr)] string pszAssoc, IntPtr hkProgid, IntPtr hwnd); - - /// Searches for and retrieves a file or protocol association-related string from the registry. - /// A standard COM error value, including the following: S_OK, E_POINTER, S_FALSE - /// Minimum supported client: Windows 2000 Professional, Windows XP [desktop apps only] - /// Minimum supported server: Windows 2000 Server [desktop apps only] - void GetString(Shell32.AssociationAttributes flags, Shell32.AssociationString str, [MarshalAs(UnmanagedType.LPWStr)] string pwszExtra, StringBuilder pwszOut, [MarshalAs(UnmanagedType.I4)] out int pcchOut); - - //[return: MarshalAs(UnmanagedType.U4)] - //void GetString(Shell32.AssociationAttributes flags, Shell32.AssociationString str, [MarshalAs(UnmanagedType.LPWStr)] string pwszExtra, StringBuilder pwszOut, [MarshalAs(UnmanagedType.I4)] out int pcchOut); - - ///// Searches for and retrieves a file or protocol association-related key from the registry. - ///// If this method succeeds, it returns S_OK. Otherwise, it returns an HRESULT error code. - ///// Minimum supported client: Windows 2000 Professional, Windows XP [desktop apps only] - ///// Minimum supported server: Windows 2000 Server [desktop apps only] - //[return: MarshalAs(UnmanagedType.U4)] - //uint GetKey(Shell32.AssociationAttributes flags, Shell32.AssociationKey str, [MarshalAs(UnmanagedType.LPWStr)] string pwszExtra, out UIntPtr phkeyOut); - - ///// Searches for and retrieves file or protocol association-related binary data from the registry. - ///// If this method succeeds, it returns S_OK. Otherwise, it returns an HRESULT error code. - ///// Minimum supported client: Windows 2000 Professional, Windows XP [desktop apps only] - ///// Minimum supported server: Windows 2000 Server [desktop apps only] - //[return: MarshalAs(UnmanagedType.U4)] - //uint GetData(Shell32.AssociationAttributes flags, Shell32.AssociationData data, [MarshalAs(UnmanagedType.LPWStr)] string pwszExtra, [MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 4)] out byte[] pvOut, [MarshalAs(UnmanagedType.I4)] out int pcbOut); - - ///// This method is not implemented. - //void GetEnum(); - } - - #endregion // IQueryAssociations - - #endregion // AssocXxx - - - #region Path - - /// Determines whether a path to a file system object such as a file or folder is valid. - /// if the file exists; otherwise, . Call GetLastError for extended error information. - /// - /// This function tests the validity of the path. - /// A path specified by Universal Naming Convention (UNC) is limited to a file only; that is, \\server\share\file is permitted. - /// A network share path to a server or server share is not permitted; that is, \\server or \\server\share. - /// This function returns FALSE if a mounted remote drive is out of service. - /// - /// Minimum supported client: Windows 2000 Professional - /// Minimum supported server: Windows 2000 Server - [SuppressMessage("Microsoft.Security", "CA5122:PInvokesShouldNotBeSafeCriticalFxCopRule")] - [DllImport("Shlwapi.dll", SetLastError = true, CharSet = CharSet.Unicode, EntryPoint = "PathFileExistsW"), SuppressUnmanagedCodeSecurity] - [return: MarshalAs(UnmanagedType.Bool)] - internal static extern bool PathFileExists([MarshalAs(UnmanagedType.LPWStr)] string pszPath); - - - /// Converts a file URL to a Microsoft MS-DOS path. - /// Type: HRESULT - /// If this function succeeds, it returns S_OK. Otherwise, it returns an HRESULT error code. - /// - /// Minimum supported client: Windows 2000 Professional, Windows XP [desktop apps only] - /// Minimum supported server: Windows 2000 Server [desktop apps only] - [SuppressMessage("Microsoft.Security", "CA5122:PInvokesShouldNotBeSafeCriticalFxCopRule")] - [DllImport("shlwapi.dll", SetLastError = true, CharSet = CharSet.Unicode, EntryPoint = "PathCreateFromUrlW"), SuppressUnmanagedCodeSecurity] - [return: MarshalAs(UnmanagedType.U4)] - internal static extern uint PathCreateFromUrl([MarshalAs(UnmanagedType.LPWStr)] string pszUrl, StringBuilder pszPath, [MarshalAs(UnmanagedType.U4)] ref uint pcchPath, [MarshalAs(UnmanagedType.U4)] uint dwFlags); - - - /// Creates a path from a file URL. - /// Type: HRESULT - /// If this function succeeds, it returns S_OK. Otherwise, it returns an HRESULT error code. - /// - /// Minimum supported client: Windows Vista [desktop apps only] - /// Minimum supported server: Windows Server 2008 [desktop apps only] - [SuppressMessage("Microsoft.Security", "CA5122:PInvokesShouldNotBeSafeCriticalFxCopRule")] - [DllImport("shlwapi.dll", SetLastError = true, CharSet = CharSet.Unicode), SuppressUnmanagedCodeSecurity] - [return: MarshalAs(UnmanagedType.U4)] - internal static extern uint PathCreateFromUrlAlloc([MarshalAs(UnmanagedType.LPWStr)] string pszIn, out StringBuilder pszPath, [MarshalAs(UnmanagedType.U4)] uint dwFlags); - - - /// Converts a Microsoft MS-DOS path to a canonicalized URL. - /// Type: HRESULT - /// Returns S_FALSE if pszPath is already in URL format. In this case, pszPath will simply be copied to pszUrl. - /// Otherwise, it returns S_OK if successful or a standard COM error value if not. - /// - /// - /// UrlCreateFromPath does not support extended paths. These are paths that include the extended-length path prefix "\\?\". - /// - /// Minimum supported client: Windows 2000 Professional, Windows XP [desktop apps only] - /// Minimum supported server: Windows 2000 Server [desktop apps only] - [SuppressMessage("Microsoft.Security", "CA5122:PInvokesShouldNotBeSafeCriticalFxCopRule")] - [DllImport("shlwapi.dll", SetLastError = true, CharSet = CharSet.Unicode, EntryPoint = "UrlCreateFromPathW"), SuppressUnmanagedCodeSecurity] - [return: MarshalAs(UnmanagedType.U4)] - internal static extern uint UrlCreateFromPath([MarshalAs(UnmanagedType.LPWStr)] string pszPath, StringBuilder pszUrl, ref uint pcchUrl, [MarshalAs(UnmanagedType.U4)] uint dwFlags); - - - /// Tests whether a URL is a specified type. - /// - /// Type: BOOL - /// For all but one of the URL types, UrlIs returns if the URL is the specified type, otherwise. - /// If UrlIs is set to , UrlIs will attempt to determine the URL scheme. - /// If the function is able to determine a scheme, it returns , or . - /// - /// Minimum supported client: Windows 2000 Professional, Windows XP [desktop apps only] - /// Minimum supported server: Windows 2000 Server [desktop apps only] - [SuppressMessage("Microsoft.Security", "CA5122:PInvokesShouldNotBeSafeCriticalFxCopRule")] - [DllImport("shlwapi.dll", SetLastError = true, CharSet = CharSet.Unicode, EntryPoint = "UrlIsW"), SuppressUnmanagedCodeSecurity] - [return: MarshalAs(UnmanagedType.Bool)] - internal static extern bool UrlIs([MarshalAs(UnmanagedType.LPWStr)] string pszUrl, Shell32.UrlType urlIs); - - #endregion // Path - - - /// Destroys an icon and frees any memory the icon occupied. - /// Minimum supported client: Windows XP [desktop apps only] - /// Minimum supported server: Windows 2000 Server [desktop apps only] - [SuppressMessage("Microsoft.Security", "CA5122:PInvokesShouldNotBeSafeCriticalFxCopRule")] - [DllImport("user32.dll", SetLastError = false)] - [return: MarshalAs(UnmanagedType.Bool)] - internal static extern bool DestroyIcon(IntPtr hIcon); - - - /// Retrieves information about an object in the file system, such as a file, folder, directory, or drive root. - /// You should call this function from a background thread. Failure to do so could cause the UI to stop responding. - /// Minimum supported client: Windows 2000 Professional [desktop apps only] - /// Minimum supported server: Windows 2000 Server [desktop apps only] - [SuppressMessage("Microsoft.Security", "CA5122:PInvokesShouldNotBeSafeCriticalFxCopRule")] - [DllImport("shell32.dll", SetLastError = true, CharSet = CharSet.Unicode, EntryPoint = "SHGetFileInfoW"), SuppressUnmanagedCodeSecurity] - internal static extern IntPtr ShGetFileInfo([MarshalAs(UnmanagedType.LPWStr)] string pszPath, FileAttributes dwFileAttributes, [MarshalAs(UnmanagedType.Struct)] out Shell32.FileInfo psfi, [MarshalAs(UnmanagedType.U4)] uint cbFileInfo, [MarshalAs(UnmanagedType.U4)] Shell32.FileAttributes uFlags); - } -} diff --git a/AlphaFS/Filesystem/Native Methods/NativeMethods.Utilities.cs b/AlphaFS/Filesystem/Native Methods/NativeMethods.Utilities.cs deleted file mode 100644 index 3cd33aa..0000000 --- a/AlphaFS/Filesystem/Native Methods/NativeMethods.Utilities.cs +++ /dev/null @@ -1,136 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using Alphaleonis.Win32.Security; -using System; -using System.Diagnostics.CodeAnalysis; -using System.Globalization; -using System.Runtime.InteropServices; -using System.Security; - -namespace Alphaleonis.Win32.Filesystem -{ - internal static partial class NativeMethods - { - internal static uint GetHighOrderDword(long highPart) - { - return (uint)((highPart >> 32) & 0xFFFFFFFF); - } - - internal static uint GetLowOrderDword(long lowPart) - { - return (uint)(lowPart & 0xFFFFFFFF); - } - - /// Check is the current handle is not null, not closed and not invalid. - /// The current handle to check. - /// will throw an , will not raise this exception.. - /// on success, otherwise. - /// - internal static bool IsValidHandle(SafeHandle handle, bool throwException = true) - { - if (handle == null || handle.IsClosed || handle.IsInvalid) - { - if (handle != null) - handle.Close(); - - if (throwException) - throw new ArgumentException(Resources.Handle_Is_Invalid); - - return false; - } - - return true; - } - - /// Check is the current handle is not null, not closed and not invalid. - /// The current handle to check. - /// The result of Marshal.GetLastWin32Error() - /// will throw an , will not raise this exception.. - /// on success, otherwise. - /// - internal static bool IsValidHandle(SafeHandle handle, int lastError, bool throwException = true) - { - if (handle == null || handle.IsClosed || handle.IsInvalid) - { - if (handle != null) - handle.Close(); - - if (throwException) - throw new ArgumentException(string.Format(CultureInfo.InvariantCulture, Resources.Handle_Is_Invalid_Win32Error, lastError)); - - return false; - } - - return true; - } - - internal static long LuidToLong(Luid luid) - { - ulong high = (((ulong)luid.HighPart) << 32); - ulong low = (((ulong)luid.LowPart) & 0x00000000FFFFFFFF); - return unchecked((long)(high | low)); - } - - internal static Luid LongToLuid(long lluid) - { - return new Luid { HighPart = (uint)(lluid >> 32), LowPart = (uint)(lluid & 0xFFFFFFFF) }; - } - - /// - /// Controls whether the system will handle the specified types of serious errors or whether the process will handle them. - /// - /// - /// Because the error mode is set for the entire process, you must ensure that multi-threaded applications do not set different error- - /// mode attributes. Doing so can lead to inconsistent error handling. - /// - /// Minimum supported client: Windows XP [desktop apps only]. - /// Minimum supported server: Windows Server 2003 [desktop apps only]. - /// The mode. - /// The return value is the previous state of the error-mode bit attributes. - [SuppressMessage("Microsoft.Security", "CA5122:PInvokesShouldNotBeSafeCriticalFxCopRule")] - [DllImport("kernel32.dll", SetLastError = false, CharSet = CharSet.Unicode), SuppressUnmanagedCodeSecurity] - [return: MarshalAs(UnmanagedType.U4)] - private static extern ErrorMode SetErrorMode(ErrorMode uMode); - - /// - /// Controls whether the system will handle the specified types of serious errors or whether the calling thread will handle them. - /// - /// - /// Because the error mode is set for the entire process, you must ensure that multi-threaded applications do not set different error- - /// mode attributes. Doing so can lead to inconsistent error handling. - /// - /// Minimum supported client: Windows 7 [desktop apps only]. - /// Minimum supported server: Windows Server 2008 R2 [desktop apps only]. - /// The new mode. - /// [out] The old mode. - /// The return value is the previous state of the error-mode bit attributes. - [SuppressMessage("Microsoft.Security", "CA5122:PInvokesShouldNotBeSafeCriticalFxCopRule")] - [DllImport("kernel32.dll", SetLastError = false, CharSet = CharSet.Unicode), SuppressUnmanagedCodeSecurity] - [return: MarshalAs(UnmanagedType.Bool)] - private static extern bool SetThreadErrorMode(ErrorMode dwNewMode, [MarshalAs(UnmanagedType.U4)] out ErrorMode lpOldMode); - - internal static long ToLong(uint highPart, uint lowPart) - { - return (((long)highPart) << 32) | (((long)lowPart) & 0xFFFFFFFF); - } - } -} diff --git a/AlphaFS/Filesystem/Native Methods/NativeMethods.VolumeManagement.cs b/AlphaFS/Filesystem/Native Methods/NativeMethods.VolumeManagement.cs deleted file mode 100644 index c2576df..0000000 --- a/AlphaFS/Filesystem/Native Methods/NativeMethods.VolumeManagement.cs +++ /dev/null @@ -1,285 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using Microsoft.Win32.SafeHandles; -using System; -using System.Diagnostics.CodeAnalysis; -using System.IO; -using System.Runtime.InteropServices; -using System.Security; -using System.Text; - -namespace Alphaleonis.Win32.Filesystem -{ - internal static partial class NativeMethods - { - /// Defines, redefines, or deletes MS-DOS device names. - /// - /// If the function succeeds, the return value is nonzero. - /// If the function fails, the return value is zero. To get extended error information, call GetLastError. - /// - /// Minimum supported client: Windows XP [desktop apps only] - /// Minimum supported server: Windows Server 2003 [desktop apps only] - [SuppressMessage("Microsoft.Security", "CA5122:PInvokesShouldNotBeSafeCriticalFxCopRule")] - [DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Unicode, EntryPoint = "DefineDosDeviceW"), SuppressUnmanagedCodeSecurity] - [return: MarshalAs(UnmanagedType.Bool)] - internal static extern bool DefineDosDevice(DosDeviceAttributes dwFlags, [MarshalAs(UnmanagedType.LPWStr)] string lpDeviceName, [MarshalAs(UnmanagedType.LPWStr)] string lpTargetPath); - - /// Deletes a drive letter or mounted folder. - /// - /// If the function succeeds, the return value is nonzero. - /// If the function fails, the return value is zero. To get extended error information, call GetLastError. - /// - /// Minimum supported client: Windows XP [desktop apps only] - /// Minimum supported server: Windows Server 2003 [desktop apps only] - [SuppressMessage("Microsoft.Security", "CA5122:PInvokesShouldNotBeSafeCriticalFxCopRule")] - [DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Unicode, EntryPoint = "DeleteVolumeMountPointW"), SuppressUnmanagedCodeSecurity] - [return: MarshalAs(UnmanagedType.Bool)] - internal extern static bool DeleteVolumeMountPoint([MarshalAs(UnmanagedType.LPWStr)] string lpszVolumeMountPoint); - - /// Retrieves the name of a volume on a computer. FindFirstVolume is used to begin scanning the volumes of a computer. - /// - /// If the function succeeds, the return value is a search handle used in a subsequent call to the FindNextVolume and FindVolumeClose functions. - /// If the function fails to find any volumes, the return value is the INVALID_HANDLE_VALUE error code. To get extended error information, call GetLastError. - /// - /// Minimum supported client: Windows XP [desktop apps only] - /// Minimum supported server: Windows Server 2003 [desktop apps only] - [SuppressMessage("Microsoft.Security", "CA5122:PInvokesShouldNotBeSafeCriticalFxCopRule")] - [DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Unicode, EntryPoint = "FindFirstVolumeW"), SuppressUnmanagedCodeSecurity] - internal extern static SafeFindVolumeHandle FindFirstVolume(StringBuilder lpszVolumeName, [MarshalAs(UnmanagedType.U4)] uint cchBufferLength); - - /// Retrieves the name of a mounted folder on the specified volume. FindFirstVolumeMountPoint is used to begin scanning the mounted folders on a volume. - /// - /// If the function succeeds, the return value is a search handle used in a subsequent call to the FindNextVolumeMountPoint and FindVolumeMountPointClose functions. - /// If the function fails to find a mounted folder on the volume, the return value is the INVALID_HANDLE_VALUE error code. - /// - /// Minimum supported client: Windows XP [desktop apps only] - /// Minimum supported server: Windows Server 2003 [desktop apps only] - [SuppressMessage("Microsoft.Security", "CA5122:PInvokesShouldNotBeSafeCriticalFxCopRule")] - [DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Unicode, EntryPoint = "FindFirstVolumeMountPointW"), SuppressUnmanagedCodeSecurity] - internal extern static SafeFindVolumeMountPointHandle FindFirstVolumeMountPoint([MarshalAs(UnmanagedType.LPWStr)] string lpszRootPathName, StringBuilder lpszVolumeMountPoint, [MarshalAs(UnmanagedType.U4)] uint cchBufferLength); - - /// Continues a volume search started by a call to the FindFirstVolume function. FindNextVolume finds one volume per call. - /// - /// If the function succeeds, the return value is nonzero. - /// If the function fails, the return value is zero. To get extended error information, call GetLastError. - /// - /// Minimum supported client: Windows XP [desktop apps only] - /// Minimum supported server: Windows Server 2003 [desktop apps only] - [SuppressMessage("Microsoft.Security", "CA5122:PInvokesShouldNotBeSafeCriticalFxCopRule")] - [DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Unicode, EntryPoint = "FindNextVolumeW"), SuppressUnmanagedCodeSecurity] - [return: MarshalAs(UnmanagedType.Bool)] - internal extern static bool FindNextVolume(SafeFindVolumeHandle hFindVolume, StringBuilder lpszVolumeName, [MarshalAs(UnmanagedType.U4)] uint cchBufferLength); - - /// Continues a mounted folder search started by a call to the FindFirstVolumeMountPoint function. FindNextVolumeMountPoint finds one mounted folder per call. - /// - /// If the function succeeds, the return value is nonzero. - /// If the function fails, the return value is zero. To get extended error information, call GetLastError. If no more mounted folders can be found, the GetLastError function returns the ERROR_NO_MORE_FILES error code. - /// In that case, close the search with the FindVolumeMountPointClose function. - /// - /// Minimum supported client: Windows XP - /// Minimum supported server: Windows Server 2003 - [SuppressMessage("Microsoft.Security", "CA5122:PInvokesShouldNotBeSafeCriticalFxCopRule")] - [DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Unicode, EntryPoint = "FindNextVolumeMountPointW"), SuppressUnmanagedCodeSecurity] - [return: MarshalAs(UnmanagedType.Bool)] - internal extern static bool FindNextVolumeMountPoint(SafeFindVolumeMountPointHandle hFindVolume, StringBuilder lpszVolumeName, [MarshalAs(UnmanagedType.U4)] uint cchBufferLength); - - /// Closes the specified volume search handle. - /// - /// SetLastError is set to . - /// Minimum supported client: Windows XP [desktop apps only]. Minimum supported server: Windows Server 2003 [desktop apps only]. - /// - /// - /// If the function succeeds, the return value is nonzero. If the function fails, the return value is zero. To get extended error - /// information, call GetLastError. - /// - [SuppressMessage("Microsoft.Security", "CA5122:PInvokesShouldNotBeSafeCriticalFxCopRule")] - [DllImport("kernel32.dll", SetLastError = false, CharSet = CharSet.Unicode), SuppressUnmanagedCodeSecurity] - [return: MarshalAs(UnmanagedType.Bool)] - internal extern static bool FindVolumeClose(IntPtr hFindVolume); - - /// Closes the specified mounted folder search handle. - /// - /// SetLastError is set to . - /// Minimum supported client: Windows XP - /// Minimum supported server: Windows Server 2003 - /// - /// - /// If the function succeeds, the return value is nonzero. If the function fails, the return value is zero. To get extended error - /// information, call GetLastError. - /// - [SuppressMessage("Microsoft.Security", "CA5122:PInvokesShouldNotBeSafeCriticalFxCopRule")] - [DllImport("kernel32.dll", SetLastError = false, CharSet = CharSet.Unicode), SuppressUnmanagedCodeSecurity] - [return: MarshalAs(UnmanagedType.Bool)] - internal extern static bool FindVolumeMountPointClose(IntPtr hFindVolume); - - /// - /// Determines whether a disk drive is a removable, fixed, CD-ROM, RAM disk, or network drive. - /// To determine whether a drive is a USB-type drive, call and specify the - /// SPDRP_REMOVAL_POLICY property. - /// - /// - /// SMB does not support volume management functions. - /// Minimum supported client: Windows XP [desktop apps only] - /// Minimum supported server: Windows Server 2003 [desktop apps only] - /// - /// Full pathname of the root file. - /// - /// The return value specifies the type of drive, see . - /// If the function fails, the return value is zero. To get extended error information, call GetLastError. - /// - [SuppressMessage("Microsoft.Security", "CA5122:PInvokesShouldNotBeSafeCriticalFxCopRule")] - [DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Unicode, EntryPoint = "GetDriveTypeW"), SuppressUnmanagedCodeSecurity] - [return: MarshalAs(UnmanagedType.U4)] - internal extern static DriveType GetDriveType([MarshalAs(UnmanagedType.LPWStr)] string lpRootPathName); - - /// - /// Retrieves a bitmask representing the currently available disk drives. - /// - /// - /// SMB does not support volume management functions. - /// Minimum supported client: Windows XP [desktop apps only] - /// Minimum supported server: Windows Server 2003 [desktop apps only] - /// - /// - /// If the function succeeds, the return value is a bitmask representing the currently available disk drives. - /// Bit position 0 (the least-significant bit) is drive A, bit position 1 is drive B, bit position 2 is drive C, and so on. - /// If the function fails, the return value is zero. To get extended error information, call GetLastError. - /// - [SuppressMessage("Microsoft.Security", "CA5122:PInvokesShouldNotBeSafeCriticalFxCopRule")] - [DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Unicode), SuppressUnmanagedCodeSecurity] - [return: MarshalAs(UnmanagedType.U4)] - internal static extern uint GetLogicalDrives(); - - /// Retrieves information about the file system and volume associated with the specified root directory. - /// - /// If all the requested information is retrieved, the return value is nonzero. - /// If not all the requested information is retrieved, the return value is zero. - /// - /// Minimum supported client: Windows XP [desktop apps only] - /// Minimum supported server: Windows Server 2003 [desktop apps only] - /// "lpRootPathName" must end with a trailing backslash. - [SuppressMessage("Microsoft.Security", "CA5122:PInvokesShouldNotBeSafeCriticalFxCopRule")] - [DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Unicode, EntryPoint = "GetVolumeInformationW"), SuppressUnmanagedCodeSecurity] - [return: MarshalAs(UnmanagedType.Bool)] - internal extern static bool GetVolumeInformation([MarshalAs(UnmanagedType.LPWStr)] string lpRootPathName, StringBuilder lpVolumeNameBuffer, [MarshalAs(UnmanagedType.U4)] uint nVolumeNameSize, [MarshalAs(UnmanagedType.U4)] out uint lpVolumeSerialNumber, [MarshalAs(UnmanagedType.U4)] out int lpMaximumComponentLength, [MarshalAs(UnmanagedType.U4)] out VolumeInfoAttributes lpFileSystemAttributes, StringBuilder lpFileSystemNameBuffer, [MarshalAs(UnmanagedType.U4)] uint nFileSystemNameSize); - - /// Retrieves information about the file system and volume associated with the specified file. - /// - /// If all the requested information is retrieved, the return value is nonzero. - /// If not all the requested information is retrieved, the return value is zero. To get extended error information, call GetLastError. - /// - /// To retrieve the current compression state of a file or directory, use FSCTL_GET_COMPRESSION. - /// SMB does not support volume management functions. - /// Minimum supported client: Windows Vista [desktop apps only] - /// Minimum supported server: Windows Server 2008 [desktop apps only] - [SuppressMessage("Microsoft.Security", "CA5122:PInvokesShouldNotBeSafeCriticalFxCopRule")] - [DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Unicode, EntryPoint = "GetVolumeInformationByHandleW"), SuppressUnmanagedCodeSecurity] - [return: MarshalAs(UnmanagedType.Bool)] - internal extern static bool GetVolumeInformationByHandle(SafeFileHandle hFile, StringBuilder lpVolumeNameBuffer, [MarshalAs(UnmanagedType.U4)] uint nVolumeNameSize, [MarshalAs(UnmanagedType.U4)] out uint lpVolumeSerialNumber, [MarshalAs(UnmanagedType.U4)] out int lpMaximumComponentLength, out VolumeInfoAttributes lpFileSystemAttributes, StringBuilder lpFileSystemNameBuffer, [MarshalAs(UnmanagedType.U4)] uint nFileSystemNameSize); - - /// Retrieves a volume GUID path for the volume that is associated with the specified volume mount point (drive letter, volume GUID path, or mounted folder). - /// - /// If the function succeeds, the return value is nonzero. - /// If the function fails, the return value is zero. To get extended error information, call GetLastError. - /// - /// Use GetVolumeNameForVolumeMountPoint to obtain a volume GUID path for use with functions such as SetVolumeMountPoint and FindFirstVolumeMountPoint that require a volume GUID path as an input parameter. - /// SMB does not support volume management functions. - /// Mount points aren't supported by ReFS volumes. - /// Minimum supported client: Windows XP [desktop apps only] - /// Minimum supported server: Windows Server 2003 [desktop apps only] - [SuppressMessage("Microsoft.Security", "CA5122:PInvokesShouldNotBeSafeCriticalFxCopRule")] - [DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Unicode, EntryPoint = "GetVolumeNameForVolumeMountPointW"), SuppressUnmanagedCodeSecurity] - [return: MarshalAs(UnmanagedType.Bool)] - internal static extern bool GetVolumeNameForVolumeMountPoint([MarshalAs(UnmanagedType.LPWStr)] string lpszVolumeMountPoint, StringBuilder lpszVolumeName, [MarshalAs(UnmanagedType.U4)] uint cchBufferLength); - - /// Retrieves the volume mount point where the specified path is mounted. - /// - /// If a specified path is passed, GetVolumePathName returns the path to the volume mount point, which means that it returns the - /// root of the volume where the end point of the specified path is located. - /// For example, assume that you have volume D mounted at C:\Mnt\Ddrive and volume E mounted at "C:\Mnt\Ddrive\Mnt\Edrive". Also - /// assume that you have a file with the path "E:\Dir\Subdir\MyFile". - /// If you pass "C:\Mnt\Ddrive\Mnt\Edrive\Dir\Subdir\MyFile" to GetVolumePathName, it returns the path "C:\Mnt\Ddrive\Mnt\Edrive\". - /// If a network share is specified, GetVolumePathName returns the shortest path for which GetDriveType returns DRIVE_REMOTE, - /// which means that the path is validated as a remote drive that exists, which the current user can access. - /// Minimum supported client: Windows XP [desktop apps only] - /// Minimum supported server: Windows Server 2003 [desktop apps only] - /// - /// - /// If the function succeeds, the return value is nonzero. - /// If the function fails, the return value is zero. To get extended error information, call GetLastError. - /// - [SuppressMessage("Microsoft.Security", "CA5122:PInvokesShouldNotBeSafeCriticalFxCopRule")] - [DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Unicode, EntryPoint = "GetVolumePathNameW"), SuppressUnmanagedCodeSecurity] - [return: MarshalAs(UnmanagedType.Bool)] - internal static extern bool GetVolumePathName([MarshalAs(UnmanagedType.LPWStr)] string lpszFileName, StringBuilder lpszVolumePathName, [MarshalAs(UnmanagedType.U4)] uint cchBufferLength); - - /// Retrieves a list of drive letters and mounted folder paths for the specified volume. - /// Minimum supported client: Windows XP. - /// Minimum supported server: Windows Server 2003. - /// - /// If the function succeeds, the return value is nonzero. If the function fails, the return value is zero. To get extended error - /// information, call GetLastError. - /// - [SuppressMessage("Microsoft.Security", "CA5122:PInvokesShouldNotBeSafeCriticalFxCopRule")] - [DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Unicode, EntryPoint = "GetVolumePathNamesForVolumeNameW"), SuppressUnmanagedCodeSecurity] - [return: MarshalAs(UnmanagedType.Bool)] - internal static extern bool GetVolumePathNamesForVolumeName([MarshalAs(UnmanagedType.LPWStr)] string lpszVolumeName, char[] lpszVolumePathNames, [MarshalAs(UnmanagedType.U4)] uint cchBuferLength, [MarshalAs(UnmanagedType.U4)] out uint lpcchReturnLength); - - /// Sets the label of a file system volume. - /// Minimum supported client: Windows XP [desktop apps only]. - /// Minimum supported server: Windows Server 2003 [desktop apps only]. - /// "lpRootPathName" must end with a trailing backslash. - /// - /// If the function succeeds, the return value is nonzero. If the function fails, the return value is zero. To get extended error - /// information, call GetLastError. - /// - [SuppressMessage("Microsoft.Security", "CA5122:PInvokesShouldNotBeSafeCriticalFxCopRule")] - [DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Unicode, EntryPoint = "SetVolumeLabelW"), SuppressUnmanagedCodeSecurity] - [return: MarshalAs(UnmanagedType.Bool)] - internal extern static bool SetVolumeLabel([MarshalAs(UnmanagedType.LPWStr)] string lpRootPathName, [MarshalAs(UnmanagedType.LPWStr)] string lpVolumeName); - - /// Associates a volume with a drive letter or a directory on another volume. - /// Minimum supported client: Windows XP [desktop apps only]. - /// Minimum supported server: Windows Server 2003 [desktop apps only]. - /// - /// If the function succeeds, the return value is nonzero. If the function fails, the return value is zero. To get extended error - /// information, call GetLastError. - /// - [SuppressMessage("Microsoft.Security", "CA5122:PInvokesShouldNotBeSafeCriticalFxCopRule")] - [DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Unicode, EntryPoint = "SetVolumeMountPointW"), SuppressUnmanagedCodeSecurity] - [return: MarshalAs(UnmanagedType.Bool)] - internal extern static bool SetVolumeMountPoint([MarshalAs(UnmanagedType.LPWStr)] string lpszVolumeMountPoint, [MarshalAs(UnmanagedType.LPWStr)] string lpszVolumeName); - - /// Retrieves information about MS-DOS device names. - /// Minimum supported client: Windows XP [desktop apps only]. - /// Minimum supported server: Windows Server 2003 [desktop apps only]. - /// - /// If the function succeeds, the return value is the number of TCHARs stored into the buffer pointed to by lpTargetPath. If the - /// function fails, the return value is zero. To get extended error information, call GetLastError. If the buffer is too small, the - /// function fails and the last error code is ERROR_INSUFFICIENT_BUFFER. - /// - [SuppressMessage("Microsoft.Security", "CA5122:PInvokesShouldNotBeSafeCriticalFxCopRule")] - [DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Unicode, EntryPoint = "QueryDosDeviceW"), SuppressUnmanagedCodeSecurity] - [return: MarshalAs(UnmanagedType.U4)] - internal static extern uint QueryDosDevice([MarshalAs(UnmanagedType.LPWStr)] string lpDeviceName, char[] lpTargetPath, [MarshalAs(UnmanagedType.U4)] uint ucchMax); - } -} \ No newline at end of file diff --git a/AlphaFS/Filesystem/Native Structures/BY_HANDLE_FILE_INFORMATION.cs b/AlphaFS/Filesystem/Native Structures/BY_HANDLE_FILE_INFORMATION.cs deleted file mode 100644 index 27493de..0000000 --- a/AlphaFS/Filesystem/Native Structures/BY_HANDLE_FILE_INFORMATION.cs +++ /dev/null @@ -1,74 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System.IO; -using System.Runtime.InteropServices; - -namespace Alphaleonis.Win32.Filesystem -{ - internal static partial class NativeMethods - { - /// Contains information that the GetFileInformationByHandle function retrieves. - [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)] - internal struct BY_HANDLE_FILE_INFORMATION - { - /// The file attributes. - public readonly FileAttributes dwFileAttributes; - - /// A structure that specifies when a file or directory is created. - public readonly FILETIME ftCreationTime; - - /// A structure. For a file, the structure specifies the last time that a file is read from or written to. - /// For a directory, the structure specifies when the directory is created. - /// For both files and directories, the specified date is correct, but the time of day is always set to midnight. - /// - public readonly FILETIME ftLastAccessTime; - - /// A structure. For a file, the structure specifies the last time that a file is written to. - /// For a directory, the structure specifies when the directory is created. - public readonly FILETIME ftLastWriteTime; - - /// The serial number of the volume that contains a file. - [MarshalAs(UnmanagedType.U4)] - public readonly int dwVolumeSerialNumber; - - /// The high-order part of the file size. - [MarshalAs(UnmanagedType.U4)] - public readonly uint nFileSizeHigh; - - /// The low-order part of the file size. - [MarshalAs(UnmanagedType.U4)] - public readonly uint nFileSizeLow; - - /// The number of links to this file. For the FAT file system this member is always 1. For the NTFS file system, it can be more than 1. - [MarshalAs(UnmanagedType.U4)] - public readonly int nNumberOfLinks; - - /// The high-order part of a unique identifier that is associated with a file. - [MarshalAs(UnmanagedType.U4)] - public readonly uint nFileIndexHigh; - - /// The low-order part of a unique identifier that is associated with a file. - [MarshalAs(UnmanagedType.U4)] - public readonly uint nFileIndexLow; - } - } -} \ No newline at end of file diff --git a/AlphaFS/Filesystem/Native Structures/FILETIME.cs b/AlphaFS/Filesystem/Native Structures/FILETIME.cs deleted file mode 100644 index 1d3a00a..0000000 --- a/AlphaFS/Filesystem/Native Structures/FILETIME.cs +++ /dev/null @@ -1,123 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System; -using System.Diagnostics.CodeAnalysis; -using System.Runtime.InteropServices; -namespace Alphaleonis.Win32.Filesystem -{ - internal static partial class NativeMethods - { - /// Represents the number of 100-nanosecond intervals since January 1, 1601. This structure is a 64-bit value. - [SerializableAttribute] - [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)] - internal struct FILETIME - { - #region Fields - - private readonly uint dwLowDateTime; - private readonly uint dwHighDateTime; - - #endregion // Fields - - #region Methods - - /// Converts a value to long. - public static implicit operator long(FILETIME ft) - { - return ft.ToLong(); - } - - /// Converts a value to long. - [SuppressMessage("Microsoft.Naming", "CA1720:IdentifiersShouldNotContainTypeNames", MessageId = "long")] - public long ToLong() - { - return NativeMethods.ToLong(dwHighDateTime, dwLowDateTime); - } - - #endregion - - #region Equality - - #region Equals - - /// Determines whether the specified Object is equal to the current Object. - /// Another object to compare to. - /// if the specified Object is equal to the current Object; otherwise, . - public override bool Equals(object obj) - { - if (obj == null || GetType() != obj.GetType()) - return false; - - FILETIME other = obj is FILETIME ? (FILETIME)obj : new FILETIME(); - - return (other.dwHighDateTime.Equals(dwHighDateTime) && - other.dwLowDateTime.Equals(dwLowDateTime)); - } - - #endregion // Equals - - #region GetHashCode - - /// Serves as a hash function for a particular type. - /// A hash code for the current Object. - public override int GetHashCode() - { - unchecked - { - int hash = 17; - hash = hash * 23 + dwHighDateTime.GetHashCode(); - hash = hash * 11 + dwLowDateTime.GetHashCode(); - return hash; - } - } - - #endregion // GetHashCode - - #region == - - /// Implements the operator == - /// A. - /// B. - /// The result of the operator. - public static bool operator ==(FILETIME left, FILETIME right) - { - return left.Equals(right); - } - - #endregion // == - - #region != - /// Implements the operator != - /// A. - /// B. - /// The result of the operator. - public static bool operator !=(FILETIME left, FILETIME right) - { - return !(left == right); - } - - #endregion // != - - #endregion // Equality - } - } -} diff --git a/AlphaFS/Filesystem/Native Structures/FILE_BASIC_INFO.cs b/AlphaFS/Filesystem/Native Structures/FILE_BASIC_INFO.cs deleted file mode 100644 index f3cd7f4..0000000 --- a/AlphaFS/Filesystem/Native Structures/FILE_BASIC_INFO.cs +++ /dev/null @@ -1,58 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System.IO; -using System.Runtime.InteropServices; - -namespace Alphaleonis.Win32.Filesystem -{ - internal static partial class NativeMethods - { - /// Contains the basic information for a file. Used for file handles. - /// - /// Specifying -1 for , , or - /// indicates that operations on the current handle should not affect the given field. - /// (I.e, specifying -1 for will leave the unaffected by writes performed - /// on the current handle.) - /// - [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)] - internal struct FILE_BASIC_INFO - { - /// The time the file was created in format, - /// which is a 64-bit value representing the number of 100-nanosecond intervals since January 1, 1601 (UTC). - /// - public FILETIME CreationTime; - - /// The time the file was last accessed in format. - public FILETIME LastAccessTime; - - /// The time the file was last written to in format. - public FILETIME LastWriteTime; - - /// The time the file was changed in format. - public FILETIME ChangeTime; - - /// The file attributes. - /// If this is set to 0 in a structure passed to SetFileInformationByHandle then none of the attributes are changed. - public FileAttributes FileAttributes; - } - } -} \ No newline at end of file diff --git a/AlphaFS/Filesystem/Native Structures/FILE_ID_BOTH_DIR_INFO.cs b/AlphaFS/Filesystem/Native Structures/FILE_ID_BOTH_DIR_INFO.cs deleted file mode 100644 index 3c91a40..0000000 --- a/AlphaFS/Filesystem/Native Structures/FILE_ID_BOTH_DIR_INFO.cs +++ /dev/null @@ -1,95 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System; -using System.IO; -using System.Runtime.InteropServices; - -namespace Alphaleonis.Win32.Filesystem -{ - internal static partial class NativeMethods - { - /// Contains information about files in the specified directory. Used for directory handles. Use only when calling GetFileInformationByHandleEx. - /// - /// The number of files that are returned for each call to GetFileInformationByHandleEx depends on the size of the buffer that is passed to the function. - /// Any subsequent calls to GetFileInformationByHandleEx on the same handle will resume the enumeration operation after the last file is returned. - /// - [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)] - internal struct FILE_ID_BOTH_DIR_INFO - { - /// The offset for the next FILE_ID_BOTH_DIR_INFO structure that is returned. Contains zero (0) if no other entries follow this one. - [MarshalAs(UnmanagedType.U4)] - public readonly int NextEntryOffset; - - /// The byte offset of the file within the parent directory. This member is undefined for file systems, such as NTFS, - /// in which the position of a file within the parent directory is not fixed and can be changed at any time to maintain sort order. - /// - [MarshalAs(UnmanagedType.U4)] - public readonly uint FileIndex; - - /// The time that the file was created. - public FILETIME CreationTime; - - /// The time that the file was last accessed. - public FILETIME LastAccessTime; - - /// The time that the file was last written to. - public FILETIME LastWriteTime; - - /// The time that the file was last changed. - public FILETIME ChangeTime; - - /// The absolute new end-of-file position as a byte offset from the start of the file to the end of the file. - /// Because this value is zero-based, it actually refers to the first free byte in the file. - /// In other words, EndOfFile is the offset to the byte that immediately follows the last valid byte in the file. - /// - public readonly long EndOfFile; - - /// The number of bytes that are allocated for the file. This value is usually a multiple of the sector or cluster size of the underlying physical device. - public readonly long AllocationSize; - - /// The file attributes. - public readonly FileAttributes FileAttributes; - - /// The length of the file name. - [MarshalAs(UnmanagedType.U4)] - public readonly uint FileNameLength; - - /// The size of the extended attributes for the file. - [MarshalAs(UnmanagedType.U4)] - public readonly int EaSize; - - /// The length of ShortName. - [MarshalAs(UnmanagedType.U1)] - public readonly byte ShortNameLength; - - /// The short 8.3 file naming convention (for example, "FILENAME.TXT") name of the file. - [MarshalAs(UnmanagedType.ByValArray, SizeConst = 12, ArraySubType = UnmanagedType.U2)] - public readonly char[] ShortName; - - /// The file ID. - public readonly long FileId; - - /// The first character of the file name string. This is followed in memory by the remainder of the string. - public IntPtr FileName; - } - } -} \ No newline at end of file diff --git a/AlphaFS/Filesystem/Native Structures/MountPointReparseBuffer.cs b/AlphaFS/Filesystem/Native Structures/MountPointReparseBuffer.cs deleted file mode 100644 index ba03cac..0000000 --- a/AlphaFS/Filesystem/Native Structures/MountPointReparseBuffer.cs +++ /dev/null @@ -1,38 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System.Runtime.InteropServices; - -namespace Alphaleonis.Win32.Filesystem -{ - internal static partial class NativeMethods - { - [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)] - internal struct MountPointReparseBuffer - { - public readonly ushort SubstituteNameOffset; - public readonly ushort SubstituteNameLength; - public readonly ushort PrintNameOffset; - public readonly ushort PrintNameLength; - [MarshalAs(UnmanagedType.ByValArray, SizeConst = 1)] public readonly byte[] data; - } - } -} diff --git a/AlphaFS/Filesystem/Native Structures/ReparseDataBufferHeader.cs b/AlphaFS/Filesystem/Native Structures/ReparseDataBufferHeader.cs deleted file mode 100644 index 5c8db1d..0000000 --- a/AlphaFS/Filesystem/Native Structures/ReparseDataBufferHeader.cs +++ /dev/null @@ -1,37 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System.Runtime.InteropServices; - -namespace Alphaleonis.Win32.Filesystem -{ - internal static partial class NativeMethods - { - [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)] - internal struct ReparseDataBufferHeader - { - [MarshalAs(UnmanagedType.U4)] public readonly ReparsePointTag ReparseTag; - public readonly ushort ReparseDataLength; - public readonly ushort Reserved; - [MarshalAs(UnmanagedType.ByValArray, SizeConst = 1)] public readonly byte[] data; - } - } -} diff --git a/AlphaFS/Filesystem/Native Structures/SP_DEVICE_INTERFACE_DATA.cs b/AlphaFS/Filesystem/Native Structures/SP_DEVICE_INTERFACE_DATA.cs deleted file mode 100644 index a03a77d..0000000 --- a/AlphaFS/Filesystem/Native Structures/SP_DEVICE_INTERFACE_DATA.cs +++ /dev/null @@ -1,46 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System; -using System.Runtime.InteropServices; - -namespace Alphaleonis.Win32.Filesystem -{ - internal static partial class NativeMethods - { - /// An SP_DEVICE_INTERFACE_DATA structure defines a device interface in a device information set. - [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)] - internal struct SP_DEVICE_INTERFACE_DATA - { - /// The size, in bytes, of the SP_DEVICE_INTERFACE_DATA structure. - [MarshalAs(UnmanagedType.U4)] public uint cbSize; - - /// The GUID for the class to which the device interface belongs. - public readonly Guid InterfaceClassGuid; - - /// Can be one or more of the following: SPINT_ACTIVE (1), SPINT_DEFAULT (2), SPINT_REMOVED (3). - [MarshalAs(UnmanagedType.U4)] public readonly uint Flags; - - /// Reserved. Do not use. - private readonly IntPtr Reserved; - } - } -} \ No newline at end of file diff --git a/AlphaFS/Filesystem/Native Structures/SP_DEVICE_INTERFACE_DETAIL_DATA.cs b/AlphaFS/Filesystem/Native Structures/SP_DEVICE_INTERFACE_DETAIL_DATA.cs deleted file mode 100644 index 0579e77..0000000 --- a/AlphaFS/Filesystem/Native Structures/SP_DEVICE_INTERFACE_DETAIL_DATA.cs +++ /dev/null @@ -1,39 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System.Runtime.InteropServices; - -namespace Alphaleonis.Win32.Filesystem -{ - internal static partial class NativeMethods - { - /// An SP_DEVICE_INTERFACE_DETAIL_DATA structure contains the path for a device interface. - [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)] - internal struct SP_DEVICE_INTERFACE_DETAIL_DATA - { - /// The size, in bytes, of the SP_DEVICE_INTERFACE_DETAIL_DATA structure. - [MarshalAs(UnmanagedType.U4)] public uint cbSize; - - /// The device interface path. This path can be passed to Win32 functions such as CreateFile. - [MarshalAs(UnmanagedType.ByValTStr, SizeConst = MaxPath)] public readonly string DevicePath; - } - } -} \ No newline at end of file diff --git a/AlphaFS/Filesystem/Native Structures/SP_DEVINFO_DATA.cs b/AlphaFS/Filesystem/Native Structures/SP_DEVINFO_DATA.cs deleted file mode 100644 index 927bbf0..0000000 --- a/AlphaFS/Filesystem/Native Structures/SP_DEVINFO_DATA.cs +++ /dev/null @@ -1,46 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System; -using System.Runtime.InteropServices; - -namespace Alphaleonis.Win32.Filesystem -{ - internal static partial class NativeMethods - { - /// An SP_DEVINFO_DATA structure defines a device instance that is a member of a device information set. - [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)] - internal struct SP_DEVINFO_DATA - { - /// The size, in bytes, of the SP_DEVINFO_DATA structure. - [MarshalAs(UnmanagedType.U4)] public uint cbSize; - - /// The GUID of the device's setup class. - public readonly Guid ClassGuid; - - /// An opaque handle to the device instance (also known as a handle to the devnode). - [MarshalAs(UnmanagedType.U4)] public readonly uint DevInst; - - /// Reserved. For internal use only. - private readonly IntPtr Reserved; - } - } -} \ No newline at end of file diff --git a/AlphaFS/Filesystem/Native Structures/SymbolicLinkReparseBuffer.cs b/AlphaFS/Filesystem/Native Structures/SymbolicLinkReparseBuffer.cs deleted file mode 100644 index 90d31a4..0000000 --- a/AlphaFS/Filesystem/Native Structures/SymbolicLinkReparseBuffer.cs +++ /dev/null @@ -1,39 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System.Runtime.InteropServices; - -namespace Alphaleonis.Win32.Filesystem -{ - internal static partial class NativeMethods - { - [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)] - internal struct SymbolicLinkReparseBuffer - { - public readonly ushort SubstituteNameOffset; - public readonly ushort SubstituteNameLength; - public readonly ushort PrintNameOffset; - public readonly ushort PrintNameLength; - public readonly SymbolicLinkType Flags; - [MarshalAs(UnmanagedType.ByValArray, SizeConst = 1)] public readonly byte[] data; - } - } -} diff --git a/AlphaFS/Filesystem/Native Structures/WIN32_FILE_ATTRIBUTE_DATA.cs b/AlphaFS/Filesystem/Native Structures/WIN32_FILE_ATTRIBUTE_DATA.cs deleted file mode 100644 index dfabfc4..0000000 --- a/AlphaFS/Filesystem/Native Structures/WIN32_FILE_ATTRIBUTE_DATA.cs +++ /dev/null @@ -1,86 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System.IO; -using System.Runtime.InteropServices; - -namespace Alphaleonis.Win32.Filesystem -{ - internal static partial class NativeMethods - { - /// WIN32_FILE_ATTRIBUTE_DATA structure contains attribute information for a file or directory. The GetFileAttributesEx function uses this structure. - /// - /// Not all file systems can record creation and last access time, and not all file systems record them in the same manner. - /// For example, on the FAT file system, create time has a resolution of 10 milliseconds, write time has a resolution of 2 seconds, - /// and access time has a resolution of 1 day. On the NTFS file system, access time has a resolution of 1 hour. - /// For more information, see File Times. - /// - [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)] - internal struct WIN32_FILE_ATTRIBUTE_DATA - { - public WIN32_FILE_ATTRIBUTE_DATA(WIN32_FIND_DATA findData) - { - dwFileAttributes = findData.dwFileAttributes; - ftCreationTime = findData.ftCreationTime; - ftLastAccessTime = findData.ftLastAccessTime; - ftLastWriteTime = findData.ftLastWriteTime; - nFileSizeHigh = findData.nFileSizeHigh; - nFileSizeLow = findData.nFileSizeLow; - } - - /// The file attributes of a file. - [MarshalAs(UnmanagedType.I4)] public FileAttributes dwFileAttributes; - - /// A structure that specifies when a file or directory was created. - /// If the underlying file system does not support creation time, this member is zero. - public readonly FILETIME ftCreationTime; - - /// A structure. - /// For a file, the structure specifies when the file was last read from, written to, or for executable files, run. - /// For a directory, the structure specifies when the directory is created. If the underlying file system does not support last access time, this member is zero. - /// On the FAT file system, the specified date for both files and directories is correct, but the time of day is always set to midnight. - /// - public readonly FILETIME ftLastAccessTime; - - /// A structure. - /// For a file, the structure specifies when the file was last written to, truncated, or overwritten, for example, when WriteFile or SetEndOfFile are used. - /// The date and time are not updated when file attributes or security descriptors are changed. - /// For a directory, the structure specifies when the directory is created. If the underlying file system does not support last write time, this member is zero. - /// - public readonly FILETIME ftLastWriteTime; - - /// The high-order DWORD of the file size. This member does not have a meaning for directories. - /// This value is zero unless the file size is greater than MAXDWORD. - /// The size of the file is equal to (nFileSizeHigh * (MAXDWORD+1)) + nFileSizeLow. - /// - public readonly uint nFileSizeHigh; - - /// The low-order DWORD of the file size. This member does not have a meaning for directories. - public readonly uint nFileSizeLow; - - /// The file size. - public long FileSize - { - get { return ToLong(nFileSizeHigh, nFileSizeLow); } - } - } - } -} diff --git a/AlphaFS/Filesystem/Native Structures/WIN32_FIND_DATA.cs b/AlphaFS/Filesystem/Native Structures/WIN32_FIND_DATA.cs deleted file mode 100644 index b7612fe..0000000 --- a/AlphaFS/Filesystem/Native Structures/WIN32_FIND_DATA.cs +++ /dev/null @@ -1,93 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System; -using System.IO; -using System.Runtime.InteropServices; - -namespace Alphaleonis.Win32.Filesystem -{ - internal static partial class NativeMethods - { - /// Contains information about the file that is found by the FindFirstFile, FindFirstFileEx, or FindNextFile function. - /// - /// If a file has a long file name, the complete name appears in the cFileName member, and the 8.3 format truncated version of the name appears - /// in the cAlternateFileName member. Otherwise, cAlternateFileName is empty. If the FindFirstFileEx function was called with a value of FindExInfoBasic - /// in the fInfoLevelId parameter, the cAlternateFileName member will always contain a string value. This remains true for all subsequent calls to the - /// FindNextFile function. As an alternative method of retrieving the 8.3 format version of a file name, you can use the GetShortPathName function. - /// For more information about file names, see File Names, Paths, and Namespaces. - /// - /// - /// Not all file systems can record creation and last access times, and not all file systems record them in the same manner. - /// For example, on the FAT file system, create time has a resolution of 10 milliseconds, write time has a resolution of 2 seconds, - /// and access time has a resolution of 1 day. The NTFS file system delays updates to the last access time for a file by up to 1 hour - /// after the last access. For more information, see File Times. - /// - [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)] - [SerializableAttribute] - internal struct WIN32_FIND_DATA - { - /// The file attributes of a file. - public FileAttributes dwFileAttributes; - - /// A structure that specifies when a file or directory was created. - /// If the underlying file system does not support creation time, this member is zero. - public FILETIME ftCreationTime; - - /// A structure. - /// For a file, the structure specifies when the file was last read from, written to, or for executable files, run. - /// For a directory, the structure specifies when the directory is created. If the underlying file system does not support last access time, this member is zero. - /// On the FAT file system, the specified date for both files and directories is correct, but the time of day is always set to midnight. - /// - public FILETIME ftLastAccessTime; - - /// A structure. - /// For a file, the structure specifies when the file was last written to, truncated, or overwritten, for example, when WriteFile or SetEndOfFile are used. - /// The date and time are not updated when file attributes or security descriptors are changed. - /// For a directory, the structure specifies when the directory is created. If the underlying file system does not support last write time, this member is zero. - /// - public FILETIME ftLastWriteTime; - - /// The high-order DWORD of the file size. This member does not have a meaning for directories. - /// This value is zero unless the file size is greater than MAXDWORD. - /// The size of the file is equal to (nFileSizeHigh * (MAXDWORD+1)) + nFileSizeLow. - /// - public uint nFileSizeHigh; - - /// The low-order DWORD of the file size. This member does not have a meaning for directories. - public uint nFileSizeLow; - - /// If the dwFileAttributes member includes the FILE_ATTRIBUTE_REPARSE_POINT attribute, this member specifies the reparse point tag. - /// Otherwise, this value is undefined and should not be used. - /// - public readonly ReparsePointTag dwReserved0; - - /// Reserved for future use. - private readonly uint dwReserved1; - - /// The name of the file. - [MarshalAs(UnmanagedType.ByValTStr, SizeConst = MaxPath)] public string cFileName; - - /// An alternative name for the file. This name is in the classic 8.3 file name format. - [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 14)] public string cAlternateFileName; - } - } -} diff --git a/AlphaFS/Filesystem/Native Structures/WIN32_FIND_STREAM_DATA.cs b/AlphaFS/Filesystem/Native Structures/WIN32_FIND_STREAM_DATA.cs deleted file mode 100644 index 4e8c42b..0000000 --- a/AlphaFS/Filesystem/Native Structures/WIN32_FIND_STREAM_DATA.cs +++ /dev/null @@ -1,37 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System.Runtime.InteropServices; - -namespace Alphaleonis.Win32.Filesystem -{ - internal static partial class NativeMethods - { - [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)] - internal struct WIN32_FIND_STREAM_DATA - { - public long StreamSize; - - [MarshalAs(UnmanagedType.ByValTStr, SizeConst = MaxPath + 36)] - public string cStreamName; - } - } -} diff --git a/AlphaFS/Filesystem/Native Structures/WIN32_STREAM_ID.cs b/AlphaFS/Filesystem/Native Structures/WIN32_STREAM_ID.cs deleted file mode 100644 index cc9b49c..0000000 --- a/AlphaFS/Filesystem/Native Structures/WIN32_STREAM_ID.cs +++ /dev/null @@ -1,51 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System; -using System.Runtime.InteropServices; - -namespace Alphaleonis.Win32.Filesystem -{ - internal static partial class NativeMethods - { - /// Contains stream data. - [StructLayout(LayoutKind.Sequential, Pack = 1, CharSet = CharSet.Unicode)] - [SerializableAttribute] - internal struct WIN32_STREAM_ID - { - /// Type of stream data. - [MarshalAs(UnmanagedType.U4)] - public readonly BackupStreamType dwStreamId; - - /// Attributes of data to facilitate cross-operating system transfer. - [MarshalAs(UnmanagedType.U4)] - public readonly StreamAttributes dwStreamAttributes; - - /// Size of data, in bytes. - [MarshalAs(UnmanagedType.U8)] - public readonly ulong Size; - - /// Length of the name of the alternative data stream, in bytes. - [MarshalAs(UnmanagedType.U4)] - public readonly uint dwStreamNameSize; - } - } -} diff --git a/AlphaFS/Filesystem/Path Class/Path.Combine.cs b/AlphaFS/Filesystem/Path Class/Path.Combine.cs deleted file mode 100644 index 5669b35..0000000 --- a/AlphaFS/Filesystem/Path Class/Path.Combine.cs +++ /dev/null @@ -1,105 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System; -using System.Security; -using System.Text; - -namespace Alphaleonis.Win32.Filesystem -{ - public static partial class Path - { - /// Combines an array of strings into a path. - /// The combined paths. - /// - /// - /// An array of parts of the path. - [SecurityCritical] - public static string Combine(params string[] paths) - { - return CombineCore(true, paths); - } - - /// Combines an array of strings into a path. - /// The combined paths. - /// - /// The parameters are not parsed if they have white space. - /// Therefore, if path2 includes white space (for example, " c:\\ "), - /// the Combine method appends path2 to path1 instead of returning only path2. - /// - /// - /// - /// will not check for invalid path characters. - /// An array of parts of the path. - [SecurityCritical] - internal static string CombineCore(bool checkInvalidPathChars, params string[] paths) - { - if (paths == null) - throw new ArgumentNullException("paths"); - - int capacity = 0; - int num = 0; - for (int index = 0, l = paths.Length; index < l; ++index) - { - if (paths[index] == null) - throw new ArgumentNullException("paths"); - - if (paths[index].Length != 0) - { - if (IsPathRooted(paths[index], checkInvalidPathChars)) - { - num = index; - capacity = paths[index].Length; - } - else - capacity += paths[index].Length; - - char ch = paths[index][paths[index].Length - 1]; - - if (!IsDVsc(ch, null)) - ++capacity; - } - } - - var buffer = new StringBuilder(capacity); - for (int index = num; index < paths.Length; ++index) - { - if (paths[index].Length != 0) - { - if (buffer.Length == 0) - buffer.Append(paths[index]); - - else - { - char ch = buffer[buffer.Length - 1]; - - if (!IsDVsc(ch, null)) - buffer.Append(DirectorySeparatorChar); - - buffer.Append(paths[index]); - } - } - } - - return buffer.ToString(); - } - } -} diff --git a/AlphaFS/Filesystem/Path Class/Path.Constants.cs b/AlphaFS/Filesystem/Path Class/Path.Constants.cs deleted file mode 100644 index c5af3d9..0000000 --- a/AlphaFS/Filesystem/Path Class/Path.Constants.cs +++ /dev/null @@ -1,124 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System.Diagnostics.CodeAnalysis; -using System.Globalization; - -namespace Alphaleonis.Win32.Filesystem -{ - public static partial class Path - { - /// AltDirectorySeparatorChar = '/' Provides a platform-specific alternate character used to separate directory levels in a path string that reflects a hierarchical file system organization. - public static readonly char AltDirectorySeparatorChar = System.IO.Path.AltDirectorySeparatorChar; - - /// DirectorySeparatorChar = '\' Provides a platform-specific character used to separate directory levels in a path string that reflects a hierarchical file system organization. - public static readonly char DirectorySeparatorChar = System.IO.Path.DirectorySeparatorChar; - - /// PathSeparator = ';' A platform-specific separator character used to separate path strings in environment variables. - public static readonly char PathSeparator = System.IO.Path.PathSeparator; - - /// VolumeSeparatorChar = ':' Provides a platform-specific Volume Separator character. - public static readonly char VolumeSeparatorChar = System.IO.Path.VolumeSeparatorChar; - - /// [AlphaFS] AltDirectorySeparatorChar = "/" Provides a platform-specific alternate string used to separate directory levels in a path string that reflects a hierarchical file system organization. - public static readonly string AltDirectorySeparator = AltDirectorySeparatorChar.ToString(CultureInfo.CurrentCulture); - - /// [AlphaFS] CurrentDirectoryPrefix = '.' Provides a current directory character. - public const char CurrentDirectoryPrefixChar = '.'; - - /// [AlphaFS] CurrentDirectoryPrefix = "." Provides a current directory string. - public static readonly string CurrentDirectoryPrefix = CurrentDirectoryPrefixChar.ToString(CultureInfo.CurrentCulture); - - /// [AlphaFS] DirectorySeparator = "\" Provides a platform-specific string used to separate directory levels in a path string that reflects a hierarchical file system organization. - public static readonly string DirectorySeparator = DirectorySeparatorChar.ToString(CultureInfo.CurrentCulture); - - /// [AlphaFS] ExtensionSeparatorChar = '.' Provides an Extension Separator character. - public const char ExtensionSeparatorChar = '.'; - - /// [AlphaFS] ParentDirectoryPrefix = ".." Provides a parent directory string. - public const string ParentDirectoryPrefix = ".."; - - /// [AlphaFS] StreamSeparator = ':' Provides a platform-specific Stream-name character. - public static readonly char StreamSeparatorChar = System.IO.Path.VolumeSeparatorChar; - - /// [AlphaFS] StreamSeparator = ':' Provides a platform-specific Stream-name character. - public static readonly string StreamSeparator = StreamSeparatorChar.ToString(CultureInfo.CurrentCulture); - - /// [AlphaFS] StreamDataLabel = ':$DATA' Provides a platform-specific Stream :$DATA label. - public static readonly string StreamDataLabel = ":$DATA"; - - /// [AlphaFS] StringTerminatorChar = '\0' String Terminator Suffix. - public const char StringTerminatorChar = '\0'; - - /// [AlphaFS] Characters to trim from the SearchPattern. - internal static readonly char[] TrimEndChars = { (char) 0x9, (char) 0xA, (char) 0xB, (char) 0xC, (char) 0xD, (char) 0x20, (char) 0x85, (char) 0xA0 }; - - /// [AlphaFS] VolumeSeparatorChar = ':' Provides a platform-specific Volume Separator character. - public static readonly string VolumeSeparator = VolumeSeparatorChar.ToString(CultureInfo.CurrentCulture); - - /// [AlphaFS] WildcardStarMatchAll = "*" Provides a match-all-items string. - public const string WildcardStarMatchAll = "*"; - - /// [AlphaFS] WildcardStarMatchAll = '*' Provides a match-all-items character. - public const char WildcardStarMatchAllChar = '*'; - - /// [AlphaFS] WildcardQuestion = "?" Provides a replace-item string. - public const string WildcardQuestion = "?"; - - /// [AlphaFS] WildcardQuestion = '?' Provides a replace-item string. - public const char WildcardQuestionChar = '?'; - - /// [AlphaFS] UncPrefix = "\\" Provides standard Windows Path UNC prefix. - public static readonly string UncPrefix = string.Format(CultureInfo.CurrentCulture, "{0}{0}", DirectorySeparatorChar); - - /// [AlphaFS] LongPathPrefix = "\\?\" Provides standard Windows Long Path prefix. - public static readonly string LongPathPrefix = string.Format(CultureInfo.CurrentCulture, "{0}{1}{2}", UncPrefix, WildcardQuestion, DirectorySeparatorChar); - - /// [AlphaFS] LongPathUncPrefix = "\\?\UNC\" Provides standard Windows Long Path UNC prefix. - public static readonly string LongPathUncPrefix = string.Format(CultureInfo.CurrentCulture, "{0}{1}{2}", LongPathPrefix, "UNC", DirectorySeparatorChar); - - /// [AlphaFS] GlobalRootPrefix = "\\?\GLOBALROOT\" Provides standard Windows Volume prefix. - public static readonly string GlobalRootPrefix = string.Format(CultureInfo.CurrentCulture, "{0}{1}{2}", LongPathPrefix, "GLOBALROOT", DirectorySeparatorChar); - - /// [AlphaFS] MsDosNamespacePrefix = "\\.\" Provides standard logical drive prefix. - public static readonly string LogicalDrivePrefix = string.Format(CultureInfo.CurrentCulture, "{0}{0}.{0}", DirectorySeparatorChar); - - /// [AlphaFS] SubstitutePrefix = "\??\" Provides a SUBST.EXE Path prefix to a Logical Drive. - public static readonly string SubstitutePrefix = string.Format(CultureInfo.CurrentCulture, "{0}{1}{2}{0}", DirectorySeparatorChar, WildcardQuestion, WildcardQuestion); - - /// [AlphaFS] VolumePrefix = "\\?\Volume" Provides standard Windows Volume prefix. - public static readonly string VolumePrefix = string.Format(CultureInfo.CurrentCulture, "{0}{1}", LongPathPrefix, "Volume"); - - /// [AlphaFS] DevicePrefix = "\Device\" Provides standard Windows Device prefix. - public static readonly string DevicePrefix = string.Format(CultureInfo.CurrentCulture, "{0}{1}{0}", DirectorySeparatorChar, "Device"); - - /// [AlphaFS] DosDeviceLanmanPrefix = "\Device\LanmanRedirector\" Provides a MS-Dos Lanman Redirector Path UNC prefix to a network share. - [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Lanman")] - public static readonly string DosDeviceLanmanPrefix = string.Format(CultureInfo.CurrentCulture, "{0}{1}{2}", DevicePrefix, "LanmanRedirector", DirectorySeparatorChar); - - /// [AlphaFS] DosDeviceMupPrefix = "\Device\Mup\" Provides a MS-Dos Mup Redirector Path UNC prefix to a network share. - [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Mup")] - public static readonly string DosDeviceMupPrefix = string.Format(CultureInfo.CurrentCulture, "{0}{1}{2}", DevicePrefix, "Mup", DirectorySeparatorChar); - - /// [AlphaFS] DosDeviceUncPrefix = "\??\UNC\" Provides a SUBST.EXE Path UNC prefix to a network share. - public static readonly string DosDeviceUncPrefix = string.Format(CultureInfo.CurrentCulture, "{0}{1}{2}", SubstitutePrefix, "UNC", DirectorySeparatorChar); - } -} \ No newline at end of file diff --git a/AlphaFS/Filesystem/Path Class/Path.GetComponents.cs b/AlphaFS/Filesystem/Path Class/Path.GetComponents.cs deleted file mode 100644 index bad3fc6..0000000 --- a/AlphaFS/Filesystem/Path Class/Path.GetComponents.cs +++ /dev/null @@ -1,368 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System; -using System.Diagnostics.CodeAnalysis; -using System.Security; - -namespace Alphaleonis.Win32.Filesystem -{ - public static partial class Path - { - #region ChangeExtension (.NET) - - /// Changes the extension of a path string. - /// The modified path information. - /// - /// The path information to modify. The path cannot contain any of the characters defined in . - /// The new extension (with or without a leading period). Specify to remove an existing extension from path. - [SecurityCritical] - public static string ChangeExtension(string path, string extension) - { - return System.IO.Path.ChangeExtension(path, extension); - } - - #endregion // ChangeExtension (.NET) - - #region GetDirectoryName - - #region .NET - - /// Returns the directory information for the specified path string. - /// - /// Directory information for , or if denotes a root directory or is - /// . - /// Returns if does not contain directory information. - /// - /// - /// The path of a file or directory. - [SecurityCritical] - public static string GetDirectoryName(string path) - { - return GetDirectoryName(path, true); - } - - #endregion // .NET - - #region AlphaFS - - /// [AlphaFS] Returns the directory information for the specified path string. - /// - /// Directory information for , or if denotes a root directory or is - /// . Returns if does not contain directory information. - /// - /// - /// The path of a file or directory. - /// will check for invalid path characters. - [SecurityCritical] - public static string GetDirectoryName(string path, bool checkInvalidPathChars) - { - if (path != null) - { - int rootLength = GetRootLength(path, checkInvalidPathChars); - if (path.Length > rootLength) - { - int length = path.Length; - if (length == rootLength) - return null; - - while (length > rootLength && path[--length] != DirectorySeparatorChar && path[length] != AltDirectorySeparatorChar) { } - - return path.Substring(0, length).Replace(AltDirectorySeparatorChar, DirectorySeparatorChar); - } - } - - return null; - } - - #endregion // AlphaFS - - #endregion // GetDirectoryName - - #region GetDirectoryNameWithoutRoot - - #region AlphaFS - - /// [AlphaFS] Returns the directory information for the specified path string without the root information, for example: "C:\Windows\system32" returns: "Windows". - /// The without the file name part and without the root information (if any), or if is or if denotes a root (such as "\", "C:", or * "\\server\share"). - /// The path. - [SecurityCritical] - public static string GetDirectoryNameWithoutRoot(string path) - { - return GetDirectoryNameWithoutRootTransacted(null, path); - } - - /// [AlphaFS] Returns the directory information for the specified path string without the root information, for example: "C:\Windows\system32" returns: "Windows". - /// The without the file name part and without the root information (if any), or if is or if denotes a root (such as "\", "C:", or * "\\server\share"). - /// The transaction. - /// The path. - [SecurityCritical] - public static string GetDirectoryNameWithoutRootTransacted(KernelTransaction transaction, string path) - { - if (path == null) - return null; - - DirectoryInfo di = Directory.GetParentCore(transaction, path, PathFormat.RelativePath); - return di != null && di.Parent != null ? di.Name : null; - } - - #endregion // AlphaFS - - #endregion // GetDirectoryNameWithoutRoot - - #region GetExtension - - #region .NET - - /// Returns the extension of the specified path string. - /// - /// The extension of the specified path (including the period "."), or null, or . - /// If is null, this method returns null. - /// If does not have extension information, - /// this method returns . - /// - /// - /// - /// The path string from which to get the extension. The path cannot contain any of the characters defined in . - [SecurityCritical] - public static string GetExtension(string path) - { - return GetExtension(path, !Utils.IsNullOrWhiteSpace(path)); - } - - #endregion // .NET - - #region AlphaFS - - /// Returns the extension of the specified path string. - /// - /// The extension of the specified path (including the period "."), or null, or . - /// If is null, this method returns null. - /// If does not have extension information, - /// this method returns . - /// - /// - /// The path string from which to get the extension. The path cannot contain any of the characters defined in . - /// will check for invalid path characters. - [SecurityCritical] - public static string GetExtension(string path, bool checkInvalidPathChars) - { - if (path == null) - return null; - - if (checkInvalidPathChars) - CheckInvalidPathChars(path, false, true); - - int length = path.Length; - int index = length; - while (--index >= 0) - { - char ch = path[index]; - if (ch == ExtensionSeparatorChar) - return index != length - 1 ? path.Substring(index, length - index) : string.Empty; - - if (IsDVsc(ch, null)) - break; - } - - return string.Empty; - } - - #endregion // AlphaFS - - #endregion // GetExtension - - #region GetFileName - - #region .NET - - /// Returns the file name and extension of the specified path string. - /// - /// The characters after the last directory character in . If the last character of is a - /// directory or volume separator character, this method returns string.Empty. If path is null, this method returns null. - /// - /// - /// The path string from which to obtain the file name and extension. The path cannot contain any of the characters defined in . - [SecurityCritical] - public static string GetFileName(string path) - { - return GetFileName(path, true); - } - - #endregion // .NET - - #region AlphaFS - - /// [AlphaFS] Returns the file name and extension of the specified path string. - /// - /// The characters after the last directory character in . If the last character of is a - /// directory or volume separator character, this method returns string.Empty. If path is null, this method returns null. - /// - /// - /// The path string from which to obtain the file name and extension. - /// will check for invalid path characters. - [SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "0", Justification = "Utils.IsNullOrWhiteSpace validates arguments.")] - public static string GetFileName(string path, bool checkInvalidPathChars) - { - if (Utils.IsNullOrWhiteSpace(path)) - return path; - - if (checkInvalidPathChars) - CheckInvalidPathChars(path, false, true); - - int length = path.Length; - int index = length; - while (--index >= 0) - { - char ch = path[index]; - if (IsDVsc(ch, null)) - return path.Substring(index + 1, length - index - 1); - } - - return path; - } - - #endregion // AlphaFS - - #endregion // GetFileName - - #region GetFileNameWithoutExtension - - #region .NET - - /// Returns the file name of the specified path string without the extension. - /// The string returned by GetFileName, minus the last period (.) and all characters following it. - /// - /// The path of the file. The path cannot contain any of the characters defined in . - [SecurityCritical] - public static string GetFileNameWithoutExtension(string path) - { - return GetFileNameWithoutExtension(path, true); - } - - #endregion // .NET - - #region AlphaFS - - /// [AlphaFS] Returns the file name of the specified path string without the extension. - /// The string returned by GetFileName, minus the last period (.) and all characters following it. - /// - /// The path of the file. The path cannot contain any of the characters defined in . - /// will check for invalid path characters. - [SecurityCritical] - public static string GetFileNameWithoutExtension(string path, bool checkInvalidPathChars) - { - path = GetFileName(path, checkInvalidPathChars); - - if (path != null) - { - int i; - return (i = path.LastIndexOf('.')) == -1 ? path : path.Substring(0, i); - } - - return null; - } - - #endregion // AlphaFS - - #endregion // GetFileNameWithoutExtension - - #region GetInvalidFileNameChars (.NET) - - /// Gets an array containing the characters that are not allowed in file names. - /// An array containing the characters that are not allowed in file names. - [SecurityCritical] - public static char[] GetInvalidFileNameChars() - { - return System.IO.Path.GetInvalidFileNameChars(); - } - - #endregion // GetInvalidFileNameChars (.NET) - - #region GetInvalidPathChars (.NET) - - /// Gets an array containing the characters that are not allowed in path names. - /// An array containing the characters that are not allowed in path names. - [SecurityCritical] - public static char[] GetInvalidPathChars() - { - return System.IO.Path.GetInvalidPathChars(); - } - - #endregion // GetInvalidPathChars (.NET) - - #region GetPathRoot - - #region .NET - - /// Gets the root directory information of the specified path. - /// - /// Returns the root directory of , such as "C:\", - /// or if is , - /// or an empty string if does not contain root directory information. - /// - /// - /// The path from which to obtain root directory information. - [SecurityCritical] - public static string GetPathRoot(string path) - { - return GetPathRoot(path, true); - } - - #endregion // .NET - - /// [AlphaFS] Gets the root directory information of the specified path. - /// - /// Returns the root directory of , such as "C:\", - /// or if is , - /// or an empty string if does not contain root directory information. - /// - /// - /// The path from which to obtain root directory information. - /// will check for invalid path characters. - [SecurityCritical] - public static string GetPathRoot(string path, bool checkInvalidPathChars) - { - if (path == null) - return null; - - if (path.Trim().Length == 0) - throw new ArgumentException(Resources.Path_Is_Zero_Length_Or_Only_White_Space, "path"); - - string pathRp = GetRegularPathCore(path, checkInvalidPathChars ? GetFullPathOptions.CheckInvalidPathChars : GetFullPathOptions.None, false); - - var rootLengthPath = GetRootLength(path, false); - var rootLengthPathRp = GetRootLength(pathRp, false); - - // Check if pathRp is an empty string. - if (rootLengthPathRp == 0) - if (path.StartsWith(LongPathPrefix, StringComparison.OrdinalIgnoreCase)) - return GetLongPathCore(path.Substring(0, rootLengthPath), GetFullPathOptions.None); - - if (path.StartsWith(LongPathUncPrefix, StringComparison.OrdinalIgnoreCase)) - return GetLongPathCore(pathRp.Substring(0, rootLengthPathRp), GetFullPathOptions.None); - - return path.Substring(0, rootLengthPath); - } - - #endregion // GetPathRoot - } -} diff --git a/AlphaFS/Filesystem/Path Class/Path.GetFinalPathNameByHandle.cs b/AlphaFS/Filesystem/Path Class/Path.GetFinalPathNameByHandle.cs deleted file mode 100644 index 77206eb..0000000 --- a/AlphaFS/Filesystem/Path Class/Path.GetFinalPathNameByHandle.cs +++ /dev/null @@ -1,166 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using Alphaleonis.Win32.Security; -using Microsoft.Win32.SafeHandles; -using System; -using System.Diagnostics; -using System.Diagnostics.CodeAnalysis; -using System.Linq; -using System.Runtime.InteropServices; -using System.Security; -using System.Text; - -namespace Alphaleonis.Win32.Filesystem -{ - public static partial class Path - { - /// [AlphaFS] Retrieves the final path for the specified file, formatted as . - /// The final path as a string. - /// - /// A final path is the path that is returned when a path is fully resolved. For example, for a symbolic link named "C:\tmp\mydir" that - /// points to "D:\yourdir", the final path would be "D:\yourdir". - /// - /// Then handle to a instance. - [SecurityCritical] - public static string GetFinalPathNameByHandle(SafeFileHandle handle) - { - return GetFinalPathNameByHandleCore(handle, FinalPathFormats.None); - } - - /// [AlphaFS] Retrieves the final path for the specified file, formatted as . - /// The final path as a string. - /// - /// A final path is the path that is returned when a path is fully resolved. For example, for a symbolic link named "C:\tmp\mydir" that - /// points to "D:\yourdir", the final path would be "D:\yourdir". - /// - /// Then handle to a instance. - /// The final path, formatted as - [SecurityCritical] - public static string GetFinalPathNameByHandle(SafeFileHandle handle, FinalPathFormats finalPath) - { - return GetFinalPathNameByHandleCore(handle, finalPath); - } - - /// Retrieves the final path for the specified file, formatted as . - /// The final path as a string. - /// - /// A final path is the path that is returned when a path is fully resolved. For example, for a symbolic link named "C:\tmp\mydir" that - /// points to "D:\yourdir", the final path would be "D:\yourdir". The string that is returned by this function uses the - /// syntax. - /// - /// Then handle to a instance. - /// The final path, formatted as - [SuppressMessage("Microsoft.Usage", "CA1806:DoNotIgnoreMethodResults", MessageId = "Alphaleonis.Win32.Filesystem.NativeMethods.GetMappedFileName(System.IntPtr,Alphaleonis.Win32.SafeGlobalMemoryBufferHandle,System.Text.StringBuilder,System.UInt32)")] - [SuppressMessage("Microsoft.Usage", "CA1806:DoNotIgnoreMethodResults", MessageId = "Alphaleonis.Win32.Filesystem.NativeMethods.GetMappedFileName(System.IntPtr,Alphaleonis.Win32.Security.SafeLocalMemoryBufferHandle,System.Text.StringBuilder,System.UInt32)")] - [SecurityCritical] - internal static string GetFinalPathNameByHandleCore(SafeFileHandle handle, FinalPathFormats finalPath) - { - NativeMethods.IsValidHandle(handle); - - var buffer = new StringBuilder(NativeMethods.MaxPathUnicode); - - using (new NativeMethods.ChangeErrorMode(NativeMethods.ErrorMode.FailCriticalErrors)) - { - if (NativeMethods.IsAtLeastWindowsVista) - { - if (NativeMethods.GetFinalPathNameByHandle(handle, buffer, (uint) buffer.Capacity, finalPath) == Win32Errors.ERROR_SUCCESS) - NativeError.ThrowException(Marshal.GetLastWin32Error()); - - return buffer.ToString(); - } - } - - #region Older OperatingSystem - - // Obtaining a File Name From a File Handle - // http://msdn.microsoft.com/en-us/library/aa366789%28VS.85%29.aspx - - // Be careful when using GetFileSizeEx to check the size of hFile handle of an unknown "File" type object. - // This is more towards returning a filename from a file handle. If the handle is a named pipe handle it seems to hang the thread. - // Check for: FileTypes.DiskFile - - // Can't map a 0 byte file. - long fileSizeHi; - if (!NativeMethods.GetFileSizeEx(handle, out fileSizeHi)) - if (fileSizeHi == 0) - return string.Empty; - - - // PAGE_READONLY - // Allows views to be mapped for read-only or copy-on-write access. An attempt to write to a specific region results in an access violation. - // The file handle that the hFile parameter specifies must be created with the GENERIC_READ access right. - // PageReadOnly = 0x02, - using (SafeFileHandle handle2 = NativeMethods.CreateFileMapping(handle, null, 2, 0, 1, null)) - { - NativeMethods.IsValidHandle(handle, Marshal.GetLastWin32Error()); - - // FILE_MAP_READ - // Read = 4 - using (SafeLocalMemoryBufferHandle pMem = NativeMethods.MapViewOfFile(handle2, 4, 0, 0, (UIntPtr)1)) - { - if (NativeMethods.IsValidHandle(pMem, Marshal.GetLastWin32Error())) - if (NativeMethods.GetMappedFileName(Process.GetCurrentProcess().Handle, pMem, buffer, (uint)buffer.Capacity)) - NativeMethods.UnmapViewOfFile(pMem); - } - } - - - // Default output from GetMappedFileName(): "\Device\HarddiskVolumeX\path\filename.ext" - string dosDevice = buffer.Length > 0 ? buffer.ToString() : string.Empty; - - // Select output format. - switch (finalPath) - { - // As-is: "\Device\HarddiskVolumeX\path\filename.ext" - case FinalPathFormats.VolumeNameNT: - return dosDevice; - - // To: "\path\filename.ext" - case FinalPathFormats.VolumeNameNone: - return DosDeviceToDosPath(dosDevice, string.Empty); - - // To: "\\?\Volume{GUID}\path\filename.ext" - case FinalPathFormats.VolumeNameGuid: - string dosPath = DosDeviceToDosPath(dosDevice, null); - if (!Utils.IsNullOrWhiteSpace(dosPath)) - { - string path = GetSuffixedDirectoryNameWithoutRootCore(null, dosPath); - string driveLetter = RemoveTrailingDirectorySeparator(GetPathRoot(dosPath, false), false); - string file = GetFileName(dosPath, true); - - if (!Utils.IsNullOrWhiteSpace(file)) - foreach (string drive in Directory.EnumerateLogicalDrivesCore(false, false).Select(drv => drv.Name).Where(drv => driveLetter.Equals(RemoveTrailingDirectorySeparator(drv, false), StringComparison.OrdinalIgnoreCase))) - return CombineCore(false, Volume.GetUniqueVolumeNameForPath(drive), path, file); - } - - break; - } - - // To: "\\?\C:\path\filename.ext" - return Utils.IsNullOrWhiteSpace(dosDevice) - ? string.Empty - : LongPathPrefix + DosDeviceToDosPath(dosDevice, null); - - #endregion // Older OperatingSystem - } - } -} diff --git a/AlphaFS/Filesystem/Path Class/Path.GetFullPath.cs b/AlphaFS/Filesystem/Path Class/Path.GetFullPath.cs deleted file mode 100644 index a9202d5..0000000 --- a/AlphaFS/Filesystem/Path Class/Path.GetFullPath.cs +++ /dev/null @@ -1,305 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System; -using System.Security; -using System.Text; - -namespace Alphaleonis.Win32.Filesystem -{ - public static partial class Path - { - #region .NET - - /// Returns the absolute path for the specified path string. - /// The fully qualified location of path, such as "C:\MyFile.txt". - /// - /// GetFullPathName merges the name of the current drive and directory with a specified file name to determine the full path and file name of a specified file. - /// It also calculates the address of the file name portion of the full path and file name. - ///   - /// This method does not verify that the resulting path and file name are valid, or that they see an existing file on the associated volume. - /// The .NET Framework does not support direct access to physical disks through paths that are device names, such as "\\.\PHYSICALDRIVE0". - ///   - /// MSDN: Multithreaded applications and shared library code should not use the GetFullPathName function and - /// should avoid using relative path names. The current directory state written by the SetCurrentDirectory function is stored as a global variable in each process, - /// therefore multithreaded applications cannot reliably use this value without possible data corruption from other threads that may also be reading or setting this value. - /// This limitation also applies to the SetCurrentDirectory and GetCurrentDirectory functions. The exception being when the application is guaranteed to be running in a single thread, - /// for example parsing file names from the command line argument string in the main thread prior to creating any additional threads. - /// Using relative path names in multithreaded applications or shared library code can yield unpredictable results and is not supported. - /// - /// - /// - /// - /// The file or directory for which to obtain absolute path information. - [SecurityCritical] - public static string GetFullPath(string path) - { - return GetFullPathTackleCore(null, path, GetFullPathOptions.None); - } - - #endregion // .NET - - - #region AlphaFS - - /// Returns the absolute path for the specified path string. - /// The fully qualified location of path, such as "C:\MyFile.txt". - /// - /// GetFullPathName merges the name of the current drive and directory with a specified file name to determine the full path and file name of a specified file. - /// It also calculates the address of the file name portion of the full path and file name. - ///   - /// This method does not verify that the resulting path and file name are valid, or that they see an existing file on the associated volume. - /// The .NET Framework does not support direct access to physical disks through paths that are device names, such as "\\.\PHYSICALDRIVE0". - ///   - /// MSDN: Multithreaded applications and shared library code should not use the GetFullPathName function and - /// should avoid using relative path names. The current directory state written by the SetCurrentDirectory function is stored as a global variable in each process, - /// therefore multithreaded applications cannot reliably use this value without possible data corruption from other threads that may also be reading or setting this value. - /// This limitation also applies to the SetCurrentDirectory and GetCurrentDirectory functions. The exception being when the application is guaranteed to be running in a single thread, - /// for example parsing file names from the command line argument string in the main thread prior to creating any additional threads. - /// Using relative path names in multithreaded applications or shared library code can yield unpredictable results and is not supported. - /// - /// - /// - /// - /// The file or directory for which to obtain absolute path information. - /// Options for controlling the full path retrieval. - [SecurityCritical] - public static string GetFullPath(string path, GetFullPathOptions options) - { - return GetFullPathTackleCore(null, path, options); - } - - - /// [AlphaFS] Returns the absolute path for the specified path string. - /// The fully qualified location of path, such as "C:\MyFile.txt". - /// - /// GetFullPathName merges the name of the current drive and directory with a specified file name to determine the full path and file name of a specified file. - /// It also calculates the address of the file name portion of the full path and file name. - ///   - /// This method does not verify that the resulting path and file name are valid, or that they see an existing file on the associated volume. - /// The .NET Framework does not support direct access to physical disks through paths that are device names, such as "\\.\PHYSICALDRIVE0". - ///   - /// MSDN: Multithreaded applications and shared library code should not use the GetFullPathName function and - /// should avoid using relative path names. The current directory state written by the SetCurrentDirectory function is stored as a global variable in each process, - /// therefore multithreaded applications cannot reliably use this value without possible data corruption from other threads that may also be reading or setting this value. - /// This limitation also applies to the SetCurrentDirectory and GetCurrentDirectory functions. The exception being when the application is guaranteed to be running in a single thread, - /// for example parsing file names from the command line argument string in the main thread prior to creating any additional threads. - /// Using relative path names in multithreaded applications or shared library code can yield unpredictable results and is not supported. - /// - /// - /// - /// - /// The transaction. - /// The file or directory for which to obtain absolute path information. - [SecurityCritical] - public static string GetFullPathTransacted(KernelTransaction transaction, string path) - { - return GetFullPathTackleCore(transaction, path, GetFullPathOptions.None); - } - - /// [AlphaFS] Returns the absolute path for the specified path string. - /// The fully qualified location of path, such as "C:\MyFile.txt". - /// - /// GetFullPathName merges the name of the current drive and directory with a specified file name to determine the full path and file name of a specified file. - /// It also calculates the address of the file name portion of the full path and file name. - ///   - /// This method does not verify that the resulting path and file name are valid, or that they see an existing file on the associated volume. - /// The .NET Framework does not support direct access to physical disks through paths that are device names, such as "\\.\PHYSICALDRIVE0". - ///   - /// MSDN: Multithreaded applications and shared library code should not use the GetFullPathName function and - /// should avoid using relative path names. The current directory state written by the SetCurrentDirectory function is stored as a global variable in each process, - /// therefore multithreaded applications cannot reliably use this value without possible data corruption from other threads that may also be reading or setting this value. - /// This limitation also applies to the SetCurrentDirectory and GetCurrentDirectory functions. The exception being when the application is guaranteed to be running in a single thread, - /// for example parsing file names from the command line argument string in the main thread prior to creating any additional threads. - /// Using relative path names in multithreaded applications or shared library code can yield unpredictable results and is not supported. - /// - /// - /// - /// - /// The transaction. - /// The file or directory for which to obtain absolute path information. - /// Options for controlling the full path retrieval. - [SecurityCritical] - public static string GetFullPathTransacted(KernelTransaction transaction, string path, GetFullPathOptions options) - { - return GetFullPathTackleCore(transaction, path, options); - } - - #endregion // AlphaFS - - #region Internal Methods - - /// Retrieves the absolute path for the specified string. - /// The fully qualified location of , such as "C:\MyFile.txt". - /// - /// GetFullPathName merges the name of the current drive and directory with a specified file name to determine the full path and file name of a specified file. - /// It also calculates the address of the file name portion of the full path and file name. - ///   - /// This method does not verify that the resulting path and file name are valid, or that they see an existing file on the associated volume. - /// The .NET Framework does not support direct access to physical disks through paths that are device names, such as "\\.\PHYSICALDRIVE0". - ///   - /// MSDN: Multithreaded applications and shared library code should not use the GetFullPathName function and - /// should avoid using relative path names. The current directory state written by the SetCurrentDirectory function is stored as a global variable in each process, - /// therefore multithreaded applications cannot reliably use this value without possible data corruption from other threads that may also be reading or setting this value. - /// This limitation also applies to the SetCurrentDirectory and GetCurrentDirectory functions. The exception being when the application is guaranteed to be running in a single thread, - /// for example parsing file names from the command line argument string in the main thread prior to creating any additional threads. - /// Using relative path names in multithreaded applications or shared library code can yield unpredictable results and is not supported. - /// - /// - /// - /// The transaction. - /// The file or directory for which to obtain absolute path information. - /// Options for controlling the full path retrieval. - [SecurityCritical] - internal static string GetFullPathCore(KernelTransaction transaction, string path, GetFullPathOptions options) - { - if (path != null) - if (path.StartsWith(GlobalRootPrefix, StringComparison.OrdinalIgnoreCase) ||path.StartsWith(VolumePrefix, StringComparison.OrdinalIgnoreCase)) - return path; - - if (options != GetFullPathOptions.None) - { - if ((options & GetFullPathOptions.CheckInvalidPathChars) != 0) - { - var checkAdditional = (options & GetFullPathOptions.CheckAdditional) != 0; - - CheckInvalidPathChars(path, checkAdditional, false); - - // Prevent duplicate checks. - options &= ~GetFullPathOptions.CheckInvalidPathChars; - - if (checkAdditional) - options &= ~GetFullPathOptions.CheckAdditional; - } - - // Do not remove trailing directory separator when path points to a drive like: "C:\" - // Doing so makes path point to the current directory. - - if (path == null || path.Length <= 3 || (!path.StartsWith(LongPathPrefix, StringComparison.OrdinalIgnoreCase) && path[1] != VolumeSeparatorChar)) - options &= ~GetFullPathOptions.RemoveTrailingDirectorySeparator; - } - - - var pathLp = GetLongPathCore(path, options); - uint bufferSize = NativeMethods.MaxPathUnicode; - - using (new NativeMethods.ChangeErrorMode(NativeMethods.ErrorMode.FailCriticalErrors)) - { - startGetFullPathName: - - var buffer = new StringBuilder((int)bufferSize); - var returnLength = (transaction == null || !NativeMethods.IsAtLeastWindowsVista - - // GetFullPathName() / GetFullPathNameTransacted() - // In the ANSI version of this function, the name is limited to MAX_PATH characters. - // To extend this limit to 32,767 wide characters, call the Unicode version of the function and prepend "\\?\" to the path. - // 2013-04-15: MSDN confirms LongPath usage. - - ? NativeMethods.GetFullPathName(pathLp, bufferSize, buffer, IntPtr.Zero) - : NativeMethods.GetFullPathNameTransacted(pathLp, bufferSize, buffer, IntPtr.Zero, transaction.SafeHandle)); - - if (returnLength != Win32Errors.NO_ERROR) - { - if (returnLength > bufferSize) - { - bufferSize = returnLength; - goto startGetFullPathName; - } - } - else - { - if ((options & GetFullPathOptions.ContinueOnNonExist) != 0) - return null; - - NativeError.ThrowException(pathLp); - } - - - var finalFullPath = (options & GetFullPathOptions.AsLongPath) != 0 - ? GetLongPathCore(buffer.ToString(), GetFullPathOptions.None) - : GetRegularPathCore(buffer.ToString(), GetFullPathOptions.None, false); - - - finalFullPath = NormalizePath(finalFullPath, options); - - - if ((options & GetFullPathOptions.KeepDotOrSpace) != 0) - { - if (pathLp.EndsWith(".", StringComparison.OrdinalIgnoreCase)) - finalFullPath += "."; - - var lastChar = pathLp[pathLp.Length - 1]; - if (char.IsWhiteSpace(lastChar)) - finalFullPath += lastChar; - } - - - return finalFullPath; - } - } - - private static string GetFullPathTackleCore(KernelTransaction transaction, string path, GetFullPathOptions options) - { - if (path != null) - { - if (path.StartsWith(GlobalRootPrefix, StringComparison.OrdinalIgnoreCase) || path.StartsWith(VolumePrefix, StringComparison.OrdinalIgnoreCase)) - return path; - - CheckInvalidUncPath(path); - } - - CheckSupportedPathFormat(path, true, true); - - return GetFullPathCore(transaction, path, options); - } - - /// Applies the to - /// with applied . - /// - /// - /// - /// - private static string ApplyFullPathOptions(string path, GetFullPathOptions options) - { - if ((options & GetFullPathOptions.TrimEnd) != 0) - if ((options & GetFullPathOptions.KeepDotOrSpace) == 0) - path = path.TrimEnd(); - - if ((options & GetFullPathOptions.AddTrailingDirectorySeparator) != 0) - path = AddTrailingDirectorySeparator(path, false); - - if ((options & GetFullPathOptions.RemoveTrailingDirectorySeparator) != 0) - path = RemoveTrailingDirectorySeparator(path, false); - - if ((options & GetFullPathOptions.CheckInvalidPathChars) != 0) - CheckInvalidPathChars(path, (options & GetFullPathOptions.CheckAdditional) != 0, false); - - - // Trim leading whitespace. - if ((options & GetFullPathOptions.KeepDotOrSpace) == 0) - path = path.TrimStart(); - - return path; - } - - #endregion // Internal Methods - } -} diff --git a/AlphaFS/Filesystem/Path Class/Path.SeparatorManipulation.cs b/AlphaFS/Filesystem/Path Class/Path.SeparatorManipulation.cs deleted file mode 100644 index 7140a10..0000000 --- a/AlphaFS/Filesystem/Path Class/Path.SeparatorManipulation.cs +++ /dev/null @@ -1,202 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System; -using System.Globalization; -using System.Security; - -namespace Alphaleonis.Win32.Filesystem -{ - public static partial class Path - { - #region AddTrailingDirectorySeparator - - /// [AlphaFS] Adds a trailing character to the string, when absent. - /// A text string with a trailing character. The function returns when is . - /// A text string to which the trailing is to be added, when absent. - [SecurityCritical] - public static string AddTrailingDirectorySeparator(string path) - { - return AddTrailingDirectorySeparator(path, false); - } - - /// [AlphaFS] Adds a trailing or character to the string, when absent. - /// A text string with a trailing or character. The function returns when is . - /// A text string to which the trailing or is to be added, when absent. - /// If the character will be added instead. - [SecurityCritical] - public static string AddTrailingDirectorySeparator(string path, bool addAlternateSeparator) - { - return path == null - ? null - : (addAlternateSeparator - ? ((!path.EndsWith(AltDirectorySeparatorChar.ToString(CultureInfo.CurrentCulture), StringComparison.OrdinalIgnoreCase)) - ? path + AltDirectorySeparatorChar - : path) - - : ((!path.EndsWith(DirectorySeparatorChar.ToString(CultureInfo.CurrentCulture), StringComparison.OrdinalIgnoreCase)) - ? path + DirectorySeparatorChar - : path)); - } - - #endregion // AddTrailingDirectorySeparator - - #region RemoveTrailingDirectorySeparator - - /// [AlphaFS] Removes the trailing character from the string, when present. - /// A text string where the trailing character has been removed. The function returns when is . - /// A text string from which the trailing is to be removed, when present. - [SecurityCritical] - public static string RemoveTrailingDirectorySeparator(string path) - { - return path == null ? null : path.TrimEnd(DirectorySeparatorChar, AltDirectorySeparatorChar); - } - - /// [AlphaFS] Removes the trailing or character from the string, when present. - /// A text string where the trailing or character has been removed. The function returns when is . - /// A text string from which the trailing or is to be removed, when present. - /// If the trailing character will be removed instead. - [SecurityCritical] - public static string RemoveTrailingDirectorySeparator(string path, bool removeAlternateSeparator) - { - return path == null - ? null - : path.TrimEnd(removeAlternateSeparator ? AltDirectorySeparatorChar : DirectorySeparatorChar); - } - - #endregion // RemoveTrailingDirectorySeparator - - #region GetSuffixedDirectoryName - - /// [AlphaFS] Returns the directory information for the specified with a trailing character. - /// - /// The suffixed directory information for the specified with a trailing character, - /// or if is or if denotes a root (such as "\", "C:", or * "\\server\share"). - /// - /// This method is similar to calling Path.GetDirectoryName() + Path.AddTrailingDirectorySeparator() - /// The path. - [SecurityCritical] - public static string GetSuffixedDirectoryName(string path) - { - return GetSuffixedDirectoryNameCore(null, path); - } - - /// [AlphaFS] Returns the directory information for the specified with a trailing character. - /// - /// The suffixed directory information for the specified with a trailing character, - /// or if is or if denotes a root (such as "\", "C:", or * "\\server\share"). - /// - /// This method is similar to calling Path.GetDirectoryName() + Path.AddTrailingDirectorySeparator() - /// The transaction. - /// The path. - [SecurityCritical] - public static string GetSuffixedDirectoryNameTransacted(KernelTransaction transaction, string path) - { - return GetSuffixedDirectoryNameCore(transaction, path); - } - - #endregion // GetSuffixedDirectoryName - - #region GetSuffixedDirectoryNameWithoutRoot - - /// [AlphaFS] Returns the directory information for the specified without the root and with a trailing character. - /// - /// The directory information for the specified without the root and with a trailing character, - /// or if is or if is . - /// - /// The path. - [SecurityCritical] - public static string GetSuffixedDirectoryNameWithoutRoot(string path) - { - return GetSuffixedDirectoryNameWithoutRootCore(null, path); - } - - /// [AlphaFS] Returns the directory information for the specified without the root and with a trailing character. - /// - /// The directory information for the specified without the root and with a trailing character, - /// or if is or if is . - /// - /// The transaction. - /// The path. - [SecurityCritical] - public static string GetSuffixedDirectoryNameWithoutRootTransacted(KernelTransaction transaction, string path) - { - return GetSuffixedDirectoryNameWithoutRootCore(transaction, path); - } - - #endregion // GetSuffixedDirectoryNameWithoutRoot - - #region Internal Methods - - /// Returns the directory information for the specified with a trailing character. - /// - /// The suffixed directory information for the specified with a trailing character, - /// or if is or if denotes a root (such as "\", "C:", or * "\\server\share"). - /// - /// This method is similar to calling Path.GetDirectoryName() + Path.AddTrailingDirectorySeparator() - /// The transaction. - /// The path. - [SecurityCritical] - private static string GetSuffixedDirectoryNameCore(KernelTransaction transaction, string path) - { - DirectoryInfo di = Directory.GetParentCore(transaction, path, PathFormat.RelativePath); - - return di != null && di.Parent != null && di.Name != null - ? AddTrailingDirectorySeparator(CombineCore(false, di.Parent.FullName, di.Name), false) - : null; - } - - /// Returns the directory information for the specified without the root and with a trailing character. - /// - /// The directory information for the specified without the root and with a trailing character, - /// or if is or if is . - /// - /// The transaction. - /// The path. - [SecurityCritical] - private static string GetSuffixedDirectoryNameWithoutRootCore(KernelTransaction transaction, string path) - { - DirectoryInfo di = Directory.GetParentCore(transaction, path, PathFormat.RelativePath); - - if (di == null || di.Parent == null) - return null; - - DirectoryInfo tmp = di; - string suffixedDirectoryNameWithoutRoot; - - do - { - suffixedDirectoryNameWithoutRoot = tmp.DisplayPath.Replace(di.Root.ToString(), string.Empty); - - if (tmp.Parent != null) - tmp = di.Parent.Parent; - - } while (tmp != null && tmp.Root.Parent != null && tmp.Parent != null && !Utils.IsNullOrWhiteSpace(tmp.Parent.ToString())); - - return Utils.IsNullOrWhiteSpace(suffixedDirectoryNameWithoutRoot) - ? null - : AddTrailingDirectorySeparator(suffixedDirectoryNameWithoutRoot.TrimStart(DirectorySeparatorChar), false); - // TrimStart() for network-drive, like: C$ - } - - #endregion // Internal Methods - } -} diff --git a/AlphaFS/Filesystem/Path Class/Path.ShortLongConversions.cs b/AlphaFS/Filesystem/Path Class/Path.ShortLongConversions.cs deleted file mode 100644 index 5209d0c..0000000 --- a/AlphaFS/Filesystem/Path Class/Path.ShortLongConversions.cs +++ /dev/null @@ -1,273 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System; -using System.Diagnostics.CodeAnalysis; -using System.Security; -using System.Text; - -namespace Alphaleonis.Win32.Filesystem -{ - public static partial class Path - { - #region GetLongPath - - /// Makes an extended long path from the specified by prefixing . - /// The prefixed with a , the minimum required full path is: "C:\". - /// This method does not verify that the resulting path and file name are valid, or that they see an existing file on the associated volume. - /// - /// - /// The path to the file or directory, this can also be an UNC path. - [SecurityCritical] - public static string GetLongPath(string path) - { - return GetLongPathCore(path, GetFullPathOptions.None); - } - - #endregion // GetLongPath - - #region GetLongFrom83ShortPath - - /// [AlphaFS] Converts the specified existing path to its regular long form. - /// An existing path to a folder or file. - /// The regular full path. - [SecurityCritical] - public static string GetLongFrom83ShortPath(string path) - { - return GetLongShort83PathCore(null, path, false); - } - - /// [AlphaFS] Converts the specified existing path to its regular long form. - /// The transaction. - /// An existing path to a folder or file. - /// The regular full path. - [SecurityCritical] - public static string GetLongFrom83ShortPathTransacted(KernelTransaction transaction, string path) - { - return GetLongShort83PathCore(transaction, path, false); - } - - #endregion // GetLongFrom83ShortPath - - #region GetRegularPath - - /// [AlphaFS] Gets the regular path from long prefixed one. i.e.: "\\?\C:\Temp\file.txt" to C:\Temp\file.txt" or: "\\?\UNC\Server\share\file.txt" to "\\Server\share\file.txt". - /// Regular form path string. - /// This method does not handle paths with volume names, eg. \\?\Volume{GUID}\Folder\file.txt. - /// The path. - [SecurityCritical] - public static string GetRegularPath(string path) - { - return GetRegularPathCore(path, GetFullPathOptions.CheckInvalidPathChars, false); - } - - #endregion // GetRegularPath - - #region GetShort83Path - - /// [AlphaFS] Retrieves the short path form of the specified path. - /// A path that has the 8.3 path form. - /// Will fail on NTFS volumes with disabled 8.3 name generation. - /// The path must actually exist to be able to get the short path name. - /// An existing path to a folder or file. - [SecurityCritical] - public static string GetShort83Path(string path) - { - return GetLongShort83PathCore(null, path, true); - } - - /// [AlphaFS] Retrieves the short path form of the specified path. - /// A path that has the 8.3 path form. - /// Will fail on NTFS volumes with disabled 8.3 name generation. - /// The path must actually exist to be able to get the short path name. - /// The transaction. - /// An existing path to a folder or file. - [SecurityCritical] - public static string GetShort83PathTransacted(KernelTransaction transaction, string path) - { - return GetLongShort83PathCore(transaction, path, true); - } - - #endregion // GetShort83Path - - #region IsLongPath - - /// [AlphaFS] Determines whether the specified path starts with a or . - /// if the specified path has a long path (UNC) prefix, otherwise. - /// The path to the file or directory. - [SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "0", Justification = "Utils.IsNullOrWhiteSpace validates arguments.")] - [SecurityCritical] - public static bool IsLongPath(string path) - { - return !Utils.IsNullOrWhiteSpace(path) && path.StartsWith(LongPathPrefix, StringComparison.OrdinalIgnoreCase); - } - - #endregion // IsLongPath - - #region Internals Methods - - /// Makes an extended long path from the specified by prefixing . - /// The prefixed with a , the minimum required full path is: "C:\". - /// This method does not verify that the resulting path and file name are valid, or that they see an existing file on the associated volume. - /// - /// - /// The path to the file or directory, this can also be an UNC path. - /// Options for controlling the full path retrieval. - [SecurityCritical] - internal static string GetLongPathCore(string path, GetFullPathOptions options) - { - if (path == null) - throw new ArgumentNullException("path"); - - if (path.Length == 0 || Utils.IsNullOrWhiteSpace(path)) - throw new ArgumentException(Resources.Path_Is_Zero_Length_Or_Only_White_Space, "path"); - - if (options != GetFullPathOptions.None) - path = ApplyFullPathOptions(path, options); - - // ".", "C:" - if (path.Length <= 2 || - path.StartsWith(LongPathPrefix, StringComparison.OrdinalIgnoreCase) || - path.StartsWith(LogicalDrivePrefix, StringComparison.OrdinalIgnoreCase)) - return path; - - if (path.StartsWith(UncPrefix, StringComparison.OrdinalIgnoreCase)) - return LongPathUncPrefix + path.Substring(UncPrefix.Length); - - // Don't use char.IsLetter() here as that can be misleading. - // The only valid drive letters are: a-z and A-Z. - char c = path[0]; - return IsPathRooted(path, false) && ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')) - ? LongPathPrefix + path - : path; - } - - /// Retrieves the short path form, or the regular long form of the specified . - /// If is , a path of the 8.3 form otherwise the regular long form. - /// - /// Will fail on NTFS volumes with disabled 8.3 name generation. - /// The path must actually exist to be able to get the short- or long path name. - /// - /// The transaction. - /// An existing path to a folder or file. - /// to retrieve the short path form, to retrieve the regular long form from the 8.3 . - [SecurityCritical] - private static string GetLongShort83PathCore(KernelTransaction transaction, string path, bool getShort) - { - string pathLp = GetFullPathCore(transaction, path, GetFullPathOptions.AsLongPath | GetFullPathOptions.FullCheck); - - var buffer = new StringBuilder(); - uint actualLength = getShort ? NativeMethods.GetShortPathName(pathLp, null, 0) : (uint) path.Length; - - while (actualLength > buffer.Capacity) - { - buffer = new StringBuilder((int)actualLength); - actualLength = getShort - - // GetShortPathName() - // In the ANSI version of this function, the name is limited to MAX_PATH characters. - // To extend this limit to 32,767 wide characters, call the Unicode version of the function and prepend "\\?\" to the path. - // 2014-01-29: MSDN confirms LongPath usage. - - ? NativeMethods.GetShortPathName(pathLp, buffer, (uint)buffer.Capacity) - : transaction == null || !NativeMethods.IsAtLeastWindowsVista - - // GetLongPathName() - // In the ANSI version of this function, the name is limited to MAX_PATH characters. - // To extend this limit to 32,767 wide characters, call the Unicode version of the function and prepend "\\?\" to the path. - // 2014-01-29: MSDN confirms LongPath usage. - - ? NativeMethods.GetLongPathName(pathLp, buffer, (uint)buffer.Capacity) - : NativeMethods.GetLongPathNameTransacted(pathLp, buffer, (uint)buffer.Capacity, transaction.SafeHandle); - - if (actualLength == Win32Errors.ERROR_SUCCESS) - NativeError.ThrowException(pathLp); - } - - return GetRegularPathCore(buffer.ToString(), GetFullPathOptions.None, false); - } - - /// Gets the regular path from a long path. - /// - /// Returns the regular form of a long . - /// For example: "\\?\C:\Temp\file.txt" to: "C:\Temp\file.txt", or: "\\?\UNC\Server\share\file.txt" to: "\\Server\share\file.txt". - /// - /// - /// MSDN: String.TrimEnd Method notes to Callers: http://msdn.microsoft.com/en-us/library/system.string.trimend%28v=vs.110%29.aspx - /// - /// - /// - /// The path. - /// Options for controlling the full path retrieval. - /// When , throws an . - [SecurityCritical] - internal static string GetRegularPathCore(string path, GetFullPathOptions options, bool allowEmpty) - { - if (path == null) - throw new ArgumentNullException("path"); - - if (!allowEmpty && (path.Length == 0 || Utils.IsNullOrWhiteSpace(path))) - throw new ArgumentException(Resources.Path_Is_Zero_Length_Or_Only_White_Space, "path"); - - if (options != GetFullPathOptions.None) - path = ApplyFullPathOptions(path, options); - - return path.StartsWith(GlobalRootPrefix, StringComparison.OrdinalIgnoreCase) - || path.StartsWith(VolumePrefix, StringComparison.OrdinalIgnoreCase) - || !path.StartsWith(LongPathPrefix, StringComparison.OrdinalIgnoreCase) - ? path - : (path.StartsWith(LongPathUncPrefix, StringComparison.OrdinalIgnoreCase) - ? UncPrefix + path.Substring(LongPathUncPrefix.Length) - : path.Substring(LongPathPrefix.Length)); - } - - /// Gets the path as a long full path. - /// The path as an extended length path. - /// - /// The transaction. - /// Full pathname of the source path to convert. - /// The path format to use. - /// Options for controlling the operation. Note that on .NET 3.5 the TrimEnd option has no effect. - internal static string GetExtendedLengthPathCore(KernelTransaction transaction, string sourcePath, PathFormat pathFormat, GetFullPathOptions options) - { - switch (pathFormat) - { - case PathFormat.LongFullPath: - return sourcePath; - - case PathFormat.FullPath: - return GetLongPathCore(sourcePath, GetFullPathOptions.None); - - case PathFormat.RelativePath: -#if NET35 - // .NET 3.5 the TrimEnd option has no effect. - options = options & ~GetFullPathOptions.TrimEnd; -#endif - return GetFullPathCore(transaction, sourcePath, GetFullPathOptions.AsLongPath | options); - - default: - throw new ArgumentException("Invalid value for " + typeof(PathFormat).Name + ": " + pathFormat); - } - } - - #endregion // Internals Methods - } -} diff --git a/AlphaFS/Filesystem/Path Class/Path.Temporary.cs b/AlphaFS/Filesystem/Path Class/Path.Temporary.cs deleted file mode 100644 index 552de97..0000000 --- a/AlphaFS/Filesystem/Path Class/Path.Temporary.cs +++ /dev/null @@ -1,77 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System.Diagnostics.CodeAnalysis; -using System.Security; - -namespace Alphaleonis.Win32.Filesystem -{ - public static partial class Path - { - #region GetRandomFileName (.NET) - - /// Returns a random folder name or file name. - /// A random folder name or file name. - [SuppressMessage("Microsoft.Design", "CA1024:UsePropertiesWhereAppropriate")] - [SecurityCritical] - public static string GetRandomFileName() - { - return System.IO.Path.GetRandomFileName(); - } - - #endregion // GetRandomFileName (.NET) - - #region GetTempFileName (.NET) - - /// Creates a uniquely named, zero-byte temporary file on disk and returns the full path of that file. - /// The full path of the temporary file. - [SuppressMessage("Microsoft.Design", "CA1024:UsePropertiesWhereAppropriate")] - [SecurityCritical] - public static string GetTempFileName() - { - return System.IO.Path.GetTempFileName(); - } - - #endregion // GetTempFileName (.NET) - - #region GetTempPath (.NET) - - /// Returns the path of the current user's temporary folder. - /// The path to the temporary folder, ending with a backslash. - [SecurityCritical] - public static string GetTempPath() - { - return System.IO.Path.GetTempPath(); - } - - /// [AlphaFS] Returns the path of the current user's temporary folder. - /// The folder name to append to the temporary folder. - /// The path to the temporary folder, combined with . - [SecurityCritical] - public static string GetTempPath(string combinePath) - { - string tempPath = GetTempPath(); - return !Utils.IsNullOrWhiteSpace(combinePath) ? CombineCore(false, tempPath, combinePath) : tempPath; - } - - #endregion // GetTempPath (.NET) - } -} diff --git a/AlphaFS/Filesystem/Path Class/Path.UncPaths.cs b/AlphaFS/Filesystem/Path Class/Path.UncPaths.cs deleted file mode 100644 index 6575c65..0000000 --- a/AlphaFS/Filesystem/Path Class/Path.UncPaths.cs +++ /dev/null @@ -1,234 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using Alphaleonis.Win32.Network; -using System; -using System.Globalization; -using System.IO; -using System.Net.NetworkInformation; -using System.Security; - -namespace Alphaleonis.Win32.Filesystem -{ - public static partial class Path - { - #region GetMappedConnectionName - - /// [AlphaFS] Gets the connection name of the locally mapped drive. - /// The server and share as: \\servername\sharename. - /// - /// - /// - /// - /// The local path with drive name. - [SecurityCritical] - public static string GetMappedConnectionName(string path) - { - return Host.GetRemoteNameInfoCore(path, true).lpConnectionName; - } - - #endregion // GetMappedConnectionName - - #region GetMappedUncName - - /// [AlphaFS] Gets the network share name from the locally mapped path. - /// The network share connection name of . - /// - /// - /// - /// - /// The local path with drive name. - [SecurityCritical] - public static string GetMappedUncName(string path) - { - return Host.GetRemoteNameInfoCore(path, true).lpUniversalName; - } - - #endregion // GetMappedUncName - - #region IsUncPath - - /// [AlphaFS] Determines if a path string is a valid Universal Naming Convention (UNC) path. - /// if the specified path is a Universal Naming Convention (UNC) path, otherwise. - /// The path to check. - [SecurityCritical] - public static bool IsUncPath(string path) - { - return IsUncPathCore(path, false, true); - } - - /// [AlphaFS] Determines if a path string is a valid Universal Naming Convention (UNC) path, optionally skip invalid path character check. - /// if the specified path is a Universal Naming Convention (UNC) path, otherwise. - /// The path to check. - /// will check for invalid path characters. - [SecurityCritical] - public static bool IsUncPath(string path, bool checkInvalidPathChars) - { - return IsUncPathCore(path, false, checkInvalidPathChars); - } - - #endregion // IsUncPath - - #region LocalToUnc - - /// [AlphaFS] Converts a local path to a network share path. - /// A Local path, e.g.: "C:\Windows" will be returned as: "\\MachineName\C$\Windows". - /// If a logical drive points to a network share path, the share path will be returned instead. - /// - /// On successful conversion a UNC path is returned. - /// If the conversion fails, is returned. - /// If is an empty string or , is returned. - /// - /// - /// - /// - /// A local path, e.g.: "C:\Windows". - [SecurityCritical] - public static string LocalToUnc(string localPath) - { - return LocalToUncCore(localPath, false, false, false); - } - - /// [AlphaFS] Converts a local path to a network share path, optionally returning it in a long path format. - /// A Local path, e.g.: "C:\Windows" will be returned as: "\\MachineName\C$\Windows". - /// If a logical drive points to a network share path, the share path will be returned instead. - /// - /// On successful conversion a UNC path is returned. - /// If the conversion fails, is returned. - /// If is an empty string or , is returned. - /// - /// - /// - /// - /// A local path, e.g.: "C:\Windows". - /// returns the path in long path (Unicode) format, when returns the path as a regular path. - [SecurityCritical] - public static string LocalToUnc(string localPath, bool asLongPath) - { - return LocalToUncCore(localPath, asLongPath, false, false); - } - - /// [AlphaFS] Converts a local path to a network share path, optionally returning it in a long path format and the ability to add or remove a trailing backslash. - /// A Local path, e.g.: "C:\Windows" will be returned as: "\\MachineName\C$\Windows". - /// If a logical drive points to a network share path, the share path will be returned instead. - /// - /// On successful conversion a UNC path is returned. - /// If the conversion fails, is returned. - /// If is an empty string or , is returned. - /// - /// - /// - /// - /// A local path, e.g.: "C:\Windows". - /// returns the path in long path (Unicode) format, when returns the path as a regular path. - /// adds a trailing character to , when absent. - /// removes the trailing character from , when present. - [SecurityCritical] - public static string LocalToUnc(string localPath, bool asLongPath, bool addTrailingDirectorySeparator, bool removeTrailingDirectorySeparator) - { - return LocalToUncCore(localPath, asLongPath, addTrailingDirectorySeparator, removeTrailingDirectorySeparator); - } - - #endregion // LocalToUnc - - #region Internal Methods - - /// [AlphaFS] Determines if a path string is a valid Universal Naming Convention (UNC) path, optionally skip invalid path character check. - /// if the specified path is a Universal Naming Convention (UNC) path, otherwise. - /// The path to check. - /// When indicates that is already in regular path format. - /// will check for invalid path characters. - [SecurityCritical] - internal static bool IsUncPathCore(string path, bool isRegularPath, bool checkInvalidPathChars) - { - if (!isRegularPath) - path = GetRegularPathCore(path, checkInvalidPathChars ? GetFullPathOptions.CheckInvalidPathChars : 0, false); - - else if (checkInvalidPathChars) - CheckInvalidPathChars(path, false, false); - - Uri uri; - return Uri.TryCreate(path, UriKind.Absolute, out uri) && uri.IsUnc; - } - - /// Converts a local path to a network share path. - /// A Local path, e.g.: "C:\Windows" will be returned as: "\\MachineName\C$\Windows". - /// If a logical drive points to a network share path, the share path will be returned instead. - /// - /// On successful conversion a UNC path is returned. - /// If the conversion fails, is returned. - /// If is an empty string or , is returned. - /// - /// - /// - /// - /// A local path, e.g.: "C:\Windows". - /// returns the path in long path (Unicode) format, when returns the path as a regular path. - /// adds a trailing character to , when absent. - /// removes the trailing character from , when present. - [SecurityCritical] - internal static string LocalToUncCore(string localPath, bool asLongPath, bool addTrailingDirectorySeparator, bool removeTrailingDirectorySeparator) - { - if (Utils.IsNullOrWhiteSpace(localPath)) - return null; - - localPath = GetRegularPathCore(localPath, GetFullPathOptions.CheckInvalidPathChars, false); - - - if (!IsUncPathCore(localPath, true, false)) - { - if (localPath[0] == CurrentDirectoryPrefixChar || !IsPathRooted(localPath, false)) - localPath = GetFullPathCore(null, localPath, GetFullPathOptions.None); - - string drive = GetPathRoot(localPath, false); - - if (Utils.IsNullOrWhiteSpace(drive)) - return localPath; - - Network.NativeMethods.REMOTE_NAME_INFO unc = Host.GetRemoteNameInfoCore(drive, true); - - if (!Utils.IsNullOrWhiteSpace(unc.lpConnectionName)) - // Only leave trailing backslash if "localPath" also ends with backslash. - return localPath.EndsWith(DirectorySeparator, StringComparison.OrdinalIgnoreCase) - ? AddTrailingDirectorySeparator(unc.lpConnectionName, false) - : RemoveTrailingDirectorySeparator(unc.lpConnectionName, false); - - // Split: localDrive[0] = "C", localDrive[1] = "\Windows" - string[] localDrive = localPath.Split(VolumeSeparatorChar); - - // Return: "\\MachineName\C$\Windows" - localPath = string.Format(CultureInfo.CurrentCulture, "{0}{1}{2}${3}", Host.GetUncName(), DirectorySeparatorChar, localDrive[0], localDrive[1]); - } - - - // Only leave trailing backslash if "localPath" also ends with backslash. - addTrailingDirectorySeparator = addTrailingDirectorySeparator || - (localPath.EndsWith(DirectorySeparator, StringComparison.OrdinalIgnoreCase) && !removeTrailingDirectorySeparator); - - var options = (addTrailingDirectorySeparator ? GetFullPathOptions.AddTrailingDirectorySeparator : 0) | - (removeTrailingDirectorySeparator ? GetFullPathOptions.RemoveTrailingDirectorySeparator : 0); - - return asLongPath ? GetLongPathCore(localPath, options) : localPath; - } - - #endregion // Internal Methods - } -} diff --git a/AlphaFS/Filesystem/Path Class/Path.ValidationAndChecks.cs b/AlphaFS/Filesystem/Path Class/Path.ValidationAndChecks.cs deleted file mode 100644 index 2d426e9..0000000 --- a/AlphaFS/Filesystem/Path Class/Path.ValidationAndChecks.cs +++ /dev/null @@ -1,614 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System; -using System.Diagnostics.CodeAnalysis; -using System.Globalization; -using System.IO; -using System.Linq; -using System.Security; -using System.Text; - -namespace Alphaleonis.Win32.Filesystem -{ - public static partial class Path - { - #region HasExtension (.NET) - - /// Determines whether a path includes a file name extension. - /// if the characters that follow the last directory separator (\\ or /) or volume separator (:) in the path include a period (.) followed by one or more characters; otherwise, . - /// - /// The path to search for an extension. The path cannot contain any of the characters defined in . - [SecurityCritical] - public static bool HasExtension(string path) - { - return System.IO.Path.HasExtension(path); - } - - #endregion // HasExtension (.NET) - - #region IsPathRooted - - #region .NET - - /// Gets a value indicating whether the specified path string contains absolute or relative path information. - /// if contains a root; otherwise, . - /// - /// The IsPathRooted method returns if the first character is a directory separator character such as - /// , or if the path starts with a drive letter and colon (). - /// For example, it returns true for path strings such as "\\MyDir\\MyFile.txt", "C:\\MyDir", or "C:MyDir". - /// It returns for path strings such as "MyDir". - /// - /// This method does not verify that the path or file name exists. - /// - /// - /// The path to test. The path cannot contain any of the characters defined in . - [SecurityCritical] - public static bool IsPathRooted(string path) - { - return IsPathRooted(path, true); - } - - #endregion // .NET - - /// [AlphaFS] Gets a value indicating whether the specified path string contains absolute or relative path information. - /// if contains a root; otherwise, . - /// - /// The IsPathRooted method returns true if the first character is a directory separator character such as - /// , or if the path starts with a drive letter and colon (). - /// For example, it returns for path strings such as "\\MyDir\\MyFile.txt", "C:\\MyDir", or "C:MyDir". - /// It returns for path strings such as "MyDir". - /// - /// This method does not verify that the path or file name exists. - /// - /// - /// The path to test. The path cannot contain any of the characters defined in . - /// will check for invalid path characters. - [SecurityCritical] - public static bool IsPathRooted(string path, bool checkInvalidPathChars) - { - if (path != null) - { - if (checkInvalidPathChars) - CheckInvalidPathChars(path, false, true); - - var length = path.Length; - - if ((length >= 1 && IsDVsc(path[0], false)) || - (length >= 2 && IsDVsc(path[1], true))) - return true; - } - - return false; - } - - #endregion // IsPathRooted - - #region IsValidName - - /// [AlphaFS] Check if file or folder name has any invalid characters. - /// - /// File or folder name. - /// if name contains any invalid characters. Otherwise - public static bool IsValidName(string name) - { - if (name == null) - throw new ArgumentNullException("name"); - - return name.IndexOfAny(GetInvalidFileNameChars()) < 0; - } - - #endregion // IsValidName - - #region Internal Methods - - internal static void CheckInvalidUncPath(string path) - { - // Tackle: Path.GetFullPath(@"\\\\.txt"), but exclude "." which is the current directory. - if (!IsLongPath(path) && path.StartsWith(UncPrefix, StringComparison.OrdinalIgnoreCase)) - { - var tackle = GetRegularPathCore(path, GetFullPathOptions.None, false).TrimStart(DirectorySeparatorChar, AltDirectorySeparatorChar); - - if (tackle.Length >= 2 && tackle[0] == CurrentDirectoryPrefixChar) - throw new ArgumentException(Resources.UNC_Path_Should_Match_Format); - } - } - - /// Checks that the given path format is supported. - /// - /// - /// A path to the file or directory. - /// Checks that the path contains only valid path-characters. - /// . - internal static void CheckSupportedPathFormat(string path, bool checkInvalidPathChars, bool checkAdditional) - { - if (Utils.IsNullOrWhiteSpace(path) || path.Length < 2) - return; - - var regularPath = GetRegularPathCore(path, GetFullPathOptions.None, false); - - var isArgumentException = (regularPath[0] == VolumeSeparatorChar); - var throwException = (isArgumentException || (regularPath.Length >= 2 && regularPath.IndexOf(VolumeSeparatorChar, 2) != -1)); - - if (throwException) - { - if (isArgumentException) - throw new ArgumentException(string.Format(CultureInfo.CurrentCulture, Resources.Unsupported_Path_Format, regularPath)); - - throw new NotSupportedException(string.Format(CultureInfo.CurrentCulture, Resources.Unsupported_Path_Format, regularPath)); - } - - if (checkInvalidPathChars) - CheckInvalidPathChars(path, checkAdditional, false); - } - - /// Checks that the path contains only valid path-characters. - /// - /// - /// A path to the file or directory. - /// also checks for ? and * characters. - /// When , throws an . - [SecurityCritical] - private static void CheckInvalidPathChars(string path, bool checkAdditional, bool allowEmpty) - { - if (path == null) - throw new ArgumentNullException("path"); - - if (!allowEmpty && (path.Length == 0 || Utils.IsNullOrWhiteSpace(path))) - throw new ArgumentException(Resources.Path_Is_Zero_Length_Or_Only_White_Space, "path"); - - // Will fail on a Unicode path. - var pathRp = GetRegularPathCore(path, GetFullPathOptions.None, allowEmpty); - - - // Handle "Path.GlobalRootPrefix" and "Path.VolumePrefix". - if (pathRp.StartsWith(GlobalRootPrefix, StringComparison.OrdinalIgnoreCase)) - pathRp = pathRp.Replace(GlobalRootPrefix, string.Empty); - - if (pathRp.StartsWith(VolumePrefix, StringComparison.OrdinalIgnoreCase)) - pathRp = pathRp.Replace(VolumePrefix, string.Empty); - - - for (int index = 0, l = pathRp.Length; index < l; ++index) - { - int num = pathRp[index]; - switch (num) - { - case 34: // " (quote) - case 60: // < (less than) - case 62: // > (greater than) - case 124: // | (pipe) - throw new ArgumentException(string.Format(CultureInfo.CurrentCulture, Resources.Illegal_Characters_In_Path, (char) num), pathRp); - - default: - // 32: space - if (num >= 32 && (!checkAdditional || num != WildcardQuestionChar && num != WildcardStarMatchAllChar)) - continue; - - goto case 34; - } - } - } - - /// Tranlates DosDevicePath, Volume GUID. For example: "\Device\HarddiskVolumeX\path\filename.ext" can translate to: "\path\filename.ext" or: "\\?\Volume{GUID}\path\filename.ext". - /// A translated dos path. - /// A DosDevicePath, for example: \Device\HarddiskVolumeX\path\filename.ext. - /// Alternate path/device text, usually string.Empty or . - [SuppressMessage("Microsoft.Design", "CA1031:DoNotCatchGeneralExceptionTypes")] - [SecurityCritical] - private static string DosDeviceToDosPath(string dosDevice, string deviceReplacement) - { - if (Utils.IsNullOrWhiteSpace(dosDevice)) - return string.Empty; - - foreach (var drive in Directory.EnumerateLogicalDrivesCore(false, false).Select(drv => drv.Name)) - { - try - { - var path = RemoveTrailingDirectorySeparator(drive, false); - foreach (var devNt in Volume.QueryDosDevice(path).Where(dosDevice.StartsWith)) - return dosDevice.Replace(devNt, deviceReplacement ?? path); - } - catch - { - } - } - return string.Empty; - } - - [SecurityCritical] - internal static int GetRootLength(string path, bool checkInvalidPathChars) - { - if (checkInvalidPathChars) - CheckInvalidPathChars(path, false, false); - - var index = 0; - var length = path.Length; - - if (length >= 1 && IsDVsc(path[0], false)) - { - index = 1; - if (length >= 2 && IsDVsc(path[1], false)) - { - index = 2; - var num = 2; - - while (index < length && (!IsDVsc(path[index], false) || --num > 0)) - ++index; - } - } - else if (length >= 2 && IsDVsc(path[1], true)) - { - index = 2; - if (length >= 3 && IsDVsc(path[2], false)) - ++index; - } - - return index; - } - - /// Check if is a directory- and/or volume-separator character. - /// if is a separator character. - /// The character to check. - /// - /// If , checks for all separator characters: , - /// and - /// If , only checks for: and - /// If only checks for: - /// - [SecurityCritical] - internal static bool IsDVsc(char c, bool? checkSeparatorChar) - { - return checkSeparatorChar == null - - // Check for all separator characters. - ? c == DirectorySeparatorChar || c == AltDirectorySeparatorChar || c == VolumeSeparatorChar - - // Check for some separator characters. - : ((bool)checkSeparatorChar - ? c == VolumeSeparatorChar - : c == DirectorySeparatorChar || c == AltDirectorySeparatorChar); - } - - - [SuppressMessage("Microsoft.Maintainability", "CA1502:AvoidExcessiveComplexity")] - private static string NormalizePath(string path, GetFullPathOptions options) - { - var newBuffer = new StringBuilder(NativeMethods.MaxPathUnicode); - var index = 0; - uint numSpaces = 0; - uint numDots = 0; - var fixupDirectorySeparator = false; - - // Number of significant chars other than potentially suppressible - // dots and spaces since the last directory or volume separator char - uint numSigChars = 0; - - var lastSigChar = -1; // Index of last significant character. - - // Whether this segment of the path (not the complete path) started - // with a volume separator char. Reject "c:...". - var startedWithVolumeSeparator = false; - var firstSegment = true; - var lastDirectorySeparatorPos = 0; - - // LEGACY: This code is here for backwards compatibility reasons. It - // ensures that \\foo.cs\bar.cs stays \\foo.cs\bar.cs instead of being - // turned into \foo.cs\bar.cs. - if (path.Length > 0 && (path[0] == DirectorySeparatorChar || path[0] == AltDirectorySeparatorChar)) - { - newBuffer.Append('\\'); - index++; - lastSigChar = 0; - } - - // Normalize the string, stripping out redundant dots, spaces, and slashes. - while (index < path.Length) - { - var currentChar = path[index]; - - // We handle both directory separators and dots specially. For - // directory separators, we consume consecutive appearances. - // For dots, we consume all dots beyond the second in - // succession. All other characters are added as is. In - // addition we consume all spaces after the last other char - // in a directory name up until the directory separator. - - if (currentChar == DirectorySeparatorChar || currentChar == AltDirectorySeparatorChar) - { - // If we have a path like "123.../foo", remove the trailing dots. - // However, if we found "c:\temp\..\bar" or "c:\temp\...\bar", don't. - // Also remove trailing spaces from both files & directory names. - // This was agreed on with the OS team to fix undeletable directory - // names ending in spaces. - - // If we saw a '\' as the previous last significant character and - // are simply going to write out dots, suppress them. - // If we only contain dots and slashes though, only allow - // a string like [dot]+ [space]*. Ignore everything else. - // Legal: "\.. \", "\...\", "\. \" - // Illegal: "\.. .\", "\. .\", "\ .\" - - if (numSigChars == 0) - { - // Dot and space handling - if (numDots > 0) - { - // Look for ".[space]*" or "..[space]*" - var start = lastSigChar + 1; - if (path[start] != CurrentDirectoryPrefixChar) - throw new ArgumentException(path); - - // Only allow "[dot]+[space]*", and normalize the - // legal ones to "." or ".." - if (numDots >= 2) - { - // Reject "C:..." - if (startedWithVolumeSeparator && numDots > 2) - throw new ArgumentException(path); - - - if (path[start + 1] == CurrentDirectoryPrefixChar) - { - // Search for a space in the middle of the dots and throw - for (var i = start + 2; i < start + numDots; i++) - { - if (path[i] != CurrentDirectoryPrefixChar) - throw new ArgumentException(path); - } - - numDots = 2; - } - - else - { - if (numDots > 1) - throw new ArgumentException(path); - - numDots = 1; - } - } - - - if (numDots == 2) - newBuffer.Append(CurrentDirectoryPrefixChar); - - - newBuffer.Append(CurrentDirectoryPrefixChar); - fixupDirectorySeparator = false; - - // Continue in this case, potentially writing out '\'. - } - - - if (numSpaces > 0 && firstSegment) - { - // Handle strings like " \\server\share". - if (index + 1 < path.Length && (path[index + 1] == DirectorySeparatorChar || path[index + 1] == AltDirectorySeparatorChar)) - newBuffer.Append(DirectorySeparatorChar); - } - } - - - numDots = 0; - numSpaces = 0; // Suppress trailing spaces - - if (!fixupDirectorySeparator) - { - fixupDirectorySeparator = true; - newBuffer.Append(DirectorySeparatorChar); - } - - numSigChars = 0; - lastSigChar = index; - startedWithVolumeSeparator = false; - firstSegment = false; - - - var thisPos = newBuffer.Length - 1; - if (thisPos - lastDirectorySeparatorPos > NativeMethods.MaxDirectoryLength) - throw new PathTooLongException(path); - - lastDirectorySeparatorPos = thisPos; - } // if (Found directory separator) - - else if (currentChar == CurrentDirectoryPrefixChar) - { - // Reduce only multiple .'s only after slash to 2 dots. For - // instance a...b is a valid file name. - numDots++; - // Don't flush out non-terminal spaces here, because they may in - // the end not be significant. Turn "c:\ . .\foo" -> "c:\foo" - // which is the conclusion of removing trailing dots & spaces, - // as well as folding multiple '\' characters. - } - - else if (currentChar == ' ') - numSpaces++; - - else - { // Normal character logic - fixupDirectorySeparator = false; - - // To reject strings like "C:...\foo" and "C :\foo" - if (firstSegment && currentChar == VolumeSeparatorChar) - { - // Only accept "C:", not "c :" or ":" - // Get a drive letter or ' ' if index is 0. - var driveLetter = (index > 0) ? path[index - 1] : ' '; - - var validPath = (numDots == 0) && (numSigChars >= 1) && (driveLetter != ' '); - if (!validPath) - throw new ArgumentException(path); - - startedWithVolumeSeparator = true; - // We need special logic to make " c:" work, we should not fix paths like " foo::$DATA" - if (numSigChars > 1) - { - // Common case, simply do nothing - var spaceCount = 0; // How many spaces did we write out, numSpaces has already been reset. - while ((spaceCount < newBuffer.Length) && newBuffer[spaceCount] == ' ') - spaceCount++; - - if (numSigChars - spaceCount == 1) - { - //Safe to update stack ptr directly - newBuffer.Length = 0; - newBuffer.Append(driveLetter); - // Overwrite spaces, we need a special case to not break " foo" as a relative path. - } - } - - numSigChars = 0; - } - - else - numSigChars += 1 + numDots + numSpaces; - - // Copy any spaces & dots since the last significant character - // to here. Note we only counted the number of dots & spaces, - // and don't know what order they're in. Hence the copy. - if (numDots > 0 || numSpaces > 0) - { - var numCharsToCopy = lastSigChar >= 0 ? index - lastSigChar - 1 : index; - - if (numCharsToCopy > 0) - for (var i = 0; i < numCharsToCopy; i++) - newBuffer.Append(path[lastSigChar + 1 + i]); - - numDots = 0; - numSpaces = 0; - } - - newBuffer.Append(currentChar); - lastSigChar = index; - } - - index++; - } - - - if (newBuffer.Length - 1 - lastDirectorySeparatorPos > NativeMethods.MaxDirectoryLength) - throw new PathTooLongException(path); - - - // Drop any trailing dots and spaces from file & directory names, EXCEPT - // we MUST make sure that "C:\foo\.." is correctly handled. - // Also handle "C:\foo\." -> "C:\foo", while "C:\." -> "C:\" - if (numSigChars == 0) - { - if (numDots > 0) - { - // Look for ".[space]*" or "..[space]*" - var start = lastSigChar + 1; - - if (path[start] != CurrentDirectoryPrefixChar) - throw new ArgumentException(path); - - - // Only allow "[dot]+[space]*", and normalize the legal ones to "." or ".." - if (numDots >= 2) - { - // Reject "C:..." - if (startedWithVolumeSeparator && numDots > 2) - throw new ArgumentException(path); - - - if (path[start + 1] == CurrentDirectoryPrefixChar) - { - // Search for a space in the middle of the dots and throw - for (var i = start + 2; i < start + numDots; i++) - if (path[i] != CurrentDirectoryPrefixChar) - throw new ArgumentException(path); - - numDots = 2; - } - - else - { - if (numDots > 1) - throw new ArgumentException(path); - - numDots = 1; - } - } - - if (numDots == 2) - newBuffer.Append(CurrentDirectoryPrefixChar); - - newBuffer.Append(CurrentDirectoryPrefixChar); - } - } - - - // If we ended up eating all the characters, bail out. - if (newBuffer.Length == 0) - throw new ArgumentException(path); - - - // Disallow URL's here. Some of our other Win32 API calls will reject - // them later, so we might be better off rejecting them here. - // Note we've probably turned them into "file:\D:\foo.tmp" by now. - // But for compatibility, ensure that callers that aren't doing a - // full check aren't rejected here. - if ((options & GetFullPathOptions.FullCheck) != 0) - { - var newBufferString = newBuffer.ToString(); - if (newBufferString.StartsWith("http:", StringComparison.OrdinalIgnoreCase) || newBufferString.StartsWith("file:", StringComparison.OrdinalIgnoreCase)) - throw new ArgumentException(path); - } - - // Call the Win32 API to do the final canonicalization step. - var result = 1; - - - if (result != 0) - { - /* Throw an ArgumentException for paths like \\, \\server, \\server\ - This check can only be properly done after normalizing, so - \\foo\.. will be properly rejected. Also, reject \\?\GLOBALROOT\ - (an internal kernel path) because it provides aliases for drives. */ - if (newBuffer.Length > 1 && newBuffer[0] == '\\' && newBuffer[1] == '\\') - { - var startIndex = 2; - while (startIndex < result) - { - if (newBuffer[startIndex] == '\\') - { - startIndex++; - break; - } - - startIndex++; - } - - if (startIndex == result) - throw new ArgumentException(path); - } - } - - - return newBuffer.ToString(); - } - - #endregion // Internal Methods - } -} diff --git a/AlphaFS/Filesystem/Path Class/Path.cs b/AlphaFS/Filesystem/Path Class/Path.cs deleted file mode 100644 index 2adfe74..0000000 --- a/AlphaFS/Filesystem/Path Class/Path.cs +++ /dev/null @@ -1,29 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -namespace Alphaleonis.Win32.Filesystem -{ - /// Performs operations on String instances that contain file or directory path information. These operations are performed in a cross-platform manner. - public static partial class Path - { - // This file only exists for the documentation. - } -} \ No newline at end of file diff --git a/AlphaFS/Filesystem/Safe Handles/SafeCmConnectMachineHandle.cs b/AlphaFS/Filesystem/Safe Handles/SafeCmConnectMachineHandle.cs deleted file mode 100644 index 41b2b0f..0000000 --- a/AlphaFS/Filesystem/Safe Handles/SafeCmConnectMachineHandle.cs +++ /dev/null @@ -1,49 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System.Security; -using Microsoft.Win32.SafeHandles; - -namespace Alphaleonis.Win32.Filesystem -{ - /// Represents a wrapper class for a handle used by the CM_Connect_Machine/CM_Disconnect_Machine Win32 API functions. - [SecurityCritical] - internal sealed class SafeCmConnectMachineHandle : SafeHandleZeroOrMinusOneIsInvalid - { - #region Constructor - - /// Initializes a new instance of the class. - public SafeCmConnectMachineHandle() : base(true) - { - } - - #endregion // Constructor - - #region ReleaseHandle - - protected override bool ReleaseHandle() - { - return NativeMethods.CM_Disconnect_Machine(handle) == Win32Errors.NO_ERROR; - } - - #endregion // ReleaseHandle - } -} diff --git a/AlphaFS/Filesystem/Safe Handles/SafeEncryptedFileRawHandle.cs b/AlphaFS/Filesystem/Safe Handles/SafeEncryptedFileRawHandle.cs deleted file mode 100644 index 21fc80a..0000000 --- a/AlphaFS/Filesystem/Safe Handles/SafeEncryptedFileRawHandle.cs +++ /dev/null @@ -1,35 +0,0 @@ -using System; -using System.Security; -using Microsoft.Win32.SafeHandles; - -namespace Alphaleonis.Win32.Filesystem -{ - /// Represents a wrapper class for a handle used by the FindFirstFile/FindNextFile Win32 API functions. - [SecurityCritical] - internal sealed class SafeEncryptedFileRawHandle : SafeHandleZeroOrMinusOneIsInvalid - { - /// Constructor that prevents a default instance of this class from being created. - private SafeEncryptedFileRawHandle() - : base(true) - { - } - - /// Constructor that prevents a default instance of this class from being created. - /// The handle. - /// true to reliably release the handle during the finalization phase; false to prevent - /// reliable release (not recommended). - public SafeEncryptedFileRawHandle(IntPtr handle, bool ownsHandle) - : base(ownsHandle) - { - SetHandle(handle); - } - - /// When overridden in a derived class, executes the code required to free the handle. - /// if the handle is released successfully; otherwise, in the event of a catastrophic failure, . In this case, it generates a ReleaseHandleFailed Managed Debugging Assistant. - protected override bool ReleaseHandle() - { - NativeMethods.CloseEncryptedFileRaw(handle); - return true; - } - } -} diff --git a/AlphaFS/Filesystem/Safe Handles/SafeFindFileHandle.cs b/AlphaFS/Filesystem/Safe Handles/SafeFindFileHandle.cs deleted file mode 100644 index 33c3dee..0000000 --- a/AlphaFS/Filesystem/Safe Handles/SafeFindFileHandle.cs +++ /dev/null @@ -1,52 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System; -using System.Security; -using Microsoft.Win32.SafeHandles; - -namespace Alphaleonis.Win32.Filesystem -{ - /// Represents a wrapper class for a handle used by the FindFirstFile/FindNextFile Win32 API functions. - [SecurityCritical] - public sealed class SafeFindFileHandle : SafeHandleZeroOrMinusOneIsInvalid - { - /// Initializes a new instance of the class. - private SafeFindFileHandle() : base(true) - { - } - - /// Initializes a new instance of the class. - /// The handle. - /// [owns handle]. - public SafeFindFileHandle(IntPtr handle, bool callerHandle) : base(callerHandle) - { - SetHandle(handle); - } - - /// When overridden in a derived class, executes the code required to free the handle. - /// if the handle is released successfully; otherwise, in the event of a catastrophic failure, . In this case, it generates a ReleaseHandleFailed Managed Debugging Assistant. - protected override bool ReleaseHandle() - { - return NativeMethods.FindClose(handle); - } - } -} diff --git a/AlphaFS/Filesystem/Safe Handles/SafeFindVolumeHandle.cs b/AlphaFS/Filesystem/Safe Handles/SafeFindVolumeHandle.cs deleted file mode 100644 index 4020784..0000000 --- a/AlphaFS/Filesystem/Safe Handles/SafeFindVolumeHandle.cs +++ /dev/null @@ -1,54 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System; -using System.Security; -using Microsoft.Win32.SafeHandles; - -namespace Alphaleonis.Win32.Filesystem -{ - /// Represents a wrapper class for a handle used by the FindFirstVolume/FindNextVolume methods of the Win32 API. - [SecurityCritical] - public sealed class SafeFindVolumeHandle : SafeHandleZeroOrMinusOneIsInvalid - { - /// Initializes a new instance of the class. - private SafeFindVolumeHandle() - : base(true) - { - } - - /// Initializes a new instance of the class. - /// The handle. - /// [owns handle]. - public SafeFindVolumeHandle(IntPtr handle, bool callerHandle) : base(callerHandle) - { - SetHandle(handle); - } - - /// When overridden in a derived class, executes the code required to free the handle. - /// if the handle is released successfully; otherwise, in the event of a catastrophic failure, . In this case, it generates a ReleaseHandleFailed Managed Debugging Assistant. - /// - protected override bool ReleaseHandle() - { - return NativeMethods.FindVolumeClose(handle); - } - } -} diff --git a/AlphaFS/Filesystem/Safe Handles/SafeFindVolumeMountPointHandle.cs b/AlphaFS/Filesystem/Safe Handles/SafeFindVolumeMountPointHandle.cs deleted file mode 100644 index 2ecdf17..0000000 --- a/AlphaFS/Filesystem/Safe Handles/SafeFindVolumeMountPointHandle.cs +++ /dev/null @@ -1,54 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System; -using System.Security; -using Microsoft.Win32.SafeHandles; - -namespace Alphaleonis.Win32.Filesystem -{ - /// Represents a wrapper class for a handle used by the FindFirstVolumeMountPoint/FindVolumeMountPointClose methods of the Win32 API. - [SecurityCritical] - internal sealed class SafeFindVolumeMountPointHandle : SafeHandleZeroOrMinusOneIsInvalid - { - /// Initializes a new instance of the class. - private SafeFindVolumeMountPointHandle() - : base(true) - { - } - - /// Initializes a new instance of the class. - /// The handle. - /// [owns handle]. - public SafeFindVolumeMountPointHandle(IntPtr handle, bool callerHandle) : base(callerHandle) - { - SetHandle(handle); - } - - /// When overridden in a derived class, executes the code required to free the handle. - /// if the handle is released successfully; otherwise, in the event of a catastrophic failure, . - /// - protected override bool ReleaseHandle() - { - return NativeMethods.FindVolumeMountPointClose(handle); - } - } -} diff --git a/AlphaFS/Filesystem/Safe Handles/SafeKernelTransactionHandle.cs b/AlphaFS/Filesystem/Safe Handles/SafeKernelTransactionHandle.cs deleted file mode 100644 index 0a81af3..0000000 --- a/AlphaFS/Filesystem/Safe Handles/SafeKernelTransactionHandle.cs +++ /dev/null @@ -1,44 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using Microsoft.Win32.SafeHandles; -using System.Security; - -namespace Alphaleonis.Win32.Filesystem -{ - /// Provides a concrete implementation of SafeHandle supporting transactions. - internal class SafeKernelTransactionHandle : SafeHandleMinusOneIsInvalid - { - /// Initializes a new instance of the class. - public SafeKernelTransactionHandle() - : base(true) - { - } - - /// When overridden in a derived class, executes the code required to free the handle. - /// if the handle is released successfully; otherwise, in the event of a catastrophic failure, . In this case, it generates a ReleaseHandleFailed Managed Debugging Assistant. - [SecurityCritical] - protected override bool ReleaseHandle() - { - return NativeMethods.CloseHandle(handle); - } - } -} diff --git a/AlphaFS/Filesystem/Safe Handles/SafeLocalMemoryBufferHandle.cs b/AlphaFS/Filesystem/Safe Handles/SafeLocalMemoryBufferHandle.cs deleted file mode 100644 index 781050d..0000000 --- a/AlphaFS/Filesystem/Safe Handles/SafeLocalMemoryBufferHandle.cs +++ /dev/null @@ -1,104 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System; -using System.Runtime.InteropServices; -using Microsoft.Win32.SafeHandles; - -namespace Alphaleonis.Win32.Security -{ - /// An IntPtr wrapper which can be used as the result of a Marshal.AllocHGlobal operation. - /// Calls Marshal.FreeHGlobal when disposed or finalized. - /// - internal sealed class SafeLocalMemoryBufferHandle : SafeHandleZeroOrMinusOneIsInvalid - { - #region Constructors - - /// Creates new instance with zero IntPtr. - public SafeLocalMemoryBufferHandle() : base(true) - { - } - - #endregion // Constructors - - #region Methods - - #region CopyFrom - - /// Copies data from a one-dimensional, managed 8-bit unsigned integer array to the unmanaged memory pointer referenced by this instance. - /// The one-dimensional array to copy from. - /// The zero-based index into the array where Copy should start. - /// The number of array elements to copy. - public void CopyFrom(byte[] source, int startIndex, int length) - { - Marshal.Copy(source, startIndex, handle, length); - } - - #endregion // CopyFrom - - #region CopyTo - - public void CopyTo(byte[] destination, int destinationOffset, int length) - { - if (destination == null) - throw new ArgumentNullException("destination"); - - if (destinationOffset < 0) - throw new ArgumentOutOfRangeException("destinationOffset", Resources.Negative_Destination_Offset); - - if (length < 0) - throw new ArgumentOutOfRangeException("length", Resources.Negative_Length); - - if (destinationOffset + length > destination.Length) - throw new ArgumentException(Resources.Destination_Buffer_Not_Large_Enough); - - Marshal.Copy(handle, destination, destinationOffset, length); - } - - #endregion // CopyTo - - #region ToByteArray - - public byte[] ToByteArray(int startIndex, int length) - { - if (IsInvalid) - return null; - - byte[] arr = new byte[length]; - Marshal.Copy(handle, arr, startIndex, length); - return arr; - } - - #endregion // ToByteArray - - #region ReleaseHandle - - /// Called when object is disposed or finalized. - protected override bool ReleaseHandle() - { - return handle == IntPtr.Zero || NativeMethods.LocalFree(handle) == IntPtr.Zero; - } - - #endregion // ReleaseHandle - - #endregion // Methods - } -} diff --git a/AlphaFS/Filesystem/Safe Handles/SafeSetupDiClassDevsExHandle.cs b/AlphaFS/Filesystem/Safe Handles/SafeSetupDiClassDevsExHandle.cs deleted file mode 100644 index 2cab614..0000000 --- a/AlphaFS/Filesystem/Safe Handles/SafeSetupDiClassDevsExHandle.cs +++ /dev/null @@ -1,45 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using Microsoft.Win32.SafeHandles; -using System.Security; - -namespace Alphaleonis.Win32.Filesystem -{ - internal static partial class NativeMethods - { - /// Represents a wrapper class for a handle used by the SetupDiGetClassDevs/SetupDiDestroyDeviceInfoList Win32 API functions. - [SecurityCritical] - internal sealed class SafeSetupDiClassDevsExHandle : SafeHandleZeroOrMinusOneIsInvalid - { - /// Initializes a new instance of the class. - public SafeSetupDiClassDevsExHandle() - : base(true) - { - } - - protected override bool ReleaseHandle() - { - return SetupDiDestroyDeviceInfoList(handle); - } - } - } -} diff --git a/AlphaFS/Filesystem/Shell32.cs b/AlphaFS/Filesystem/Shell32.cs deleted file mode 100644 index 6824234..0000000 --- a/AlphaFS/Filesystem/Shell32.cs +++ /dev/null @@ -1,845 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System; -using System.Diagnostics.CodeAnalysis; -using System.Runtime.InteropServices; -using System.Security; -using System.Text; - -namespace Alphaleonis.Win32.Filesystem -{ - /// Provides access to a file system object, using Shell32. - public static class Shell32 - { - /// Provides information for the IQueryAssociations interface methods, used by Shell32. - [Flags] - public enum AssociationAttributes - { - /// None. - None = 0, - - /// Instructs not to map CLSID values to ProgID values. - InitNoRemapClsid = 1, - - /// Identifies the value of the supplied file parameter (3rd parameter of function GetFileAssociation()) as an executable file name. - /// If this flag is not set, the root key will be set to the ProgID associated with the .exe key instead of the executable file's ProgID. - InitByExeName = 2, - - /// Specifies that when an IQueryAssociation method does not find the requested value under the root key, it should attempt to retrieve the comparable value from the * subkey. - InitDefaultToStar = 4, - - /// Specifies that when an IQueryAssociation method does not find the requested value under the root key, it should attempt to retrieve the comparable value from the Folder subkey. - InitDefaultToFolder = 8, - - /// Specifies that only HKEY_CLASSES_ROOT should be searched, and that HKEY_CURRENT_USER should be ignored. - NoUserSettings = 16, - - /// Specifies that the return string should not be truncated. Instead, return an error value and the required size for the complete string. - NoTruncate = 32, - - /// - /// Instructs IQueryAssociations methods to verify that data is accurate. - /// This setting allows IQueryAssociations methods to read data from the user's hard disk for verification. - /// For example, they can check the friendly name in the registry against the one stored in the .exe file. - /// - /// Setting this flag typically reduces the efficiency of the method. - Verify = 64, - - /// - /// Instructs IQueryAssociations methods to ignore Rundll.exe and return information about its target. - /// Typically IQueryAssociations methods return information about the first .exe or .dll in a command string. - /// If a command uses Rundll.exe, setting this flag tells the method to ignore Rundll.exe and return information about its target. - /// - RemapRunDll = 128, - - /// Instructs IQueryAssociations methods not to fix errors in the registry, such as the friendly name of a function not matching the one found in the .exe file. - [SuppressMessage("Microsoft.Naming", "CA1702:CompoundWordsShouldBeCasedCorrectly", MessageId = "FixUps")] - NoFixUps = 256, - - /// Specifies that the BaseClass value should be ignored. - IgnoreBaseClass = 512, - - /// Specifies that the "Unknown" ProgID should be ignored; instead, fail. - /// Introduced in Windows 7. - InitIgnoreUnknown = 1024, - - /// Specifies that the supplied ProgID should be mapped using the system defaults, rather than the current user defaults. - /// Introduced in Windows 8. - InitFixedProgId = 2048, - - /// Specifies that the value is a protocol, and should be mapped using the current user defaults. - /// Introduced in Windows 8. - IsProtocol = 4096 - } - - - //internal enum AssociationData - //{ - // MsiDescriptor = 1, - // NoActivateHandler = 2 , - // QueryClassStore = 3, - // HasPerUserAssoc = 4, - // EditFlags = 5, - // Value = 6 - //} - - - //internal enum AssociationKey - //{ - // ShellExecClass = 1, - // App = 2, - // Class = 3, - // BaseClass = 4 - //} - - - /// ASSOCSTR enumeration - Used by the AssocQueryString() function to define the type of string that is to be returned. - public enum AssociationString - { - /// None. - None = 0, - - /// A command string associated with a Shell verb. - Command = 1, - - /// - /// An executable from a Shell verb command string. - /// For example, this string is found as the (Default) value for a subkey such as HKEY_CLASSES_ROOT\ApplicationName\shell\Open\command. - /// If the command uses Rundll.exe, set the flag in the attributes parameter of IQueryAssociations::GetString to retrieve the target executable. - /// - Executable = 2, - - /// The friendly name of a document type. - FriendlyDocName = 3, - - /// The friendly name of an executable file. - FriendlyAppName = 4, - - /// Ignore the information associated with the open subkey. - NoOpen = 5, - - /// Look under the ShellNew subkey. - ShellNewValue = 6, - - /// A template for DDE commands. - [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Dde")] - DdeCommand = 7, - - /// The DDE command to use to create a process. - [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Dde")] - DdeIfExec = 8, - - /// The application name in a DDE broadcast. - [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Dde")] - DdeApplication = 9, - - /// The topic name in a DDE broadcast. - [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Dde")] - DdeTopic = 10, - - /// - /// Corresponds to the InfoTip registry value. - /// Returns an info tip for an item, or list of properties in the form of an IPropertyDescriptionList from which to create an info tip, such as when hovering the cursor over a file name. - /// The list of properties can be parsed with PSGetPropertyDescriptionListFromString. - /// - InfoTip = 11, - - /// - /// Corresponds to the QuickTip registry value. This is the same as , except that it always returns a list of property names in the form of an IPropertyDescriptionList. - /// The difference between this value and is that this returns properties that are safe for any scenario that causes slow property retrieval, such as offline or slow networks. - /// Some of the properties returned from might not be appropriate for slow property retrieval scenarios. - /// The list of properties can be parsed with PSGetPropertyDescriptionListFromString. - /// - QuickTip = 12, - - /// - /// Corresponds to the TileInfo registry value. Contains a list of properties to be displayed for a particular file type in a Windows Explorer window that is in tile view. - /// This is the same as , but, like , it also returns a list of property names in the form of an IPropertyDescriptionList. - /// The list of properties can be parsed with PSGetPropertyDescriptionListFromString. - /// - TileInfo = 13, - - /// - /// Describes a general type of MIME file association, such as image and bmp, - /// so that applications can make general assumptions about a specific file type. - /// - ContentType = 14, - - /// - /// Returns the path to the icon resources to use by default for this association. - /// Positive numbers indicate an index into the dll's resource table, while negative numbers indicate a resource ID. - /// An example of the syntax for the resource is "c:\myfolder\myfile.dll,-1". - /// - DefaultIcon = 15, - - /// - /// For an object that has a Shell extension associated with it, - /// you can use this to retrieve the CLSID of that Shell extension object by passing a string representation - /// of the IID of the interface you want to retrieve as the pwszExtra parameter of IQueryAssociations::GetString. - /// For example, if you want to retrieve a handler that implements the IExtractImage interface, - /// you would specify "{BB2E617C-0920-11d1-9A0B-00C04FC2D6C1}", which is the IID of IExtractImage. - /// - ShellExtension = 16, - - /// - /// For a verb invoked through COM and the IDropTarget interface, you can use this flag to retrieve the IDropTarget object's CLSID. - /// This CLSID is registered in the DropTarget subkey. - /// The verb is specified in the supplied file parameter in the call to IQueryAssociations::GetString. - /// - DropTarget = 17, - - /// - /// For a verb invoked through COM and the IExecuteCommand interface, you can use this flag to retrieve the IExecuteCommand object's CLSID. - /// This CLSID is registered in the verb's command subkey as the DelegateExecute entry. - /// The verb is specified in the supplied file parameter in the call to IQueryAssociations::GetString. - /// - DelegateExecute = 18, - - /// (No description available on MSDN) - /// Introduced in Windows 8. - SupportedUriProtocols = 19, - - /// The maximum defined value, used for validation purposes. - Max = 20 - } - - - /// Shell32 FileAttributes structure, used to retrieve the different types of a file system object. - [SuppressMessage("Microsoft.Design", "CA1034:NestedTypesShouldNotBeVisible")] - [SuppressMessage("Microsoft.Design", "CA1008:EnumsShouldHaveZeroValue")] - [Flags] - public enum FileAttributes - { - /// 0x000000000 - Get file system object large icon. - /// The flag must also be set. - LargeIcon = 0, - - /// 0x000000001 - Get file system object small icon. - /// The flag must also be set. - SmallIcon = 1, - - /// 0x000000002 - Get file system object open icon. - /// A container object displays an open icon to indicate that the container is open. - /// The and/or flag must also be set. - OpenIcon = 2, - - /// 0x000000004 - Get file system object Shell-sized icon. - /// If this attribute is not specified the function sizes the icon according to the system metric values. - ShellIconSize = 4, - - /// 0x000000008 - Get file system object by its PIDL. - /// Indicate that the given file contains the address of an ITEMIDLIST structure rather than a path name. - [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Pidl")] - Pidl = 8, - - /// 0x000000010 - Indicates that the given file should not be accessed. Rather, it should act as if the given file exists and use the supplied attributes. - /// This flag cannot be combined with the , or attributes. - UseFileAttributes = 16, - - /// 0x000000020 - Apply the appropriate overlays to the file's icon. - /// The flag must also be set. - AddOverlays = 32, - - /// 0x000000040 - Returns the index of the overlay icon. - /// The value of the overlay index is returned in the upper eight bits of the iIcon member of the structure specified by psfi. - OverlayIndex = 64, - - /// 0x000000100 - Retrieve the handle to the icon that represents the file and the index of the icon within the system image list. The handle is copied to the member of the structure, and the index is copied to the member. - Icon = 256, - - /// 0x000000200 - Retrieve the display name for the file. The name is copied to the member of the structure. - /// The returned display name uses the long file name, if there is one, rather than the 8.3 form of the file name. - DisplayName = 512, - - /// 0x000000400 - Retrieve the string that describes the file's type. - TypeName = 1024, - - /// 0x000000800 - Retrieve the item attributes. The attributes are copied to the member of the structure. - /// Will touch every file, degrading performance. - Attributes = 2048, - - /// 0x000001000 - Retrieve the name of the file that contains the icon representing the file specified by pszPath. The name of the file containing the icon is copied to the member of the structure. The icon's index is copied to that structure's member. - IconLocation = 4096, - - /// 0x000002000 - Retrieve the type of the executable file if pszPath identifies an executable file. - /// This flag cannot be specified with any other attributes. - ExeType = 8192, - - /// 0x000004000 - Retrieve the index of a system image list icon. - SysIconIndex = 16384, - - /// 0x000008000 - Add the link overlay to the file's icon. - /// The flag must also be set. - LinkOverlay = 32768, - - /// 0x000010000 - Blend the file's icon with the system highlight color. - Selected = 65536, - - /// 0x000020000 - Modify to indicate that contains specific attributes that are desired. - /// This flag cannot be specified with the attribute. Will touch every file, degrading performance. - AttributesSpecified = 131072 - } - - - /// SHFILEINFO structure, contains information about a file system object. - [SuppressMessage("Microsoft.Naming", "CA1709:IdentifiersShouldBeCasedCorrectly", MessageId = "Sh")] - [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Sh")] - [SuppressMessage("Microsoft.Design", "CA1034:NestedTypesShouldNotBeVisible")] - [SuppressMessage("Microsoft.Performance", "CA1815:OverrideEqualsAndOperatorEqualsOnValueTypes")] - [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)] - public struct FileInfo - { - /// A handle to the icon that represents the file. - /// Caller is responsible for destroying this handle with DestroyIcon() when no longer needed. - [SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields")] - public readonly IntPtr IconHandle; - - /// The index of the icon image within the system image list. - [SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields")] - public int IconIndex; - - /// An array of values that indicates the attributes of the file object. - [SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields")] - [MarshalAs(UnmanagedType.U4)] - public readonly GetAttributesOf Attributes; - - /// The name of the file as it appears in the Windows Shell, or the path and file name of the file that contains the icon representing the file. - [SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields")] - [MarshalAs(UnmanagedType.ByValTStr, SizeConst = NativeMethods.MaxPath)] - public string DisplayName; - - /// The type of file. - [SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields")] - [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 80)] - public string TypeName; - } - - - /// SFGAO - Attributes that can be retrieved from a file system object. - [SuppressMessage("Microsoft.Usage", "CA2217:DoNotMarkEnumsWithFlags"), SuppressMessage("Microsoft.Design", "CA1034:NestedTypesShouldNotBeVisible")] - [SuppressMessage("Microsoft.Naming", "CA1709:IdentifiersShouldBeCasedCorrectly", MessageId = "Sh")] - [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Sh")] - [SuppressMessage("Microsoft.Naming", "CA1714:FlagsEnumsShouldHavePluralNames")] - [Flags] - public enum GetAttributesOf - { - /// 0x00000000 - None. - None = 0, - - /// 0x00000001 - The specified items can be copied. - CanCopy = 1, - - /// 0x00000002 - The specified items can be moved. - CanMove = 2, - - /// 0x00000004 - Shortcuts can be created for the specified items. - CanLink = 4, - - /// 0x00000008 - The specified items can be bound to an IStorage object through IShellFolder::BindToObject. For more information about namespace manipulation capabilities, see IStorage. - Storage = 8, - - /// 0x00000010 - The specified items can be renamed. Note that this value is essentially a suggestion; not all namespace clients allow items to be renamed. However, those that do must have this attribute set. - CanRename = 16, - - /// 0x00000020 - The specified items can be deleted. - CanDelete = 32, - - /// 0x00000040 - The specified items have property sheets. - HasPropSheet = 64, - - /// 0x00000100 - The specified items are drop targets. - DropTarget = 256, - - /// 0x00001000 - The specified items are system items. - /// Windows 7 and later. - System = 4096, - - /// 0x00002000 - The specified items are encrypted and might require special presentation. - Encrypted = 8192, - - /// 0x00004000 - Accessing the item (through IStream or other storage interfaces) is expected to be a slow operation. - IsSlow = 16384, - - /// 0x00008000 - The specified items are shown as dimmed and unavailable to the user. - Ghosted = 32768, - - /// 0x00010000 - The specified items are shortcuts. - Link = 65536, - - /// 0x00020000 - The specified objects are shared. - Share = 131072, - - /// 0x00040000 - The specified items are read-only. In the case of folders, this means that new items cannot be created in those folders. - ReadOnly = 262144, - - /// 0x00080000 - The item is hidden and should not be displayed unless the Show hidden files and folders option is enabled in Folder Settings. - Hidden = 524288, - - /// 0x00100000 - The items are nonenumerated items and should be hidden. They are not returned through an enumerator such as that created by the IShellFolder::EnumObjects method. - NonEnumerated = 1048576, - - /// 0x00200000 - The items contain new content, as defined by the particular application. - NewContent = 2097152, - - /// 0x00400000 - Indicates that the item has a stream associated with it. - Stream = 4194304, - - /// 0x00800000 - Children of this item are accessible through IStream or IStorage. - StorageAncestor = 8388608, - - /// 0x01000000 - When specified as input, instructs the folder to validate that the items contained in a folder or Shell item array exist. - Validate = 16777216, - - /// 0x02000000 - The specified items are on removable media or are themselves removable devices. - Removable = 33554432, - - /// 0x04000000 - The specified items are compressed. - Compressed = 67108864, - - /// 0x08000000 - The specified items can be hosted inside a web browser or Windows Explorer frame. - Browsable = 134217728, - - /// 0x10000000 - The specified folders are either file system folders or contain at least one descendant (child, grandchild, or later) that is a file system folder. - FileSysAncestor = 268435456, - - /// 0x20000000 - The specified items are folders. - Folder = 536870912, - - /// 0x40000000 - The specified folders or files are part of the file system (that is, they are files, directories, or root directories). - FileSystem = 1073741824, - - /// 0x80000000 - The specified folders have subfolders. - [SuppressMessage("Microsoft.Naming", "CA1702:CompoundWordsShouldBeCasedCorrectly", MessageId = "SubFolder")] - HasSubFolder = unchecked ((int)0x80000000) - } - - - /// Used by method UrlIs() to define a URL type. - public enum UrlType - { - /// Is the URL valid? - IsUrl = 0, - - /// Is the URL opaque? - IsOpaque = 1, - - /// Is the URL a URL that is not typically tracked in navigation history? - IsNoHistory = 2, - - /// Is the URL a file URL? - IsFileUrl = 3, - - /// Attempt to determine a valid scheme for the URL. - [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Appliable")] - IsAppliable = 4, - - /// Does the URL string end with a directory? - IsDirectory = 5, - - /// Does the URL have an appended query string? - IsHasQuery = 6 - } - - - #region Methods - - /// Destroys an icon and frees any memory the icon occupied. - /// An handle to an icon. - public static void DestroyIcon(IntPtr iconHandle) - { - if (IntPtr.Zero != iconHandle) - NativeMethods.DestroyIcon(iconHandle); - } - - - /// Gets the file or protocol that is associated with from the registry. - /// A path to the file. - /// The associated file- or protocol-related string from the registry or string.Empty if no association can be found. - [SecurityCritical] - public static string GetFileAssociation(string path) - { - return GetFileAssociationCore(path, AssociationAttributes.Verify, AssociationString.Executable); - } - - - /// Gets the content-type that is associated with from the registry. - /// A path to the file. - /// The associated file- or protocol-related content-type from the registry or string.Empty if no association can be found. - [SecurityCritical] - public static string GetFileContentType(string path) - { - return GetFileAssociationCore(path, AssociationAttributes.Verify, AssociationString.ContentType); - } - - - /// Gets the default icon that is associated with from the registry. - /// A path to the file. - /// The associated file- or protocol-related default icon from the registry or string.Empty if no association can be found. - [SecurityCritical] - public static string GetFileDefaultIcon(string path) - { - return GetFileAssociationCore(path, AssociationAttributes.Verify, AssociationString.DefaultIcon); - } - - - /// Gets the friendly application name that is associated with from the registry. - /// A path to the file. - /// The associated file- or protocol-related friendly application name from the registry or string.Empty if no association can be found. - [SecurityCritical] - public static string GetFileFriendlyAppName(string path) - { - return GetFileAssociationCore(path, AssociationAttributes.InitByExeName, AssociationString.FriendlyAppName); - } - - - /// Gets the friendly document name that is associated with from the registry. - /// A path to the file. - /// The associated file- or protocol-related friendly document name from the registry or string.Empty if no association can be found. - [SecurityCritical] - public static string GetFileFriendlyDocName(string path) - { - return GetFileAssociationCore(path, AssociationAttributes.Verify, AssociationString.FriendlyDocName); - } - - - /// Gets an handle to the Shell icon that represents the file. - /// Caller is responsible for destroying this handle with DestroyIcon() when no longer needed. - /// - /// The path to the file system object which should not exceed maximum path length. Both absolute and - /// relative paths are valid. - /// - /// - /// Icon size or . Can also be combined - /// with and others. - /// - /// An handle to the Shell icon that represents the file, or IntPtr.Zero on failure. - [SecurityCritical] - public static IntPtr GetFileIcon(string filePath, FileAttributes iconAttributes) - { - if (Utils.IsNullOrWhiteSpace(filePath)) - return IntPtr.Zero; - - var fileInfo = GetFileInfoCore(filePath, System.IO.FileAttributes.Normal, FileAttributes.Icon | iconAttributes, true, true); - return fileInfo.IconHandle == IntPtr.Zero ? IntPtr.Zero : fileInfo.IconHandle; - } - - - /// Retrieves information about an object in the file system, such as a file, folder, directory, or drive root. - /// A struct instance. - /// - /// You should call this function from a background thread. - /// Failure to do so could cause the UI to stop responding. - /// Unicode path are supported. - /// - /// The path to the file system object which should not exceed the maximum path length. Both absolute and relative paths are valid. - /// A attribute. - /// One ore more attributes. - /// - /// suppress any Exception that might be thrown as a result from a failure, - /// such as ACLs protected directories or non-accessible reparse points. - /// - [SecurityCritical] - public static FileInfo GetFileInfo(string filePath, System.IO.FileAttributes attributes, FileAttributes fileAttributes, bool continueOnException) - { - return GetFileInfoCore(filePath, attributes, fileAttributes, true, continueOnException); - } - - - /// Retrieves an instance of containing information about the specified file. - /// A path to the file. - /// A class instance. - [SecurityCritical] - public static Shell32Info GetShell32Info(string path) - { - return new Shell32Info(path); - } - - /// Retrieves an instance of containing information about the specified file. - /// A path to the file. - /// Indicates the format of the path parameter(s). - /// A class instance. - [SecurityCritical] - public static Shell32Info GetShell32Info(string path, PathFormat pathFormat) - { - return new Shell32Info(path, pathFormat); - } - - - /// Gets the "Open With" command that is associated with from the registry. - /// A path to the file. - /// The associated file- or protocol-related "Open With" command from the registry or string.Empty if no association can be found. - [SecurityCritical] - public static string GetFileOpenWithAppName(string path) - { - return GetFileAssociationCore(path, AssociationAttributes.Verify, AssociationString.FriendlyAppName); - } - - - /// Gets the Shell command that is associated with from the registry. - /// A path to the file. - /// The associated file- or protocol-related Shell command from the registry or string.Empty if no association can be found. - [SecurityCritical] - public static string GetFileVerbCommand(string path) - { - return GetFileAssociationCore(path, AssociationAttributes.Verify, AssociationString.Command); - } - - - /// Converts a file URL to a Microsoft MS-DOS path. - /// The file URL. - /// - /// The Microsoft MS-DOS path. If no path can be created, string.Empty is returned. - /// If is , will also be returned. - /// - [SecurityCritical] - internal static string PathCreateFromUrl(string urlPath) - { - if (urlPath == null) - return null; - - var buffer = new StringBuilder(NativeMethods.MaxPathUnicode); - var bufferSize = (uint) buffer.Capacity; - - var lastError = NativeMethods.PathCreateFromUrl(urlPath, buffer, ref bufferSize, 0); - - // Don't throw exception, but return string.Empty; - return lastError == Win32Errors.S_OK ? buffer.ToString() : string.Empty; - } - - - /// Creates a path from a file URL. - /// The URL. - /// - /// The file path. If no path can be created, string.Empty is returned. - /// If is , will also be returned. - /// - [SecurityCritical] - internal static string PathCreateFromUrlAlloc(string urlPath) - { - if (!NativeMethods.IsAtLeastWindowsVista) - throw new PlatformNotSupportedException(Resources.Requires_Windows_Vista_Or_Higher); - - if (urlPath == null) - return null; - - StringBuilder buffer; - var lastError = NativeMethods.PathCreateFromUrlAlloc(urlPath, out buffer, 0); - - // Don't throw exception, but return string.Empty; - return lastError == Win32Errors.S_OK ? buffer.ToString() : string.Empty; - } - - - /// Determines whether a path to a file system object such as a file or folder is valid. - /// The full path of maximum length the maximum path length to the object to verify. - /// if the file exists; otherwise - [SuppressMessage("Microsoft.Performance", "CA1804:RemoveUnusedLocals", MessageId = "lastError")] - [SecurityCritical] - public static bool PathFileExists(string path) - { - if (Utils.IsNullOrWhiteSpace(path)) - return false; - - // PathFileExists() - // In the ANSI version of this function, the name is limited to 248 characters. - // To extend this limit to 32,767 wide characters, call the Unicode version of the function and prepend "\\?\" to the path. - // 2013-01-13: MSDN does not confirm LongPath usage but a Unicode version of this function exists. - - return NativeMethods.PathFileExists(Path.GetFullPathCore(null, path, GetFullPathOptions.AsLongPath | GetFullPathOptions.FullCheck | GetFullPathOptions.ContinueOnNonExist)); - } - - - /// Tests whether a URL is a specified type. - /// The URL. - /// - /// - /// For all but one of the URL types, UrlIs returns if the URL is the specified type, or otherwise. - /// If UrlIs is set to , UrlIs will attempt to determine the URL scheme. - /// If the function is able to determine a scheme, it returns , or otherwise. - /// - [SecurityCritical] - internal static bool UrlIs(string url, UrlType urlType) - { - return NativeMethods.UrlIs(url, urlType); - } - - - /// Converts a Microsoft MS-DOS path to a canonicalized URL. - /// The full MS-DOS path of maximum length . - /// - /// The URL. If no URL can be created string.Empty is returned. - /// If is , will also be returned. - /// - [SecurityCritical] - internal static string UrlCreateFromPath(string path) - { - if (path == null) - return null; - - // UrlCreateFromPath does not support extended paths. - var pathRp = Path.GetRegularPathCore(path, GetFullPathOptions.CheckInvalidPathChars, false); - - var buffer = new StringBuilder(NativeMethods.MaxPathUnicode); - var bufferSize = (uint) buffer.Capacity; - - var lastError = NativeMethods.UrlCreateFromPath(pathRp, buffer, ref bufferSize, 0); - - // Don't throw exception, but return null; - var url = buffer.ToString(); - if (Utils.IsNullOrWhiteSpace(url)) - url = string.Empty; - - return lastError == Win32Errors.S_OK ? url : string.Empty; - } - - - /// Tests a URL to determine if it is a file URL. - /// The URL. - /// if the URL is a file URL, or otherwise. - [SecurityCritical] - internal static bool UrlIsFileUrl(string url) - { - return NativeMethods.UrlIs(url, UrlType.IsFileUrl); - } - - - /// Returns whether a URL is a URL that browsers typically do not include in navigation history. - /// The URL. - /// if the URL is a URL that is not included in navigation history, or otherwise. - [SecurityCritical] - internal static bool UrlIsNoHistory(string url) - { - return NativeMethods.UrlIs(url, UrlType.IsNoHistory); - } - - - /// Returns whether a URL is opaque. - /// The URL. - /// if the URL is opaque, or otherwise. - [SecurityCritical] - internal static bool UrlIsOpaque(string url) - { - return NativeMethods.UrlIs(url, UrlType.IsOpaque); - } - - - #region Internal Methods - - /// Searches for and retrieves a file or protocol association-related string from the registry. - /// A path to a file. - /// One or more attributes. Only one "InitXXX" attribute can be used. - /// A attribute. - /// The associated file- or protocol-related string from the registry or string.Empty if no association can be found. - /// - [SecurityCritical] - private static string GetFileAssociationCore(string path, AssociationAttributes attributes, AssociationString associationType) - { - if (Utils.IsNullOrWhiteSpace(path)) - throw new ArgumentNullException("path"); - - attributes = attributes | AssociationAttributes.NoTruncate | AssociationAttributes.RemapRunDll; - - uint bufferSize = NativeMethods.MaxPath; - StringBuilder buffer; - uint retVal; - - do - { - buffer = new StringBuilder((int)bufferSize); - - // AssocQueryString() - // In the ANSI version of this function, the name is limited to 248 characters. - // To extend this limit to 32,767 wide characters, call the Unicode version of the function and prepend "\\?\" to the path. - // 2014-02-05: MSDN does not confirm LongPath usage but a Unicode version of this function exists. - // However, the function fails when using Unicode format. - - retVal = NativeMethods.AssocQueryString(attributes, associationType, path, null, buffer, out bufferSize); - - // No Exception is thrown, just return empty string on error. - - //switch (retVal) - //{ - // // 0x80070483: No application is associated with the specified file for this operation. - // case 2147943555: - // case Win32Errors.E_POINTER: - // case Win32Errors.S_OK: - // break; - - // default: - // NativeError.ThrowException(retVal); - // break; - //} - - } while (retVal == Win32Errors.E_POINTER); - - return buffer.ToString(); - } - - - /// Retrieve information about an object in the file system, such as a file, folder, directory, or drive root. - /// A struct instance. - /// - /// You should call this function from a background thread. - /// Failure to do so could cause the UI to stop responding. - /// Unicode path are not supported. - /// - /// The path to the file system object which should not exceed the maximum path length in length. Both absolute and relative paths are valid. - /// A attribute. - /// A attribute. - /// Checks that the path contains only valid path-characters. - /// - /// suppress any Exception that might be thrown as a result from a failure, - /// such as ACLs protected directories or non-accessible reparse points. - /// - [SecurityCritical] - internal static FileInfo GetFileInfoCore(string path, System.IO.FileAttributes attributes, FileAttributes fileAttributes, bool checkInvalidPathChars, bool continueOnException) - { - // Prevent possible crash. - var fileInfo = new FileInfo - { - DisplayName = string.Empty, - TypeName = string.Empty, - IconIndex = 0 - }; - - if (!Utils.IsNullOrWhiteSpace(path)) - { - // ShGetFileInfo() - // In the ANSI version of this function, the name is limited to 248 characters. - // To extend this limit to 32,767 wide characters, call the Unicode version of the function and prepend "\\?\" to the path. - // 2013-01-13: MSDN does not confirm LongPath usage but a Unicode version of this function exists. - // However, the function fails when using Unicode format. - - var shGetFileInfo = NativeMethods.ShGetFileInfo(Path.GetRegularPathCore(path, checkInvalidPathChars ? GetFullPathOptions.CheckInvalidPathChars : 0, false), attributes, out fileInfo, (uint) Marshal.SizeOf(fileInfo), fileAttributes); - - if (shGetFileInfo == IntPtr.Zero && !continueOnException) - NativeError.ThrowException(Marshal.GetLastWin32Error(), path); - } - - return fileInfo; - } - - #endregion // Internal Methods - - #endregion // Methods - } -} diff --git a/AlphaFS/Filesystem/Shell32Info.cs b/AlphaFS/Filesystem/Shell32Info.cs deleted file mode 100644 index d958738..0000000 --- a/AlphaFS/Filesystem/Shell32Info.cs +++ /dev/null @@ -1,337 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System; -using System.Diagnostics.CodeAnalysis; -using System.IO; -using System.Security; -using System.Text; - -namespace Alphaleonis.Win32.Filesystem -{ - /// Contains Shell32 information about a file. - [SerializableAttribute] - [SecurityCritical] - public sealed class Shell32Info - { - #region Constructors - - /// Initializes a Shell32Info instance. - /// Shell32 is limited to MAX_PATH length. - /// This constructor does not check if a file exists. This constructor is a placeholder for a string that is used to access the file in subsequent operations. - /// - /// The fully qualified name of the new file, or the relative file name. Do not end the path with the directory separator character. - public Shell32Info(string fileName) : this(fileName, PathFormat.RelativePath) - { - } - - /// Initializes a Shell32Info instance. - /// Shell32 is limited to MAX_PATH length. - /// This constructor does not check if a file exists. This constructor is a placeholder for a string that is used to access the file in subsequent operations. - /// - /// The fully qualified name of the new file, or the relative file name. Do not end the path with the directory separator character. - /// Indicates the format of the path parameter(s). - public Shell32Info(string fileName, PathFormat pathFormat) - { - if (Utils.IsNullOrWhiteSpace(fileName)) - throw new ArgumentNullException("fileName"); - - // Shell32 is limited to MAX_PATH length. - // Get a full path of regular format. - - FullPath = Path.GetExtendedLengthPathCore(null, fileName, pathFormat, GetFullPathOptions.RemoveTrailingDirectorySeparator | GetFullPathOptions.FullCheck); - - Initialize(); - } - - #endregion // Constructors - - - #region Methods - - /// Gets an handle to the Shell icon that represents the file. - /// Icon size or . Can also be combined with and others. - /// An handle to the Shell icon that represents the file. - /// Caller is responsible for destroying this handle with DestroyIcon() when no longer needed. - [SecurityCritical] - public IntPtr GetIcon(Shell32.FileAttributes iconAttributes) - { - return Shell32.GetFileIcon(FullPath, iconAttributes); - } - - - /// Gets the Shell command association from the registry. - /// The shell verb. - /// - /// Returns the associated file- or protocol-related Shell command from the registry or string.Empty if no association can be - /// found. - /// - [SecurityCritical] - public string GetVerbCommand(string shellVerb) - { - return GetString(_iQaNone, Shell32.AssociationString.Command, shellVerb); - } - - - [SuppressMessage("Microsoft.Design", "CA1031:DoNotCatchGeneralExceptionTypes")] - [SecurityCritical] - private static string GetString(NativeMethods.IQueryAssociations iQa, Shell32.AssociationString assocString, string shellVerb) - { - // GetString() throws Exceptions. - try - { - // Use a large buffer to prevent calling this function twice. - var size = NativeMethods.DefaultFileBufferSize; - var buffer = new StringBuilder(size); - - iQa.GetString(Shell32.AssociationAttributes.NoTruncate | Shell32.AssociationAttributes.RemapRunDll, assocString, shellVerb, buffer, out size); - - return buffer.ToString(); - } - catch - { - return string.Empty; - } - } - - - private NativeMethods.IQueryAssociations _iQaNone; // Retrieve info from Shell. - private NativeMethods.IQueryAssociations _iQaByExe; // Retrieve info from exe file. - - [SuppressMessage("Microsoft.Design", "CA1031:DoNotCatchGeneralExceptionTypes")] - [SecurityCritical] - private void Initialize() - { - if (Initialized) - return; - - var iidIQueryAssociations = new Guid(NativeMethods.QueryAssociationsGuid); - - if (NativeMethods.AssocCreate(NativeMethods.ClsidQueryAssociations, ref iidIQueryAssociations, out _iQaNone) == Win32Errors.S_OK) - { - try - { - _iQaNone.Init(Shell32.AssociationAttributes.None, FullPath, IntPtr.Zero, IntPtr.Zero); - - if (NativeMethods.AssocCreate(NativeMethods.ClsidQueryAssociations, ref iidIQueryAssociations, out _iQaByExe) == Win32Errors.S_OK) - { - _iQaByExe.Init(Shell32.AssociationAttributes.InitByExeName, FullPath, IntPtr.Zero, IntPtr.Zero); - - Initialized = true; - } - } - catch - { - } - } - } - - - /// Refreshes the state of the object. - [SecurityCritical] - public void Refresh() - { - Association = Command = ContentType = DdeApplication = DefaultIcon = FriendlyAppName = FriendlyDocName = OpenWithAppName = null; - Attributes = Shell32.GetAttributesOf.None; - Initialized = false; - Initialize(); - } - - - /// Returns the path as a string. - /// The path. - public override string ToString() - { - return FullPath; - } - - #endregion // Methods - - - #region Properties - - private string _association; - - /// Gets the Shell file or protocol association from the registry. - public string Association - { - get - { - if (_association == null) - _association = GetString(_iQaNone, Shell32.AssociationString.Executable, null); - - return _association; - } - - private set { _association = value; } - } - - - private Shell32.GetAttributesOf _attributes; - - /// The attributes of the file object. - public Shell32.GetAttributesOf Attributes - { - get - { - if (_attributes == Shell32.GetAttributesOf.None) - { - var fileInfo = Shell32.GetFileInfoCore(FullPath, FileAttributes.Normal, Shell32.FileAttributes.Attributes, false, true); - _attributes = fileInfo.Attributes; - } - - return _attributes; - } - - private set { _attributes = value; } - } - - - private string _command; - - /// Gets the Shell command association from the registry. - public string Command - { - get - { - if (_command == null) - _command = GetString(_iQaNone, Shell32.AssociationString.Command, null); - - return _command; - } - - private set { _command = value; } - } - - - private string _contentType; - - /// Gets the Shell command association from the registry. - public string ContentType - { - get - { - if (_contentType == null) - _contentType = GetString(_iQaNone, Shell32.AssociationString.ContentType, null); - - return _contentType; - } - - private set { _contentType = value; } - } - - - private string _ddeApplication; - - /// Gets the Shell DDE association from the registry. - [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Dde")] - public string DdeApplication - { - get - { - if (_ddeApplication == null) - _ddeApplication = GetString(_iQaNone, Shell32.AssociationString.DdeApplication, null); - - return _ddeApplication; - } - - private set { _ddeApplication = value; } - } - - - private string _defaultIcon; - - /// Gets the Shell default icon association from the registry. - public string DefaultIcon - { - get - { - if (_defaultIcon == null) - _defaultIcon = GetString(_iQaNone, Shell32.AssociationString.DefaultIcon, null); - - return _defaultIcon; - } - - private set { _defaultIcon = value; } - } - - - /// Represents the fully qualified path of the file. - public string FullPath { get; private set; } - - - private string _friendlyAppName; - - /// Gets the Shell friendly application name association from the registry. - public string FriendlyAppName - { - get - { - if (_friendlyAppName == null) - _friendlyAppName = GetString(_iQaByExe, Shell32.AssociationString.FriendlyAppName, null); - - return _friendlyAppName; - } - - private set { _friendlyAppName = value; } - } - - - private string _friendlyDocName; - - /// Gets the Shell friendly document name association from the registry. - public string FriendlyDocName - { - get - { - if (_friendlyDocName == null) - _friendlyDocName = GetString(_iQaNone, Shell32.AssociationString.FriendlyDocName, null); - - return _friendlyDocName; - } - - private set { _friendlyDocName = value; } - } - - - /// Reflects the initialization state of the instance. - internal bool Initialized { get; set; } - - - private string _openWithAppName; - - /// Gets the Shell "Open With" command association from the registry. - public string OpenWithAppName - { - get - { - if (_openWithAppName == null) - _openWithAppName = GetString(_iQaNone, Shell32.AssociationString.FriendlyAppName, null); - - return _openWithAppName; - } - - private set { _openWithAppName = value; } - } - - #endregion // Properties - } -} diff --git a/AlphaFS/Filesystem/SymbolicLinkTargetInfo.cs b/AlphaFS/Filesystem/SymbolicLinkTargetInfo.cs deleted file mode 100644 index 4e47790..0000000 --- a/AlphaFS/Filesystem/SymbolicLinkTargetInfo.cs +++ /dev/null @@ -1,36 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -namespace Alphaleonis.Win32.Filesystem -{ - /// Represents information about a symbolic link. - public class SymbolicLinkTargetInfo : LinkTargetInfo - { - internal SymbolicLinkTargetInfo(string substituteName, string printName, SymbolicLinkType type) : base(substituteName, printName) - { - LinkType = type; - } - - /// Gets the type of the link. - /// The type of the link. - public SymbolicLinkType LinkType { get; private set; } - } -} diff --git a/AlphaFS/Filesystem/Volume.cs b/AlphaFS/Filesystem/Volume.cs deleted file mode 100644 index 5b23d51..0000000 --- a/AlphaFS/Filesystem/Volume.cs +++ /dev/null @@ -1,1146 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using Microsoft.Win32.SafeHandles; -using System; -using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; -using System.IO; -using System.Linq; -using System.Runtime.InteropServices; -using System.Security; -using System.Text; - -namespace Alphaleonis.Win32.Filesystem -{ - /// Static class providing utility methods for working with Microsoft Windows devices and volumes. - public static class Volume - { - #region DosDevice - - #region DefineDosDevice - - /// Defines, redefines, or deletes MS-DOS device names. - /// An MS-DOS device name string specifying the device the function is defining, redefining, or deleting. - /// An MS-DOS path that will implement this device. - - [SecurityCritical] - public static void DefineDosDevice(string deviceName, string targetPath) - { - DefineDosDeviceCore(true, deviceName, targetPath, DosDeviceAttributes.None, false); - } - - /// Defines, redefines, or deletes MS-DOS device names. - /// - /// An MS-DOS device name string specifying the device the function is defining, redefining, or deleting. - /// - /// - /// >An MS-DOS path that will implement this device. If parameter has the - /// flag specified, is used as is. - /// - /// - /// The controllable aspects of the DefineDosDevice function, flags which will be combined with the - /// default. - /// - [SecurityCritical] - public static void DefineDosDevice(string deviceName, string targetPath, DosDeviceAttributes deviceAttributes) - { - DefineDosDeviceCore(true, deviceName, targetPath, deviceAttributes, false); - } - - #endregion // DefineDosDevice - - #region DeleteDosDevice - - /// Deletes an MS-DOS device name. - /// An MS-DOS device name specifying the device to delete. - [SecurityCritical] - public static void DeleteDosDevice(string deviceName) - { - DefineDosDeviceCore(false, deviceName, null, DosDeviceAttributes.RemoveDefinition, false); - } - - /// Deletes an MS-DOS device name. - /// An MS-DOS device name string specifying the device to delete. - /// - /// A pointer to a path string that will implement this device. The string is an MS-DOS path string unless the - /// flag is specified, in which case this string is a path string. - /// - [SecurityCritical] - public static void DeleteDosDevice(string deviceName, string targetPath) - { - DefineDosDeviceCore(false, deviceName, targetPath, DosDeviceAttributes.RemoveDefinition, false); - } - - /// Deletes an MS-DOS device name. - /// An MS-DOS device name string specifying the device to delete. - /// - /// A pointer to a path string that will implement this device. The string is an MS-DOS path string unless the - /// flag is specified, in which case this string is a path string. - /// - /// - /// Only delete MS-DOS device on an exact name match. If is , - /// must be the same path used to create the mapping. - /// - [SecurityCritical] - public static void DeleteDosDevice(string deviceName, string targetPath, bool exactMatch) - { - DefineDosDeviceCore(false, deviceName, targetPath, DosDeviceAttributes.RemoveDefinition, exactMatch); - } - - /// Deletes an MS-DOS device name. - /// An MS-DOS device name string specifying the device to delete. - /// - /// A pointer to a path string that will implement this device. The string is an MS-DOS path string unless the - /// flag is specified, in which case this string is a path string. - /// - /// - /// The controllable aspects of the DefineDosDevice function flags which will be combined with the - /// default. - /// - /// - /// Only delete MS-DOS device on an exact name match. If is , - /// must be the same path used to create the mapping. - /// - [SuppressMessage("Microsoft.Design", "CA1031:DoNotCatchGeneralExceptionTypes")] - [SecurityCritical] - public static void DeleteDosDevice(string deviceName, string targetPath, DosDeviceAttributes deviceAttributes, bool exactMatch) - { - DefineDosDeviceCore(false, deviceName, targetPath, deviceAttributes, exactMatch); - } - - #endregion // DeleteDosDevice - - #region QueryAllDosDevices - - /// Retrieves a list of all existing MS-DOS device names. - /// An with one or more existing MS-DOS device names. - [SecurityCritical] - public static IEnumerable QueryAllDosDevices() - { - return QueryDosDevice(null, null); - } - - /// Retrieves a list of all existing MS-DOS device names. - /// - /// (Optional, default: ) An MS-DOS device name string specifying the target of the query. This parameter can be - /// "sort". In that case a sorted list of all existing MS-DOS device names is returned. This parameter can be . - /// In that case, the function will store a list of all existing MS-DOS device names into the buffer. - /// - /// An with or more existing MS-DOS device names. - [SecurityCritical] - public static IEnumerable QueryAllDosDevices(string deviceName) - { - return QueryDosDevice(null, deviceName); - } - - #endregion // QueryAllDosDevices - - #region QueryDosDevice - - /// - /// Retrieves information about MS-DOS device names. The function can obtain the current mapping for a particular MS-DOS device name. - /// The function can also obtain a list of all existing MS-DOS device names. - /// - /// - /// An MS-DOS device name string, or part of, specifying the target of the query. This parameter can be . In that - /// case, the QueryDosDevice function will store a list of all existing MS-DOS device names into the buffer. - /// - /// - /// (Optional, default: ) If options[0] = a sorted list will be returned. - /// - /// An with one or more existing MS-DOS device names. - [SecurityCritical] - public static IEnumerable QueryDosDevice(string deviceName, params string[] options) - { - // deviceName is allowed to be null. - // The deviceName cannot have a trailing backslash. - deviceName = Path.RemoveTrailingDirectorySeparator(deviceName, false); - - var searchFilter = (deviceName != null); - - // Only process options if a device is supplied. - if (searchFilter) - { - // Check that at least one "options[]" has something to say. If so, rebuild them. - options = options != null && options.Any() ? new[] { deviceName, options[0] } : new[] { deviceName, string.Empty }; - - deviceName = null; - } - - // Choose sorted output. - var doSort = options != null && - options.Any(s => s != null && s.Equals("sort", StringComparison.OrdinalIgnoreCase)); - - // Start with a larger buffer when using a searchFilter. - var bufferSize = (uint) (searchFilter || doSort || (options == null) ? 8*NativeMethods.DefaultFileBufferSize : 256); - uint bufferResult = 0; - - using (new NativeMethods.ChangeErrorMode(NativeMethods.ErrorMode.FailCriticalErrors)) - while (bufferResult == 0) - { - var cBuffer = new char[bufferSize]; - - // QueryDosDevice() - // In the ANSI version of this function, the name is limited to MAX_PATH characters. - // To extend this limit to 32,767 wide characters, call the Unicode version of the function and prepend "\\?\" to the path. - // 2014-01-29: MSDN does not confirm LongPath usage but a Unicode version of this function exists. - - bufferResult = NativeMethods.QueryDosDevice(deviceName, cBuffer, bufferSize); - var lastError = Marshal.GetLastWin32Error(); - - if (bufferResult == 0) - switch ((uint) lastError) - { - case Win32Errors.ERROR_MORE_DATA: - case Win32Errors.ERROR_INSUFFICIENT_BUFFER: - bufferSize *= 2; - continue; - - default: - NativeError.ThrowException(lastError, deviceName); - break; - } - - var dosDev = new List(); - var buffer = new StringBuilder(); - - for (var i = 0; i < bufferResult; i++) - { - if (cBuffer[i] != Path.StringTerminatorChar) - buffer.Append(cBuffer[i]); - - else if (buffer.Length > 0) - { - dosDev.Add(buffer.ToString()); - buffer.Length = 0; - } - } - - // Choose the yield back query; filtered or list. - var selectQuery = searchFilter - ? dosDev.Where(dev => options != null && dev.StartsWith(options[0], StringComparison.OrdinalIgnoreCase)) - : dosDev; - - foreach (var dev in (doSort) ? selectQuery.OrderBy(n => n) : selectQuery) - yield return dev; - } - } - - #endregion // QueryDosDevice - - #endregion // DosDevice - - #region Drive - - #region GetDriveFormat - - /// Gets the name of the file system, such as NTFS or FAT32. - /// Use DriveFormat to determine what formatting a drive uses. - /// - /// A path to a drive. For example: "C:\", "\\server\share", or "\\?\Volume{c0580d5e-2ad6-11dc-9924-806e6f6e6963}\". - /// - /// The name of the file system on the specified drive or on failure or if not available. - [SuppressMessage("Microsoft.Design", "CA1031:DoNotCatchGeneralExceptionTypes")] - [SecurityCritical] - public static string GetDriveFormat(string drivePath) - { - var fsName = new VolumeInfo(drivePath, true, true).FileSystemName; - return Utils.IsNullOrWhiteSpace(fsName) ? null : fsName; - } - - #endregion // GetDriveFormat - - #region GetDriveNameForNtDeviceName - - /// Gets the drive letter from an MS-DOS device name. For example: "\Device\HarddiskVolume2" returns "C:\". - /// An MS-DOS device name. - /// The drive letter from an MS-DOS device name. - [SuppressMessage("Microsoft.Naming", "CA1709:IdentifiersShouldBeCasedCorrectly", MessageId = "Nt")] - [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Nt")] - public static string GetDriveNameForNtDeviceName(string deviceName) - { - return (from drive in Directory.EnumerateLogicalDrivesCore(false, false) - where drive.DosDeviceName.Equals(deviceName, StringComparison.OrdinalIgnoreCase) - select drive.Name).FirstOrDefault(); - } - - #endregion // GetDriveNameForNtDeviceName - - #region GetCurrentDriveType - - /// - /// Determines, based on the root of the current directory, whether a disk drive is a removable, fixed, CD-ROM, RAM disk, or network - /// drive. - /// - /// A object. - [SuppressMessage("Microsoft.Design", "CA1024:UsePropertiesWhereAppropriate")] - [SecurityCritical] - public static DriveType GetCurrentDriveType() - { - return GetDriveType(null); - } - - #endregion // GetCurrentDriveType - - #region GetDriveType - - /// Determines whether a disk drive is a removable, fixed, CD-ROM, RAM disk, or network drive. - /// A path to a drive. For example: "C:\", "\\server\share", or "\\?\Volume{c0580d5e-2ad6-11dc-9924-806e6f6e6963}\" - /// A object. - [SecurityCritical] - public static DriveType GetDriveType(string drivePath) - { - // drivePath is allowed to be == null. - - drivePath = Path.AddTrailingDirectorySeparator(drivePath, false); - - // ChangeErrorMode is for the Win32 SetThreadErrorMode() method, used to suppress possible pop-ups. - using (new NativeMethods.ChangeErrorMode(NativeMethods.ErrorMode.FailCriticalErrors)) - return NativeMethods.GetDriveType(drivePath); - } - - #endregion // GetDriveType - - #region GetDiskFreeSpace - - /// - /// Retrieves information about the amount of space that is available on a disk volume, which is the total amount of space, the total - /// amount of free space, and the total amount of free space available to the user that is associated with the calling thread. - /// - /// The calling application must have FILE_LIST_DIRECTORY access rights for this directory. - /// - /// A path to a drive. For example: "C:\", "\\server\share", or "\\?\Volume{c0580d5e-2ad6-11dc-9924-806e6f6e6963}\". - /// - /// A class instance. - [SecurityCritical] - public static DiskSpaceInfo GetDiskFreeSpace(string drivePath) - { - return new DiskSpaceInfo(drivePath, null, true, true); - } - - /// - /// Retrieves information about the amount of space that is available on a disk volume, which is the total amount of space, the total - /// amount of free space, and the total amount of free space available to the user that is associated with the calling thread. - /// - /// The calling application must have FILE_LIST_DIRECTORY access rights for this directory. - /// - /// A path to a drive. For example: "C:\", "\\server\share", or "\\?\Volume{c0580d5e-2ad6-11dc-9924-806e6f6e6963}\". - /// - /// - /// gets both size- and disk cluster information. Get only disk cluster information, - /// Get only size information. - /// - /// A class instance. - [SecurityCritical] - public static DiskSpaceInfo GetDiskFreeSpace(string drivePath, bool? spaceInfoType) - { - return new DiskSpaceInfo(drivePath, spaceInfoType, true, true); - } - - #endregion // GetDiskFreeSpace - - #region IsReady - - /// Gets a value indicating whether a drive is ready. - /// - /// A path to a drive. For example: "C:\", "\\server\share", or "\\?\Volume{c0580d5e-2ad6-11dc-9924-806e6f6e6963}\". - /// - /// if is ready; otherwise, . - [SecurityCritical] - public static bool IsReady(string drivePath) - { - return File.ExistsCore(true, null, drivePath, PathFormat.FullPath); - } - - #endregion // IsReady - - #endregion // Drive - - #region Volume - - #region DeleteCurrentVolumeLabel - - /// Deletes the label of the file system volume that is the root of the current directory. - /// - [SecurityCritical] - public static void DeleteCurrentVolumeLabel() - { - SetVolumeLabel(null, null); - } - #endregion // DeleteCurrentVolumeLabel - - #region DeleteVolumeLabel - - /// Deletes the label of a file system volume. - /// - /// The root directory of a file system volume. This is the volume the function will remove the label. - [SecurityCritical] - public static void DeleteVolumeLabel(string rootPathName) - { - if (Utils.IsNullOrWhiteSpace(rootPathName)) - throw new ArgumentNullException("rootPathName"); - - SetVolumeLabel(rootPathName, null); - } - - #endregion // DeleteVolumeLabel - - #region DeleteVolumeMountPoint - - /// Deletes a Drive letter or mounted folder. - /// Deleting a mounted folder does not cause the underlying directory to be deleted. - /// - /// If the parameter is a directory that is not a mounted folder, the function does nothing. The - /// directory is not deleted. - /// - /// - /// It's not an error to attempt to unmount a volume from a volume mount point when there is no volume actually mounted at that volume - /// mount point. - /// - /// The Drive letter or mounted folder to be deleted. For example, X:\ or Y:\MountX\. - [SecurityCritical] - public static void DeleteVolumeMountPoint(string volumeMountPoint) - { - DeleteVolumeMountPointCore(volumeMountPoint, false); - } - - #endregion // DeleteVolumeMountPoint - - #region EnumerateVolumeMountPoints - - /// - /// Returns an enumerable collection of of all mounted folders (volume mount points) on the specified volume. - /// - /// - /// - /// A containing the volume . - /// An enumerable collection of of all volume mount points on the specified volume. - [SecurityCritical] - public static IEnumerable EnumerateVolumeMountPoints(string volumeGuid) - { - if (Utils.IsNullOrWhiteSpace(volumeGuid)) - throw new ArgumentNullException("volumeGuid"); - - if (!volumeGuid.StartsWith(Path.VolumePrefix + "{", StringComparison.OrdinalIgnoreCase)) - throw new ArgumentException(Resources.Not_A_Valid_Guid, volumeGuid); - - // A trailing backslash is required. - volumeGuid = Path.AddTrailingDirectorySeparator(volumeGuid, false); - - var buffer = new StringBuilder(NativeMethods.MaxPathUnicode); - - using (new NativeMethods.ChangeErrorMode(NativeMethods.ErrorMode.FailCriticalErrors)) - using (var handle = NativeMethods.FindFirstVolumeMountPoint(volumeGuid, buffer, (uint)buffer.Capacity)) - { - var lastError = Marshal.GetLastWin32Error(); - - if (handle.IsInvalid) - { - handle.Close(); - - switch ((uint) lastError) - { - case Win32Errors.ERROR_NO_MORE_FILES: - case Win32Errors.ERROR_PATH_NOT_FOUND: // Observed with USB stick, FAT32 formatted. - yield break; - - default: - NativeError.ThrowException(lastError, volumeGuid); - break; - } - } - - yield return buffer.ToString(); - - - while (NativeMethods.FindNextVolumeMountPoint(handle, buffer, (uint)buffer.Capacity)) - { - lastError = Marshal.GetLastWin32Error(); - - if (handle.IsInvalid) - { - handle.Close(); - - switch ((uint) lastError) - { - case Win32Errors.ERROR_NO_MORE_FILES: - case Win32Errors.ERROR_PATH_NOT_FOUND: // Observed with USB stick, FAT32 formatted. - case Win32Errors.ERROR_MORE_DATA: - yield break; - - default: - NativeError.ThrowException(lastError, volumeGuid); - break; - } - } - - yield return buffer.ToString(); - } - } - } - - #endregion // EnumerateVolumeMountPoints - - #region EnumerateVolumePathNames - - /// - /// Returns an enumerable collection of drive letters and mounted folder paths for the specified volume. - /// - /// - /// - /// A volume path: \\?\Volume{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}\. - /// An enumerable collection of containing the path names for the specified volume. - [SecurityCritical] - public static IEnumerable EnumerateVolumePathNames(string volumeGuid) - { - if (Utils.IsNullOrWhiteSpace(volumeGuid)) - throw new ArgumentNullException("volumeGuid"); - - if (!volumeGuid.StartsWith(Path.VolumePrefix + "{", StringComparison.OrdinalIgnoreCase)) - throw new ArgumentException(Resources.Not_A_Valid_Guid, volumeGuid); - - var volName = Path.AddTrailingDirectorySeparator(volumeGuid, false); - - uint requiredLength = 10; - var cBuffer = new char[requiredLength]; - - using (new NativeMethods.ChangeErrorMode(NativeMethods.ErrorMode.FailCriticalErrors)) - while (!NativeMethods.GetVolumePathNamesForVolumeName(volName, cBuffer, (uint)cBuffer.Length, out requiredLength)) - { - var lastError = Marshal.GetLastWin32Error(); - - switch ((uint)lastError) - { - case Win32Errors.ERROR_MORE_DATA: - case Win32Errors.ERROR_INSUFFICIENT_BUFFER: - cBuffer = new char[requiredLength]; - break; - - default: - NativeError.ThrowException(lastError, volumeGuid); - break; - } - } - - var buffer = new StringBuilder(cBuffer.Length); - foreach (var c in cBuffer) - { - if (c != Path.StringTerminatorChar) - buffer.Append(c); - else - { - if (buffer.Length > 0) - { - yield return buffer.ToString(); - buffer.Length = 0; - } - } - } - } - - #endregion // EnumerateVolumePathNames - - #region EnumerateVolumes - - /// Returns an enumerable collection of volumes on the computer. - /// An enumerable collection of volume names on the computer. - [SuppressMessage("Microsoft.Design", "CA1024:UsePropertiesWhereAppropriate")] - [SecurityCritical] - public static IEnumerable EnumerateVolumes() - { - var buffer = new StringBuilder(NativeMethods.MaxPathUnicode); - - using (new NativeMethods.ChangeErrorMode(NativeMethods.ErrorMode.FailCriticalErrors)) - using (var handle = NativeMethods.FindFirstVolume(buffer, (uint)buffer.Capacity)) - { - while (handle != null && !handle.IsInvalid) - { - if (NativeMethods.FindNextVolume(handle, buffer, (uint)buffer.Capacity)) - yield return buffer.ToString(); - - else - { - var lastError = Marshal.GetLastWin32Error(); - - handle.Close(); - - if (lastError == Win32Errors.ERROR_NO_MORE_FILES) - yield break; - - NativeError.ThrowException(lastError); - } - } - } - } - - #endregion // EnumerateVolumes - - #region GetUniqueVolumeNameForPath - - /// - /// Get the unique volume name for the given path. - /// - /// - /// - /// A path string. Both absolute and relative file and directory names, for example "..", is acceptable in this path. If you specify a - /// relative file or directory name without a volume qualifier, GetUniqueVolumeNameForPath returns the Drive letter of the current - /// volume. - /// - /// - /// Returns the unique volume name in the form: "\\?\Volume{GUID}\", - /// or on error or if unavailable. - /// - [SuppressMessage("Microsoft.Design", "CA1031:DoNotCatchGeneralExceptionTypes")] - [SecurityCritical] - public static string GetUniqueVolumeNameForPath(string volumePathName) - { - if (Utils.IsNullOrWhiteSpace(volumePathName)) - throw new ArgumentNullException("volumePathName"); - - try - { - return GetVolumeGuid(GetVolumePathName(volumePathName)); - } - catch - { - return null; - } - } - - #endregion // GetUniqueVolumeNameForPath - - #region GetVolumeDeviceName - - /// Retrieves the Win32 Device name from the Volume name. - /// - /// Name of the Volume. - /// - /// The Win32 Device name from the Volume name (for example: "\Device\HarddiskVolume2"), or on error or if - /// unavailable. - /// - [SuppressMessage("Microsoft.Design", "CA1031:DoNotCatchGeneralExceptionTypes")] - [SecurityCritical] - public static string GetVolumeDeviceName(string volumeName) - { - if (Utils.IsNullOrWhiteSpace(volumeName)) - throw new ArgumentNullException("volumeName"); - - volumeName = Path.RemoveTrailingDirectorySeparator(volumeName, false); - - #region GlobalRoot - - if (volumeName.StartsWith(Path.GlobalRootPrefix, StringComparison.OrdinalIgnoreCase)) - return volumeName.Substring(Path.GlobalRootPrefix.Length); - - #endregion // GlobalRoot - - bool doQueryDos; - - #region Volume - - if (volumeName.StartsWith(Path.VolumePrefix, StringComparison.OrdinalIgnoreCase)) - { - // Isolate the DOS Device from the Volume name, in the format: Volume{GUID} - volumeName = volumeName.Substring(Path.LongPathPrefix.Length); - doQueryDos = true; - } - - #endregion // Volume - - #region Logical Drive - - // Check for Logical Drives: C:, D:, ... - else - { - // Don't use char.IsLetter() here as that can be misleading. - // The only valid drive letters are: a-z and A-Z. - var c = volumeName[0]; - doQueryDos = (volumeName[1] == Path.VolumeSeparatorChar && ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z'))); - } - - #endregion // Logical Drive - - if (doQueryDos) - { - try - { - // Get the real Device underneath. - var dev = QueryDosDevice(volumeName).FirstOrDefault(); - return !Utils.IsNullOrWhiteSpace(dev) ? dev : null; - } - catch - { - } - } - - return null; - } - - #endregion // GetVolumeDeviceName - - #region GetVolumeDisplayName - - /// Gets the shortest display name for the specified . - /// This method basically returns the shortest string returned by - /// A volume path: \\?\Volume{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}\. - /// - /// The shortest display name for the specified volume found, or if no display names were found. - /// - [SuppressMessage("Microsoft.Design", "CA1031:DoNotCatchGeneralExceptionTypes")] - [SecurityCritical] - public static string GetVolumeDisplayName(string volumeName) - { - string[] smallestMountPoint = { new string(Path.WildcardStarMatchAllChar, NativeMethods.MaxPathUnicode) }; - - try - { - foreach (var m in EnumerateVolumePathNames(volumeName).Where(m => !Utils.IsNullOrWhiteSpace(m) && m.Length < smallestMountPoint[0].Length)) - smallestMountPoint[0] = m; - } - catch - { - } - - var result = smallestMountPoint[0][0] == Path.WildcardStarMatchAllChar ? null : smallestMountPoint[0]; - return Utils.IsNullOrWhiteSpace(result) ? null : result; - } - - #endregion // GetVolumeDisplayName - - #region GetVolumeGuid - - /// - /// Retrieves a volume path for the volume that is associated with the specified volume mount point (drive letter, - /// volume GUID path, or mounted folder). - /// - /// - /// - /// The path of a mounted folder (for example, "Y:\MountX\") or a drive letter (for example, "X:\"). - /// - /// The unique volume name of the form: "\\?\Volume{GUID}\". - [SuppressMessage("Microsoft.Interoperability", "CA1404:CallGetLastErrorImmediatelyAfterPInvoke", Justification = "Marshal.GetLastWin32Error() is manipulated.")] - [SecurityCritical] - public static string GetVolumeGuid(string volumeMountPoint) - { - if (Utils.IsNullOrWhiteSpace(volumeMountPoint)) - throw new ArgumentNullException("volumeMountPoint"); - - // The string must end with a trailing backslash ('\'). - volumeMountPoint = Path.GetFullPathCore(null, volumeMountPoint, GetFullPathOptions.AsLongPath | GetFullPathOptions.AddTrailingDirectorySeparator | GetFullPathOptions.FullCheck); - - var volumeGuid = new StringBuilder(100); - var uniqueName = new StringBuilder(100); - - try - { - using (new NativeMethods.ChangeErrorMode(NativeMethods.ErrorMode.FailCriticalErrors)) - { - // GetVolumeNameForVolumeMountPoint() - // In the ANSI version of this function, the name is limited to 248 characters. - // To extend this limit to 32,767 wide characters, call the Unicode version of the function and prepend "\\?\" to the path. - // 2013-07-18: MSDN does not confirm LongPath usage but a Unicode version of this function exists. - - return NativeMethods.GetVolumeNameForVolumeMountPoint(volumeMountPoint, volumeGuid, (uint) volumeGuid.Capacity) - ? NativeMethods.GetVolumeNameForVolumeMountPoint(Path.AddTrailingDirectorySeparator(volumeGuid.ToString(), false), uniqueName, (uint) uniqueName.Capacity) - ? uniqueName.ToString() - : null - : null; - } - } - finally - { - var lastError = (uint) Marshal.GetLastWin32Error(); - - switch (lastError) - { - case Win32Errors.ERROR_INVALID_NAME: - NativeError.ThrowException(lastError, volumeMountPoint); - break; - - case Win32Errors.ERROR_MORE_DATA: - // (1) When GetVolumeNameForVolumeMountPoint() succeeds, lastError is set to Win32Errors.ERROR_MORE_DATA. - break; - - default: - // (2) When volumeMountPoint is a network drive mapping or UNC path, lastError is set to Win32Errors.ERROR_INVALID_PARAMETER. - - // Throw IOException. - NativeError.ThrowException(lastError, volumeMountPoint); - break; - } - } - } - - #endregion // GetVolumeGuid - - #region GetVolumeGuidForNtDeviceName - - /// - /// Tranlates DosDevicePath to a Volume GUID. For example: "\Device\HarddiskVolumeX\path\filename.ext" can translate to: "\path\ - /// filename.ext" or: "\\?\Volume{GUID}\path\filename.ext". - /// - /// A DosDevicePath, for example: \Device\HarddiskVolumeX\path\filename.ext. - /// A translated dos path. - [SuppressMessage("Microsoft.Naming", "CA1709:IdentifiersShouldBeCasedCorrectly", MessageId = "Nt")] - [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Nt")] - public static string GetVolumeGuidForNtDeviceName(string dosDevice) - { - return (from drive in Directory.EnumerateLogicalDrivesCore(false, false) - where drive.DosDeviceName.Equals(dosDevice, StringComparison.OrdinalIgnoreCase) - select drive.VolumeInfo.Guid).FirstOrDefault(); - } - - #endregion // GetVolumeGuidForNtDeviceName - - #region GetVolumeInfo - - /// Retrieves information about the file system and volume associated with the specified root file or directorystream. - /// A path that contains the root directory. - /// A instance describing the volume associatied with the specified root directory. - [SecurityCritical] - public static VolumeInfo GetVolumeInfo(string volumePath) - { - return new VolumeInfo(volumePath, true, false); - } - - /// Retrieves information about the file system and volume associated with the specified root file or directorystream. - /// An instance to a handle. - /// A instance describing the volume associatied with the specified root directory. - [SecurityCritical] - public static VolumeInfo GetVolumeInfo(SafeFileHandle volumeHandle) - { - return new VolumeInfo(volumeHandle, true, true); - } - - #endregion // GetVolumeInfo - - #region GetVolumeLabel - - /// Retrieve the label of a file system volume. - /// - /// A path to a volume. For example: "C:\", "\\server\share", or "\\?\Volume{c0580d5e-2ad6-11dc-9924-806e6f6e6963}\". - /// - /// - /// The the label of the file system volume. This function can return string.Empty since a volume label is generally not - /// mandatory. - /// - [SuppressMessage("Microsoft.Design", "CA1031:DoNotCatchGeneralExceptionTypes")] - [SecurityCritical] - public static string GetVolumeLabel(string volumePath) - { - return new VolumeInfo(volumePath, true, true).Name; - } - - #endregion // GetVolumeLabel - - #region GetVolumePathName - - /// Retrieves the volume mount point where the specified path is mounted. - /// - /// The path to the volume, for example: "C:\Windows". - /// - /// Returns the nearest volume root path for a given directory. - /// The volume path name, for example: "C:\Windows" returns: "C:\". - /// - [SecurityCritical] - public static string GetVolumePathName(string path) - { - if (Utils.IsNullOrWhiteSpace(path)) - throw new ArgumentNullException("path"); - - using (new NativeMethods.ChangeErrorMode(NativeMethods.ErrorMode.FailCriticalErrors)) - { - var volumeRootPath = new StringBuilder(NativeMethods.MaxPathUnicode / 32); - var pathLp = Path.GetFullPathCore(null, path, GetFullPathOptions.AsLongPath | GetFullPathOptions.FullCheck); - - // GetVolumePathName() - // In the ANSI version of this function, the name is limited to 248 characters. - // To extend this limit to 32,767 wide characters, call the Unicode version of the function and prepend "\\?\" to the path. - // 2013-07-18: MSDN does not confirm LongPath usage but a Unicode version of this function exists. - - var getOk = NativeMethods.GetVolumePathName(pathLp, volumeRootPath, (uint) volumeRootPath.Capacity); - var lastError = Marshal.GetLastWin32Error(); - - if (getOk) - return Path.GetRegularPathCore(volumeRootPath.ToString(), GetFullPathOptions.None, false); - - switch ((uint) lastError) - { - // Don't throw exception on these errors. - case Win32Errors.ERROR_NO_MORE_FILES: - case Win32Errors.ERROR_INVALID_PARAMETER: - case Win32Errors.ERROR_INVALID_NAME: - break; - - default: - NativeError.ThrowException(lastError, path); - break; - } - - // Return original path. - return path; - } - } - - #endregion // GetVolumePathName - - #region IsSameVolume - - /// Determines whether the volume of two file system objects is the same. - /// The first filesystem ojbect with full path information. - /// The second file system object with full path information. - /// if both filesytem objects reside on the same volume, otherwise. - [SuppressMessage("Microsoft.Design", "CA1031:DoNotCatchGeneralExceptionTypes")] - [SecurityCritical] - public static bool IsSameVolume(string path1, string path2) - { - try - { - var volInfo1 = new VolumeInfo(GetVolumePathName(path1), true, true); - var volInfo2 = new VolumeInfo(GetVolumePathName(path2), true, true); - - return volInfo1.SerialNumber == volInfo2.SerialNumber; - } - catch { } - - return false; - } - - #endregion // IsSameVolume - - #region IsVolume - - /// Determines whether the specified volume name is a defined volume on the current computer. - /// - /// A path to a volume. For example: "C:\", "\\server\share", or "\\?\Volume{c0580d5e-2ad6-11dc-9924-806e6f6e6963}\". - /// - /// on success, otherwise. - [SecurityCritical] - public static bool IsVolume(string volumeMountPoint) - { - return !Utils.IsNullOrWhiteSpace(GetVolumeGuid(volumeMountPoint)); - } - - #endregion // IsVolume - - #region SetCurrentVolumeLabel - - /// Sets the label of the file system volume that is the root of the current directory. - /// - /// A name for the volume. - [SecurityCritical] - public static void SetCurrentVolumeLabel(string volumeName) - { - if (Utils.IsNullOrWhiteSpace(volumeName)) - throw new ArgumentNullException("volumeName"); - - if (!NativeMethods.SetVolumeLabel(null, volumeName)) - Marshal.ThrowExceptionForHR(Marshal.GetHRForLastWin32Error()); - } - - #endregion // SetCurrentVolumeLabel - - #region SetVolumeLabel - - /// Sets the label of a file system volume. - /// - /// A path to a volume. For example: "C:\", "\\server\share", or "\\?\Volume{c0580d5e-2ad6-11dc-9924-806e6f6e6963}\" - /// If this parameter is , the function uses the current drive. - /// - /// - /// A name for the volume. - /// If this parameter is , the function deletes any existing label - /// from the specified volume and does not assign a new label. - /// - [SecurityCritical] - public static void SetVolumeLabel(string volumePath, string volumeName) - { - // rootPathName == null is allowed, means current drive. - - // Setting volume label only applies to Logical Drives pointing to local resources. - //if (!Path.IsLocalPath(rootPathName)) - //return false; - - volumePath = Path.AddTrailingDirectorySeparator(volumePath, false); - - // NTFS uses a limit of 32 characters for the volume label as of Windows Server 2003. - using (new NativeMethods.ChangeErrorMode(NativeMethods.ErrorMode.FailCriticalErrors)) - if (!NativeMethods.SetVolumeLabel(volumePath, volumeName)) - NativeError.ThrowException(volumePath, volumeName); - } - - #endregion // SetVolumeLabel - - #region SetVolumeMountPoint - - /// Associates a volume with a Drive letter or a directory on another volume. - /// - /// - /// - /// The user-mode path to be associated with the volume. This may be a Drive letter (for example, "X:\") - /// or a directory on another volume (for example, "Y:\MountX\"). - /// - /// A containing the volume . - [SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "1", Justification = "Utils.IsNullOrWhiteSpace validates arguments.")] - [SecurityCritical] - public static void SetVolumeMountPoint(string volumeMountPoint, string volumeGuid) - { - if (Utils.IsNullOrWhiteSpace(volumeMountPoint)) - throw new ArgumentNullException("volumeMountPoint"); - - if (Utils.IsNullOrWhiteSpace(volumeGuid)) - throw new ArgumentNullException("volumeGuid"); - - if (!volumeGuid.StartsWith(Path.VolumePrefix + "{", StringComparison.OrdinalIgnoreCase)) - throw new ArgumentException(Resources.Not_A_Valid_Guid, volumeGuid); - - volumeMountPoint = Path.GetFullPathCore(null, volumeMountPoint, GetFullPathOptions.AsLongPath | GetFullPathOptions.AddTrailingDirectorySeparator | GetFullPathOptions.FullCheck); - - // This string must be of the form "\\?\Volume{GUID}\" - volumeGuid = Path.AddTrailingDirectorySeparator(volumeGuid, false); - - - // ChangeErrorMode is for the Win32 SetThreadErrorMode() method, used to suppress possible pop-ups. - using (new NativeMethods.ChangeErrorMode(NativeMethods.ErrorMode.FailCriticalErrors)) - - // SetVolumeMountPoint() - // In the ANSI version of this function, the name is limited to MAX_PATH characters. - // To extend this limit to 32,767 wide characters, call the Unicode version of the function and prepend "\\?\" to the path. - // 2014-01-29: MSDN does not confirm LongPath usage but a Unicode version of this function exists. - - if (!NativeMethods.SetVolumeMountPoint(volumeMountPoint, volumeGuid)) - { - var lastError = Marshal.GetLastWin32Error(); - - // If the lpszVolumeMountPoint parameter contains a path to a mounted folder, - // GetLastError returns ERROR_DIR_NOT_EMPTY, even if the directory is empty. - - if (lastError != Win32Errors.ERROR_DIR_NOT_EMPTY) - NativeError.ThrowException(lastError, volumeGuid); - } - } - - #endregion // SetVolumeMountPoint - - #endregion // Volume - - - #region Internal Methods - - /// Defines, redefines, or deletes MS-DOS device names. - /// - /// - /// defines a new MS-DOS device. deletes a previously defined MS-DOS device. - /// - /// - /// An MS-DOS device name string specifying the device the function is defining, redefining, or deleting. - /// - /// - /// A pointer to a path string that will implement this device. The string is an MS-DOS path string unless the - /// flag is specified, in which case this string is a path string. - /// - /// - /// The controllable aspects of the DefineDosDevice function, flags which will be combined with the - /// default. - /// - /// - /// Only delete MS-DOS device on an exact name match. If is , - /// must be the same path used to create the mapping. - /// - /// - /// on success, otherwise. - [SecurityCritical] - internal static void DefineDosDeviceCore(bool isDefine, string deviceName, string targetPath, DosDeviceAttributes deviceAttributes, bool exactMatch) - { - if (Utils.IsNullOrWhiteSpace(deviceName)) - throw new ArgumentNullException("deviceName"); - - if (isDefine) - { - // targetPath is allowed to be null. - - // In no case is a trailing backslash ("\") allowed. - deviceName = Path.GetRegularPathCore(deviceName, GetFullPathOptions.RemoveTrailingDirectorySeparator | GetFullPathOptions.CheckInvalidPathChars, false); - - using (new NativeMethods.ChangeErrorMode(NativeMethods.ErrorMode.FailCriticalErrors)) - if (!NativeMethods.DefineDosDevice(deviceAttributes, deviceName, targetPath)) - NativeError.ThrowException(deviceName, targetPath); - } - else - { - // A pointer to a path string that will implement this device. - // The string is an MS-DOS path string unless the DDD_RAW_TARGET_PATH flag is specified, in which case this string is a path string. - - if (exactMatch && !Utils.IsNullOrWhiteSpace(targetPath)) - deviceAttributes = deviceAttributes | DosDeviceAttributes.ExactMatchOnRemove | DosDeviceAttributes.RawTargetPath; - - // Remove the MS-DOS device name. First, get the name of the Windows NT device - // from the symbolic link and then delete the symbolic link from the namespace. - - DefineDosDevice(deviceName, targetPath, deviceAttributes); - } - } - - /// Deletes a Drive letter or mounted folder. - /// - /// It's not an error to attempt to unmount a volume from a volume mount point when there is no volume actually mounted at that volume mount point. - /// Deleting a mounted folder does not cause the underlying directory to be deleted. - /// - /// - /// The Drive letter or mounted folder to be deleted. For example, X:\ or Y:\MountX\. - /// - /// suppress any Exception that might be thrown as a result from a failure, such as unavailable resources. - /// - /// If completed successfully returns , otherwise the last error number. - [SecurityCritical] - internal static int DeleteVolumeMountPointCore(string volumeMountPoint, bool continueOnException) - { - if (Utils.IsNullOrWhiteSpace(volumeMountPoint)) - throw new ArgumentNullException("volumeMountPoint"); - - var lastError = (int) Win32Errors.ERROR_SUCCESS; - - using (new NativeMethods.ChangeErrorMode(NativeMethods.ErrorMode.FailCriticalErrors)) - { - // DeleteVolumeMountPoint() - // In the ANSI version of this function, the name is limited to MAX_PATH characters. - // To extend this limit to 32,767 wide characters, call the Unicode version of the function and prepend "\\?\" to the path. - // 2013-01-13: MSDN does not confirm LongPath usage but a Unicode version of this function exists. - - if (!NativeMethods.DeleteVolumeMountPoint(Path.AddTrailingDirectorySeparator(volumeMountPoint, false))) - lastError = Marshal.GetLastWin32Error(); - - if (lastError != Win32Errors.ERROR_SUCCESS && !continueOnException) - { - if (lastError == Win32Errors.ERROR_FILE_NOT_FOUND) - lastError = (int) Win32Errors.ERROR_PATH_NOT_FOUND; - - NativeError.ThrowException(lastError, volumeMountPoint); - } - } - - return lastError; - } - - #endregion // Internal Methods - } -} diff --git a/AlphaFS/Filesystem/VolumeInfo.cs b/AlphaFS/Filesystem/VolumeInfo.cs deleted file mode 100644 index 164215f..0000000 --- a/AlphaFS/Filesystem/VolumeInfo.cs +++ /dev/null @@ -1,462 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using Microsoft.Win32.SafeHandles; -using System; -using System.Diagnostics.CodeAnalysis; -using System.Runtime.InteropServices; -using System.Security; -using System.Text; - -namespace Alphaleonis.Win32.Filesystem -{ - /// Contains information about a filesystem Volume. - [SerializableAttribute] - [SecurityCritical] - public sealed class VolumeInfo - { - #region Constructor - - /// Initializes a VolumeInfo instance. - /// - /// - /// A valid drive path or drive letter. This can be either uppercase or lowercase, 'a' to 'z' or a network share in the format: \\server\share. - [SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "0", Justification = "Utils.IsNullOrWhiteSpace validates arguments.")] - public VolumeInfo(string volumeName) - { - if (Utils.IsNullOrWhiteSpace(volumeName)) - throw new ArgumentNullException("volumeName"); - - if (!volumeName.StartsWith(Path.LongPathPrefix, StringComparison.OrdinalIgnoreCase)) - volumeName = Path.IsUncPathCore(volumeName, false, false) - ? Path.GetLongPathCore(volumeName, GetFullPathOptions.None) - : Path.LongPathPrefix + volumeName; - else - { - if (volumeName.Length == 1) - volumeName += Path.VolumeSeparatorChar; - else if (!volumeName.StartsWith(Path.GlobalRootPrefix, StringComparison.OrdinalIgnoreCase)) - volumeName = Path.GetPathRoot(volumeName, false); - } - - if (Utils.IsNullOrWhiteSpace(volumeName)) - throw new ArgumentException("Argument must be a drive letter (\"C\"), RootDir (\"C:\\\") or UNC path (\"\\\\server\\share\")"); - - Name = Path.AddTrailingDirectorySeparator(volumeName, false); - - _volumeHandle = null; - } - - /// Initializes a VolumeInfo instance. - /// A valid drive path or drive letter. This can be either uppercase or lowercase, 'a' to 'z' or a network share in the format: "\\server\share". - /// Refreshes the state of the object. - /// suppress any Exception that might be thrown as a result from a failure, such as unavailable resources. - [SecurityCritical] - public VolumeInfo(string driveName, bool refresh, bool continueOnException) : this(driveName) - { - _continueOnAccessError = continueOnException; - - if (refresh) - Refresh(); - } - - /// Initializes a VolumeInfo instance. - /// An instance to a handle. - [SecurityCritical] - public VolumeInfo(SafeFileHandle volumeHandle) - { - _volumeHandle = volumeHandle; - } - - /// Initializes a VolumeInfo instance. - /// An instance to a handle. - /// Refreshes the state of the object. - /// suppress any Exception that might be thrown as a result from a failure, such as unavailable resources. - [SecurityCritical] - public VolumeInfo(SafeFileHandle volumeHandle, bool refresh, bool continueOnException) : this(volumeHandle) - { - _continueOnAccessError = continueOnException; - - if (refresh) - Refresh(); - } - - #endregion // Constructor - - #region Fields - - [NonSerialized] private readonly bool _continueOnAccessError; - [NonSerialized] private readonly SafeFileHandle _volumeHandle; - [NonSerialized] private NativeMethods.VolumeInfoAttributes _volumeInfoAttributes; - #endregion // Fields - - #region Methods - - #region Refresh - - /// Refreshes the state of the object. - public void Refresh() - { - var volumeNameBuffer = new StringBuilder(NativeMethods.MaxPath + 1); - var fileSystemNameBuffer = new StringBuilder(NativeMethods.MaxPath + 1); - int maximumComponentLength; - uint serialNumber; - - using (new NativeMethods.ChangeErrorMode(NativeMethods.ErrorMode.FailCriticalErrors)) - { - // GetVolumeInformationXxx() - // In the ANSI version of this function, the name is limited to 248 characters. - // To extend this limit to 32,767 wide characters, call the Unicode version of the function and prepend "\\?\" to the path. - // 2013-07-18: MSDN does not confirm LongPath usage but a Unicode version of this function exists. - - uint lastError; - - do - { - if (!(_volumeHandle != null && NativeMethods.IsAtLeastWindowsVista - - // GetVolumeInformationByHandle() / GetVolumeInformation() - // In the ANSI version of this function, the name is limited to 248 characters. - // To extend this limit to 32,767 wide characters, call the Unicode version of the function and prepend "\\?\" to the path. - // 2013-07-18: MSDN does not confirm LongPath usage but a Unicode version of this function exists. - - ? NativeMethods.GetVolumeInformationByHandle(_volumeHandle, volumeNameBuffer, (uint) volumeNameBuffer.Capacity, out serialNumber, out maximumComponentLength, out _volumeInfoAttributes, fileSystemNameBuffer, (uint) fileSystemNameBuffer.Capacity) - : NativeMethods.GetVolumeInformation(Path.AddTrailingDirectorySeparator(Name, false), volumeNameBuffer, (uint) volumeNameBuffer.Capacity, out serialNumber, out maximumComponentLength, out _volumeInfoAttributes, fileSystemNameBuffer, (uint) fileSystemNameBuffer.Capacity)) - // A trailing backslash is required. - ) - { - lastError = (uint) Marshal.GetLastWin32Error(); - switch (lastError) - { - case Win32Errors.ERROR_NOT_READY: - if (!_continueOnAccessError) - throw new DeviceNotReadyException(); - break; - - case Win32Errors.ERROR_MORE_DATA: - // With a large enough buffer this code never executes. - volumeNameBuffer.Capacity = volumeNameBuffer.Capacity*2; - fileSystemNameBuffer.Capacity = fileSystemNameBuffer.Capacity*2; - break; - - default: - if (!_continueOnAccessError) - NativeError.ThrowException(Name); - break; - } - } - else - break; - - } while (lastError == Win32Errors.ERROR_MORE_DATA); - } - - FullPath = Path.GetRegularPathCore(Name, GetFullPathOptions.None, false); - Name = volumeNameBuffer.ToString(); - - FileSystemName = fileSystemNameBuffer.ToString(); - FileSystemName = Utils.IsNullOrWhiteSpace(FileSystemName) ? null : FileSystemName; - - MaximumComponentLength = maximumComponentLength; - SerialNumber = serialNumber; - } - - #endregion // Refresh - - #region ToString - - /// Returns the full path of the volume. - /// A string that represents this instance. - public override string ToString() - { - return Guid; - } - - #endregion // ToString - - #endregion // Methods - - #region Properties - - #region CasePreservedNames - - /// The specified volume supports preserved case of file names when it places a name on disk. - public bool CasePreservedNames - { - get { return (_volumeInfoAttributes & NativeMethods.VolumeInfoAttributes.CasePreservedNames) == NativeMethods.VolumeInfoAttributes.CasePreservedNames; } - } - - #endregion // CasePreservedNames - - #region CaseSensitiveSearch - - /// The specified volume supports case-sensitive file names. - public bool CaseSensitiveSearch - { - get { return (_volumeInfoAttributes & NativeMethods.VolumeInfoAttributes.CaseSensitiveSearch) == NativeMethods.VolumeInfoAttributes.CaseSensitiveSearch; } - } - - #endregion // CaseSensitiveSearch - - #region Compression - - /// The specified volume supports file-based compression. - public bool Compression - { - get { return (_volumeInfoAttributes & NativeMethods.VolumeInfoAttributes.Compression) == NativeMethods.VolumeInfoAttributes.Compression; } - } - - #endregion // Compression - - #region FileSystemName - - /// Gets the name of the file system, for example, the FAT file system or the NTFS file system. - /// The name of the file system. - public string FileSystemName { get; private set; } - - #endregion // FileSystemName - - #region FullPath - - /// The full path to the volume. - public string FullPath { get; private set; } - - #endregion // FullPath - - #region Guid - - private string _guid; - - /// The volume GUID. - - public string Guid - { - get - { - if (Utils.IsNullOrWhiteSpace(_guid)) - _guid = !Utils.IsNullOrWhiteSpace(FullPath) ? Volume.GetUniqueVolumeNameForPath(FullPath) : null; - - return _guid; - } - } - - #endregion // Guid - - #region MaximumComponentLength - - /// Gets the maximum length of a file name component that the file system supports. - /// The maximum length of a file name component that the file system supports. - public int MaximumComponentLength { get; set; } - - #endregion // MaximumComponentLength - - #region Name - - /// Gets the label of the volume. - /// The label of the volume. - /// This property is the label assigned to the volume, such "MyDrive" - public string Name { get; private set; } - - #endregion // Name - - #region NamedStreams - - /// The specified volume supports named streams. - public bool NamedStreams - { - get { return (_volumeInfoAttributes & NativeMethods.VolumeInfoAttributes.NamedStreams) == NativeMethods.VolumeInfoAttributes.NamedStreams; } - } - - #endregion // NamedStreams - - #region PersistentAcls - - /// The specified volume preserves and enforces access control lists (ACL). - [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Acls")] - public bool PersistentAcls - { - get { return (_volumeInfoAttributes & NativeMethods.VolumeInfoAttributes.PersistentAcls) == NativeMethods.VolumeInfoAttributes.PersistentAcls; } - } - - #endregion // PersistentAcls - - #region ReadOnlyVolume - - /// The specified volume is read-only. - public bool ReadOnlyVolume - { - get { return (_volumeInfoAttributes & NativeMethods.VolumeInfoAttributes.ReadOnlyVolume) == NativeMethods.VolumeInfoAttributes.ReadOnlyVolume; } - } - - #endregion // ReadOnlyVolume - - #region SequentialWriteOnce - - /// The specified volume supports a single sequential write. - public bool SequentialWriteOnce - { - get { return (_volumeInfoAttributes & NativeMethods.VolumeInfoAttributes.SequentialWriteOnce) == NativeMethods.VolumeInfoAttributes.SequentialWriteOnce; } - } - - #endregion // SequentialWriteOnce - - #region SerialNumber - - /// Gets the volume serial number that the operating system assigns when a hard disk is formatted. - /// The volume serial number that the operating system assigns when a hard disk is formatted. - public long SerialNumber { get; private set; } - - #endregion // SerialNumber - - #region SupportsEncryption - - /// The specified volume supports the Encrypted File System (EFS). - public bool SupportsEncryption - { - get { return (_volumeInfoAttributes & NativeMethods.VolumeInfoAttributes.SupportsEncryption) == NativeMethods.VolumeInfoAttributes.SupportsEncryption; } - } - - #endregion // SupportsEncryption - - #region SupportsExtendedAttributes - - /// The specified volume supports extended attributes. - public bool SupportsExtendedAttributes - { - get { return (_volumeInfoAttributes & NativeMethods.VolumeInfoAttributes.SupportsExtendedAttributes) == NativeMethods.VolumeInfoAttributes.SupportsExtendedAttributes; } - } - - #endregion // SupportsExtendedAttributes - - #region SupportsHardLinks - - /// The specified volume supports hard links. - public bool SupportsHardLinks - { - get { return (_volumeInfoAttributes & NativeMethods.VolumeInfoAttributes.SupportsHardLinks) == NativeMethods.VolumeInfoAttributes.SupportsHardLinks; } - } - - #endregion // SupportsHardLinks - - #region SupportsObjectIds - - /// The specified volume supports object identifiers. - public bool SupportsObjectIds - { - get { return (_volumeInfoAttributes & NativeMethods.VolumeInfoAttributes.SupportsObjectIds) == NativeMethods.VolumeInfoAttributes.SupportsObjectIds; } - } - - #endregion // SupportsObjectIds - - #region SupportsOpenByFileId - - /// The file system supports open by FileID. - public bool SupportsOpenByFileId - { - get { return (_volumeInfoAttributes & NativeMethods.VolumeInfoAttributes.SupportsOpenByFileId) == NativeMethods.VolumeInfoAttributes.SupportsOpenByFileId; } - } - - #endregion // SupportsOpenByFileId - - #region SupportsRemoteStorage - - /// The specified volume supports remote storage. (This property does not appear on MSDN) - public bool SupportsRemoteStorage - { - get { return (_volumeInfoAttributes & NativeMethods.VolumeInfoAttributes.SupportsRemoteStorage) == NativeMethods.VolumeInfoAttributes.SupportsRemoteStorage; } - } - - #endregion // SupportsRemoteStorage - - #region SupportsReparsePoints - - /// The specified volume supports re-parse points. - public bool SupportsReparsePoints - { - get { return (_volumeInfoAttributes & NativeMethods.VolumeInfoAttributes.SupportsReparsePoints) == NativeMethods.VolumeInfoAttributes.SupportsReparsePoints; } - } - - #endregion // SupportsReparsePoints - - #region SupportsSparseFiles - - /// The specified volume supports sparse files. - public bool SupportsSparseFiles - { - get { return (_volumeInfoAttributes & NativeMethods.VolumeInfoAttributes.SupportsSparseFiles) == NativeMethods.VolumeInfoAttributes.SupportsSparseFiles; } - } - - #endregion // SupportsSparseFiles - - #region SupportsTransactions - - /// The specified volume supports transactions. - public bool SupportsTransactions - { - get { return (_volumeInfoAttributes & NativeMethods.VolumeInfoAttributes.SupportsTransactions) == NativeMethods.VolumeInfoAttributes.SupportsTransactions; } - } - - #endregion // SupportsTransactions - - #region SupportsUsnJournal - - /// The specified volume supports update sequence number (USN) journals. - [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Usn")] - public bool SupportsUsnJournal - { - get { return (_volumeInfoAttributes & NativeMethods.VolumeInfoAttributes.SupportsUsnJournal) == NativeMethods.VolumeInfoAttributes.SupportsUsnJournal; } - } - - #endregion // SupportsUsnJournal - - #region UnicodeOnDisk - - /// The specified volume supports Unicode in file names as they appear on disk. - public bool UnicodeOnDisk - { - get { return (_volumeInfoAttributes & NativeMethods.VolumeInfoAttributes.UnicodeOnDisk) == NativeMethods.VolumeInfoAttributes.UnicodeOnDisk; } - } - - #endregion // UnicodeOnDisk - - #region VolumeIsCompressed - - /// The specified volume is a compressed volume, for example, a DoubleSpace volume. - public bool VolumeIsCompressed - { - get { return (_volumeInfoAttributes & NativeMethods.VolumeInfoAttributes.VolumeIsCompressed) == NativeMethods.VolumeInfoAttributes.VolumeIsCompressed; } - } - - #endregion // VolumeIsCompressed - - #region VolumeQuotas - - /// The specified volume supports disk quotas. - public bool VolumeQuotas - { - get { return (_volumeInfoAttributes & NativeMethods.VolumeInfoAttributes.VolumeQuotas) == NativeMethods.VolumeInfoAttributes.VolumeQuotas; } - } - - #endregion // VolumeQuotas - - #endregion // Properties - } -} diff --git a/AlphaFS/GlobalSuppressions.cs b/AlphaFS/GlobalSuppressions.cs deleted file mode 100644 index 65a2170..0000000 --- a/AlphaFS/GlobalSuppressions.cs +++ /dev/null @@ -1,34 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -// This file is used by Code Analysis to maintain SuppressMessage -// attributes that are applied to this project. -// Project-level suppressions either have no target or are given -// a specific target and scoped to a namespace, type, member, etc. -// -// To add a suppression to this file, right-click the message in the -// Error List, point to "Suppress Message(s)", and click -// "In Project Suppression File". -// You do not need to add suppressions to this file manually. -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Alphaleonis", Scope = "namespace", Target = "Alphaleonis.Win32.Network")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Alphaleonis", Scope = "namespace", Target = "Alphaleonis.Win32.Security")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1020:AvoidNamespacesWithFewTypes", Scope = "namespace", Target = "Alphaleonis.Win32.Security")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Filesystem", Scope = "namespace", Target = "Alphaleonis.Win32.Filesystem")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Alphaleonis", Scope = "namespace", Target = "Alphaleonis.Win32.Filesystem")] diff --git a/AlphaFS/NativeError.cs b/AlphaFS/NativeError.cs deleted file mode 100644 index 54e78d1..0000000 --- a/AlphaFS/NativeError.cs +++ /dev/null @@ -1,159 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using Alphaleonis.Win32.Filesystem; -using System; -using System.ComponentModel; -using System.Diagnostics.CodeAnalysis; -using System.Globalization; -using System.IO; -using System.Runtime.InteropServices; -using System.Security.Policy; - -namespace Alphaleonis.Win32 -{ - internal static class NativeError - { - internal static void ThrowException() - { - ThrowException((uint)Marshal.GetLastWin32Error(), null, null); - } - - public static void ThrowException(int errorCode) - { - ThrowException((uint)errorCode, null, null); - } - - public static void ThrowException(int errorCode, string readPath) - { - ThrowException((uint)errorCode, readPath, null); - } - - public static void ThrowException(int errorCode, string readPath, string writePath) - { - ThrowException((uint)errorCode, readPath, writePath); - } - - public static void ThrowException(uint errorCode, string readPath) - { - ThrowException(errorCode, readPath, null); - } - - [SuppressMessage("Microsoft.Maintainability", "CA1502:AvoidExcessiveComplexity")] - public static void ThrowException(uint errorCode, string readPath, string writePath) - { - string errorMessage = string.Format(CultureInfo.CurrentCulture, "({0}) {1}.", errorCode, new Win32Exception((int)errorCode).Message); - - if (!Utils.IsNullOrWhiteSpace(readPath)) - errorMessage = string.Format(CultureInfo.CurrentCulture, "{0}: [{1}]", errorMessage.TrimEnd('.'), readPath); - - if (!Utils.IsNullOrWhiteSpace(writePath)) - errorMessage = string.Format(CultureInfo.CurrentCulture, "{0}: [{1}]", errorMessage.TrimEnd('.'), writePath); - - switch (errorCode) - { - case Win32Errors.ERROR_INVALID_DRIVE: - throw new DriveNotFoundException(errorMessage); - - case Win32Errors.ERROR_OPERATION_ABORTED: - throw new OperationCanceledException(errorMessage); - - case Win32Errors.ERROR_FILE_NOT_FOUND: - throw new FileNotFoundException(errorMessage); - - case Win32Errors.ERROR_PATH_NOT_FOUND: - throw new DirectoryNotFoundException(errorMessage); - - case Win32Errors.ERROR_BAD_RECOVERY_POLICY: - throw new PolicyException(errorMessage); - - case Win32Errors.ERROR_FILE_READ_ONLY: - case Win32Errors.ERROR_ACCESS_DENIED: - case Win32Errors.ERROR_NETWORK_ACCESS_DENIED: - throw new UnauthorizedAccessException(errorMessage); - - case Win32Errors.ERROR_ALREADY_EXISTS: - case Win32Errors.ERROR_FILE_EXISTS: - throw new AlreadyExistsException(errorMessage); - - case Win32Errors.ERROR_DIR_NOT_EMPTY: - throw new DirectoryNotEmptyException(errorMessage); - - case Win32Errors.ERROR_NOT_READY: - throw new DeviceNotReadyException(errorMessage); - - - #region Transactional - - case Win32Errors.ERROR_INVALID_TRANSACTION: - throw new InvalidTransactionException(Resources.Transaction_Invalid, Marshal.GetExceptionForHR(Win32Errors.GetHrFromWin32Error(errorCode))); - - case Win32Errors.ERROR_TRANSACTION_ALREADY_COMMITTED: - throw new TransactionAlreadyCommittedException(Resources.Transaction_Already_Committed, Marshal.GetExceptionForHR(Win32Errors.GetHrFromWin32Error(errorCode))); - - case Win32Errors.ERROR_TRANSACTION_ALREADY_ABORTED: - throw new TransactionAlreadyAbortedException(Resources.Transaction_Already_Aborted, Marshal.GetExceptionForHR(Win32Errors.GetHrFromWin32Error(errorCode))); - - case Win32Errors.ERROR_TRANSACTIONAL_CONFLICT: - throw new TransactionalConflictException(Resources.Transactional_Conflict, Marshal.GetExceptionForHR(Win32Errors.GetHrFromWin32Error(errorCode))); - - case Win32Errors.ERROR_TRANSACTION_NOT_ACTIVE: - throw new TransactionException(Resources.Transaction_Not_Active, Marshal.GetExceptionForHR(Win32Errors.GetHrFromWin32Error(errorCode))); - - case Win32Errors.ERROR_TRANSACTION_NOT_REQUESTED: - throw new TransactionException(Resources.Transaction_Not_Requested, Marshal.GetExceptionForHR(Win32Errors.GetHrFromWin32Error(errorCode))); - - case Win32Errors.ERROR_TRANSACTION_REQUEST_NOT_VALID: - throw new TransactionException(Resources.Invalid_Transaction_Request, Marshal.GetExceptionForHR(Win32Errors.GetHrFromWin32Error(errorCode))); - - case Win32Errors.ERROR_TRANSACTIONS_UNSUPPORTED_REMOTE: - throw new UnsupportedRemoteTransactionException(Resources.Invalid_Transaction_Request, Marshal.GetExceptionForHR(Win32Errors.GetHrFromWin32Error(errorCode))); - - case Win32Errors.ERROR_NOT_A_REPARSE_POINT: - throw new NotAReparsePointException(Resources.Not_A_Reparse_Point, Marshal.GetExceptionForHR(Win32Errors.GetHrFromWin32Error(errorCode))); - - #endregion // Transacted - - case Win32Errors.ERROR_SUCCESS: - case Win32Errors.ERROR_SUCCESS_REBOOT_INITIATED: - case Win32Errors.ERROR_SUCCESS_REBOOT_REQUIRED: - case Win32Errors.ERROR_SUCCESS_RESTART_REQUIRED: - // We should really never get here, throwing an exception for a successful operation. - throw new NotImplementedException(string.Format(CultureInfo.CurrentCulture, "{0} {1}", Resources.Exception_From_Successful_Operation, errorMessage)); - - default: - // We don't have a specific exception to generate for this error. - throw new IOException(errorMessage, Win32Errors.GetHrFromWin32Error(errorCode)); - } - } - - - public static void ThrowException(string readPath) - { - ThrowException((uint)Marshal.GetLastWin32Error(), readPath, null); - } - - public static void ThrowException(string readPath, string writePath) - { - ThrowException((uint)Marshal.GetLastWin32Error(), readPath, writePath); - } - } -} diff --git a/AlphaFS/Network/DfsInfo.cs b/AlphaFS/Network/DfsInfo.cs deleted file mode 100644 index 1ab4318..0000000 --- a/AlphaFS/Network/DfsInfo.cs +++ /dev/null @@ -1,148 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using Alphaleonis.Win32.Filesystem; -using System; -using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; -using System.Runtime.InteropServices; - -namespace Alphaleonis.Win32.Network -{ - /// Contains information about a Distributed File System (DFS) root or link. This class cannot be inherited. - /// This structure contains the name, status, GUID, time-out, number of targets, and information about each target of the root or link. - /// - [SerializableAttribute] - [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Dfs")] - public sealed class DfsInfo - { - #region Constructor - - /// Initializes a new instance of the class which acts as a wrapper for a DFS root or link target. - public DfsInfo() - { - } - - /// Initializes a new instance of the class, which acts as a wrapper for a DFS root or link target. - /// An initialized instance. - internal DfsInfo(NativeMethods.DFS_INFO_9 structure) - { - Comment = structure.Comment; - EntryPath = structure.EntryPath; - State = structure.State; - Timeout = structure.Timeout; - Guid = structure.Guid; - MetadataSize = structure.MetadataSize; - PropertyFlags = structure.PropertyFlags; - SecurityDescriptor = structure.pSecurityDescriptor; - - if (structure.NumberOfStorages > 0) - { - var typeOfStruct = typeof (NativeMethods.DFS_STORAGE_INFO_1); - var sizeOfStruct = Marshal.SizeOf(typeOfStruct); - - for (int i = 0; i < structure.NumberOfStorages; i++) - _storageInfoCollection.Add(new DfsStorageInfo((NativeMethods.DFS_STORAGE_INFO_1) Marshal.PtrToStructure(new IntPtr(structure.Storage.ToInt64() + i*sizeOfStruct), typeOfStruct))); - } - } - - #endregion // Constructor - - #region Methods - - /// Returns the Universal Naming Convention (UNC) path of the DFS root or link. - /// A string that represents this instance. - public override string ToString() - { - return EntryPath; - } - - #endregion // Methods - - #region Properties - - private DirectoryInfo _directoryInfo; - - /// The instance of the DFS root or link. - public DirectoryInfo DirectoryInfo - { - get - { - // Do not use ?? expression here. - if (_directoryInfo == null) - _directoryInfo = new DirectoryInfo(null, EntryPath, PathFormat.FullPath); - - return _directoryInfo; - } - } - - /// The comment of the DFS root or link. - public string Comment { get; internal set; } - - /// The Universal Naming Convention (UNC) path of the DFS root or link. - public string EntryPath { get; internal set; } - - /// Specifies the GUID of the DFS root or link. - public Guid Guid { get; internal set; } - - - private readonly List _storageInfoCollection = new List(); - - /// The collection of DFS targets of the DFS root or link. - public IEnumerable StorageInfoCollection - { - get { return _storageInfoCollection; } - } - - /// An enum that specifies a set of bit flags that describe the DFS root or link. - public DfsVolumeStates State { get; internal set; } - - //DfsVolumeStates flavorBits = (structure3.State & (DfsVolumeStates) DfsNamespaceFlavors.All); - //If (flavorBits == DFS_VOLUME_FLAVOR_STANDALONE) // Namespace is stand-alone DFS. - //else if (flavorBits == DFS_VOLUME_FLAVOR_AD_BLOB) // Namespace is AD Blob. - //else StateBits = (Flavor & DFS_VOLUME_STATES) // Unknown flavor. - // StateBits can be one of the following: - // (DFS_VOLUME_STATE_OK, DFS_VOLUME_STATE_INCONSISTENT, - // DFS_VOLUME_STATE_OFFLINE or DFS_VOLUME_STATE_ONLINE) - //State = flavorBits | structure3.State; - - /// Specifies the time-out, in seconds, of the DFS root or link. - public long Timeout { get; internal set; } - - /// Specifies a set of flags that describe specific properties of a DFS namespace, root, or link. - [SuppressMessage("Microsoft.Naming", "CA1726:UsePreferredTerms", MessageId = "Flags")] - public DfsPropertyFlags PropertyFlags { get; internal set; } - - /// For domain-based DFS namespaces, this member specifies the size of the corresponding Active Directory data blob, in bytes. - /// For stand-alone DFS namespaces, this field specifies the size of the metadata stored in the registry, - /// including the key names and value names, in addition to the specific data items associated with them. This field is valid for DFS roots only. - /// - public long MetadataSize { get; internal set; } - - - /// Pointer to a SECURITY_DESCRIPTOR structure that specifies a self-relative security descriptor to be associated with the DFS link's reparse point. - /// This field is valid for DFS links only. - /// - public IntPtr SecurityDescriptor { get; internal set; } - - #endregion // Properties - } -} diff --git a/AlphaFS/Network/DfsStorageInfo.cs b/AlphaFS/Network/DfsStorageInfo.cs deleted file mode 100644 index 0e0e033..0000000 --- a/AlphaFS/Network/DfsStorageInfo.cs +++ /dev/null @@ -1,84 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System.Diagnostics.CodeAnalysis; - -namespace Alphaleonis.Win32.Network -{ - /// Contains information about a DFS root or link target in a DFS namespace or from the cache maintained by the DFS client. - /// This class cannot be inherited. - /// - [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Dfs")] - public sealed class DfsStorageInfo - { - #region Constructor - - /// Initializes a new instance of the class, which acts as a wrapper for a DFS root or link target. - public DfsStorageInfo() - { - } - - /// Initializes a new instance of the class, which acts as a wrapper for a DFS root or link target. - /// An initialized instance. - internal DfsStorageInfo(NativeMethods.DFS_STORAGE_INFO_1 structure) - { - ServerName = structure.ServerName; - ShareName = structure.ShareName; - - State = structure.State; - - TargetPriorityClass = structure.TargetPriority.TargetPriorityClass; - TargetPriorityRank = structure.TargetPriority.TargetPriorityRank; - } - - #endregion // Constructor - - #region Methods - - /// The share name of the DFS root target or link target. - /// A string that represents this instance. - public override string ToString() - { - return ShareName; - } - - #endregion // Methods - - #region Properties - - /// The server name of the DFS root target or link target. - public string ServerName { get; private set; } - - /// The share name of the DFS root target or link target. - public string ShareName { get; private set; } - - /// An enum of the DFS root target or link target. - public DfsStorageStates State { get; private set; } - - /// Contains a DFS target's priority class and rank. - public DfsTargetPriorityClass TargetPriorityClass { get; private set; } - - /// Specifies the priority rank value of the target. The default value is 0, which indicates the highest priority rank within a priority class. - public int TargetPriorityRank { get; private set; } - - #endregion // Properties - } -} diff --git a/AlphaFS/Network/Enumerations/AccessPermissions.cs b/AlphaFS/Network/Enumerations/AccessPermissions.cs deleted file mode 100644 index c87ecde..0000000 --- a/AlphaFS/Network/Enumerations/AccessPermissions.cs +++ /dev/null @@ -1,74 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System; - -namespace Alphaleonis.Win32.Network -{ - /// A set of bit flags that describe the permissions for the shared resource's on servers running with share-level security. - /// Note that Windows does not support share-level security. This member is ignored on a server running user-level security. - [Flags] - public enum AccessPermissions - { - /// No permissions. - None = 0, - - /// ACCESS_READ - /// Permission to read data from a resource and, by default, to execute the resource. - /// - Read = 1, - - /// ACCESS_WRITE - /// Permission to write data to the resource. - /// - Write = 2, - - /// ACCESS_CREATE - /// Permission to create an instance of the resource (such as a file); data can be written to the resource as the resource is created. - /// - Create = 4, - - /// ACCESS_EXEC - /// Permission to execute the resource. - /// - Execute = 8, - - /// ACCESS_DELETE - /// Permission to delete the resource. - /// - Delete = 16, - - /// ACCESS_ATRIB - /// Permission to modify the resource's attributes, such as the date and time when a file was last modified. - /// - Attributes = 32, - - /// ACCESS_PERM - /// Permission to modify the permissions (read, write, create, execute, and delete) assigned to a resource for a user or application. - /// - Permissions = 64, - - /// ACCESS_ALL - /// Permission to read, write, create, execute, and delete resources, and to modify their attributes and permissions. - /// - All = 32768 - } -} \ No newline at end of file diff --git a/AlphaFS/Network/Enumerations/Connect.cs b/AlphaFS/Network/Enumerations/Connect.cs deleted file mode 100644 index d2c8d0f..0000000 --- a/AlphaFS/Network/Enumerations/Connect.cs +++ /dev/null @@ -1,57 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System; - -namespace Alphaleonis.Win32.Network -{ - internal static partial class NativeMethods - { - /// Used by function WNetUseConnection(); Set of bit flags describing the connection. This parameter can be any combination of the following values. - [Flags] - internal enum Connect - { - /// No Connect options are used. - None = 0, - - /// This flag instructs the operating system to store the network resource connection. If this bit flag is set, the operating system automatically attempts to restore the connection when the user logs on. The system remembers only successful connections that redirect local devices. It does not remember connections that are unsuccessful or deviceless connections. - UpdateProfile = 1, - - /// If this flag is set, the operating system may interact with the user for authentication purposes. - Interactive = 8, - - /// This flag instructs the system not to use any default settings for user names or passwords without offering the user the opportunity to supply an alternative. This flag is ignored unless is also set. - Prompt = 16, - - /// This flag forces the redirection of a local device when making the connection. - Redirect = 128, - - ///// If this flag is set, the connection was made using a local device redirection. If the lpAccessName parameter points to a buffer, the local device name is copied to the buffer. - //LocalDrive = 256, - - // If this flag is set, the operating system prompts the user for authentication using the command line instead of a graphical user interface (GUI). This flag is ignored unless is also set. - //CommandLine = 2048, - - /// If this flag is set, and the operating system prompts for a credential, the credential should be saved by the credential manager. If the credential manager is disabled for the caller's logon session, or if the network provider does not support saving credentials, this flag is ignored. This flag is also ignored unless you set the "CommandLine" flag. - SaveCredentialManager = 4096 - } - } -} \ No newline at end of file diff --git a/AlphaFS/Network/Enumerations/DfsNamespaceFlavors.cs b/AlphaFS/Network/Enumerations/DfsNamespaceFlavors.cs deleted file mode 100644 index 50959cb..0000000 --- a/AlphaFS/Network/Enumerations/DfsNamespaceFlavors.cs +++ /dev/null @@ -1,55 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System; -using System.Diagnostics.CodeAnalysis; - -namespace Alphaleonis.Win32.Network -{ - internal static partial class NativeMethods - { - /// Contains the name and type (domain-based or stand-alone) of a DFS namespace. - /// Minimum supported client: Windows XP with SP1 [desktop apps only] - /// Minimum supported server: Windows Server 2003 [desktop apps only] - [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Dfs")] - [Flags] - internal enum DfsNamespaceFlavors - { - /// - Unknown = 0, - - /// DFS_VOLUME_FLAVOR_STANDALONE - /// Specifies a stand-alone DFS namespace. - /// - Standalone = 256, - - /// DFS_VOLUME_FLAVOR_AD_BLOB - /// Specifies a domain-based DFS namespace. - /// - AdBlob = 512, - - /// DFS_VOLUME_FLAVORS bitmask (0x00000300) - /// Used to extract the DFS namespace flavor. - /// - All = 768 - } - } -} \ No newline at end of file diff --git a/AlphaFS/Network/Enumerations/DfsPropertyFlags.cs b/AlphaFS/Network/Enumerations/DfsPropertyFlags.cs deleted file mode 100644 index 5472f50..0000000 --- a/AlphaFS/Network/Enumerations/DfsPropertyFlags.cs +++ /dev/null @@ -1,104 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System; -using System.Diagnostics.CodeAnalysis; - -namespace Alphaleonis.Win32.Network -{ - /// A set of bit flags that describe specific properties of a DFS namespace, root, or link. - [SuppressMessage("Microsoft.Naming", "CA1726:UsePreferredTerms", MessageId = "Flags")] - [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Dfs")] - [Flags] - public enum DfsPropertyFlags - { - /// No property flag. - None = 0, - - /// DFS_PROPERTY_FLAG_INSITE_REFERRALS - /// - /// Scope: Domain roots, stand-alone roots, and links. - /// If this flag is set at the DFS root, it applies to all links; otherwise, the value of this flag is considered for each individual link. - /// - /// - /// When this flag is set, a DFS referral response from a DFS server for a DFS root or link with the "INSITE" option enabled contains only - /// those targets which are in the same site as the DFS client requesting the referral. - /// Targets in the two global priority classes are always returned, regardless of their site location. - /// - /// - [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Insite")] - InsiteReferrals = 1, - - /// DFS_PROPERTY_FLAG_ROOT_SCALABILITY - /// - /// Scope: The entire DFS namespace for a domain-based DFS namespace only. - /// - /// - /// By default, a DFS root target server polls the PDS to detect changes to the DFS metadata. - /// To prevent heavy server load on the PDC, root scalability can be enabled for the DFS namespace. - /// Setting this flag will cause the DFS server to poll the nearest domain controller instead of the PDC for DFS metadata changes for the common namespace. - /// Note that any changes made to the metadata must still occur on the PDC, however. - /// - /// - RootScalability = 2, - - /// DFS_PROPERTY_FLAG_SITE_COSTING - /// - /// Scope: The entire DFS namespace for both domain-based and stand-alone DFS namespaces. - /// - /// - /// By default, targets returned in a referral response from a DFS server to a DFS client for a DFS root or link - /// consists of two groups: targets in the same site as the client, and targets outside the site. - /// - /// - /// If site-costing is enabled for the Active Directory, the response can have more than two groups, - /// with each group containing targets with the same site cost for the specific DFS client requesting the referral. - /// The groups are ordered by increasing site cost. For more information about how site-costing is used to prioritize targets. - /// - /// - SiteCosting = 4, - - /// DFS_PROPERTY_FLAG_TARGET_FAILBACK - /// - /// Scope: Domain-based DFS roots, stand-alone DFS roots, and DFS links. - /// If this flag is set at the DFS root, it applies to all links; otherwise, the value of this flag is considered for each individual link. - /// - /// - /// When this flag is set, optimal target failback is enabled for V4 DFS clients, - /// allowing them to fail back to an optimal target after failing over to a non-optimal one. - /// The target failback setting is provided to the DFS client in a V4 referral response by a DFS server. - /// - /// - TargetFailback = 8, - - /// DFS_PROPERTY_FLAG_CLUSTER_ENABLED - /// Scope: Stand-alone DFS roots and links only. - /// The DFS root is clustered to provide high availability for storage failover. - /// - ClusterEnabled = 16, - - /// DFS_PROPERTY_FLAG_ABDE - /// Scope: Domain-based DFS roots and stand-alone DFS roots. - /// When this flag is set, Access-Based Directory Enumeration (ABDE) mode support is enabled on the entire DFS root target share of the DFS namespace. - /// - AccessBasedDirectoryEnumeration = 32 - } -} diff --git a/AlphaFS/Network/Enumerations/DfsStorageStates.cs b/AlphaFS/Network/Enumerations/DfsStorageStates.cs deleted file mode 100644 index 3ddb140..0000000 --- a/AlphaFS/Network/Enumerations/DfsStorageStates.cs +++ /dev/null @@ -1,51 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System; -using System.Diagnostics.CodeAnalysis; - -namespace Alphaleonis.Win32.Network -{ - /// A set of bit flags that describe the storage state of the DFS root or link target. - [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Dfs")] - [Flags] - public enum DfsStorageStates - { - /// No storage state. - None = 0, - - /// DFS_STORAGE_STATE_OFFLINE - /// The DFS root or link target is offline. - /// - /// Windows Server 2003: The state of a root target cannot be set to DFS_STORAGE_STATE_OFFLINE. - Offline = 1, - - /// DFS_STORAGE_STATE_ONLINE - /// The DFS root or link target is online. - /// - Online = 2, - - /// DFS_STORAGE_STATE_ACTIVE - /// The DFS root or link target is the active target. - /// - Active = 4 - } -} \ No newline at end of file diff --git a/AlphaFS/Network/Enumerations/DfsTargetPriorityClass.cs b/AlphaFS/Network/Enumerations/DfsTargetPriorityClass.cs deleted file mode 100644 index 5f456cc..0000000 --- a/AlphaFS/Network/Enumerations/DfsTargetPriorityClass.cs +++ /dev/null @@ -1,54 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System.Diagnostics.CodeAnalysis; - -namespace Alphaleonis.Win32.Network -{ - /// Defines the set of possible DFS target priority class settings. - [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Dfs")] - public enum DfsTargetPriorityClass - { - /// The priority class is not valid. - [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Dfs")] - DfsInvalidPriorityClass = -1, - - /// The middle or "normal" site cost priority class for a DFS target. - [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Dfs")] - DfsSiteCostNormalPriorityClass = 0, - - /// The highest priority class for a DFS target. Targets assigned this class receive global preference. - [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Dfs")] - DfsGlobalHighPriorityClass = 1, - - /// The highest site cost priority class for a DFS target. Targets assigned this class receive the most preference among targets of the same site cost for a given DFS client. - [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Dfs")] - DfsSiteCostHighPriorityClass = 2, - - /// The lowest site cost priority class for a DFS target. Targets assigned this class receive the least preference among targets of the same site cost for a given DFS client. - [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Dfs")] - DfsSiteCostLowPriorityClass = 3, - - /// The lowest level of priority class for a DFS target. Targets assigned this class receive the least preference globally. - [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Dfs")] - DfsGlobalLowPriorityClass = 4 - } -} diff --git a/AlphaFS/Network/Enumerations/DfsVolumeStates.cs b/AlphaFS/Network/Enumerations/DfsVolumeStates.cs deleted file mode 100644 index 817ddf2..0000000 --- a/AlphaFS/Network/Enumerations/DfsVolumeStates.cs +++ /dev/null @@ -1,72 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System; -using System.Diagnostics.CodeAnalysis; - -namespace Alphaleonis.Win32.Network -{ - /// A set of bit flags that describe the state of the DFS root or link; - /// the state of the DFS namespace root cannot be changed. - /// One flag is set, and one DFS_VOLUME_FLAVOR flag is set. - /// - [SuppressMessage("Microsoft.Design", "CA1008:EnumsShouldHaveZeroValue")] - [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Dfs")] - [Flags] - public enum DfsVolumeStates - { - /// No volume state. - None = 0, - - /// DFS_VOLUME_STATE_OK - /// The specified DFS root or link is in the normal state. - /// - Ok = 1, - - /// DFS_VOLUME_STATE_INCONSISTENT - /// The internal DFS database is inconsistent with the specified DFS root or link. - /// Attempts to repair the inconsistency have failed. - /// - Inconsistent = 2, - - /// DFS_VOLUME_STATE_OFFLINE - /// The specified DFS root or link is offline or unavailable. - /// - Offline = 3, - - /// DFS_VOLUME_STATE_ONLINE - /// The specified DFS root or link is available. - /// - Online = 4, - - /// DFS_VOLUME_FLAVOR_STANDALONE - /// The system sets this flag if the root is associated with a stand-alone DFS namespace. - /// - /// Windows XP: This value is not supported. - FlavorStandalone = 256, - - /// DFS_VOLUME_FLAVOR_AD_BLOB - /// The system sets this flag if the root is associated with a domain-based DFS namespace. - /// - /// Windows XP: This value is not supported. - FlavorAdBlob = 512 - } -} \ No newline at end of file diff --git a/AlphaFS/Network/Enumerations/ResourceDisplayType.cs b/AlphaFS/Network/Enumerations/ResourceDisplayType.cs deleted file mode 100644 index ef8f047..0000000 --- a/AlphaFS/Network/Enumerations/ResourceDisplayType.cs +++ /dev/null @@ -1,90 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -namespace Alphaleonis.Win32.Network -{ - internal static partial class NativeMethods - { - /// The display options for the network object in a network browsing user interface. - internal enum ResourceDisplayType - { - /// RESOURCEDISPLAYTYPE_GENERIC - /// The method used to display the object does not matter. - /// - Generic = 0, - - /// RESOURCEDISPLAYTYPE_DOMAIN - /// The object should be displayed as a domain. - /// - Domain = 1, - - /// RESOURCEDISPLAYTYPE_SERVER - /// The object should be displayed as a server. - /// - Server = 2, - - /// RESOURCEDISPLAYTYPE_SHARE - /// The object should be displayed as a share - /// - Share = 3, - - /// RESOURCEDISPLAYTYPE_FILE - /// The object should be displayed as a file. - /// - File = 4, - - /// RESOURCEDISPLAYTYPE_GROUP - /// The object should be displayed as a group. - /// - Group = 5, - - /// RESOURCEDISPLAYTYPE_NETWORK - /// The object should be displayed as a network. - /// - Network = 6, - - /// RESOURCEDISPLAYTYPE_ROOT - /// The object should be displayed as a logical root for the entire network. - /// - Root = 7, - - /// RESOURCEDISPLAYTYPE_SHAREADMIN - /// The object should be displayed as a administrative share. - /// - ShareAdmin = 8, - - /// RESOURCEDISPLAYTYPE_DIRECTORY - /// The object should be displayed as a directory. - /// - Directory = 9, - - /// RESOURCEDISPLAYTYPE_TREE - /// The object should be displayed as a tree. - /// - Tree = 10, - - /// RESOURCEDISPLAYTYPE_NDSCONTAINER - /// The object should be displayed as a Netware Directory Service container. - /// - NdsContainer = 11 - } - } -} \ No newline at end of file diff --git a/AlphaFS/Network/Enumerations/ResourceScope.cs b/AlphaFS/Network/Enumerations/ResourceScope.cs deleted file mode 100644 index eade41b..0000000 --- a/AlphaFS/Network/Enumerations/ResourceScope.cs +++ /dev/null @@ -1,58 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -namespace Alphaleonis.Win32.Network -{ - internal static partial class NativeMethods - { - /// NETRESOURCE structure. - /// ResourceScope: The scope of the enumeration. - /// - internal enum ResourceScope - { - /// RESOURCE_CONNECTED - /// Enumerate all currently connected resources. - /// The function ignores the parameter. - /// - Connected = 1, - - /// RESOURCE_GLOBALNET - /// Enumerate all resources on the network. - /// - GlobalNet = 2, - - /// RESOURCE_REMEMBERED - /// Enumerate all remembered (persistent) connections. - /// The function ignores the parameter. - /// - Remembered = 3, - - /// RESOURCE_RECENT - Recent = 4, - - /// RESOURCE_CONTEXT - /// Enumerate only resources in the network context of the caller. Specify this value for a Network Neighborhood view. - /// The function ignores the parameter. - /// - Context = 5 - } - } -} \ No newline at end of file diff --git a/AlphaFS/Network/Enumerations/ResourceType.cs b/AlphaFS/Network/Enumerations/ResourceType.cs deleted file mode 100644 index 6e847e6..0000000 --- a/AlphaFS/Network/Enumerations/ResourceType.cs +++ /dev/null @@ -1,55 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -namespace Alphaleonis.Win32.Network -{ - internal static partial class NativeMethods - { - /// NETRESOURCE structure. - /// ResourceType: The type of resource. - /// - /// If a network provider cannot distinguish between - /// print and disk resources, it can enumerate all resources. - /// - /// - internal enum ResourceType - { - /// RESOURCETYPE_ANY - /// ResourceType: All resources. - /// - /// If a network provider cannot distinguish between print and disk resources, it can enumerate all resources. - /// This value cannot be combined with or . - /// - /// - Any = 0, - - /// RESOURCETYPE_DISK - /// All disk resources. - /// - Disk = 1, - - /// RESOURCETYPE_PRINT - /// All print resources. - /// - Print = 2, - } - } -} \ No newline at end of file diff --git a/AlphaFS/Network/Enumerations/ResourceUsage.cs b/AlphaFS/Network/Enumerations/ResourceUsage.cs deleted file mode 100644 index a59fd14..0000000 --- a/AlphaFS/Network/Enumerations/ResourceUsage.cs +++ /dev/null @@ -1,72 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System; - -namespace Alphaleonis.Win32.Network -{ - internal static partial class NativeMethods - { - /// NETRESOURCE structure. - /// ResourceUsage: A set of bit flags describing how the resource can be used. - /// - /// Note that this member can be specified only if the member is equal to . - [Flags] - internal enum ResourceUsage - { - /// RESOURCEUSAGE_CONNECTABLE - /// The resource is a connectable resource. - /// The name pointed to by the lpRemoteName member can be passed to the WNetAddConnection function to make a network connection. - /// - Connectable = 1, - - /// RESOURCEUSAGE_CONTAINER - /// The resource is a container resource. - /// The name pointed to by the lpRemoteName member can be passed to the WNetAddConnection function to make a network connection. - /// - Container = 2, - - /// RESOURCEUSAGE_NOLOCALDEVICE - /// The resource is not a local device. - /// - NoLocalDevice = 4, - - /// RESOURCEUSAGE_SIBLING - /// The resource is a sibling. - /// This value is not used by Windows. - /// - Sibling = 8, - - /// RESOURCEUSAGE_ATTACHED - /// The resource must be attached. - /// This value specifies that a function to enumerate this resource should fail - /// if the caller is not authenticated, even if the network permits enumeration without authentication. - /// - Attached = 16, - - - /// RESOURCEUSAGE_ALL - /// Setting this value is equivalent to setting: , , and . - /// - All = (Connectable | Container | Attached) - } - } -} \ No newline at end of file diff --git a/AlphaFS/Network/Enumerations/ShareInfoLevel.cs b/AlphaFS/Network/Enumerations/ShareInfoLevel.cs deleted file mode 100644 index d54262c..0000000 --- a/AlphaFS/Network/Enumerations/ShareInfoLevel.cs +++ /dev/null @@ -1,46 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -namespace Alphaleonis.Win32.Network -{ - /// The information level. - public enum ShareInfoLevel - { - /// No specific information level used. - None = 0, - - /// Contains information about the shared resource, including the name and type of the resource, and a comment associated with the resource. - Info1 = 1, - - /// Contains information about the shared resource, including the name, type, and permissions of the resource, comments associated with the resource, - /// the maximum number of concurrent connections, the number of current connections, the local path for the resource, and a password for the current connection. - /// - Info2 = 2, - - /// Contains information about the shared resource, including the server name, name of the resource, type, and permissions, - /// the number of connections, and other pertinent information. - /// - Info503 = 503, - - /// Contains information about the shared resource. - Info1005 = 1005, - } -} \ No newline at end of file diff --git a/AlphaFS/Network/Enumerations/ShareResourceTypes.cs b/AlphaFS/Network/Enumerations/ShareResourceTypes.cs deleted file mode 100644 index 85ed77f..0000000 --- a/AlphaFS/Network/Enumerations/ShareResourceTypes.cs +++ /dev/null @@ -1,91 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System; -using System.Diagnostics.CodeAnalysis; - -namespace Alphaleonis.Win32.Network -{ - /// Contains information about the shared resource. - /// - /// Minimum supported client: Windows XP [desktop apps only] - /// Minimum supported server: Windows Server 2003 [desktop apps only] - /// - [Flags] - public enum ShareResourceTypes - { - /// No specific resource type used. - None = 0, - - /// SHI1005_FLAGS_DFS - /// The specified share is present in a DFS tree structure. This flag cannot be set with NetShareSetInfo. - /// - [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Dfs")] - Dfs = 1, - - /// SHI1005_FLAGS_DFS_ROOT - /// The specified share is the root volume in a DFS tree structure. This flag cannot be set with NetShareSetInfo. - /// - [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Dfs")] - DfsRoot = 2, - - /// SHI1005_FLAGS_RESTRICT_EXCLUSIVE_OPENS - /// The specified share disallows exclusive file opens, where reads to an open file are disallowed. - /// - RestrictExclusiveOpens = 256, - - /// SHI1005_FLAGS_FORCE_SHARED_DELETE - /// Shared files in the specified share can be forcibly deleted. - /// - ForceSharedDelete = 512, - - /// SHI1005_FLAGS_ALLOW_NAMESPACE_CACHING - /// Clients are allowed to cache the namespace of the specified share. - /// - AllowNamespaceCaching = 1024, - - /// SHI1005_FLAGS_ACCESS_BASED_DIRECTORY_ENUM - /// The server will filter directory entries based on the access permissions that the user on the client computer has for the server on which the files reside. - /// Only files for which the user has read access and directories for which the user has FILE_LIST_DIRECTORY access will be returned. If the user has SeBackupPrivilege, all available information will be returned. - /// - /// This flag is supported only on servers running Windows Server 2003 with SP1 or later. - AccessBasedDirectoryEnum = 2048, - - /// SHI1005_FLAGS_FORCE_LEVELII_OPLOCK - /// Prevents exclusive caching modes that can cause delays for highly shared read-only data. - /// - /// This flag is supported only on servers running Windows Server 2008 R2 or later. - ForceLevel2OpLock = 4096, - - /// SHI1005_FLAGS_ENABLE_HASH - /// Enables server-side functionality needed for peer caching support. - /// Clients on high-latency or low-bandwidth connections can use alternate methods to retrieve data from peers if available, instead of sending requests to the server. - /// This is only supported on shares configured for manual caching (CSC_CACHE_MANUAL_REINT). - /// This flag is supported only on servers running Windows Server 2008 R2 or later. - EnableHash = 8192, - - /// SHI1005_FLAGS_ENABLE_CA (0X4000) - Enables server-side functionality needed for peer caching support. Clients on high-latency or low-bandwidth connections can use alternate methods to retrieve data from peers if available, instead of sending requests to the server. This is only supported on shares configured for manual caching (CSC_CACHE_MANUAL_REINT). - /// Windows 7, Windows Server 2008 R2, Windows Vista, Windows Server 2008, and Windows Server 2003: This flag is not supported. - [SuppressMessage("Microsoft.Naming", "CA1709:IdentifiersShouldBeCasedCorrectly", MessageId = "Ca")] - [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Ca")] - EnableCa = 16384, - } -} \ No newline at end of file diff --git a/AlphaFS/Network/Enumerations/ShareType.cs b/AlphaFS/Network/Enumerations/ShareType.cs deleted file mode 100644 index a35966f..0000000 --- a/AlphaFS/Network/Enumerations/ShareType.cs +++ /dev/null @@ -1,79 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System; -using System.Diagnostics.CodeAnalysis; - -namespace Alphaleonis.Win32.Network -{ - /// The type of the shared resource. - /// MSDN: 2.2.2.4 Share Types - /// http://msdn.microsoft.com/en-us/library/cc247110.aspx - /// - [SuppressMessage("Microsoft.Naming", "CA1714:FlagsEnumsShouldHavePluralNames")] - [SuppressMessage("Microsoft.Usage", "CA2217:DoNotMarkEnumsWithFlags")] - [SuppressMessage("Microsoft.Design", "CA1008:EnumsShouldHaveZeroValue")] - [Flags] // Needs Flags attribute to combine attributes. - public enum ShareType - { - /// Disk drive. - DiskTree = 0, - - /// Print queue. - PrintQueue = 1, - - /// Communication device. - Device = 2, - - /// Interprocess communication (IPC). - [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Ipc")] - Ipc = 3, - - /// A cluster share. - [SuppressMessage("Microsoft.Naming", "CA1709:IdentifiersShouldBeCasedCorrectly", MessageId = "Fs")] - [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Fs")] - ClusterFs = 33554432, - - /// A Scale-Out cluster share. - [SuppressMessage("Microsoft.Naming", "CA1709:IdentifiersShouldBeCasedCorrectly", MessageId = "Fs")] - [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Fs")] - ClusterSoFs = 67108864, - - /// A DFS share in a cluster. - [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Dfs")] - ClusterDfs = 134217728, - - - // The following table of values can be OR'd with the values in the preceding table to further specify the characteristics of a shared resource. - // It is possible to use both values in this OR operation. - - /// Special share reserved for interprocess communication (IPC$) or remote administration of the server (ADMIN$). - /// Can also refer to administrative shares such as C$, D$, E$, and so forth. - /// - Special = -2147483648, - - /// A temporary share that is not persisted for creation each time the file server initializes. - Temporary = 1073741824, - - /// Retriev all known - All = DiskTree | PrintQueue | Device | Ipc | ClusterFs | ClusterSoFs | ClusterDfs | Special | Temporary - } -} diff --git a/AlphaFS/Network/Host Class/Connect.cs b/AlphaFS/Network/Host Class/Connect.cs deleted file mode 100644 index b8805c6..0000000 --- a/AlphaFS/Network/Host Class/Connect.cs +++ /dev/null @@ -1,507 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using Alphaleonis.Win32.Filesystem; -using System; -using System.Diagnostics.CodeAnalysis; -using System.Globalization; -using System.Net; -using System.Net.NetworkInformation; -using System.Security; -using System.Text; - -namespace Alphaleonis.Win32.Network -{ - partial class Host - { - #region ConnectDrive - - /// Creates a connection to a network resource. The function can redirect a local device to a network resource. - /// If is or string.Empty, returns the last available drive letter, otherwise. - /// - /// The name of a local device to be redirected, such as "F:". When is or - /// string.Empty, the last available drive letter will be used. Letters are assigned beginning with Z:, then Y: and so on. - /// - /// The network resource to connect to. The string can be up to MAX_PATH characters in length. - [SecurityCritical] - public static string ConnectDrive(string localName, string remoteName) - { - return ConnectDisconnectCore(new ConnectDisconnectArguments - { - LocalName = localName, - RemoteName = remoteName, - IsDeviceMap = true - }); - } - - /// Creates a connection to a network resource. The function can redirect a local device to a network resource. - /// If is or string.Empty, returns the last available drive letter, null otherwise. - /// - /// The name of a local device to be redirected, such as "F:". When is or - /// string.Empty, the last available drive letter will be used. Letters are assigned beginning with Z:, then Y: and so on. - /// - /// The network resource to connect to. The string can be up to MAX_PATH characters in length. - /// - /// The user name for making the connection. If is , the function uses the default - /// user name. (The user context for the process provides the default user name) - /// - /// - /// The password to be used for making the network connection. If is , the function - /// uses the current default password associated with the user specified by . - /// - /// always pops-up an authentication dialog box. - /// successful network resource connections will be saved. - /// - /// When the operating system prompts for a credential, the credential should be saved by the credential manager when true. - /// - [SecurityCritical] - public static string ConnectDrive(string localName, string remoteName, string userName, string password, bool prompt, bool updateProfile, bool saveCredentials) - { - return ConnectDisconnectCore(new ConnectDisconnectArguments - { - LocalName = localName, - RemoteName = remoteName, - UserName = userName, - Password = password, - Prompt = prompt, - UpdateProfile = updateProfile, - SaveCredentials = saveCredentials, - IsDeviceMap = true - }); - } - - /// Creates a connection to a network resource. The function can redirect a local device to a network resource. - /// If is or string.Empty, returns the last available drive letter, null otherwise. - /// - /// The name of a local device to be redirected, such as "F:". When is or - /// string.Empty, the last available drive letter will be used. Letters are assigned beginning with Z:, then Y: and so on. - /// - /// The network resource to connect to. The string can be up to MAX_PATH characters in length. - /// - /// An instance of which provides credentials for password-based authentication schemes such as basic, - /// digest, NTLM, and Kerberos authentication. - /// - /// always pops-up an authentication dialog box. - /// successful network resource connections will be saved. - /// - /// When the operating system prompts for a credential, the credential should be saved by the credential manager when true. - /// - [SecurityCritical] - public static string ConnectDrive(string localName, string remoteName, NetworkCredential credentials, bool prompt, bool updateProfile, bool saveCredentials) - { - return ConnectDisconnectCore(new ConnectDisconnectArguments - { - LocalName = localName, - RemoteName = remoteName, - Credential = credentials, - Prompt = prompt, - UpdateProfile = updateProfile, - SaveCredentials = saveCredentials, - IsDeviceMap = true - }); - } - - /// Creates a connection to a network resource. The function can redirect a local device to a network resource. - /// If is or string.Empty, returns the last available drive letter, null otherwise. - /// Handle to a window that the provider of network resources can use as an owner window for dialog boxes. - /// - /// The name of a local device to be redirected, such as "F:". When is or - /// string.Empty, the last available drive letter will be used. Letters are assigned beginning with Z:, then Y: and so on. - /// - /// The network resource to connect to. The string can be up to MAX_PATH characters in length. - /// - /// The user name for making the connection. If is , the function uses the default - /// user name. (The user context for the process provides the default user name) - /// - /// - /// The password to be used for making the network connection. If is , the function - /// uses the current default password associated with the user specified by . - /// - /// always pops-up an authentication dialog box. - /// successful network resource connections will be saved. - /// - /// When the operating system prompts for a credential, the credential should be saved by the credential manager when true. - /// - [SecurityCritical] - public static string ConnectDrive(IntPtr winOwner, string localName, string remoteName, string userName, string password, bool prompt, bool updateProfile, bool saveCredentials) - { - return ConnectDisconnectCore(new ConnectDisconnectArguments - { - WinOwner = winOwner, - LocalName = localName, - RemoteName = remoteName, - UserName = userName, - Password = password, - Prompt = prompt, - UpdateProfile = updateProfile, - SaveCredentials = saveCredentials, - IsDeviceMap = true - }); - } - - /// Creates a connection to a network resource. The function can redirect a local device to a network resource. - /// If is or string.Empty, returns the last available drive letter, null otherwise. - /// Handle to a window that the provider of network resources can use as an owner window for dialog boxes. - /// - /// The name of a local device to be redirected, such as "F:". When is or - /// string.Empty, the last available drive letter will be used. Letters are assigned beginning with Z:, then Y: and so on. - /// - /// The network resource to connect to. The string can be up to MAX_PATH characters in length. - /// - /// An instance of which provides credentials for password-based authentication schemes such as basic, - /// digest, NTLM, and Kerberos authentication. - /// - /// always pops-up an authentication dialog box. - /// successful network resource connections will be saved. - /// - /// When the operating system prompts for a credential, the credential should be saved by the credential manager when true. - /// - [SecurityCritical] - public static string ConnectDrive(IntPtr winOwner, string localName, string remoteName, NetworkCredential credentials, bool prompt, bool updateProfile, bool saveCredentials) - { - return ConnectDisconnectCore(new ConnectDisconnectArguments - { - WinOwner = winOwner, - LocalName = localName, - RemoteName = remoteName, - Credential = credentials, - Prompt = prompt, - UpdateProfile = updateProfile, - SaveCredentials = saveCredentials, - IsDeviceMap = true - }); - } - - #endregion // ConnectDrive - - #region ConnectTo - - /// Creates a connection to a network resource. - /// - /// A network resource to connect to, for example: \\server or \\server\share. - [SecurityCritical] - public static void ConnectTo(string remoteName) - { - ConnectDisconnectCore(new ConnectDisconnectArguments { RemoteName = remoteName }); - } - - /// Creates a connection to a network resource. - /// - /// A network resource to connect to, for example: \\server or \\server\share. - /// - /// The user name for making the connection. If is , the function uses the default - /// user name. (The user context for the process provides the default user name) - /// - /// - /// The password to be used for making the network connection. If is , the function - /// uses the current default password associated with the user specified by . - /// - /// always pops-up an authentication dialog box. - /// successful network resource connections will be saved. - /// - /// When the operating system prompts for a credential, the credential should be saved by the credential manager when true. - /// - [SecurityCritical] - public static void ConnectTo(string remoteName, string userName, string password, bool prompt, bool updateProfile, bool saveCredentials) - { - ConnectDisconnectCore(new ConnectDisconnectArguments - { - RemoteName = remoteName, - UserName = userName, - Password = password, - Prompt = prompt, - UpdateProfile = updateProfile, - SaveCredentials = saveCredentials - }); - } - - /// Creates a connection to a network resource. - /// A network resource to connect to, for example: \\server or \\server\share. - /// An instance of which provides credentials for password-based authentication schemes such as basic, digest, NTLM, and Kerberos authentication. - /// always pops-up an authentication dialog box. - /// successful network resource connections will be saved. - /// When the operating system prompts for a credential, the credential should be saved by the credential manager when true. - /// - /// - [SecurityCritical] - public static void ConnectTo(string remoteName, NetworkCredential credentials, bool prompt, bool updateProfile, bool saveCredentials) - { - ConnectDisconnectCore(new ConnectDisconnectArguments - { - RemoteName = remoteName, - Credential = credentials, - Prompt = prompt, - UpdateProfile = updateProfile, - SaveCredentials = saveCredentials - }); - } - - /// Creates a connection to a network resource. - /// - /// Handle to a window that the provider of network resources can use as an owner window for dialog boxes. - /// A network resource to connect to, for example: \\server or \\server\share. - /// - /// The user name for making the connection. If is , the function uses the default - /// user name. (The user context for the process provides the default user name) - /// - /// - /// The password to be used for making the network connection. If is , the function - /// uses the current default password associated with the user specified by . - /// - /// always pops-up an authentication dialog box. - /// successful network resource connections will be saved. - /// When the operating system prompts for a credential, the credential should be saved by the credential manager when true. - [SecurityCritical] - public static void ConnectTo(IntPtr winOwner, string remoteName, string userName, string password, bool prompt, bool updateProfile, bool saveCredentials) - { - ConnectDisconnectCore(new ConnectDisconnectArguments - { - WinOwner = winOwner, - RemoteName = remoteName, - UserName = userName, - Password = password, - Prompt = prompt, - UpdateProfile = updateProfile, - SaveCredentials = saveCredentials - }); - } - - /// Creates a connection to a network resource. - /// - /// Handle to a window that the provider of network resources can use as an owner window for dialog boxes. - /// A network resource to connect to, for example: \\server or \\server\share. - /// An instance of which provides credentials for password-based authentication schemes such as basic, digest, NTLM, and Kerberos authentication. - /// always pops-up an authentication dialog box. - /// successful network resource connections will be saved. - /// When the operating system prompts for a credential, the credential should be saved by the credential manager when true. - [SecurityCritical] - public static void ConnectTo(IntPtr winOwner, string remoteName, NetworkCredential credentials, bool prompt, bool updateProfile, bool saveCredentials) - { - ConnectDisconnectCore(new ConnectDisconnectArguments - { - WinOwner = winOwner, - RemoteName = remoteName, - Credential = credentials, - Prompt = prompt, - UpdateProfile = updateProfile, - SaveCredentials = saveCredentials - }); - } - - #endregion // ConnectTo - - - #region DisconnectDrive - - /// Cancels an existing network connection. You can also call the function to remove remembered network connections that are not currently connected. - /// The name of a local device to be disconnected, such as "F:". - [SecurityCritical] - public static void DisconnectDrive(string localName) - { - ConnectDisconnectCore(new ConnectDisconnectArguments - { - LocalName = localName, - IsDeviceMap = true, - IsDisconnect = true - }); - } - - /// Cancels an existing network connection. You can also call the function to remove remembered network connections that are not currently connected. - /// The name of a local device to be disconnected, such as "F:". - /// - /// Specifies whether the disconnection should occur if there are open files or jobs on the connection. - /// If this parameter is , the function fails if there are open files or jobs. - /// - /// successful removal of network resource connections will be saved. - [SecurityCritical] - public static void DisconnectDrive(string localName, bool force, bool updateProfile) - { - ConnectDisconnectCore(new ConnectDisconnectArguments - { - LocalName = localName, - Prompt = force, - UpdateProfile = updateProfile, - IsDeviceMap = true, - IsDisconnect = true - }); - } - - #endregion // DisconnectDrive - - #region DisconnectFrom - - /// Cancels an existing network connection. You can also call the function to remove remembered network connections that are not currently connected. - /// A network resource to disconnect from, for example: \\server or \\server\share. - [SecurityCritical] - public static void DisconnectFrom(string remoteName) - { - ConnectDisconnectCore(new ConnectDisconnectArguments - { - RemoteName = remoteName, - IsDisconnect = true - }); - } - - /// Cancels an existing network connection. You can also call the function to remove remembered network connections that are not currently connected. - /// A network resource to disconnect from, for example: \\server or \\server\share. - /// - /// Specifies whether the disconnection should occur if there are open files or jobs on the connection. - /// If this parameter is , the function fails if there are open files or jobs. - /// - /// successful removal of network resource connections will be saved. - [SecurityCritical] - public static void DisconnectFrom(string remoteName, bool force, bool updateProfile) - { - ConnectDisconnectCore(new ConnectDisconnectArguments - { - RemoteName = remoteName, - Prompt = force, - UpdateProfile = updateProfile, - IsDisconnect = true - }); - } - - #endregion // DisconnectFrom - - - #region Internal Methods - - /// Connects to/disconnects from a network resource. The function can redirect a local device to a network resource. - /// If is or string.Empty, returns the last available drive letter, null otherwise. - /// - /// - /// The . - [SuppressMessage("Microsoft.Usage", "CA2208:InstantiateArgumentExceptionsCorrectly")] - [SecurityCritical] - internal static string ConnectDisconnectCore(ConnectDisconnectArguments arguments) - { - uint lastError; - - // Always remove backslash for local device. - if (!Utils.IsNullOrWhiteSpace(arguments.LocalName)) - arguments.LocalName = Path.RemoveTrailingDirectorySeparator(arguments.LocalName, false).ToUpperInvariant(); - - - #region Disconnect - - if (arguments.IsDisconnect) - { - bool force = arguments.Prompt; // Use value of prompt variable for force value. - string target = arguments.IsDeviceMap ? arguments.LocalName : arguments.RemoteName; - - if (Utils.IsNullOrWhiteSpace(target)) - throw new ArgumentNullException(arguments.IsDeviceMap ? "localName" : "remoteName"); - - lastError = NativeMethods.WNetCancelConnection(target, arguments.UpdateProfile ? NativeMethods.Connect.UpdateProfile : NativeMethods.Connect.None, force); - - if (lastError != Win32Errors.NO_ERROR) - throw new NetworkInformationException((int)lastError); - - return null; - } - - #endregion // Disconnect - - #region Connect - - // arguments.LocalName is allowed to be null or empty. - //if (Utils.IsNullOrWhiteSpace(arguments.LocalName) && !arguments.IsDeviceMap) - // throw new ArgumentNullException("localName"); - - if (Utils.IsNullOrWhiteSpace(arguments.RemoteName) && !arguments.IsDeviceMap) - throw new ArgumentNullException("remoteName"); - - - // When supplied, use data from NetworkCredential instance. - if (arguments.Credential != null) - { - arguments.UserName = Utils.IsNullOrWhiteSpace(arguments.Credential.Domain) - ? arguments.Credential.UserName - : string.Format(CultureInfo.InvariantCulture, @"{0}\{1}", arguments.Credential.Domain, arguments.Credential.UserName); - - arguments.Password = arguments.Credential.Password; - } - - - // Assemble Connect arguments. - var connect = NativeMethods.Connect.None; - - if (arguments.IsDeviceMap) - connect = connect | NativeMethods.Connect.Redirect; - - if (arguments.Prompt) - connect = connect | NativeMethods.Connect.Prompt | NativeMethods.Connect.Interactive; - - if (arguments.UpdateProfile) - connect = connect | NativeMethods.Connect.UpdateProfile; - - if (arguments.SaveCredentials) - connect = connect | NativeMethods.Connect.SaveCredentialManager; - - - // Initialize structure. - var resource = new NativeMethods.NETRESOURCE - { - lpLocalName = arguments.LocalName, - lpRemoteName = arguments.RemoteName, - dwType = NativeMethods.ResourceType.Disk - }; - - // Three characters for: "X:\0" (Drive X: with null terminator) - uint bufferSize = 3; - StringBuilder buffer; - - do - { - buffer = new StringBuilder((int)bufferSize); - - uint result; - lastError = NativeMethods.WNetUseConnection(arguments.WinOwner, ref resource, arguments.Password, arguments.UserName, connect, buffer, out bufferSize, out result); - - switch (lastError) - { - case Win32Errors.NO_ERROR: - break; - - case Win32Errors.ERROR_MORE_DATA: - // MSDN, lpBufferSize: If the call fails because the buffer is not large enough, - // the function returns the required buffer size in this location. - // - // Windows 8 x64: bufferSize remains unchanged. - - bufferSize = bufferSize * 2; - break; - } - - } while (lastError == Win32Errors.ERROR_MORE_DATA); - - - if (lastError != Win32Errors.NO_ERROR) - throw new NetworkInformationException((int)lastError); - - return arguments.IsDeviceMap ? buffer.ToString() : null; - - #endregion // Connect - } - - #endregion // Internal Methods - } -} diff --git a/AlphaFS/Network/Host Class/DistributedFileSystem.cs b/AlphaFS/Network/Host Class/DistributedFileSystem.cs deleted file mode 100644 index c921811..0000000 --- a/AlphaFS/Network/Host Class/DistributedFileSystem.cs +++ /dev/null @@ -1,294 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using Alphaleonis.Win32.Filesystem; -using System; -using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; -using System.Globalization; -using System.Linq; -using System.Net.NetworkInformation; -using System.Security; - -namespace Alphaleonis.Win32.Network -{ - partial class Host - { - #region EnumerateDfsLinks - - /// Enumerates the DFS Links from a DFS namespace. - /// of DFS namespaces. - /// - /// - /// - /// The Universal Naming Convention (UNC) path of a DFS root or link. - [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Dfs")] - [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "dfs")] - [SecurityCritical] - public static IEnumerable EnumerateDfsLinks(string dfsName) - { - if (!Filesystem.NativeMethods.IsAtLeastWindowsVista) - throw new PlatformNotSupportedException(Resources.Requires_Windows_Vista_Or_Higher); - - if (Utils.IsNullOrWhiteSpace(dfsName)) - throw new ArgumentNullException("dfsName"); - - var fd = new FunctionData(); - - return EnumerateNetworkObjectCore(fd, (NativeMethods.DFS_INFO_9 structure, SafeGlobalMemoryBufferHandle buffer) => - - new DfsInfo(structure), - - (FunctionData functionData, out SafeGlobalMemoryBufferHandle buffer, int prefMaxLen, out uint entriesRead, out uint totalEntries, out uint resumeHandle1) => - { - totalEntries = 0; - return NativeMethods.NetDfsEnum(dfsName, 9, prefMaxLen, out buffer, out entriesRead, out resumeHandle1); - - }, false); - } - - #endregion // EnumerateDfsLinks - - #region EnumerateDfsRoot - - /// Enumerates the DFS namespaces from the local host. - /// of DFS Root namespaces from the local host. - /// - /// - [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Dfs")] - [SecurityCritical] - public static IEnumerable EnumerateDfsRoot() - { - return EnumerateDfsRootCore(null, false); - } - - /// Enumerates the DFS namespaces from a host. - /// of DFS Root namespaces from a host. - /// - /// - /// The DNS or NetBIOS name of a host. - /// suppress any Exception that might be thrown as a result from a failure, such as unavailable resources. - [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Dfs")] - [SecurityCritical] - public static IEnumerable EnumerateDfsRoot(string host, bool continueOnException) - { - return EnumerateDfsRootCore(host, continueOnException); - } - - #endregion // EnumerateDfsRoot - - #region EnumerateDomainDfsRoot - - /// Enumerates the DFS namespaces from the domain. - /// of DFS Root namespaces from the domain. - /// - /// - [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Dfs")] - [SecurityCritical] - public static IEnumerable EnumerateDomainDfsRoot() - { - return EnumerateDomainDfsRootCore(null, false); - } - - /// Enumerates the DFS namespaces from a domain. - /// of DFS Root namespaces from a domain. - /// - /// - /// A domain name. - /// suppress any Exception that might be thrown as a result from a failure, such as unavailable resources. - [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Dfs")] - [SecurityCritical] - public static IEnumerable EnumerateDomainDfsRoot(string domain, bool continueOnException) - { - return EnumerateDomainDfsRootCore(domain, continueOnException); - } - - #endregion // EnumerateDomainDfsRoot - - - #region GetDfsClientInfo - - /// Gets information about a DFS root or link from the cache maintained by the DFS client. - /// A instance. - /// - /// - /// The Universal Naming Convention (UNC) path of a DFS root or link. - [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Dfs")] - [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "dfs")] - [SecurityCritical] - public static DfsInfo GetDfsClientInfo(string dfsName) - { - return GetDfsInfoCore(true, dfsName, null, null); - } - - /// Gets information about a DFS root or link from the cache maintained by the DFS client. - /// A instance. - /// - /// - /// The Universal Naming Convention (UNC) path of a DFS root or link. - /// The name of the DFS root target or link target server. - /// The name of the share corresponding to the DFS root target or link target. - [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Dfs")] - [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "dfs")] - [SecurityCritical] - public static DfsInfo GetDfsClientInfo(string dfsName, string serverName, string shareName) - { - return GetDfsInfoCore(true, dfsName, serverName, shareName); - } - - #endregion // GetDfsClientInfo - - #region GetDfsInfo - - /// Gets information about a specified DFS root or link in a DFS namespace. - /// A instance. - /// - /// - /// The Universal Naming Convention (UNC) path of a DFS root or link. - [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Dfs")] - [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "dfs")] - [SecurityCritical] - public static DfsInfo GetDfsInfo(string dfsName) - { - return GetDfsInfoCore(false, dfsName, null, null); - } - - #endregion // GetDfsInfo - - - #region Internal Methods - - /// Enumerates the DFS namespaces from a host. - /// of DFS Root namespaces from a host. - /// - /// - /// - /// The DNS or NetBIOS name of a host. - /// suppress any Exception that might be thrown as a result from a failure, such as unavailable resources. - [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Dfs")] - [SecurityCritical] - private static IEnumerable EnumerateDfsRootCore(string host, bool continueOnException) - { - if (!Filesystem.NativeMethods.IsAtLeastWindowsVista) - throw new PlatformNotSupportedException(Resources.Requires_Windows_Vista_Or_Higher); - - return EnumerateNetworkObjectCore(new FunctionData(), (NativeMethods.DFS_INFO_300 structure, SafeGlobalMemoryBufferHandle buffer) => - - new DfsInfo { EntryPath = structure.DfsName }, - - (FunctionData functionData, out SafeGlobalMemoryBufferHandle buffer, int prefMaxLen, out uint entriesRead, out uint totalEntries, out uint resumeHandle) => - { - totalEntries = 0; - - // When host == null, the local computer is used. - // However, the resulting OpenResourceInfo.Host property will be empty. - // So, explicitly state Environment.MachineName to prevent this. - // Furthermore, the UNC prefix: \\ is not required and always removed. - string stripUnc = Utils.IsNullOrWhiteSpace(host) ? Environment.MachineName : Path.GetRegularPathCore(host, GetFullPathOptions.CheckInvalidPathChars, false).Replace(Path.UncPrefix, string.Empty); - - return NativeMethods.NetDfsEnum(stripUnc, 300, prefMaxLen, out buffer, out entriesRead, out resumeHandle); - - }, continueOnException).Select(dfs => dfs.EntryPath); - } - - - /// Enumerates the DFS namespaces from a domain. - /// of DFS Root namespaces from a domain. - /// - /// - /// - /// A domain name. - /// suppress any Exception that might be thrown as a result from a failure, such as unavailable resources. - [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Dfs")] - [SecurityCritical] - private static IEnumerable EnumerateDomainDfsRootCore(string domain, bool continueOnException) - { - if (!Filesystem.NativeMethods.IsAtLeastWindowsVista) - throw new PlatformNotSupportedException(Resources.Requires_Windows_Vista_Or_Higher); - - return EnumerateNetworkObjectCore(new FunctionData(), (NativeMethods.DFS_INFO_200 structure, SafeGlobalMemoryBufferHandle buffer) => - - new DfsInfo { EntryPath = string.Format(CultureInfo.CurrentCulture, "{0}{1}{2}{3}", Path.UncPrefix, NativeMethods.ComputerDomain, Path.DirectorySeparatorChar, structure.FtDfsName) }, - - (FunctionData functionData, out SafeGlobalMemoryBufferHandle buffer, int prefMaxLen, out uint entriesRead, out uint totalEntries, out uint resumeHandle) => - { - totalEntries = 0; - - // When host == null, the local computer is used. - // However, the resulting OpenResourceInfo.Host property will be empty. - // So, explicitly state Environment.MachineName to prevent this. - // Furthermore, the UNC prefix: \\ is not required and always removed. - string stripUnc = Utils.IsNullOrWhiteSpace(domain) ? NativeMethods.ComputerDomain : Path.GetRegularPathCore(domain, GetFullPathOptions.CheckInvalidPathChars, false).Replace(Path.UncPrefix, string.Empty); - - return NativeMethods.NetDfsEnum(stripUnc, 200, prefMaxLen, out buffer, out entriesRead, out resumeHandle); - - }, continueOnException).Select(dfs => dfs.EntryPath); - } - - - /// Retrieves information about a specified DFS root or link in a DFS namespace. - /// A instance. - /// - /// - /// - /// - /// retrieves information about a Distributed File System (DFS) root or link from the cache maintained by the - /// DFS client. When retrieves information about a specified Distributed File System (DFS) root or link in a - /// DFS namespace. - /// - /// The Universal Naming Convention (UNC) path of a DFS root or link. - /// - /// The name of the DFS root target or link target server. If is , this - /// parameter is always . - /// - /// - /// The name of the share corresponding to the DFS root target or link target. If is - /// , this parameter is always . - /// - [SecurityCritical] - private static DfsInfo GetDfsInfoCore(bool getFromClient, string dfsName, string serverName, string shareName) - { - if (!Filesystem.NativeMethods.IsAtLeastWindowsVista) - throw new PlatformNotSupportedException(Resources.Requires_Windows_Vista_Or_Higher); - - if (Utils.IsNullOrWhiteSpace(dfsName)) - throw new ArgumentNullException("dfsName"); - - serverName = Utils.IsNullOrWhiteSpace(serverName) ? null : serverName; - shareName = Utils.IsNullOrWhiteSpace(shareName) ? null : shareName; - - SafeGlobalMemoryBufferHandle safeBuffer; - - // Level 9 = DFS_INFO_9 - - uint lastError = getFromClient - ? NativeMethods.NetDfsGetClientInfo(dfsName, serverName, shareName, 9, out safeBuffer) - : NativeMethods.NetDfsGetInfo(dfsName, null, null, 9, out safeBuffer); - - if (lastError == Win32Errors.NERR_Success) - return new DfsInfo(safeBuffer.PtrToStructure(0)); - - throw new NetworkInformationException((int) lastError); - } - - #endregion // Internal Methods - } -} diff --git a/AlphaFS/Network/Host Class/DriveConnection.cs b/AlphaFS/Network/Host Class/DriveConnection.cs deleted file mode 100644 index 9852203..0000000 --- a/AlphaFS/Network/Host Class/DriveConnection.cs +++ /dev/null @@ -1,151 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System; -using System.Diagnostics.CodeAnalysis; -using System.Net; - -namespace Alphaleonis.Win32.Network -{ - /// Used to create a temporary connection to a network resource that will be disconnected once this instance is disposed. - public sealed class DriveConnection : IDisposable - { - #region Constructors - - /// Creates a temporary connection to a network resource. The function can redirect a local device to a network resource, using the current user credentials. - /// The network resource to connect to. The string can be up to MAX_PATH characters in length. - public DriveConnection(string remoteName) - { - Share = remoteName; - - LocalName = Host.ConnectDisconnectCore(new Host.ConnectDisconnectArguments - { - RemoteName = Share, - IsDeviceMap = true - }); - } - - /// Creates a temporary connection to a network resource. The function can redirect a local device to a network resource, using a user name and password. - /// The network resource to connect to. The string can be up to MAX_PATH characters in length. - /// - /// The user name for making the connection. If is , the function uses the default - /// user name. (The user context for the process provides the default user name) - /// - /// - /// The password to be used for making the network connection. If is , the function - /// uses the current default password associated with the user specified by . - /// - /// always pops-up an authentication dialog box. - public DriveConnection(string remoteName, string userName, string password, bool prompt) - { - Share = remoteName; - - LocalName = Host.ConnectDisconnectCore(new Host.ConnectDisconnectArguments - { - RemoteName = Share, - UserName = userName, - Password = password, - Prompt = prompt, - IsDeviceMap = true - }); - } - - /// Creates a temporary connection to a network resource. The function can redirect a local device to a network resource, can be supplied. - /// The network resource to connect to. The string can be up to MAX_PATH characters in length. - /// An instance of which provides credentials for password-based authentication schemes such as basic, digest, NTLM, and Kerberos authentication. - /// always pops-up an authentication dialog box. - public DriveConnection(string remoteName, NetworkCredential credentials, bool prompt) - { - Share = remoteName; - - LocalName = Host.ConnectDisconnectCore(new Host.ConnectDisconnectArguments - { - RemoteName = Share, - Credential = credentials, - Prompt = prompt, - IsDeviceMap = true - }); - } - - /// class destructor. - ~DriveConnection() - { - Dispose(false); - } - - #endregion // Constructors - - #region Methods - - #region Dispose - - /// Releases all resources used by the class. - public void Dispose() - { - GC.SuppressFinalize(this); - Dispose(true); - } - - [SuppressMessage("Microsoft.Usage", "CA1801:ReviewUnusedParameters", MessageId = "isDisposing")] - private void Dispose(bool isDisposing) - { - if (!Utils.IsNullOrWhiteSpace(LocalName)) - { - Host.ConnectDisconnectCore(new Host.ConnectDisconnectArguments - { - LocalName = LocalName, - Prompt = true, // Use value of prompt variable for force value. - IsDeviceMap = true, - IsDisconnect = true - }); - - LocalName = null; - } - } - - #endregion // Dispose - - #region ToString - - /// Returns the last available drive letter used for this connection. - /// A string that represents this instance. - public override string ToString() - { - return LocalName; - } - - #endregion // ToString - - #endregion // Methods - - #region Properties - - /// The last available drive letter used for this connection. - /// The last available drive letter used for this connection. - public string LocalName { get; private set; } - - /// The path originally specified by the user. - /// The path originally specified by the user. - public string Share { get; private set; } - - #endregion // Properties - } -} diff --git a/AlphaFS/Network/Host Class/EnumerateDrives.cs b/AlphaFS/Network/Host Class/EnumerateDrives.cs deleted file mode 100644 index bb29525..0000000 --- a/AlphaFS/Network/Host Class/EnumerateDrives.cs +++ /dev/null @@ -1,87 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using Alphaleonis.Win32.Filesystem; -using System; -using System.Collections.Generic; -using System.Net.NetworkInformation; -using System.Security; - -namespace Alphaleonis.Win32.Network -{ - partial class Host - { - /// Enumerates drives from the local host. - /// drives from the local host. - /// - [SecurityCritical] - public static IEnumerable EnumerateDrives() - { - return EnumerateDrivesCore(null, false); - } - - /// Enumerates local drives from the specified host. - /// drives from the specified host. - /// - /// The DNS or NetBIOS name of the remote server. refers to the local host. - /// - /// suppress any Exception that might be thrown as a result from a failure, - /// such as unavailable resources. - /// - [SecurityCritical] - public static IEnumerable EnumerateDrives(string host, bool continueOnException) - { - return EnumerateDrivesCore(host, continueOnException); - } - - - - /// Enumerates local drives from the specified host. - /// drives from the specified host. - /// - /// - /// The DNS or NetBIOS name of the remote server. refers to the local host. - /// - /// suppress any Exception that might be thrown as a result from a failure, - /// such as unavailable resources. - /// - [SecurityCritical] - private static IEnumerable EnumerateDrivesCore(string host, bool continueOnException) - { - return EnumerateNetworkObjectCore(new FunctionData { EnumType = 1 }, (string structure, SafeGlobalMemoryBufferHandle buffer) => - - structure, - - (FunctionData functionData, out SafeGlobalMemoryBufferHandle buffer, int prefMaxLen, out uint entriesRead, out uint totalEntries, out uint resume) => - { - // When host == null, the local computer is used. - // However, the resulting OpenResourceInfo.Host property will be empty. - // So, explicitly state Environment.MachineName to prevent this. - // Furthermore, the UNC prefix: \\ is not required and always removed. - - string stripUnc = Utils.IsNullOrWhiteSpace(host) ? Environment.MachineName : Path.GetRegularPathCore(host, GetFullPathOptions.CheckInvalidPathChars, false).Replace(Path.UncPrefix, string.Empty); - - return NativeMethods.NetServerDiskEnum(stripUnc, 0, out buffer, NativeMethods.MaxPreferredLength, out entriesRead, out totalEntries, out resume); - - }, continueOnException); - } - } -} diff --git a/AlphaFS/Network/Host Class/EnumerateOpenResources.cs b/AlphaFS/Network/Host Class/EnumerateOpenResources.cs deleted file mode 100644 index 5d911f6..0000000 --- a/AlphaFS/Network/Host Class/EnumerateOpenResources.cs +++ /dev/null @@ -1,114 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using Alphaleonis.Win32.Filesystem; -using System; -using System.Collections.Generic; -using System.Net.NetworkInformation; -using System.Security; - -namespace Alphaleonis.Win32.Network -{ - partial class Host - { - #region EnumerateOpenResources - - /// Enumerates open resources from the local host. - /// open resources from the local host. - /// - /// - [SecurityCritical] - public static IEnumerable EnumerateOpenResources() - { - return EnumerateOpenResourcesCore(null, null, null, false); - } - - /// Enumerates open resources from the specified host. - /// open resources from the specified . - /// - /// - /// The DNS or NetBIOS name of the remote server. refers to the local host. - /// - /// This parameter may be . Enumerates only resources that have the value of the basepath parameter as a prefix. - /// (A prefix is the portion of a path that comes before a backslash.) - /// - /// - /// This parameter may be . The name of the user or the name of the connection; If - /// does not begin with two backslashes ("\\") it indicates the name of the user. If begins with two - /// backslashes ("\\") it indicates the name of the connection. - /// - /// suppress any Exception that might be thrown as a result from a failure, such as unavailable resources. - [SecurityCritical] - public static IEnumerable EnumerateOpenResources(string host, string basePath, string typeName, bool continueOnException) - { - return EnumerateOpenResourcesCore(host, basePath, typeName, continueOnException); - } - - #endregion // EnumerateOpenResources - - - #region Internal Methods - - /// >Enumerates open resources from the specified host. - /// open resources from the specified . - /// - /// - /// The DNS or NetBIOS name of the remote server. refers to the local host. - /// - /// This parameter may be . Enumerates only resources that have the value of the basepath parameter as a prefix. - /// (A prefix is the portion of a path that comes before a backslash.) - /// - /// - /// This parameter may be . The name of the user or the name of the connection; If - /// does not begin with two backslashes ("\\") it indicates the name of the user. If begins with two - /// backslashes ("\\") it indicates the name of the connection. - /// - /// suppress any Exception that might be thrown as a result from a failure, such as unavailable resources. - [SecurityCritical] - private static IEnumerable EnumerateOpenResourcesCore(string host, string basePath, string typeName, bool continueOnException) - { - basePath = Utils.IsNullOrWhiteSpace(basePath) ? null : Path.GetRegularPathCore(basePath, GetFullPathOptions.CheckInvalidPathChars, false); - typeName = Utils.IsNullOrWhiteSpace(typeName) ? null : typeName; - - - var fd = new FunctionData { ExtraData1 = basePath, ExtraData2 = typeName }; - - return EnumerateNetworkObjectCore(fd, (NativeMethods.FILE_INFO_3 structure, SafeGlobalMemoryBufferHandle buffer) => - - new OpenResourceInfo(host, structure), - - (FunctionData functionData, out SafeGlobalMemoryBufferHandle buffer, int prefMaxLen, out uint entriesRead, out uint totalEntries, out uint resumeHandle) => - { - // When host == null, the local computer is used. - // However, the resulting OpenResourceInfo.Host property will be empty. - // So, explicitly state Environment.MachineName to prevent this. - // Furthermore, the UNC prefix: \\ is not required and always removed. - string stripUnc = Utils.IsNullOrWhiteSpace(host) ? Environment.MachineName : Path.GetRegularPathCore(host, GetFullPathOptions.CheckInvalidPathChars, false).Replace(Path.UncPrefix, string.Empty); - - return NativeMethods.NetFileEnum(stripUnc, fd.ExtraData1, fd.ExtraData2, 3, out buffer, NativeMethods.MaxPreferredLength, out entriesRead, out totalEntries, out resumeHandle); - - }, - continueOnException); - } - - #endregion // Internal Methods - } -} diff --git a/AlphaFS/Network/Host Class/Host.cs b/AlphaFS/Network/Host Class/Host.cs deleted file mode 100644 index 4133b3a..0000000 --- a/AlphaFS/Network/Host Class/Host.cs +++ /dev/null @@ -1,244 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using Alphaleonis.Win32.Filesystem; -using System; -using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; -using System.Globalization; -using System.IO; -using System.Net; -using System.Net.NetworkInformation; -using System.Runtime.InteropServices; -using System.Security; -using System.Text; -using Path = Alphaleonis.Win32.Filesystem.Path; - -namespace Alphaleonis.Win32.Network -{ - /// Provides static methods to retrieve network resource information from a local- or remote host. - public static partial class Host - { - #region GetUncName - - /// Return the host name in UNC format, for example: \\hostname. - /// The unc name. - [SuppressMessage("Microsoft.Design", "CA1024:UsePropertiesWhereAppropriate")] - [SecurityCritical] - public static string GetUncName() - { - return string.Format(CultureInfo.InvariantCulture, "{0}{1}", Path.UncPrefix, Environment.MachineName); - } - - /// Return the host name in UNC format, for example: \\hostname. - /// Name of the computer. - /// The unc name. - [SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "0", Justification = "Utils.IsNullOrWhiteSpace validates arguments.")] - [SuppressMessage("Microsoft.Design", "CA1024:UsePropertiesWhereAppropriate")] - [SecurityCritical] - public static string GetUncName(string computerName) - { - return Utils.IsNullOrWhiteSpace(computerName) - ? GetUncName() - : (computerName.StartsWith(Path.UncPrefix, StringComparison.OrdinalIgnoreCase) - ? computerName.Trim() - : Path.UncPrefix + computerName.Trim()); - } - - #endregion // GetUncName - - #region Internal Methods - - private delegate uint EnumerateNetworkObjectDelegate( - FunctionData functionData, out SafeGlobalMemoryBufferHandle netApiBuffer, [MarshalAs(UnmanagedType.I4)] int prefMaxLen, - [MarshalAs(UnmanagedType.U4)] out uint entriesRead, [MarshalAs(UnmanagedType.U4)] out uint totalEntries, - [MarshalAs(UnmanagedType.U4)] out uint resumeHandle); - - /// Structure is used to pass additional data to the Win32 function. - private struct FunctionData - { - public int EnumType; - public string ExtraData1; - public string ExtraData2; - } - - [SecurityCritical] - private static IEnumerable EnumerateNetworkObjectCore(FunctionData functionData, Func createTStruct, EnumerateNetworkObjectDelegate enumerateNetworkObject, bool continueOnException) - { - Type objectType; - int objectSize; - bool isString; - - switch (functionData.EnumType) - { - // Logical Drives - case 1: - objectType = typeof(IntPtr); - isString = true; - objectSize = Marshal.SizeOf(objectType) + UnicodeEncoding.CharSize; - break; - - default: - objectType = typeof(TNative); - isString = objectType == typeof(string); - objectSize = isString ? 0 : Marshal.SizeOf(objectType); - break; - } - - - uint lastError; - do - { - uint entriesRead; - uint totalEntries; - uint resumeHandle; - SafeGlobalMemoryBufferHandle buffer; - - lastError = enumerateNetworkObject(functionData, out buffer, NativeMethods.MaxPreferredLength, out entriesRead, out totalEntries, out resumeHandle); - - using (buffer) - switch (lastError) - { - case Win32Errors.NERR_Success: - case Win32Errors.ERROR_MORE_DATA: - if (entriesRead > 0) - { - for (int i = 0, itemOffset = 0; i < entriesRead; i++, itemOffset += objectSize) - yield return (TStruct) (isString - ? buffer.PtrToStringUni(itemOffset, 2) - : (object) createTStruct(buffer.PtrToStructure(itemOffset), buffer)); - } - break; - - case Win32Errors.ERROR_BAD_NETPATH: - break; - - // Observed when SHARE_INFO_503 is requested but not supported/possible. - case Win32Errors.RPC_X_BAD_STUB_DATA: - yield break; - } - - } while (lastError == Win32Errors.ERROR_MORE_DATA); - - if (lastError != Win32Errors.NO_ERROR && !continueOnException) - throw new NetworkInformationException((int) lastError); - } - - /// This method uses level to retieve full REMOTE_NAME_INFO structure. - /// A structure. - /// AlphaFS regards network drives created using SUBST.EXE as invalid. - /// - /// - /// - /// - /// The local path with drive name. - /// suppress any Exception that might be thrown as a result from a failure, such as unavailable resources. - [SecurityCritical] - internal static NativeMethods.REMOTE_NAME_INFO GetRemoteNameInfoCore(string path, bool continueOnException) - { - if (Utils.IsNullOrWhiteSpace(path)) - throw new ArgumentNullException("path"); - - path = Path.GetRegularPathCore(path, GetFullPathOptions.CheckInvalidPathChars, false); - - // If path already is a network share path, we fill the REMOTE_NAME_INFO structure ourselves. - if (Path.IsUncPathCore(path, true, false)) - return new NativeMethods.REMOTE_NAME_INFO - { - lpUniversalName = Path.AddTrailingDirectorySeparator(path, false), - lpConnectionName = Path.RemoveTrailingDirectorySeparator(path, false), - lpRemainingPath = Path.DirectorySeparator - }; - - - uint lastError; - - // Use large enough buffer to prevent a 2nd call. - uint bufferSize = 1024; - - do - { - using (var buffer = new SafeGlobalMemoryBufferHandle((int) bufferSize)) - { - // Structure: UNIVERSAL_NAME_INFO_LEVEL = 1 (not used in AlphaFS). - // Structure: REMOTE_NAME_INFO_LEVEL = 2 - - lastError = NativeMethods.WNetGetUniversalName(path, 2, buffer, out bufferSize); - - switch (lastError) - { - case Win32Errors.NO_ERROR: - return buffer.PtrToStructure(0); - - case Win32Errors.ERROR_MORE_DATA: - //bufferSize = Received the required buffer size, retry. - break; - } - } - - } while (lastError == Win32Errors.ERROR_MORE_DATA); - - if (!continueOnException && lastError != Win32Errors.NO_ERROR) - throw new NetworkInformationException((int) lastError); - - // Return an empty structure (all fields set to null). - return new NativeMethods.REMOTE_NAME_INFO(); - } - - internal struct ConnectDisconnectArguments - { - /// Handle to a window that the provider of network resources can use as an owner window for dialog boxes. - public IntPtr WinOwner; - - /// The name of a local device to be redirected, such as "F:". When is or string.Empty, the last available drive letter will be used. Letters are assigned beginning with Z:, then Y: and so on. - public string LocalName; - - /// A network resource to connect to/disconnect from, for example: \\server or \\server\share - public string RemoteName; - - /// A instance. Use either this or the combination of and . - public NetworkCredential Credential; - - /// The user name for making the connection. If is , the function uses the default user name. (The user context for the process provides the default user name) - public string UserName; - - /// The password to be used for making the network connection. If is , the function uses the current default password associated with the user specified by . - public string Password; - - /// always pops-up an authentication dialog box. - public bool Prompt; - - /// successful network resource connections will be saved. - public bool UpdateProfile; - - /// When the operating system prompts for a credential, the credential should be saved by the credential manager when true. - public bool SaveCredentials; - - /// indicates that the operation concerns a drive mapping. - public bool IsDeviceMap; - - /// indicates that the operation needs to disconnect from the network resource, otherwise connect. - public bool IsDisconnect; - } - - #endregion // Internal Methods - } -} diff --git a/AlphaFS/Network/Host Class/ServerMessageBlock.cs b/AlphaFS/Network/Host Class/ServerMessageBlock.cs deleted file mode 100644 index 5ece5ed..0000000 --- a/AlphaFS/Network/Host Class/ServerMessageBlock.cs +++ /dev/null @@ -1,395 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using Alphaleonis.Win32.Filesystem; -using System; -using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; -using System.Globalization; -using System.Linq; -using System.Net.NetworkInformation; -using System.Security; - -namespace Alphaleonis.Win32.Network -{ - partial class Host - { - #region EnumerateOpenConnections - - /// Enumerates open connections from the local host. - /// connection information from the local host. - /// - /// - [SecurityCritical] - public static IEnumerable EnumerateOpenConnections() - { - return EnumerateOpenConnectionsCore(null, null, false); - } - - /// Enumerates open connections from the specified host. - /// connection information from the specified . - /// - /// - /// The DNS or NetBIOS name of the remote server. refers to the local host. - /// The name of the Server Message Block (SMB) share. - /// - /// suppress any Exception that might be thrown as a result from a failure, - /// such as unavailable resources. - /// - [SecurityCritical] - public static IEnumerable EnumerateOpenConnections(string host, string share, bool continueOnException) - { - return EnumerateOpenConnectionsCore(host, share, continueOnException); - } - - #endregion // EnumerateOpenConnections - - #region EnumerateShares - - /// Enumerates Server Message Block (SMB) shares from the local host. - /// shares from the specified host. - /// This method also enumerates hidden shares. - [SecurityCritical] - public static IEnumerable EnumerateShares() - { - return EnumerateSharesCore(null, ShareType.All, false); - } - - /// Enumerates Server Message Block (SMB) shares from the local host. - /// shares from the specified host. - /// This method also enumerates hidden shares. - /// suppress any Exception that might be thrown as a result from a failure, such as unavailable resources. - [SecurityCritical] - public static IEnumerable EnumerateShares(bool continueOnException) - { - return EnumerateSharesCore(null, ShareType.All, continueOnException); - } - - /// Enumerates Server Message Block (SMB) shares from the local host. - /// shares from the specified host. - /// This method also enumerates hidden shares. - /// The type of the shared resource to retrieve. - /// suppress any Exception that might be thrown as a result from a failure, such as unavailable resources. - [SecurityCritical] - public static IEnumerable EnumerateShares(ShareType shareType, bool continueOnException) - { - return EnumerateSharesCore(null, shareType, continueOnException); - } - - /// Enumerates Server Message Block (SMB) shares from the specified . - /// shares from the specified host. - /// This method also enumerates hidden shares. - /// The DNS or NetBIOS name of the specified host. - [SecurityCritical] - public static IEnumerable EnumerateShares(string host) - { - return EnumerateSharesCore(host, ShareType.All, false); - } - - /// Enumerates Server Message Block (SMB) shares from the specified . - /// shares from the specified host. - /// This method also enumerates hidden shares. - /// The DNS or NetBIOS name of the specified host. - /// suppress any Exception that might be thrown as a result from a failure, such as unavailable resources. - [SecurityCritical] - public static IEnumerable EnumerateShares(string host, bool continueOnException) - { - return EnumerateSharesCore(host, ShareType.All, continueOnException); - } - - /// Enumerates Server Message Block (SMB) shares from the specified . - /// shares from the specified host. - /// This method also enumerates hidden shares. - /// The DNS or NetBIOS name of the specified host. - /// The type of the shared resource to retrieve. - /// suppress any Exception that might be thrown as a result from a failure, such as unavailable resources. - [SecurityCritical] - public static IEnumerable EnumerateShares(string host, ShareType shareType, bool continueOnException) - { - return EnumerateSharesCore(host, shareType, continueOnException); - } - - #endregion // EnumerateShares - - #region GetHostShareFromPath - - /// Gets the host and share path name for the given . - /// The share in the format: \\host\share. - /// The host and share path. For example, if is: "\\SERVER001\C$\WINDOWS\System32", - /// its is returned as string[0] = "SERVER001" and string[1] = "\C$\WINDOWS\System32". - /// If the conversion from local path to UNC path fails, is returned. - /// - [SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "0", Justification = "Utils.IsNullOrWhiteSpace validates arguments.")] - [SecurityCritical] - public static string[] GetHostShareFromPath(string uncPath) - { - if (Utils.IsNullOrWhiteSpace(uncPath)) - return null; - - Uri uri; - if (Uri.TryCreate(Path.GetRegularPathCore(uncPath, GetFullPathOptions.None, false), UriKind.Absolute, out uri) && uri.IsUnc) - { - return new[] - { - uri.Host, - uri.AbsolutePath.Replace(Path.AltDirectorySeparatorChar, Path.DirectorySeparatorChar) - }; - } - - return null; - } - - #endregion // GetHostShareFromPath - - #region GetShareInfo - - /// Retrieves information about the Server Message Block (SMB) share as defined on the specified host. - /// A class, or on failure or when not available, and is . - /// The share in the format: \\host\share. - /// to suppress any Exception that might be thrown as a result from a failure, such as unavailable resources. - [SecurityCritical] - public static ShareInfo GetShareInfo(string uncPath, bool continueOnException) - { - string[] unc = GetHostShareFromPath(uncPath); - return GetShareInfoCore(ShareInfoLevel.Info503, unc[0], unc[1], continueOnException); - } - - /// Retrieves information about the Server Message Block (SMB) share as defined on the specified host. - /// A class, or on failure or when not available, and is . - /// One of the options. - /// The share in the format: \\host\share. - /// to suppress any Exception that might be thrown as a result from a failure, such as unavailable resources. - [SecurityCritical] - public static ShareInfo GetShareInfo(ShareInfoLevel shareLevel, string uncPath, bool continueOnException) - { - string[] unc = GetHostShareFromPath(uncPath); - return GetShareInfoCore(shareLevel, unc[0], unc[1], continueOnException); - } - - /// Retrieves information about the Server Message Block (SMB) share as defined on the specified host. - /// A class, or on failure or when not available, and is . - /// The DNS or NetBIOS name of the specified host. - /// The name of the Server Message Block (SMB) share. - /// to suppress any Exception that might be thrown as a result from a failure, such as unavailable resources. - [SecurityCritical] - public static ShareInfo GetShareInfo(string host, string share, bool continueOnException) - { - return GetShareInfoCore(ShareInfoLevel.Info503, host, share, continueOnException); - } - - /// Retrieves information about the Server Message Block (SMB) share as defined on the specified host. - /// A class, or on failure or when not available, and is . - /// One of the options. - /// A string that specifies the DNS or NetBIOS name of the specified . - /// A string that specifies the name of the Server Message Block (SMB) share. - /// to suppress any Exception that might be thrown as a result from a failure, such as unavailable resources. - [SecurityCritical] - public static ShareInfo GetShareInfo(ShareInfoLevel shareLevel, string host, string share, bool continueOnException) - { - return GetShareInfoCore(shareLevel, host, share, continueOnException); - } - - #endregion // GetShareInfo - - #region Internal Methods - - #region EnumerateOpenConnectionsCore - - /// Enumerates open connections from the specified host. - /// connection information from the specified . - /// - /// - /// The DNS or NetBIOS name of the remote server. refers to the local host. - /// The name of the Server Message Block (SMB) share. - /// suppress any Exception that might be thrown as a result from a failure, such as unavailable resources. - [SecurityCritical] - private static IEnumerable EnumerateOpenConnectionsCore(string host, string share, bool continueOnException) - { - if (Utils.IsNullOrWhiteSpace(share)) - throw new ArgumentNullException("share"); - - return EnumerateNetworkObjectCore(new FunctionData { ExtraData1 = share }, (NativeMethods.CONNECTION_INFO_1 structure, SafeGlobalMemoryBufferHandle buffer) => - - new OpenConnectionInfo(host, structure), - - (FunctionData functionData, out SafeGlobalMemoryBufferHandle buffer, int prefMaxLen, out uint entriesRead, out uint totalEntries, out uint resumeHandle) => - { - // When host == null, the local computer is used. - // However, the resulting OpenResourceInfo.Host property will be empty. - // So, explicitly state Environment.MachineName to prevent this. - // Furthermore, the UNC prefix: \\ is not required and always removed. - string stripUnc = Utils.IsNullOrWhiteSpace(host) ? Environment.MachineName : Path.GetRegularPathCore(host, GetFullPathOptions.CheckInvalidPathChars, false).Replace(Path.UncPrefix, string.Empty); - - return NativeMethods.NetConnectionEnum(stripUnc, functionData.ExtraData1, 1, out buffer, NativeMethods.MaxPreferredLength, out entriesRead, out totalEntries, out resumeHandle); - - }, - continueOnException); - } - - #endregion // EnumerateOpenConnectionsCore - - #region EnumerateSharesCore - - /// Enumerates Server Message Block (SMB) shares from a local or remote host. - /// shares from the specified host. - /// This method also enumerates hidden shares. - /// - /// - /// The DNS or NetBIOS name of the specified host. - /// The type of the shared resource to retrieve. - /// suppress any Exception that might be thrown as a result from a failure, such as unavailable resources. - [SecurityCritical] - internal static IEnumerable EnumerateSharesCore(string host, ShareType shareType, bool continueOnException) - { - // When host == null, the local computer is used. - // However, the resulting OpenResourceInfo.Host property will be empty. - // So, explicitly state Environment.MachineName to prevent this. - // Furthermore, the UNC prefix: \\ is not required and always removed. - string stripUnc = Utils.IsNullOrWhiteSpace(host) - ? Environment.MachineName - : Path.GetRegularPathCore(host, GetFullPathOptions.CheckInvalidPathChars, false).Replace(Path.UncPrefix, string.Empty); - - var fd = new FunctionData(); - bool hasItems = false; - bool yieldAll = shareType == ShareType.All; - - // Try SHARE_INFO_503 structure. - foreach (var si in EnumerateNetworkObjectCore(fd, (NativeMethods.SHARE_INFO_503 structure, SafeGlobalMemoryBufferHandle buffer) => - new ShareInfo(stripUnc, ShareInfoLevel.Info503, structure), - (FunctionData functionData, out SafeGlobalMemoryBufferHandle buffer, int prefMaxLen, out uint entriesRead, out uint totalEntries, out uint resumeHandle) => - NativeMethods.NetShareEnum(stripUnc, 503, out buffer, NativeMethods.MaxPreferredLength, out entriesRead, out totalEntries, out resumeHandle), continueOnException).Where(si => yieldAll || si.ShareType == shareType)) - { - yield return si; - hasItems = true; - } - - // SHARE_INFO_503 is requested, but not supported/possible. - // Try again with SHARE_INFO_2 structure. - if (!hasItems) - foreach (var si in EnumerateNetworkObjectCore(fd, (NativeMethods.SHARE_INFO_2 structure, SafeGlobalMemoryBufferHandle buffer) => - new ShareInfo(stripUnc, ShareInfoLevel.Info2, structure), - (FunctionData functionData, out SafeGlobalMemoryBufferHandle buffer, int prefMaxLen, out uint entriesRead, out uint totalEntries, out uint resumeHandle) => - NativeMethods.NetShareEnum(stripUnc, 2, out buffer, NativeMethods.MaxPreferredLength, out entriesRead, out totalEntries, out resumeHandle), continueOnException).Where(si => yieldAll || si.ShareType == shareType)) - { - yield return si; - hasItems = true; - } - - // SHARE_INFO_2 is requested, but not supported/possible. - // Try again with SHARE_INFO_1 structure. - if (!hasItems) - foreach (var si in EnumerateNetworkObjectCore(fd, (NativeMethods.SHARE_INFO_1 structure, SafeGlobalMemoryBufferHandle buffer) => - new ShareInfo(stripUnc, ShareInfoLevel.Info1, structure), - (FunctionData functionData, out SafeGlobalMemoryBufferHandle buffer, int prefMaxLen, out uint entriesRead, out uint totalEntries, out uint resumeHandle) => - NativeMethods.NetShareEnum(stripUnc, 1, out buffer, NativeMethods.MaxPreferredLength, out entriesRead, out totalEntries, out resumeHandle), continueOnException).Where(si => yieldAll || si.ShareType == shareType)) - { - yield return si; - } - } - - #endregion // EnumerateSharesCore - - #region GetShareInfoCore - - /// Gets the structure of a Server Message Block (SMB) share. - /// A class, or on failure or when not available, and is . - /// - /// One of the options. - /// A string that specifies the DNS or NetBIOS name of the specified . - /// A string that specifies the name of the Server Message Block (SMB) share. - /// to suppress any Exception that might be thrown as a result from a failure, such as unavailable resources. - [SecurityCritical] - internal static ShareInfo GetShareInfoCore(ShareInfoLevel shareLevel, string host, string share, bool continueOnException) - { - if (Utils.IsNullOrWhiteSpace(share)) - return null; - - // When host == null, the local computer is used. - // However, the resulting OpenResourceInfo.Host property will be empty. - // So, explicitly state Environment.MachineName to prevent this. - // Furthermore, the UNC prefix: \\ is not required and always removed. - string stripUnc = Utils.IsNullOrWhiteSpace(host) - ? Environment.MachineName - : Path.GetRegularPathCore(host, GetFullPathOptions.CheckInvalidPathChars, false).Replace(Path.UncPrefix, string.Empty); - - bool fallback = false; - - - startNetShareGetInfo: - - SafeGlobalMemoryBufferHandle safeBuffer; - - uint structureLevel = Convert.ToUInt16(shareLevel, CultureInfo.InvariantCulture); - uint lastError = NativeMethods.NetShareGetInfo(stripUnc, share, structureLevel, out safeBuffer); - - using (safeBuffer) - { - switch (lastError) - { - case Win32Errors.NERR_Success: - switch (shareLevel) - { - case ShareInfoLevel.Info1005: - return new ShareInfo(stripUnc, shareLevel, safeBuffer.PtrToStructure(0)) - { - NetFullPath = Path.CombineCore(false, Path.UncPrefix + stripUnc, share) - }; - - case ShareInfoLevel.Info503: - return new ShareInfo(stripUnc, shareLevel, safeBuffer.PtrToStructure(0)); - - case ShareInfoLevel.Info2: - return new ShareInfo(stripUnc, shareLevel, safeBuffer.PtrToStructure(0)); - - case ShareInfoLevel.Info1: - return new ShareInfo(stripUnc, shareLevel, safeBuffer.PtrToStructure(0)); - } - break; - - - // Observed when SHARE_INFO_503 is requested, but not supported/possible. - // Fall back on SHARE_INFO_2 structure and try again. - case Win32Errors.RPC_X_BAD_STUB_DATA: - - case Win32Errors.ERROR_ACCESS_DENIED: - if (!fallback && shareLevel != ShareInfoLevel.Info2) - { - shareLevel = ShareInfoLevel.Info2; - fallback = true; - goto startNetShareGetInfo; - } - break; - - default: - if (!continueOnException) - throw new NetworkInformationException((int) lastError); - break; - } - - return null; - } - } - - #endregion // GetShareInfoCore - - #endregion // Internal Methods - } -} diff --git a/AlphaFS/Network/Native Methods/NativeMethods.DistributedFileSystem.cs b/AlphaFS/Network/Native Methods/NativeMethods.DistributedFileSystem.cs deleted file mode 100644 index 9ea02a1..0000000 --- a/AlphaFS/Network/Native Methods/NativeMethods.DistributedFileSystem.cs +++ /dev/null @@ -1,78 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System; -using System.Diagnostics.CodeAnalysis; -using System.Runtime.InteropServices; -using System.Security; - -namespace Alphaleonis.Win32.Network -{ - internal static partial class NativeMethods - { - /// Enumerates the Distributed File System (DFS) namespaces hosted on a server or DFS links of a namespace hosted by a server. - /// - /// If the function succeeds, the return value is NERR_Success. - /// If the function fails, the return value is a system error code. - /// - /// - /// No special group membership is required for using the NetDfsEnum function. - /// Minimum supported client: Windows Vista - /// Minimum supported server: Windows Server 2003 - /// - [SuppressMessage("Microsoft.Security", "CA5122:PInvokesShouldNotBeSafeCriticalFxCopRule")] - [DllImport("netapi32.dll", SetLastError = true, CharSet = CharSet.Unicode), SuppressUnmanagedCodeSecurity] - [return: MarshalAs(UnmanagedType.U4)] - internal static extern uint NetDfsEnum([MarshalAs(UnmanagedType.LPWStr)] string dfsName, [MarshalAs(UnmanagedType.U4)] uint level, [MarshalAs(UnmanagedType.U4)] int prefMaxLen, out SafeGlobalMemoryBufferHandle buffer, [MarshalAs(UnmanagedType.U4)] out uint entriesRead, [MarshalAs(UnmanagedType.U4)] out uint resumeHandle); - - - /// Retrieves information about a Distributed File System (DFS) root or link from the cache maintained by the DFS client. - /// - /// If the function succeeds, the return value is NERR_Success. - /// If the function fails, the return value is a system error code. - /// - /// - /// No special group membership is required for using the NetDfsGetClientInfo function. - /// Minimum supported client: Windows Vista - /// Minimum supported server: Windows Server 2003 - /// - [SuppressMessage("Microsoft.Security", "CA5122:PInvokesShouldNotBeSafeCriticalFxCopRule")] - [DllImport("netapi32.dll", SetLastError = true, CharSet = CharSet.Unicode), SuppressUnmanagedCodeSecurity] - [return: MarshalAs(UnmanagedType.U4)] - internal static extern uint NetDfsGetClientInfo([MarshalAs(UnmanagedType.LPWStr)] string dfsEntryPath, [MarshalAs(UnmanagedType.LPWStr)] string serverName, [MarshalAs(UnmanagedType.LPWStr)] string shareName, [MarshalAs(UnmanagedType.U4)] uint level, out SafeGlobalMemoryBufferHandle buffer); - - - /// Retrieves information about a specified Distributed File System (DFS) root or link in a DFS namespace. - /// - /// If the function succeeds, the return value is NERR_Success. - /// If the function fails, the return value is a system error code. - /// - /// - /// No special group membership is required for using the NetDfsGetInfo function. - /// Minimum supported client: Windows Vista - /// Minimum supported server: Windows Server 2003 - /// - [SuppressMessage("Microsoft.Security", "CA5122:PInvokesShouldNotBeSafeCriticalFxCopRule")] - [DllImport("netapi32.dll", SetLastError = true, CharSet = CharSet.Unicode), SuppressUnmanagedCodeSecurity] - [return: MarshalAs(UnmanagedType.U4)] - internal static extern uint NetDfsGetInfo([MarshalAs(UnmanagedType.LPWStr)] string dfsEntryPath, [MarshalAs(UnmanagedType.LPWStr)] string serverName, [MarshalAs(UnmanagedType.LPWStr)] string shareName, [MarshalAs(UnmanagedType.U4)] uint level, out SafeGlobalMemoryBufferHandle buffer); - } -} diff --git a/AlphaFS/Network/Native Methods/NativeMethods.NetworkManagement.cs b/AlphaFS/Network/Native Methods/NativeMethods.NetworkManagement.cs deleted file mode 100644 index 9c4408a..0000000 --- a/AlphaFS/Network/Native Methods/NativeMethods.NetworkManagement.cs +++ /dev/null @@ -1,46 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System.Diagnostics.CodeAnalysis; -using System.Runtime.InteropServices; -using System.Security; - -namespace Alphaleonis.Win32.Network -{ - partial class NativeMethods - { - /// The NetServerDiskEnum function retrieves a list of disk drives on a server. - /// - /// If the function succeeds, the return value is NERR_Success. - /// If the function fails, the return value is a system error code. - /// - /// - /// The function returns an array of three-character strings (a drive letter, a colon, and a terminating null character). - /// Only members of the Administrators or Server Operators local group can successfully execute the NetServerDiskEnum function on a remote computer. - /// Minimum supported client: Windows 2000 Professional [desktop apps only] - /// Minimum supported server: Windows 2000 Server [desktop apps only] - /// - [SuppressMessage("Microsoft.Security", "CA5122:PInvokesShouldNotBeSafeCriticalFxCopRule")] - [DllImport("netapi32.dll", SetLastError = true, CharSet = CharSet.Unicode), SuppressUnmanagedCodeSecurity] - [return: MarshalAs(UnmanagedType.U4)] - internal static extern uint NetServerDiskEnum([MarshalAs(UnmanagedType.LPWStr)] string serverName, [MarshalAs(UnmanagedType.U4)] uint level, out SafeGlobalMemoryBufferHandle bufPtr, [MarshalAs(UnmanagedType.I4)] int prefMaxLen, [MarshalAs(UnmanagedType.U4)] out uint entriesRead, [MarshalAs(UnmanagedType.U4)] out uint totalEntries, [MarshalAs(UnmanagedType.U4)] out uint resumeHandle); - } -} diff --git a/AlphaFS/Network/Native Methods/NativeMethods.NetworkShareManagement.cs b/AlphaFS/Network/Native Methods/NativeMethods.NetworkShareManagement.cs deleted file mode 100644 index f236f0a..0000000 --- a/AlphaFS/Network/Native Methods/NativeMethods.NetworkShareManagement.cs +++ /dev/null @@ -1,117 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System.Diagnostics.CodeAnalysis; -using System.Runtime.InteropServices; -using System.Security; - -namespace Alphaleonis.Win32.Network -{ - partial class NativeMethods - { - /// Lists all connections made to a shared resource on the server or all connections established from a particular computer. - /// - /// If the function succeeds, the return value is NERR_Success. - /// If the function fails, the return value is a system error code. - /// - /// - /// If there is more than one user using this connection, then it is possible to get more than one structure for the same connection, but with a different user name. - /// Administrator, Server or Print Operator, or Power User group membership is required to successfully execute the NetConnectionEnum function. - /// Minimum supported client: Windows XP [desktop apps only] - /// Minimum supported server: Windows Server 2003 [desktop apps only] - /// - [SuppressMessage("Microsoft.Security", "CA5122:PInvokesShouldNotBeSafeCriticalFxCopRule")] - [DllImport("netapi32.dll", SetLastError = true, CharSet = CharSet.Unicode), SuppressUnmanagedCodeSecurity] - [return: MarshalAs(UnmanagedType.U4)] - internal static extern uint NetConnectionEnum([MarshalAs(UnmanagedType.LPWStr)] string serverName, [MarshalAs(UnmanagedType.LPWStr)] string qualifier, [MarshalAs(UnmanagedType.U4)] uint level, out SafeGlobalMemoryBufferHandle bufPtr, [MarshalAs(UnmanagedType.I4)] int prefMaxLen, [MarshalAs(UnmanagedType.U4)] out uint entriesRead, [MarshalAs(UnmanagedType.U4)] out uint totalEntries, [MarshalAs(UnmanagedType.U4)] out uint resumeHandle); - - - /// Forces a resource to close. This function can be used when an error prevents closure by any other means. - /// - /// If the function succeeds, the return value is NERR_Success. - /// If the function fails, the return value is a system error code. - /// - /// - /// You should use NetFileClose with caution because it does not write data cached on the client system to the file before closing the file. - /// Only members of the Administrators or Server Operators local group can successfully execute the NetFileEnum function. - /// Minimum supported client: Windows XP [desktop apps only] - /// Minimum supported server: Windows Server 2003 [desktop apps only] - /// - [SuppressMessage("Microsoft.Security", "CA5122:PInvokesShouldNotBeSafeCriticalFxCopRule")] - [DllImport("netapi32.dll", SetLastError = true, CharSet = CharSet.Unicode), SuppressUnmanagedCodeSecurity] - [return: MarshalAs(UnmanagedType.U4)] - internal static extern uint NetFileClose([MarshalAs(UnmanagedType.LPWStr)] string serverName, [MarshalAs(UnmanagedType.U4)] uint fileid); - - - /// Returns information about some or all open files on a server, depending on the parameters specified. - /// - /// If the function succeeds, the return value is NERR_Success. - /// If the function fails, the return value is a system error code. - /// - /// - /// Only members of the Administrators or Server Operators local group can successfully execute the NetFileEnum function. - /// Minimum supported client: Windows XP [desktop apps only] - /// Minimum supported server: Windows Server 2003 [desktop apps only] - /// - [SuppressMessage("Microsoft.Security", "CA5122:PInvokesShouldNotBeSafeCriticalFxCopRule")] - [DllImport("netapi32.dll", SetLastError = true, CharSet = CharSet.Unicode), SuppressUnmanagedCodeSecurity] - [return: MarshalAs(UnmanagedType.U4)] - internal static extern uint NetFileEnum([MarshalAs(UnmanagedType.LPWStr)] string serverName, [MarshalAs(UnmanagedType.LPWStr)] string basepath, [MarshalAs(UnmanagedType.LPWStr)] string username, [MarshalAs(UnmanagedType.U4)] uint level, out SafeGlobalMemoryBufferHandle buffer, [MarshalAs(UnmanagedType.I4)] int prefmaxlen, [MarshalAs(UnmanagedType.U4)] out uint entriesRead, [MarshalAs(UnmanagedType.U4)] out uint totalentries, [MarshalAs(UnmanagedType.U4)] out uint resumeHandle); - - - /// Retrieves information about each (hidden) Server Message Block (SMB) resource/share on a server. - /// - /// If the function succeeds, the return value is NERR_Success. - /// If the function fails, the return value is a system error code. - /// - /// - /// For interactive users (users who are logged on locally to the machine), no special group membership is required to execute the NetShareEnum function. - /// For non-interactive users, Administrator, Power User, Print Operator, or Server Operator group membership is required to successfully execute the NetShareEnum function at levels 2, 502, and 503. No special group membership is required for level 0 or level 1 calls. - /// This function applies only to Server Message Block (SMB) shares. - /// Windows Server 2003 and Windows XP: For all users, Administrator, Power User, Print Operator, or Server Operator group membership is required to successfully execute the NetShareEnum function at levels 2 and 502. - /// Minimum supported client: Windows XP [desktop apps only] - /// Minimum supported server: Windows Server 2003 [desktop apps only] - /// - [SuppressMessage("Microsoft.Security", "CA5122:PInvokesShouldNotBeSafeCriticalFxCopRule")] - [DllImport("netapi32.dll", SetLastError = true, CharSet = CharSet.Unicode), SuppressUnmanagedCodeSecurity] - [return: MarshalAs(UnmanagedType.U4)] - internal static extern uint NetShareEnum([MarshalAs(UnmanagedType.LPWStr)] string serverName, [MarshalAs(UnmanagedType.U4)] uint level, out SafeGlobalMemoryBufferHandle bufPtr, [MarshalAs(UnmanagedType.I4)] int prefMaxLen, [MarshalAs(UnmanagedType.U4)] out uint entriesRead, [MarshalAs(UnmanagedType.U4)] out uint totalEntries, [MarshalAs(UnmanagedType.U4)] out uint resumeHandle); - - - /// Retrieves information about a particular Server Message Block (SMB) shared resource on a server. - /// - /// If the function succeeds, the return value is NERR_Success. - /// If the function fails, the return value is a system error code. - /// - /// - /// For interactive users (users who are logged on locally to the machine), no special group membership is required to execute the NetShareGetInfo function. - /// For non-interactive users, Administrator, Power User, Print Operator, or Server Operator group membership is required to successfully execute the NetShareGetInfo function at levels 2, 502, and 503. - /// This function applies only to Server Message Block (SMB) shares. - /// Windows Server 2003 and Windows XP: For all users, Administrator, Power User, Print Operator, or Server Operator group membership is required to successfully execute the NetShareGetInfo function at levels 2 and 502. - /// Minimum supported client: Windows XP [desktop apps only] - /// Minimum supported server: Windows Server 2003 [desktop apps only] - /// - [SuppressMessage("Microsoft.Security", "CA5122:PInvokesShouldNotBeSafeCriticalFxCopRule")] - [DllImport("netapi32.dll", SetLastError = true, CharSet = CharSet.Unicode), SuppressUnmanagedCodeSecurity] - [return: MarshalAs(UnmanagedType.U4)] - internal static extern uint NetShareGetInfo([MarshalAs(UnmanagedType.LPWStr)] string serverName, [MarshalAs(UnmanagedType.LPWStr)] string netName, [MarshalAs(UnmanagedType.U4)] uint level, out SafeGlobalMemoryBufferHandle lpBuffer); - } -} diff --git a/AlphaFS/Network/Native Methods/NativeMethods.WindowsNetworking.cs b/AlphaFS/Network/Native Methods/NativeMethods.WindowsNetworking.cs deleted file mode 100644 index 2658f27..0000000 --- a/AlphaFS/Network/Native Methods/NativeMethods.WindowsNetworking.cs +++ /dev/null @@ -1,78 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System; -using System.Diagnostics.CodeAnalysis; -using System.Runtime.InteropServices; -using System.Security; -using System.Text; - -namespace Alphaleonis.Win32.Network -{ - partial class NativeMethods - { - /// The WNetCancelConnection function cancels an existing network connection. You can also call the function to remove remembered network connections that are not currently connected. - /// - /// If the function succeeds, the return value is - /// If the function fails, the return value is a system error code. - /// - /// - /// Minimum supported client: Windows 2000 Professional [desktop apps only] - /// Minimum supported server: Windows 2000 Server [desktop apps only] - /// - [SuppressMessage("Microsoft.Security", "CA5122:PInvokesShouldNotBeSafeCriticalFxCopRule")] - [DllImport("mpr.dll", SetLastError = true, CharSet = CharSet.Unicode, EntryPoint = "WNetCancelConnection2W"), SuppressUnmanagedCodeSecurity] - [return: MarshalAs(UnmanagedType.U4)] - internal static extern uint WNetCancelConnection([MarshalAs(UnmanagedType.LPWStr)] string lpName, Connect dwFlags, [MarshalAs(UnmanagedType.Bool)] bool fForce); - - - /// The WNetGetUniversalName function takes a drive-based path for a network resource and returns an information structure that contains a more universal form of the name. - /// - /// If the function succeeds, the return value is - /// If the function fails, the return value is a system error code. - /// - /// - /// Minimum supported client: Windows 2000 Professional [desktop apps only] - /// Minimum supported server: Windows 2000 Server [desktop apps only] - /// - [SuppressMessage("Microsoft.Security", "CA5122:PInvokesShouldNotBeSafeCriticalFxCopRule")] - [DllImport("mpr.dll", SetLastError = true, CharSet = CharSet.Unicode, EntryPoint = "WNetGetUniversalNameW"), SuppressUnmanagedCodeSecurity] - [return: MarshalAs(UnmanagedType.U4)] - internal static extern uint WNetGetUniversalName([MarshalAs(UnmanagedType.LPWStr)] string lpLocalPath, [MarshalAs(UnmanagedType.U4)] uint dwInfoLevel, SafeGlobalMemoryBufferHandle lpBuffer, [MarshalAs(UnmanagedType.U4)] out uint lpBufferSize); - - - /// The WNetUseConnection function creates a connection to a network resource. The function can redirect a local device to a network resource. - /// - /// If the function succeeds, the return value is - /// If the function fails, the return value is a system error code. - /// - /// - /// Minimum supported client: Windows 2000 Professional [desktop apps only] - /// Minimum supported server: Windows 2000 Server [desktop apps only] - /// - [SuppressMessage("Microsoft.Security", "CA5122:PInvokesShouldNotBeSafeCriticalFxCopRule")] - [DllImport("mpr.dll", SetLastError = true, CharSet = CharSet.Unicode, EntryPoint = "WNetUseConnectionW"), SuppressUnmanagedCodeSecurity] - [return: MarshalAs(UnmanagedType.U4)] - internal static extern uint WNetUseConnection(IntPtr hwndOwner, [MarshalAs(UnmanagedType.Struct)] ref NETRESOURCE lpNetResource, [MarshalAs(UnmanagedType.LPWStr)] string lpPassword, [MarshalAs(UnmanagedType.LPWStr)] string lpUserId, [MarshalAs(UnmanagedType.U4)] Connect dwFlags, StringBuilder lpAccessName, [MarshalAs(UnmanagedType.U4)] out uint lpBufferSize, [MarshalAs(UnmanagedType.U4)] out uint lpResult); - - // Note: When NETRESOURCE is struct: use ref, when NETRESOURCE is class: ommit ref. - } -} diff --git a/AlphaFS/Network/Native Methods/NativeMethods.cs b/AlphaFS/Network/Native Methods/NativeMethods.cs deleted file mode 100644 index 4cb9315..0000000 --- a/AlphaFS/Network/Native Methods/NativeMethods.cs +++ /dev/null @@ -1,66 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System; -using System.Diagnostics.CodeAnalysis; -using System.Globalization; -using System.Net; - -namespace Alphaleonis.Win32.Network -{ - internal static partial class NativeMethods - { - #region Constants - - /// A constant of type DWORD that is set to –1. This value is valid as an input parameter to any method in section 3.1.4 that takes a PreferedMaximumLength parameter. When specified as an input parameter, this value indicates that the method MUST allocate as much space as the data requires. - /// MSDN "2.2.2.2 MAX_PREFERRED_LENGTH": http://msdn.microsoft.com/en-us/library/cc247107.aspx - internal const int MaxPreferredLength = -1; - - #endregion // Constants - - #region GetComputerDomain - - internal static readonly string ComputerDomain = GetComputerDomain(); - - [SuppressMessage("Microsoft.Design", "CA1031:DoNotCatchGeneralExceptionTypes")] - private static string GetComputerDomain(bool fdqn = false) - { - string domain = Environment.UserDomainName; - string machine = Environment.MachineName.ToUpper(CultureInfo.InvariantCulture); - - try - { - if (fdqn) - { - domain = Dns.GetHostEntry("LocalHost").HostName.ToUpper(CultureInfo.InvariantCulture).Replace(machine + ".", string.Empty); - domain = domain.Replace(machine, string.Empty); - } - } - catch - { - } - - return domain; - } - - #endregion // GetComputerDomain - } -} \ No newline at end of file diff --git a/AlphaFS/Network/Native Structures/CONNECTION_INFO_1.cs b/AlphaFS/Network/Native Structures/CONNECTION_INFO_1.cs deleted file mode 100644 index 35343b5..0000000 --- a/AlphaFS/Network/Native Structures/CONNECTION_INFO_1.cs +++ /dev/null @@ -1,57 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System.Runtime.InteropServices; - -namespace Alphaleonis.Win32.Network -{ - internal static partial class NativeMethods - { - /// Contains the identification number of a connection, number of open files, connection time, number of users on the connection, and the type of connection. - /// Minimum supported client: Windows XP [desktop apps only] - /// Minimum supported server: Windows Server 2003 [desktop apps only] - [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)] - internal struct CONNECTION_INFO_1 - { - /// Specifies a connection identification number. - [MarshalAs(UnmanagedType.U4)] public readonly uint coni1_id; - - /// A combination of values that specify the type of connection made from the local device name to the shared resource. - [MarshalAs(UnmanagedType.U4)] public readonly ShareType coni1_type; - - /// Specifies the number of files currently open as a result of the connection. - [MarshalAs(UnmanagedType.U4)] public readonly uint coni1_num_opens; - - /// Specifies the number of users on the connection. - [MarshalAs(UnmanagedType.U4)] public readonly uint coni1_num_users; - - /// Specifies the number of seconds that the connection has been established. - [MarshalAs(UnmanagedType.U4)] public readonly uint coni1_time; - - /// If the server sharing the resource is running with user-level security, the UserName member describes which user made the connection. If the server is running with share-level security, coni1_username describes which computer (computername) made the connection. - /// Note that Windows does not support share-level security. - [MarshalAs(UnmanagedType.LPWStr)] public readonly string coni1_username; - - /// String that specifies either the share name of the server's shared resource or the computername of the client. The value of this member depends on which name was specified as the qualifier parameter to the NetConnectionEnum function. - [MarshalAs(UnmanagedType.LPWStr)] public readonly string oni1_netname; - } - } -} diff --git a/AlphaFS/Network/Native Structures/DFS_INFO_200.cs b/AlphaFS/Network/Native Structures/DFS_INFO_200.cs deleted file mode 100644 index 585cc2b..0000000 --- a/AlphaFS/Network/Native Structures/DFS_INFO_200.cs +++ /dev/null @@ -1,39 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System.Runtime.InteropServices; - -namespace Alphaleonis.Win32.Network -{ - internal static partial class NativeMethods - { - /// Contains the name of a domain-based Distributed File System (DFS) namespace. - /// This structure is only for use with the NetDfsEnum, NetDfsGetClientInfo, and NetDfsGetInfo functions. - /// Minimum supported client: Windows XP [desktop apps only] - /// Minimum supported server: Windows Server 2003 [desktop apps only] - [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)] - internal struct DFS_INFO_200 - { - /// The name of a domain-based DFS namespace. - [MarshalAs(UnmanagedType.LPWStr)] public readonly string FtDfsName; - } - } -} diff --git a/AlphaFS/Network/Native Structures/DFS_INFO_300.cs b/AlphaFS/Network/Native Structures/DFS_INFO_300.cs deleted file mode 100644 index 345b888..0000000 --- a/AlphaFS/Network/Native Structures/DFS_INFO_300.cs +++ /dev/null @@ -1,53 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System.Diagnostics.CodeAnalysis; -using System.Runtime.InteropServices; - -namespace Alphaleonis.Win32.Network -{ - internal static partial class NativeMethods - { - /// Contains the name and type (domain-based or stand-alone) of a DFS namespace. - /// The DFS functions use the structure to enumerate DFS namespaces hosted on a machine. - /// Minimum supported client: Windows XP with SP1 [desktop apps only] - /// Minimum supported server: Windows Server 2003 [desktop apps only] - [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Dfs")] - [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)] - internal struct DFS_INFO_300 - { - /// Value that specifies the type of the DFS namespace. This member can be one of the values. - [SuppressMessage("Microsoft.Naming", "CA1726:UsePreferredTerms", MessageId = "Flags")] - [MarshalAs(UnmanagedType.U4)] public readonly DfsNamespaceFlavors Flags; - - /// The name of a DFS namespace. - /// This member can have one of the following two formats: - /// The first format is: \ServerName\DfsName - /// where ServerName is the name of the root target server that hosts the stand-alone DFS namespace and DfsName is the name of the DFS namespace. - /// The second format is: - /// \DomainName\DomDfsName - /// where DomainName is the name of the domain that hosts the domain-based DFS namespace and DomDfsname is the name of the DFS namespace. - /// - [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Dfs")] - [MarshalAs(UnmanagedType.LPWStr)] public readonly string DfsName; - } - } -} diff --git a/AlphaFS/Network/Native Structures/DFS_INFO_9.cs b/AlphaFS/Network/Native Structures/DFS_INFO_9.cs deleted file mode 100644 index 5cdde49..0000000 --- a/AlphaFS/Network/Native Structures/DFS_INFO_9.cs +++ /dev/null @@ -1,77 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System; -using System.Diagnostics.CodeAnalysis; -using System.Runtime.InteropServices; - -namespace Alphaleonis.Win32.Network -{ - internal static partial class NativeMethods - { - /// Contains the name, status, GUID, time-out, property flags, metadata size, DFS target information, link reparse point security descriptor, and a list of DFS targets for a root or link. - /// Minimum supported client: Windows Vista with SP1 - /// Minimum supported server: Windows Server 2008 - [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Dfs")] - [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)] - internal struct DFS_INFO_9 - { - /// The Universal Naming Convention (UNC) path of a DFS root or link. - [MarshalAs(UnmanagedType.LPWStr)] public readonly string EntryPath; - - /// The comment associated with the DFS root or link. - [MarshalAs(UnmanagedType.LPWStr)] public readonly string Comment; - - /// A that specifies a set of bit flags that describe the DFS root or link. - [MarshalAs(UnmanagedType.U4)] public readonly DfsVolumeStates State; - - /// Specifies the time-out, in seconds, of the DFS root or link. - [MarshalAs(UnmanagedType.U4)] public readonly uint Timeout; - - /// Specifies the GUID of the DFS root or link. - public readonly Guid Guid; - - /// Specifies a set of flags that describe specific properties of a DFS namespace, root, or link. - [MarshalAs(UnmanagedType.U4)] public readonly DfsPropertyFlags PropertyFlags; - - /// For domain-based DFS namespaces, this member specifies the size of the corresponding Active Directory data blob, in bytes. - /// For stand-alone DFS namespaces, this field specifies the size of the metadata stored in the registry, - /// including the key names and value names, in addition to the specific data items associated with them. - /// This field is valid for DFS roots only. - /// - [MarshalAs(UnmanagedType.U4)] public readonly uint MetadataSize; - - /// This member is reserved for system use. - [MarshalAs(UnmanagedType.U4)] public readonly uint SdLengthReserved; - - /// Pointer to a SECURITY_DESCRIPTOR structure that specifies a self-relative security descriptor to be associated with the DFS link's reparse point. - /// This field is valid for DFS links only. - /// - public IntPtr pSecurityDescriptor; - - /// Specifies the number of DFS targets. - [MarshalAs(UnmanagedType.U4)] public readonly uint NumberOfStorages; - - /// An array of structures. - public readonly IntPtr Storage; - } - } -} diff --git a/AlphaFS/Network/Native Structures/DFS_STORAGE_INFO_1.cs b/AlphaFS/Network/Native Structures/DFS_STORAGE_INFO_1.cs deleted file mode 100644 index 6078678..0000000 --- a/AlphaFS/Network/Native Structures/DFS_STORAGE_INFO_1.cs +++ /dev/null @@ -1,47 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System.Runtime.InteropServices; - -namespace Alphaleonis.Win32.Network -{ - internal static partial class NativeMethods - { - /// Contains information about a DFS target, including the DFS target server name and share name as well as the target's state and priority. - /// Minimum supported client: Windows Vista - /// Minimum supported server: Windows Server 2008, Windows Server 2003 with SP1 - [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)] - internal struct DFS_STORAGE_INFO_1 - { - /// State of the target. - [MarshalAs(UnmanagedType.U4)] public readonly DfsStorageStates State; - - /// The DFS root target or link target server name. - [MarshalAs(UnmanagedType.LPWStr)] public readonly string ServerName; - - /// The DFS root target or link target share name. - [MarshalAs(UnmanagedType.LPWStr)] public readonly string ShareName; - - /// DFS_TARGET_PRIORITY structure that contains a DFS target's priority class and rank. - [MarshalAs(UnmanagedType.Struct)] public readonly DFS_TARGET_PRIORITY TargetPriority; - } - } -} diff --git a/AlphaFS/Network/Native Structures/DFS_TARGET_PRIORITY.cs b/AlphaFS/Network/Native Structures/DFS_TARGET_PRIORITY.cs deleted file mode 100644 index 14bdb97..0000000 --- a/AlphaFS/Network/Native Structures/DFS_TARGET_PRIORITY.cs +++ /dev/null @@ -1,44 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System.Runtime.InteropServices; - -namespace Alphaleonis.Win32.Network -{ - internal static partial class NativeMethods - { - /// Contains the priority class and rank of a specific DFS target. - /// Minimum supported client: Windows Vista - /// Minimum supported server: Windows Server 2008, Windows Server 2003 with SP1 - [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)] - internal struct DFS_TARGET_PRIORITY - { - /// DFS_TARGET_PRIORITY_CLASS enumeration value that specifies the priority class of the target. - [MarshalAs(UnmanagedType.I4)] public readonly DfsTargetPriorityClass TargetPriorityClass; - - /// Specifies the priority rank value of the target. The default value is 0, which indicates the highest priority rank within a priority class. - public readonly ushort TargetPriorityRank; - - /// This member is reserved and must be zero. - public readonly ushort Reserved; - } - } -} diff --git a/AlphaFS/Network/Native Structures/FILE_INFO_3.cs b/AlphaFS/Network/Native Structures/FILE_INFO_3.cs deleted file mode 100644 index 9b9220b..0000000 --- a/AlphaFS/Network/Native Structures/FILE_INFO_3.cs +++ /dev/null @@ -1,51 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System.Runtime.InteropServices; - -namespace Alphaleonis.Win32.Network -{ - internal static partial class NativeMethods - { - /// Contains the identifier and other pertinent information about files, devices, and pipes. - /// This structure is only for use with the NetFileEnum function. - /// Minimum supported client: Windows XP [desktop apps only] - /// Minimum supported server: Windows Server 2003 [desktop apps only] - [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)] - internal struct FILE_INFO_3 - { - /// The identification number assigned to the resource when it is opened. - [MarshalAs(UnmanagedType.U4)] public readonly uint fi3_id; - - /// The access permissions associated with the opening application. This member can be one or more of the following values. - [MarshalAs(UnmanagedType.U4)] public readonly AccessPermissions fi3_permissions; - - /// The number of file locks on the file, device, or pipe. - [MarshalAs(UnmanagedType.U4)] public readonly uint fi3_num_locks; - - /// The path of the opened resource. - [MarshalAs(UnmanagedType.LPWStr)] public readonly string fi3_pathname; - - /// Specifies which user (on servers that have user-level security) or which computer (on servers that have share-level security) opened the resource. - [MarshalAs(UnmanagedType.LPWStr)] public readonly string fi3_username; - } - } -} diff --git a/AlphaFS/Network/Native Structures/NETRESOURCE.cs b/AlphaFS/Network/Native Structures/NETRESOURCE.cs deleted file mode 100644 index 3325a4a..0000000 --- a/AlphaFS/Network/Native Structures/NETRESOURCE.cs +++ /dev/null @@ -1,71 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System.Runtime.InteropServices; - -namespace Alphaleonis.Win32.Network -{ - internal static partial class NativeMethods - { - /// Contains information about a network resource. - /// The NETRESOURCE structure is returned during an enumeration of network resources. - /// The NETRESOURCE structure is also specified when making or querying - /// a network connection with calls to various Windows Networking functions. - /// - [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)] - internal struct NETRESOURCE - { - /// The scope of the enumeration. - [MarshalAs(UnmanagedType.U4)] public readonly ResourceScope dwScope; - - /// The type of resource - [MarshalAs(UnmanagedType.U4)] public ResourceType dwType; - - /// The display options for the network object in a network browsing user interface. - [MarshalAs(UnmanagedType.U4)] public readonly ResourceDisplayType dwDisplayType; - - /// A set of bit flags describing how the resource can be used. - [MarshalAs(UnmanagedType.U4)] public readonly ResourceUsage dwUsage; - - /// If the member is equal to or , - /// this member is a pointer to a -terminated character string that specifies the name of a local device. - /// This member is if the connection does not use a device. - /// - [MarshalAs(UnmanagedType.LPWStr)] public string lpLocalName; - - /// If the entry is a network resource, this member is a that specifies the remote network name. - /// If the entry is a current or persistent connection, member points to - /// the network name associated with the name pointed to by the member. - /// The can be characters in length, - /// and it must follow the network provider's naming conventions. - /// - [MarshalAs(UnmanagedType.LPWStr)] public string lpRemoteName; - - /// A that contains a comment supplied by the network provider. - [MarshalAs(UnmanagedType.LPWStr)] public readonly string lpComment; - - /// A that contains the name of the provider that owns the resource. - /// This member can be if the provider name is unknown. - /// - [MarshalAs(UnmanagedType.LPWStr)] public readonly string lpProvider; - } - } -} diff --git a/AlphaFS/Network/Native Structures/REMOTE_NAME_INFO.cs b/AlphaFS/Network/Native Structures/REMOTE_NAME_INFO.cs deleted file mode 100644 index 62e890e..0000000 --- a/AlphaFS/Network/Native Structures/REMOTE_NAME_INFO.cs +++ /dev/null @@ -1,43 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System.Diagnostics.CodeAnalysis; -using System.Runtime.InteropServices; - -namespace Alphaleonis.Win32.Network -{ - internal static partial class NativeMethods - { - ///Contains path and name information for a network resource. - [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)] - internal struct REMOTE_NAME_INFO - { - /// Identifies a network resource. - [SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields")] [MarshalAs(UnmanagedType.LPWStr)] public string lpUniversalName; - - /// The name of a network connection. - [SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields")] [MarshalAs(UnmanagedType.LPWStr)] public string lpConnectionName; - - /// The remaing path. - [SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields")] [MarshalAs(UnmanagedType.LPWStr)] public string lpRemainingPath; - } - } -} diff --git a/AlphaFS/Network/Native Structures/SHARE_INFO_1.cs b/AlphaFS/Network/Native Structures/SHARE_INFO_1.cs deleted file mode 100644 index b1f8d2a..0000000 --- a/AlphaFS/Network/Native Structures/SHARE_INFO_1.cs +++ /dev/null @@ -1,44 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System.Runtime.InteropServices; - -namespace Alphaleonis.Win32.Network -{ - internal static partial class NativeMethods - { - /// Contains information about the shared resource, including the name and type of the resource, and a comment associated with the resource. - /// Minimum supported client: Windows XP [desktop apps only] - /// Minimum supported server: Windows Server 2003 [desktop apps only] - [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)] - internal struct SHARE_INFO_1 - { - /// The name of a shared resource. - [MarshalAs(UnmanagedType.LPWStr)] public readonly string shi1_netname; - - /// The type of share. - [MarshalAs(UnmanagedType.U4)] public readonly ShareType shi1_type; - - /// An optional comment about the shared resource. - [MarshalAs(UnmanagedType.LPWStr)] public readonly string shi1_remark; - } - } -} diff --git a/AlphaFS/Network/Native Structures/SHARE_INFO_1005.cs b/AlphaFS/Network/Native Structures/SHARE_INFO_1005.cs deleted file mode 100644 index 8ab9eb2..0000000 --- a/AlphaFS/Network/Native Structures/SHARE_INFO_1005.cs +++ /dev/null @@ -1,39 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System.Runtime.InteropServices; - -namespace Alphaleonis.Win32.Network -{ - internal static partial class NativeMethods - { - /// Contains information about the shared resource. - /// This structure can be retrieved by calling the NetShareGetInfo function. - /// Minimum supported client: Windows XP [desktop apps only] - /// Minimum supported server: Windows Server 2003 [desktop apps only] - [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)] - internal struct SHARE_INFO_1005 - { - /// A bitmask of flags that specify information about the shared resource. - [MarshalAs(UnmanagedType.U4)] public readonly ShareResourceTypes shi1005_flags; - } - } -} diff --git a/AlphaFS/Network/Native Structures/SHARE_INFO_2.cs b/AlphaFS/Network/Native Structures/SHARE_INFO_2.cs deleted file mode 100644 index 9223623..0000000 --- a/AlphaFS/Network/Native Structures/SHARE_INFO_2.cs +++ /dev/null @@ -1,65 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System.Runtime.InteropServices; - -namespace Alphaleonis.Win32.Network -{ - internal static partial class NativeMethods - { - /// Contains information about the shared resource, including the name, type, and permissions of the resource, comments associated with the resource, - /// the maximum number of concurrent connections, the number of current connections, the local path for the resource, and a password for the current connection. - /// - /// Share information, NT, level 2, requires admin rights to work. - /// Minimum supported client: Windows XP [desktop apps only] - /// Minimum supported server: Windows Server 2003 [desktop apps only] - [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)] - internal struct SHARE_INFO_2 - { - /// The name of a shared resource. - [MarshalAs(UnmanagedType.LPWStr)] public readonly string shi2_netname; - - /// The type of share. - [MarshalAs(UnmanagedType.U4)] public readonly ShareType shi2_type; - - /// An optional comment about the shared resource. - [MarshalAs(UnmanagedType.LPWStr)] public readonly string shi2_remark; - - /// The shared resource's permissions for servers running with share-level security. - /// Note that Windows does not support share-level security. This member is ignored on a server running user-level security. - [MarshalAs(UnmanagedType.U4)] public readonly AccessPermissions shi2_permissions; - - /// The maximum number of concurrent connections that the shared resource can accommodate. - /// The number of connections is unlimited if the value specified in this member is –1. - [MarshalAs(UnmanagedType.U4)] public readonly uint shi2_max_uses; - - /// The number of current connections to the resource. - [MarshalAs(UnmanagedType.U4)] public readonly uint shi2_current_uses; - - /// The local path for the shared resource. - /// For disks, this member is the path being shared. For print queues, this member is the name of the print queue being shared. - [MarshalAs(UnmanagedType.LPWStr)] public readonly string shi2_path; - - /// The share's password (when the server is running with share-level security). - [MarshalAs(UnmanagedType.LPWStr)] public readonly string shi2_passwd; - } - } -} diff --git a/AlphaFS/Network/Native Structures/SHARE_INFO_503.cs b/AlphaFS/Network/Native Structures/SHARE_INFO_503.cs deleted file mode 100644 index 4ac57d3..0000000 --- a/AlphaFS/Network/Native Structures/SHARE_INFO_503.cs +++ /dev/null @@ -1,75 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System; -using System.Runtime.InteropServices; - -namespace Alphaleonis.Win32.Network -{ - internal static partial class NativeMethods - { - /// Contains information about the shared resource, including the server name, name of the resource, type, and permissions, - /// the number of connections, and other pertinent information. - /// - /// Minimum supported client: Windows XP [desktop apps only] - /// Minimum supported server: Windows Server 2003 [desktop apps only] - [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)] - internal struct SHARE_INFO_503 - { - /// The name of a shared resource. - [MarshalAs(UnmanagedType.LPWStr)] public readonly string shi503_netname; - - /// The type of share. - [MarshalAs(UnmanagedType.U4)] public readonly ShareType shi503_type; - - /// An optional comment about the shared resource. - [MarshalAs(UnmanagedType.LPWStr)] public readonly string shi503_remark; - - /// The shared resource's permissions for servers running with share-level security. - /// Note that Windows does not support share-level security. This member is ignored on a server running user-level security. - [MarshalAs(UnmanagedType.U4)] public readonly AccessPermissions shi503_permissions; - - /// The maximum number of concurrent connections that the shared resource can accommodate. - /// The number of connections is unlimited if the value specified in this member is –1. - [MarshalAs(UnmanagedType.U4)] public readonly uint shi503_max_uses; - - /// The number of current connections to the resource. - [MarshalAs(UnmanagedType.U4)] public readonly uint shi503_current_uses; - - /// The local path for the shared resource. - /// For disks, this member is the path being shared. For print queues, this member is the name of the print queue being shared. - [MarshalAs(UnmanagedType.LPWStr)] public readonly string shi503_path; - - /// The share's password (when the server is running with share-level security). - [MarshalAs(UnmanagedType.LPWStr)] public readonly string shi503_passwd; - - /// The DNS or NetBIOS name of the remote server on which the shared resource resides. - /// A value of "*" indicates no configured server name. - [MarshalAs(UnmanagedType.LPWStr)] public readonly string shi503_servername; - - /// Reserved; must be zero. - [MarshalAs(UnmanagedType.U4)] public readonly uint shi503_reserved; - - /// Specifies the SECURITY_DESCRIPTOR associated with this share. - public IntPtr shi503_security_descriptor; - } - } -} diff --git a/AlphaFS/Network/OpenConnectionInfo.cs b/AlphaFS/Network/OpenConnectionInfo.cs deleted file mode 100644 index 803b832..0000000 --- a/AlphaFS/Network/OpenConnectionInfo.cs +++ /dev/null @@ -1,88 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System; -using System.Globalization; -using Alphaleonis.Win32.Filesystem; - -namespace Alphaleonis.Win32.Network -{ - /// Contains the identification number of a connection, number of open files, connection time, number of users on the connection, and the type of connection. - [SerializableAttribute] - public sealed class OpenConnectionInfo - { - #region Constructor - - /// Create a OpenConnectionInfo instance. - internal OpenConnectionInfo(string host, NativeMethods.CONNECTION_INFO_1 connectionInfo) - { - Host = host; - Id = connectionInfo.coni1_id; - ShareType = connectionInfo.coni1_type; - TotalOpenFiles = connectionInfo.coni1_num_opens; - TotalUsers = connectionInfo.coni1_num_users; - ConnectedSeconds = connectionInfo.coni1_time; - UserName = connectionInfo.coni1_username; - NetName = connectionInfo.oni1_netname.Replace(Path.LongPathUncPrefix, string.Empty).Replace(Path.UncPrefix, string.Empty); - } - - #endregion // Constructor - - #region Methods - - /// Returns the full path to the share. - /// A string that represents this instance. - public override string ToString() - { - return Id.ToString(CultureInfo.InvariantCulture); - } - - #endregion // Methods - - #region Properties - - /// The local or remote Host. - public string Host { get; private set; } - - /// Specifies a connection identification number. - public long Id { get; private set; } - - /// The type of share. - public ShareType ShareType { get; private set; } - - /// Specifies the number of files currently open as a result of the connection. - public long TotalOpenFiles { get; private set; } - - /// Specifies the number of users on the connection. - public long TotalUsers { get; private set; } - - /// Specifies the number of seconds that the connection has been established. - public long ConnectedSeconds { get; private set; } - - /// If the server sharing the resource is running with user-level security, the UserName member describes which user made the connection. If the server is running with share-level security, coni1_username describes which computer (computername) made the connection. - public string UserName { get; private set; } - - /// String that specifies either the share name of the server's shared resource or the computername of the client. The value of this member depends on which name was specified as the qualifier parameter to the NetConnectionEnum function. - public string NetName { get; private set; } - - #endregion // Properties - } -} diff --git a/AlphaFS/Network/OpenResourceInfo.cs b/AlphaFS/Network/OpenResourceInfo.cs deleted file mode 100644 index 61628fe..0000000 --- a/AlphaFS/Network/OpenResourceInfo.cs +++ /dev/null @@ -1,88 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System; -using System.Globalization; - -namespace Alphaleonis.Win32.Network -{ - /// Contains the identification number and other pertinent information about files, devices, and pipes. This class cannot be inherited. - [SerializableAttribute] - public sealed class OpenResourceInfo - { - #region Constructor - - /// Create a OpenResourceInfo instance. - internal OpenResourceInfo(string host, NativeMethods.FILE_INFO_3 fileInfo) - { - Host = host; - Id = fileInfo.fi3_id; - Permissions = fileInfo.fi3_permissions; - TotalLocks = fileInfo.fi3_num_locks; - PathName = fileInfo.fi3_pathname.Replace(@"\\", @"\"); - UserName = fileInfo.fi3_username; - } - - #endregion // Constructor - - #region Methods - - /// Forces the open resource to close. - /// You should this method with caution because it does not write data cached on the client system to the file before closing the file. - public void Close() - { - uint lastError = NativeMethods.NetFileClose(Host, (uint) Id); - if (lastError != Win32Errors.NERR_Success && lastError != Win32Errors.NERR_FileIdNotFound) - NativeError.ThrowException(lastError, Host, PathName); - } - - /// Returns the full path to the share. - /// A string that represents this instance. - public override string ToString() - { - return Id.ToString(CultureInfo.InvariantCulture); - } - - #endregion // Methods - - #region Properties - - /// The local or remote Host. - public string Host { get; private set; } - - /// The identification number assigned to the resource when it is opened. - public long Id { get; private set; } - - /// The path of the opened resource. - public string PathName { get; private set; } - - /// The access permissions associated with the opening application. This member can be one or more of the following values. - public AccessPermissions Permissions { get; private set; } - - /// The number of file locks on the file, device, or pipe. - public long TotalLocks { get; private set; } - - /// Specifies which user (on servers that have user-level security) or which computer (on servers that have share-level security) opened the resource. - public string UserName { get; private set; } - - #endregion // Properties - } -} diff --git a/AlphaFS/Network/ShareInfo.cs b/AlphaFS/Network/ShareInfo.cs deleted file mode 100644 index b371393..0000000 --- a/AlphaFS/Network/ShareInfo.cs +++ /dev/null @@ -1,247 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using Alphaleonis.Win32.Filesystem; -using System; -using System.Globalization; - -namespace Alphaleonis.Win32.Network -{ - /// Contains information about Server Message Block (SMB) shares. This class cannot be inherited. - [SerializableAttribute] - public sealed class ShareInfo - { - #region Constructor - - #region ShareInfo - - /// Creates a instance. - /// A host to retrieve shares from. - /// One of the options. - /// A or instance. - internal ShareInfo(string host, ShareInfoLevel shareLevel, object shareInfo) - { - switch (shareLevel) - { - case ShareInfoLevel.Info1005: - NativeMethods.SHARE_INFO_1005 s1005 = (NativeMethods.SHARE_INFO_1005) shareInfo; - ServerName = host ?? Environment.MachineName; - ResourceType = s1005.shi1005_flags; - break; - - case ShareInfoLevel.Info503: - NativeMethods.SHARE_INFO_503 s503 = (NativeMethods.SHARE_INFO_503) shareInfo; - CurrentUses = s503.shi503_current_uses; - MaxUses = s503.shi503_max_uses; - NetName = s503.shi503_netname; - Password = s503.shi503_passwd; - Path = Utils.IsNullOrWhiteSpace(s503.shi503_path) ? null : s503.shi503_path; - Permissions = s503.shi503_permissions; - Remark = s503.shi503_remark; - ServerName = s503.shi503_servername == "*" ? host ?? Environment.MachineName : s503.shi503_servername; - ShareType = s503.shi503_type; - SecurityDescriptor = s503.shi503_security_descriptor; - break; - - case ShareInfoLevel.Info2: - NativeMethods.SHARE_INFO_2 s2 = (NativeMethods.SHARE_INFO_2)shareInfo; - CurrentUses = s2.shi2_current_uses; - MaxUses = s2.shi2_max_uses; - NetName = s2.shi2_netname; - Password = s2.shi2_passwd; - Path = Utils.IsNullOrWhiteSpace(s2.shi2_path) ? null : s2.shi2_path; - Permissions = s2.shi2_permissions; - Remark = s2.shi2_remark; - ServerName = host ?? Environment.MachineName; - ShareType = s2.shi2_type; - break; - - case ShareInfoLevel.Info1: - NativeMethods.SHARE_INFO_1 s1 = (NativeMethods.SHARE_INFO_1)shareInfo; - CurrentUses = 0; - MaxUses = 0; - NetName = s1.shi1_netname; - Password = null; - Path = null; - Permissions = AccessPermissions.None; - Remark = s1.shi1_remark; - ServerName = host ?? Environment.MachineName; - ShareType = s1.shi1_type; - break; - } - - - NetFullPath = string.Format(CultureInfo.CurrentCulture, "{0}{1}{2}{3}", Filesystem.Path.UncPrefix, ServerName, Filesystem.Path.DirectorySeparatorChar, NetName); - - ShareLevel = shareLevel; - } - - #endregion // ShareInfo - - #endregion // Constructor - - #region Methods - - #region ToString - - /// Returns the full path to the share. - /// A string that represents this instance. - public override string ToString() - { - return NetFullPath; - } - - #endregion // ToString - - #endregion // Methods - - #region Properties - - #region CurrentUses - - /// The number of current connections to the resource. - public long CurrentUses { get; private set; } - - #endregion // CurrentUses - - #region DirectoryInfo - - private DirectoryInfo _directoryInfo; - - /// The instance associated with this share. - public DirectoryInfo DirectoryInfo - { - get - { - // Do not use ?? expression here. - if (_directoryInfo == null) - _directoryInfo = new DirectoryInfo(null, NetFullPath, PathFormat.FullPath); - - return _directoryInfo; - } - } - - #endregion // DirectoryInfo - - #region NetFullPath - - /// Returns the full UNC path to the share. - public string NetFullPath { get; internal set; } - - #endregion // NetFullPath - - #region MaxUses - - /// The maximum number of concurrent connections that the shared resource can accommodate. - /// The number of connections is unlimited if the value specified in this member is –1. - public long MaxUses { get; private set; } - - #endregion // MaxUses - - #region NetName - - /// The name of a shared resource. - public string NetName { get; private set; } - - #endregion // NetName - - #region Password - - /// The share's password (when the server is running with share-level security). - public string Password { get; private set; } - - #endregion // Password - - #region Path - - /// The local path for the shared resource. - /// For disks, this member is the path being shared. For print queues, this member is the name of the print queue being shared. - public string Path { get; private set; } - - #endregion // Path - - #region Permissions - - /// The shared resource's permissions for servers running with share-level security. - /// Note that Windows does not support share-level security. This member is ignored on a server running user-level security. - public AccessPermissions Permissions { get; private set; } - - #endregion // Permissions - - #region Remark - - /// An optional comment about the shared resource. - public string Remark { get; private set; } - - #endregion // Remark - - #region SecurityDescriptor - - /// Specifies the SECURITY_DESCRIPTOR associated with this share. - public IntPtr SecurityDescriptor { get; private set; } - - #endregion // SecurityDescriptor - - #region ServerName - - /// A pointer to a string that specifies the DNS or NetBIOS name of the remote server on which the shared resource resides. - /// A value of "*" indicates no configured server name. - public string ServerName { get; private set; } - - #endregion // ServerName - - #region ShareType - - /// The type of share. - public ShareType ShareType { get; private set; } - - #endregion // ShareType - - #region ResourceType - - private ShareResourceTypes _shareResourceType; - - /// The type of share resource. - public ShareResourceTypes ResourceType - { - get - { - if (_shareResourceType == ShareResourceTypes.None && !Utils.IsNullOrWhiteSpace(NetName)) - _shareResourceType = (Host.GetShareInfoCore(ShareInfoLevel.Info1005, ServerName, NetName, true)).ResourceType; - - return _shareResourceType; - } - - private set { _shareResourceType = value; } - } - - #endregion // ResourceType - - #region ShareLevel - - /// The structure level for the ShareInfo instance. - public ShareInfoLevel ShareLevel { get; private set; } - - #endregion // ShareLevel - - #endregion // Properties - } -} diff --git a/AlphaFS/OperatingSystem.cs b/AlphaFS/OperatingSystem.cs deleted file mode 100644 index 145a92e..0000000 --- a/AlphaFS/OperatingSystem.cs +++ /dev/null @@ -1,507 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System; -using System.ComponentModel; -using System.Diagnostics; -using System.Diagnostics.CodeAnalysis; -using System.Runtime.InteropServices; -using System.Security; - -namespace Alphaleonis.Win32 -{ - /// Static class providing access to information about the operating system under which the assembly is executing. - public static class OperatingSystem - { - #region OperatingSystem Name Enum - - /// A set of flags that describe the named Windows versions. - /// The values of the enumeration are ordered. A later released operating system version has a higher number, so comparisons between named versions are meaningful. - [SuppressMessage("Microsoft.Naming", "CA1709:IdentifiersShouldBeCasedCorrectly", MessageId = "Os")] - [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Os")] - public enum EnumOsName - { - /// A Windows version earlier than Windows 2000. - Earlier = -1, - - /// Windows 2000 (Server or Professional). - Windows2000 = 0, - - /// Windows XP. - WindowsXP = 1, - - /// Windows Server 2003. - WindowsServer2003 = 2, - - /// Windows Vista. - WindowsVista = 3, - - /// Windows Server 2008. - WindowsServer2008 = 4, - - /// Windows 7. - Windows7 = 5, - - /// Windows Server 2008 R2. - WindowsServer2008R2 = 6, - - /// Windows 8. - Windows8 = 7, - - /// Windows Server 2012. - WindowsServer2012 = 8, - - /// Windows 8.1. - Windows81 = 9, - - /// Windows Server 2012 R2 - WindowsServer2012R2 = 10, - - /// Windows 10 - Windows10 = 11, - - /// Windows Server - WindowsServer = 12, - - /// A later version of Windows than currently installed. - Later = 65535 - } - - #endregion // OperatingSystem Name Enum - - #region ProcessorArchitecture Name enum - - /// A set of flags to indicate the current processor architecture for which the operating system is targeted and running. - [SuppressMessage("Microsoft.Naming", "CA1709:IdentifiersShouldBeCasedCorrectly", MessageId = "Pa")] - [SuppressMessage("Microsoft.Design", "CA1028:EnumStorageShouldBeInt32")] - public enum EnumProcessorArchitecture - { - /// PROCESSOR_ARCHITECTURE_INTEL - /// The system is running a 32-bit version of Windows. - /// - X86 = 0, - - /// PROCESSOR_ARCHITECTURE_IA64 - /// The system is running on a Itanium processor. - /// - [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Ia")] - [SuppressMessage("Microsoft.Naming", "CA1709:IdentifiersShouldBeCasedCorrectly", MessageId = "Ia")] - IA64 = 6, - - /// PROCESSOR_ARCHITECTURE_AMD64 - /// The system is running a 64-bit version of Windows. - /// - X64 = 9, - - /// PROCESSOR_ARCHITECTURE_UNKNOWN - /// Unknown architecture. - /// - Unknown = 65535 - } - - #endregion // ProcessorArchitecture Name enum - - - #region Properties - - #region IsServer - - private static bool _isServer; - - /// Gets a value indicating whether the operating system is a server operating system. - /// if the current operating system is a server operating system; otherwise, . - public static bool IsServer - { - get - { - if (_servicePackVersion == null) - UpdateData(); - return _isServer; - } - } - - #endregion // IsServer - - #region IsWow64Process - - private static bool? _isWow64Process; - - /// Gets a value indicating whether the current process is running under WOW64. - /// if the current process is running under WOW64; otherwise, . - public static bool IsWow64Process - { - get - { - if (_isWow64Process == null) - { - bool value; - IntPtr processHandle = Process.GetCurrentProcess().Handle; - - if (!NativeMethods.IsWow64Process(processHandle, out value)) - Marshal.ThrowExceptionForHR(Marshal.GetLastWin32Error()); - - // A pointer to a value that is set to TRUE if the process is running under WOW64. - // If the process is running under 32-bit Windows, the value is set to FALSE. - // If the process is a 64-bit application running under 64-bit Windows, the value is also set to FALSE. - - _isWow64Process = value; - } - - return (bool) _isWow64Process; - } - } - - #endregion // IsWow64Process - - #region OSVersion - - private static Version _osVersion; - - /// Gets the numeric version of the operating system. - /// The numeric version of the operating system. - public static Version OSVersion - { - get - { - if (_osVersion == null) - UpdateData(); - - return _osVersion; - } - } - - #endregion // OSVersion - - #region VersionName - - private static EnumOsName _enumOsName = EnumOsName.Later; - - /// Gets the named version of the operating system. - /// The named version of the operating system. - public static EnumOsName VersionName - { - get - { - if (_servicePackVersion == null) - UpdateData(); - - return _enumOsName; - } - } - - #endregion // VersionName - - #region ProcessorArchitecture - - private static EnumProcessorArchitecture _processorArchitecture; - - /// Gets the processor architecture for which the operating system is targeted. - /// The processor architecture for which the operating system is targeted. - /// If running under WOW64 this will return a 32-bit processor. Use to determine if this is the case. - public static EnumProcessorArchitecture ProcessorArchitecture - { - get - { - if (_servicePackVersion == null) - UpdateData(); - - return _processorArchitecture; - } - } - - #endregion // ProcessorArchitecture - - #region ServicePackVersion - - private static Version _servicePackVersion; - - /// Gets the version of the service pack currently installed on the operating system. - /// The version of the service pack currently installed on the operating system. - /// Only the and fields are used. - public static Version ServicePackVersion - { - get - { - if (_servicePackVersion == null) - UpdateData(); - - return _servicePackVersion; - } - } - - #endregion // ServicePackVersion - - #endregion // Properties - - #region Methods - - #region IsAtLeast - - /// Determines whether the operating system is of the specified version or later. - /// if the operating system is of the specified or later; otherwise, . - /// The lowest version for which to return true. - public static bool IsAtLeast(EnumOsName version) - { - return VersionName >= version; - } - - /// Determines whether the operating system is of the specified version or later, allowing specification of a minimum service pack that must be installed on the lowest version. - /// if the operating system matches the specified with the specified service pack, or if the operating system is of a later version; otherwise, . - /// The minimum required version. - /// The major version of the service pack that must be installed on the minimum required version to return true. This can be 0 to indicate that no service pack is required. - public static bool IsAtLeast(EnumOsName version, int servicePackVersion) - { - return IsAtLeast(version) && ServicePackVersion.Major >= servicePackVersion; - } - - #endregion // IsAtLeast - - #endregion // Methods - - - #region Private - - [SuppressMessage("Microsoft.Naming", "CA2204:Literals should be spelled correctly", MessageId = "RtlGetVersion")] - private static void UpdateData() - { - var verInfo = new NativeMethods.RTL_OSVERSIONINFOEXW(); - - // Needed to prevent: System.Runtime.InteropServices.COMException: - // The data area passed to a system call is too small. (Exception from HRESULT: 0x8007007A) - verInfo.dwOSVersionInfoSize = Marshal.SizeOf(verInfo); - - var sysInfo = new NativeMethods.SYSTEM_INFO(); - NativeMethods.GetNativeSystemInfo(ref sysInfo); - - - // RtlGetVersion returns STATUS_SUCCESS (0). - if (NativeMethods.RtlGetVersion(ref verInfo)) - throw new Win32Exception(Marshal.GetLastWin32Error(), "Function RtlGetVersion() failed to retrieve the operating system information."); - - - _osVersion = new Version(verInfo.dwMajorVersion, verInfo.dwMinorVersion, verInfo.dwBuildNumber); - - _processorArchitecture = (EnumProcessorArchitecture) sysInfo.wProcessorArchitecture; - _servicePackVersion = new Version(verInfo.wServicePackMajor, verInfo.wServicePackMinor); - _isServer = verInfo.wProductType == NativeMethods.VER_NT_DOMAIN_CONTROLLER || verInfo.wProductType == NativeMethods.VER_NT_SERVER; - - - // RtlGetVersion: https://msdn.microsoft.com/en-us/library/windows/hardware/ff561910%28v=vs.85%29.aspx - - // The following table summarizes the most recent operating system version numbers. - // Operating system Version number Other - // ================================================================================ - // Windows 10 10.0 OSVERSIONINFOEX.wProductType == VER_NT_WORKSTATION - // Windows Server 10.0 OSVERSIONINFOEX.wProductType != VER_NT_WORKSTATION - // Windows 8.1 6.3 OSVERSIONINFOEX.wProductType == VER_NT_WORKSTATION - // Windows Server 2012 R2 6.3 OSVERSIONINFOEX.wProductType != VER_NT_WORKSTATION - // Windows 8 6.2 OSVERSIONINFOEX.wProductType == VER_NT_WORKSTATION - // Windows Server 2012 6.2 OSVERSIONINFOEX.wProductType != VER_NT_WORKSTATION - // Windows 7 6.1 OSVERSIONINFOEX.wProductType == VER_NT_WORKSTATION - // Windows Server 2008 R2 6.1 OSVERSIONINFOEX.wProductType != VER_NT_WORKSTATION - // Windows Server 2008 6.0 OSVERSIONINFOEX.wProductType != VER_NT_WORKSTATION - // Windows Vista 6.0 OSVERSIONINFOEX.wProductType == VER_NT_WORKSTATION - // Windows Server 2003 R2 5.2 GetSystemMetrics(SM_SERVERR2) != 0 - // Windows Server 2003 5.2 GetSystemMetrics(SM_SERVERR2) == 0 - // Windows XP 64-Bit Edition 5.2 (OSVERSIONINFOEX.wProductType == VER_NT_WORKSTATION) && (sysInfo.PaName == PaName.X64) - // Windows XP 5.1 Not applicable - // Windows 2000 5.0 Not applicable - - - // 10 == The lastest MajorVersion of Windows. - if (verInfo.dwMajorVersion > 10) - _enumOsName = EnumOsName.Later; - - else - switch (verInfo.dwMajorVersion) - { - #region Version 10 - - case 10: - switch (verInfo.dwMinorVersion) - { - // Windows 10 or Windows Server - case 0: - _enumOsName = (verInfo.wProductType == NativeMethods.VER_NT_WORKSTATION) - ? EnumOsName.Windows10 - : EnumOsName.WindowsServer; - break; - } - break; - - #endregion // Version 10 - - #region Version 6 - - case 6: - switch (verInfo.dwMinorVersion) - { - // Windows Vista or Windows Server 2008 - case 0: - _enumOsName = (verInfo.wProductType == NativeMethods.VER_NT_WORKSTATION) - ? EnumOsName.WindowsVista - : EnumOsName.WindowsServer2008; - break; - - // Windows 7 or Windows Server 2008 R2 - case 1: - _enumOsName = (verInfo.wProductType == NativeMethods.VER_NT_WORKSTATION) - ? EnumOsName.Windows7 - : EnumOsName.WindowsServer2008R2; - break; - - // Windows 8 or Windows Server 2012 - case 2: - _enumOsName = (verInfo.wProductType == NativeMethods.VER_NT_WORKSTATION) - ? EnumOsName.Windows8 - : EnumOsName.WindowsServer2012; - break; - - // Windows 8.1 or Windows Server 2012 R2 - case 3: - _enumOsName = (verInfo.wProductType == NativeMethods.VER_NT_WORKSTATION) - ? EnumOsName.Windows81 - : EnumOsName.WindowsServer2012R2; - break; - - default: - _enumOsName = EnumOsName.Later; - break; - } - break; - - #endregion // Version 6 - - #region Version 5 - - case 5: - switch (verInfo.dwMinorVersion) - { - case 0: - _enumOsName = EnumOsName.Windows2000; - break; - - case 1: - _enumOsName = EnumOsName.WindowsXP; - break; - - case 2: - _enumOsName = (verInfo.wProductType == NativeMethods.VER_NT_WORKSTATION && _processorArchitecture == EnumProcessorArchitecture.X64) - ? EnumOsName.WindowsXP - : (verInfo.wProductType != NativeMethods.VER_NT_WORKSTATION) ? EnumOsName.WindowsServer2003 : EnumOsName.Later; - break; - - default: - _enumOsName = EnumOsName.Later; - break; - } - break; - - #endregion // Version 5 - - default: - _enumOsName = EnumOsName.Earlier; - break; - } - } - - #region P/Invoke members / NativeMethods - - private static class NativeMethods - { - internal const short VER_NT_WORKSTATION = 1; - internal const short VER_NT_DOMAIN_CONTROLLER = 2; - internal const short VER_NT_SERVER = 3; - - - [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)] - internal struct RTL_OSVERSIONINFOEXW - { - public int dwOSVersionInfoSize; - public readonly int dwMajorVersion; - public readonly int dwMinorVersion; - public readonly int dwBuildNumber; - public readonly int dwPlatformId; - [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)] - public readonly string szCSDVersion; - public readonly ushort wServicePackMajor; - public readonly ushort wServicePackMinor; - public readonly ushort wSuiteMask; - public readonly byte wProductType; - public readonly byte wReserved; - } - - - [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)] - internal struct SYSTEM_INFO - { - public readonly ushort wProcessorArchitecture; - private readonly ushort wReserved; - public readonly uint dwPageSize; - public readonly IntPtr lpMinimumApplicationAddress; - public readonly IntPtr lpMaximumApplicationAddress; - public readonly IntPtr dwActiveProcessorMask; - public readonly uint dwNumberOfProcessors; - public readonly uint dwProcessorType; - public readonly uint dwAllocationGranularity; - public readonly ushort wProcessorLevel; - public readonly ushort wProcessorRevision; - } - - - /// The RtlGetVersion routine returns version information about the currently running operating system. - /// RtlGetVersion returns STATUS_SUCCESS. - /// Available starting with Windows 2000. - [SuppressMessage("Microsoft.Security", "CA5122:PInvokesShouldNotBeSafeCriticalFxCopRule"), DllImport("ntdll.dll", SetLastError = true, CharSet = CharSet.Unicode)] - [return: MarshalAs(UnmanagedType.Bool)] - internal static extern bool RtlGetVersion([MarshalAs(UnmanagedType.Struct)] ref RTL_OSVERSIONINFOEXW lpVersionInformation); - - - /// Retrieves information about the current system to an application running under WOW64. - /// If the function is called from a 64-bit application, it is equivalent to the GetSystemInfo function. - /// - /// This function does not return a value. - /// To determine whether a Win32-based application is running under WOW64, call the function. - /// Minimum supported client: Windows XP [desktop apps | Windows Store apps] - /// Minimum supported server: Windows Server 2003 [desktop apps | Windows Store apps] - [SuppressMessage("Microsoft.Security", "CA5122:PInvokesShouldNotBeSafeCriticalFxCopRule")] - [DllImport("kernel32.dll", SetLastError = false, CharSet = CharSet.Unicode), SuppressUnmanagedCodeSecurity] - internal static extern void GetNativeSystemInfo([MarshalAs(UnmanagedType.Struct)] ref SYSTEM_INFO lpSystemInfo); - - - /// Determines whether the specified process is running under WOW64. - /// - /// If the function succeeds, the return value is a nonzero value. - /// If the function fails, the return value is zero. To get extended error information, call GetLastError. - /// - /// Minimum supported client: Windows Vista, Windows XP with SP2 [desktop apps only] - /// Minimum supported server: Windows Server 2008, Windows Server 2003 with SP1 [desktop apps only] - [SuppressMessage("Microsoft.Security", "CA5122:PInvokesShouldNotBeSafeCriticalFxCopRule")] - [DllImport("kernel32.dll", SetLastError = false, CharSet = CharSet.Unicode), SuppressUnmanagedCodeSecurity] - [return: MarshalAs(UnmanagedType.Bool)] - internal static extern bool IsWow64Process([In] IntPtr hProcess, [Out, MarshalAs(UnmanagedType.Bool)] out bool lpSystemInfo); - } - - #endregion // P/Invoke members / NativeMethods - - #endregion // Private - } -} diff --git a/AlphaFS/Properties/AssemblyInfo.cs b/AlphaFS/Properties/AssemblyInfo.cs deleted file mode 100644 index abdd031..0000000 --- a/AlphaFS/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,40 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -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("AlphaFS")] -[assembly: AssemblyDescription("Alphaleonis Extended Win32 File System Support Library for .NET")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCulture("")] - -[assembly: ComVisible(false)] - -[assembly: Guid("6dc8e700-bb73-43fe-9f01-3300a9d61cd7")] - -[assembly: System.CLSCompliant(true)] - -// This will enable internal class members to be visible from the UnitTest namespace. -[assembly: InternalsVisibleToAttribute("AlphaFS.UnitTest, PublicKey=002400000480000094000000060200000024000052534131000400000100010033b590a45dff32ded24ceeb7e9ecbad4541e77de3e741c09c26ab0d569a9bccd9ac3997761139f0ede66c514377bb4d3aaa72548f535a6171d6a78884da038a711ad11cfab3369d86ee2de84ecc443c80fb606d8a6e8c337b77b87797239fb3e7e5806982380de7eb75bc6bdb08b4f3a405f146597e173c0357a95ecf8c771bd")] diff --git a/AlphaFS/Resources.Designer.cs b/AlphaFS/Resources.Designer.cs deleted file mode 100644 index a30e182..0000000 --- a/AlphaFS/Resources.Designer.cs +++ /dev/null @@ -1,442 +0,0 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// Runtime Version:4.0.30319.42000 -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ - -namespace Alphaleonis.Win32 { - using System; - - - /// - /// A strongly-typed resource class, for looking up localized strings, etc. - /// - // This class was auto-generated by the StronglyTypedResourceBuilder - // class via a tool like ResGen or Visual Studio. - // To add or remove a member, edit your .ResX file then rerun ResGen - // with the /str option, or rebuild your VS project. - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - internal class Resources { - - private static global::System.Resources.ResourceManager resourceMan; - - private static global::System.Globalization.CultureInfo resourceCulture; - - [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - internal Resources() { - } - - /// - /// Returns the cached ResourceManager instance used by this class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Resources.ResourceManager ResourceManager { - get { - if (object.ReferenceEquals(resourceMan, null)) { - global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Alphaleonis.Win32.Resources", typeof(Resources).Assembly); - resourceMan = temp; - } - return resourceMan; - } - } - - /// - /// Overrides the current thread's CurrentUICulture property for all - /// resource lookups using this strongly typed resource class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Globalization.CultureInfo Culture { - get { - return resourceCulture; - } - set { - resourceCulture = value; - } - } - - /// - /// Looks up a localized string similar to Buffer is not large enough for the requested operation.. - /// - internal static string Buffer_Not_Large_Enough { - get { - return ResourceManager.GetString("Buffer_Not_Large_Enough", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Cannot create directory.. - /// - internal static string Cannot_Create_Directory { - get { - return ResourceManager.GetString("Cannot_Create_Directory", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Cannot determine Copy or Move action.. - /// - internal static string Cannot_Determine_Copy_Or_Move { - get { - return ResourceManager.GetString("Cannot_Determine_Copy_Or_Move", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Destination buffer not large enough for the requested operation.. - /// - internal static string Destination_Buffer_Not_Large_Enough { - get { - return ResourceManager.GetString("Destination_Buffer_Not_Large_Enough", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to The device is not ready.. - /// - internal static string Device_Not_Ready { - get { - return ResourceManager.GetString("Device_Not_Ready", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Incorrectly implemented function attempting to generate exception from successful operation. - ///. - /// - internal static string Exception_From_Successful_Operation { - get { - return ResourceManager.GetString("Exception_From_Successful_Operation", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to The specified file is hidden: [{0}]. - /// - internal static string File_Is_Hidden { - get { - return ResourceManager.GetString("File_Is_Hidden", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to The file or directory already exists.. - /// - internal static string File_Or_Directory_Already_Exists { - get { - return ResourceManager.GetString("File_Or_Directory_Already_Exists", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to The handle is closed.. - /// - internal static string Handle_Is_Closed { - get { - return ResourceManager.GetString("Handle_Is_Closed", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to The handle is invalid.. - /// - internal static string Handle_Is_Invalid { - get { - return ResourceManager.GetString("Handle_Is_Invalid", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to The handle is invalid. Win32Error: [{0}]. - /// - internal static string Handle_Is_Invalid_Win32Error { - get { - return ResourceManager.GetString("Handle_Is_Invalid_Win32Error", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Creating hard-links on non-NTFS partitions is not supported.. - /// - internal static string HardLinks_Not_Supported { - get { - return ResourceManager.GetString("HardLinks_Not_Supported", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Illegal characters: [{0}] in path.. - /// - internal static string Illegal_Characters_In_Path { - get { - return ResourceManager.GetString("Illegal_Characters_In_Path", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to An attempt to set an invalid file attribute failed.. - /// - internal static string Invalid_File_Attribute { - get { - return ResourceManager.GetString("Invalid_File_Attribute", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Invalid stream name.. - /// - internal static string Invalid_Stream_Name { - get { - return ResourceManager.GetString("Invalid_Stream_Name", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Invalid Subpath. - /// - internal static string Invalid_Subpath { - get { - return ResourceManager.GetString("Invalid_Subpath", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Invalid transaction request.. - /// - internal static string Invalid_Transaction_Request { - get { - return ResourceManager.GetString("Invalid_Transaction_Request", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Count cannot be negative.. - /// - internal static string Negative_Count { - get { - return ResourceManager.GetString("Negative_Count", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Destination offset cannot be negative.. - /// - internal static string Negative_Destination_Offset { - get { - return ResourceManager.GetString("Negative_Destination_Offset", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Length cannot be negative.. - /// - internal static string Negative_Length { - get { - return ResourceManager.GetString("Negative_Length", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Lock length cannot be negative.. - /// - internal static string Negative_Lock_Length { - get { - return ResourceManager.GetString("Negative_Lock_Length", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Offset cannot be negative.. - /// - internal static string Negative_Offset { - get { - return ResourceManager.GetString("Negative_Offset", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to This stream does not support seeking.. - /// - internal static string No_Stream_Seeking_Support { - get { - return ResourceManager.GetString("No_Stream_Seeking_Support", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to The file or directory is not a reparse point.. - /// - internal static string Not_A_Reparse_Point { - get { - return ResourceManager.GetString("Not_A_Reparse_Point", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Argument is not a valid Volume GUID.. - /// - internal static string Not_A_Valid_Guid { - get { - return ResourceManager.GetString("Not_A_Valid_Guid", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Path is a zero-length string or contains only white space.. - /// - internal static string Path_Is_Zero_Length_Or_Only_White_Space { - get { - return ResourceManager.GetString("Path_Is_Zero_Length_Or_Only_White_Space", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Privilege name cannot be empty.. - /// - internal static string Privilege_Name_Cannot_Be_Empty { - get { - return ResourceManager.GetString("Privilege_Name_Cannot_Be_Empty", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Incomplete header read.. - /// - internal static string Read_Incomplete_Header { - get { - return ResourceManager.GetString("Read_Incomplete_Header", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to This method requires Windows Vista or higher.. - /// - internal static string Requires_Windows_Vista_Or_Higher { - get { - return ResourceManager.GetString("Requires_Windows_Vista_Or_Higher", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Invalid security descriptor returned from system.. - /// - internal static string Returned_Invalid_Security_Descriptor { - get { - return ResourceManager.GetString("Returned_Invalid_Security_Descriptor", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Source offset and length outside the bounds of the array. - /// - internal static string Source_Offset_And_Length_Outside_Bounds { - get { - return ResourceManager.GetString("Source_Offset_And_Length_Outside_Bounds", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to The target directory is a file, not a directory: [{0}]. - /// - internal static string Target_Directory_Is_A_File { - get { - return ResourceManager.GetString("Target_Directory_Is_A_File", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to The target file is a directory, not a file: [{0}]. - /// - internal static string Target_File_Is_A_Directory { - get { - return ResourceManager.GetString("Target_File_Is_A_Directory", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Transaction already aborted.. - /// - internal static string Transaction_Already_Aborted { - get { - return ResourceManager.GetString("Transaction_Already_Aborted", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Transaction already committed.. - /// - internal static string Transaction_Already_Committed { - get { - return ResourceManager.GetString("Transaction_Already_Committed", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Invalid transaction object.. - /// - internal static string Transaction_Invalid { - get { - return ResourceManager.GetString("Transaction_Invalid", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Transaction not active.. - /// - internal static string Transaction_Not_Active { - get { - return ResourceManager.GetString("Transaction_Not_Active", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Transaction not requested.. - /// - internal static string Transaction_Not_Requested { - get { - return ResourceManager.GetString("Transaction_Not_Requested", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Transactional conflict.. - /// - internal static string Transactional_Conflict { - get { - return ResourceManager.GetString("Transactional_Conflict", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Network share path should match the format: \\server\share. - /// - internal static string UNC_Path_Should_Match_Format { - get { - return ResourceManager.GetString("UNC_Path_Should_Match_Format", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Backup FileStream Unlock Position must not be negative.. - /// - internal static string Unlock_Position_Negative { - get { - return ResourceManager.GetString("Unlock_Position_Negative", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to The given path's format is not supported: [{0}]. - /// - internal static string Unsupported_Path_Format { - get { - return ResourceManager.GetString("Unsupported_Path_Format", resourceCulture); - } - } - } -} diff --git a/AlphaFS/Resources.resx b/AlphaFS/Resources.resx deleted file mode 100644 index 4674042..0000000 --- a/AlphaFS/Resources.resx +++ /dev/null @@ -1,247 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Invalid transaction object. - - - Transaction already committed. - - - Transaction already aborted. - - - Transactional conflict. - - - Transaction not active. - - - Transaction not requested. - - - Invalid transaction request. - - - Creating hard-links on non-NTFS partitions is not supported. - - - This stream does not support seeking. - - - Count cannot be negative. - - - Offset cannot be negative. - - - Buffer is not large enough for the requested operation. - - - Invalid security descriptor returned from system. - - - The handle is invalid. - - - The handle is invalid. Win32Error: [{0}] - - - Network share path should match the format: \\server\share - - - Backup FileStream Unlock Position must not be negative. - - - Lock length cannot be negative. - - - Destination offset cannot be negative. - - - Length cannot be negative. - - - Source offset and length outside the bounds of the array - - - Privilege name cannot be empty. - - - Cannot create directory. - - - This method requires Windows Vista or higher. - - - The target directory is a file, not a directory: [{0}] - - - Illegal characters: [{0}] in path. - - - Path is a zero-length string or contains only white space. - - - The given path's format is not supported: [{0}] - - - The target file is a directory, not a file: [{0}] - - - The specified file is hidden: [{0}] - - - Cannot determine Copy or Move action. - - - An attempt to set an invalid file attribute failed. - - - Incomplete header read. - - - Invalid stream name. - - - The file or directory is not a reparse point. - - - The file or directory already exists. - - - Destination buffer not large enough for the requested operation. - - - Incorrectly implemented function attempting to generate exception from successful operation. - - - - Argument is not a valid Volume GUID. - - - The device is not ready. - - - Invalid Subpath - - - The handle is closed. - - \ No newline at end of file diff --git a/AlphaFS/SafeGlobalMemoryBufferHandle.cs b/AlphaFS/SafeGlobalMemoryBufferHandle.cs deleted file mode 100644 index 59eea9f..0000000 --- a/AlphaFS/SafeGlobalMemoryBufferHandle.cs +++ /dev/null @@ -1,78 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System; -using System.Runtime.InteropServices; -using System.Text; - -namespace Alphaleonis.Win32 -{ - /// Represents a block of native memory of a specified size allocated using the LocalAlloc function from Kernel32.dll. - internal sealed class SafeGlobalMemoryBufferHandle : SafeNativeMemoryBufferHandle - { - /// Creates new instance with zero IntPtr. - public SafeGlobalMemoryBufferHandle() - : base(true) - { - } - - /// Initializes a new instance of the class allocating the specified number of bytes of unmanaged memory. - /// The capacity. - public SafeGlobalMemoryBufferHandle(int capacity) : - base(capacity) - { - SetHandle(Marshal.AllocHGlobal(capacity)); - } - - private SafeGlobalMemoryBufferHandle(IntPtr buffer, int capacity) - : base(buffer, capacity) - { - } - - [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Reliability", "CA2000:Dispose objects before losing scope")] - public static SafeGlobalMemoryBufferHandle FromLong(long? value) - { - if (value.HasValue) - { - var safeBuffer = new SafeGlobalMemoryBufferHandle(Marshal.SizeOf(typeof (long))); - Marshal.WriteInt64(safeBuffer.handle, value.Value); - return safeBuffer; - } - - return new SafeGlobalMemoryBufferHandle(); - } - - public static SafeGlobalMemoryBufferHandle FromStringUni(string str) - { - if (str == null) - throw new ArgumentNullException("str"); - - return new SafeGlobalMemoryBufferHandle(Marshal.StringToHGlobalUni(str), str.Length*UnicodeEncoding.CharSize + UnicodeEncoding.CharSize); - } - - /// Called when object is disposed or finalized. - protected override bool ReleaseHandle() - { - Marshal.FreeHGlobal(handle); - return true; - } - } -} diff --git a/AlphaFS/SafeNativeMemoryBufferHandle.cs b/AlphaFS/SafeNativeMemoryBufferHandle.cs deleted file mode 100644 index 487b1a2..0000000 --- a/AlphaFS/SafeNativeMemoryBufferHandle.cs +++ /dev/null @@ -1,301 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using Microsoft.Win32.SafeHandles; -using System; -using System.Runtime.InteropServices; - -namespace Alphaleonis.Win32 -{ - /// Base class for classes representing a block of unmanaged memory. - internal abstract class SafeNativeMemoryBufferHandle : SafeHandleZeroOrMinusOneIsInvalid - { - #region Private Fields - - private int m_capacity; - - #endregion - - #region Constructors - - protected SafeNativeMemoryBufferHandle(bool ownsHandle) - : base(ownsHandle) - { - } - - /// Initializes a new instance of the specifying the allocated capacity of the memory block. - /// The capacity. - protected SafeNativeMemoryBufferHandle(int capacity) - : this(true) - { - m_capacity = capacity; - } - - protected SafeNativeMemoryBufferHandle(IntPtr memory, int capacity) - : this(capacity) - { - SetHandle(memory); - } - - #endregion - - #region Properties - - /// Gets the capacity. Only valid if this instance was created using a constructor that specifies the size, - /// it is not correct if this handle was returned by a native method using p/invoke. - /// - public int Capacity - { - get { return m_capacity; } - } - - #endregion - - #region Public Methods - - /// Copies data from a one-dimensional, managed 8-bit unsigned integer array to the unmanaged memory pointer referenced by this instance. - /// The one-dimensional array to copy from. - /// The zero-based index into the array where Copy should start. - /// The number of array elements to copy. - public void CopyFrom(byte[] source, int startIndex, int length) - { - Marshal.Copy(source, startIndex, handle, length); - } - - public void CopyFrom(char[] source, int startIndex, int length) - { - Marshal.Copy(source, startIndex, handle, length); - } - - public void CopyFrom(char[] source, int startIndex, int length, int offset) - { - Marshal.Copy(source, startIndex, new IntPtr(handle.ToInt64() + offset), length); - } - - /// Copies data from an unmanaged memory pointer to a managed 8-bit unsigned integer array. - /// The array to copy to. - /// The zero-based index in the destination array where copying should start. - /// The number of array elements to copy. - public void CopyTo(byte[] destination, int destinationOffset, int length) - { - if (destination == null) - throw new ArgumentNullException("destination"); - - if (destinationOffset < 0) - throw new ArgumentOutOfRangeException("destinationOffset", Resources.Negative_Destination_Offset); - - if (length < 0) - throw new ArgumentOutOfRangeException("length", Resources.Negative_Length); - - if (destinationOffset + length > destination.Length) - throw new ArgumentException(Resources.Destination_Buffer_Not_Large_Enough); - - if (length > Capacity) - throw new ArgumentOutOfRangeException("length", Resources.Source_Offset_And_Length_Outside_Bounds); - - Marshal.Copy(handle, destination, destinationOffset, length); - } - - /// Copies data from this unmanaged memory pointer to a managed 8-bit unsigned integer array. - /// The offset in the buffer to start copying from. - /// The array to copy to. - /// The zero-based index in the destination array where copying should start. - /// The number of array elements to copy. - public void CopyTo(int sourceOffset, byte[] destination, int destinationOffset, int length) - { - if (destination == null) - throw new ArgumentNullException("destination"); - - if (destinationOffset < 0) - throw new ArgumentOutOfRangeException("destinationOffset", Resources.Negative_Destination_Offset); - - if (length < 0) - throw new ArgumentOutOfRangeException("length", Resources.Negative_Length); - - if (destinationOffset + length > destination.Length) - throw new ArgumentException(Resources.Destination_Buffer_Not_Large_Enough); - - if (length > Capacity) - throw new ArgumentOutOfRangeException("length", Resources.Source_Offset_And_Length_Outside_Bounds); - - Marshal.Copy(new IntPtr(handle.ToInt64() + sourceOffset), destination, destinationOffset, length); - } - - public byte[] ToByteArray(int startIndex, int length) - { - if (IsInvalid) - return null; - - byte[] arr = new byte[length]; - Marshal.Copy(handle, arr, startIndex, length); - return arr; - } - - #region Write - - public void WriteInt16(int offset, short value) - { - Marshal.WriteInt16(handle, offset, value); - } - - public void WriteInt16(int offset, char value) - { - Marshal.WriteInt16(handle, offset, value); - } - - public void WriteInt16(char value) - { - Marshal.WriteInt16(handle, value); - } - - public void WriteInt16(short value) - { - Marshal.WriteInt16(handle, value); - } - - public void WriteInt32(int offset, short value) - { - Marshal.WriteInt32(handle, offset, value); - } - - public void WriteInt32(int value) - { - Marshal.WriteInt32(handle, value); - } - - public void WriteInt64(int offset, long value) - { - Marshal.WriteInt64(handle, offset, value); - } - - public void WriteInt64(long value) - { - Marshal.WriteInt64(handle, value); - } - - public void WriteByte(int offset, byte value) - { - Marshal.WriteByte(handle, offset, value); - } - - public void WriteByte(byte value) - { - Marshal.WriteByte(handle, value); - } - - public void WriteIntPtr(int offset, IntPtr value) - { - Marshal.WriteIntPtr(handle, offset, value); - } - - public void WriteIntPtr(IntPtr value) - { - Marshal.WriteIntPtr(handle, value); - } - - #endregion // Write - - #region Read - - public byte ReadByte() - { - return Marshal.ReadByte(handle); - } - - public byte ReadByte(int offset) - { - return Marshal.ReadByte(handle, offset); - } - - public short ReadInt16() - { - return Marshal.ReadInt16(handle); - } - - public short ReadInt16(int offset) - { - return Marshal.ReadInt16(handle, offset); - } - - public int ReadInt32() - { - return Marshal.ReadInt32(handle); - } - - public int ReadInt32(int offset) - { - return Marshal.ReadInt32(handle, offset); - } - - public long ReadInt64() - { - return Marshal.ReadInt64(handle); - } - - public long ReadInt64(int offset) - { - return Marshal.ReadInt64(handle, offset); - } - - public IntPtr ReadIntPtr() - { - return Marshal.ReadIntPtr(handle); - } - - public IntPtr ReadIntPtr(int offset) - { - return Marshal.ReadIntPtr(handle, offset); - } - - #endregion // Read - - - - /// Marshals data from a managed object to an unmanaged block of memory. - public void StructureToPtr(object structure, bool deleteOld) - { - Marshal.StructureToPtr(structure, handle, deleteOld); - } - - /// Marshals data from an unmanaged block of memory to a newly allocated managed object of the specified type. - /// A managed object containing the data pointed to by the ptr parameter. - public T PtrToStructure(int offset) - { - return (T) Marshal.PtrToStructure(new IntPtr(handle.ToInt64() + offset), typeof (T)); - } - - /// Allocates a managed System.String and copies a specified number of characters from an unmanaged Unicode string into it. - /// A managed string that holds a copy of the unmanaged string if the value of the ptr parameter is not null; otherwise, this method returns null. - public string PtrToStringUni(int offset, int length) - { - return Marshal.PtrToStringUni(new IntPtr(handle.ToInt64() + offset), length); - } - - /// Allocates a managed System.String and copies all characters up to the first null character from an unmanaged Unicode string into it. - /// A managed string that holds a copy of the unmanaged string if the value of the ptr parameter is not null; otherwise, this method returns null. - public string PtrToStringUni() - { - return Marshal.PtrToStringUni(handle); - } - - #endregion // Public Methods - } -} diff --git a/AlphaFS/Security/Crc32.cs b/AlphaFS/Security/Crc32.cs deleted file mode 100644 index 64b8af5..0000000 --- a/AlphaFS/Security/Crc32.cs +++ /dev/null @@ -1,165 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - * - * - * Copyright (c) Damien Guard. All rights reserved. - * AlphaFS has written permission from the author to include the CRC code. - */ - -using System; -using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; -using System.Security.Cryptography; - -namespace Alphaleonis.Win32.Security -{ - /// Implements a 32-bit CRC hash algorithm compatible with Zip etc. - /// - /// Crc32 should only be used for backward compatibility with older file formats - /// and algorithms. It is not secure enough for new applications. - /// If you need to call multiple times for the same data either use the HashAlgorithm - /// interface or remember that the result of one Compute call needs to be ~ (XOR) before - /// being passed in as the seed for the next Compute call. - /// - [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Crc")] - internal sealed class Crc32 : HashAlgorithm - { - private const uint DefaultPolynomial = 0xedb88320u; - private const uint DefaultSeed = 0xffffffffu; - - private uint m_hash; - private static uint[] s_defaultTable; - private readonly uint m_seed; - private readonly uint[] m_table; - - /// - /// Initializes a new instance of Crc32. - /// - public Crc32() - : this(DefaultPolynomial, DefaultSeed) - { - } - - /// Initializes a new instance of Crc32. - /// The polynomial. - /// The seed. - private Crc32(uint polynomial, uint seed) - { - m_table = InitializeTable(polynomial); - m_seed = m_hash = seed; - } - - /// - /// Initializes an implementation of the - /// class. - /// - public override void Initialize() - { - m_hash = m_seed; - } - - /// When overridden in a derived class, routes data written to the object into the hash algorithm for computing the hash. - /// The input to compute the hash code for.. - /// The offset into the byte array from which to begin using data. - /// The number of bytes in the byte array to use as data. - protected override void HashCore(byte[] array, int ibStart, int cbSize) - { - m_hash = CalculateHash(m_table, m_hash, array, ibStart, cbSize); - } - - /// - /// Finalizes the hash computation after the last data is processed by the cryptographic stream - /// object. - /// - /// - /// This method finalizes any partial computation and returns the correct hash value for the data - /// stream. - /// - protected override byte[] HashFinal() - { - var hashBuffer = UInt32ToBigEndianBytes(~m_hash); - HashValue = hashBuffer; - return hashBuffer; - } - - /// Gets the size, in bits, of the computed hash code. - /// The size, in bits, of the computed hash code. - public override int HashSize - { - get { return 32; } - } - - /// Initializes the table. - /// The polynomial. - /// The table. - private static uint[] InitializeTable(uint polynomial) - { - if (polynomial == DefaultPolynomial && s_defaultTable != null) - return s_defaultTable; - - var createTable = new uint[256]; - for (var i = 0; i < 256; i++) - { - var entry = (uint) i; - for (var j = 0; j < 8; j++) - if ((entry & 1) == 1) - entry = (entry >> 1) ^ polynomial; - else - entry = entry >> 1; - createTable[i] = entry; - } - - if (polynomial == DefaultPolynomial) - s_defaultTable = createTable; - - return createTable; - } - - /// Calculates the hash. - /// The table. - /// The seed. - /// The buffer. - /// The start. - /// The size. - /// The calculated hash. - private static uint CalculateHash(uint[] table, uint seed, IList buffer, int start, int size) - { - var hash = seed; - - for (var i = start; i < start + size; i++) - hash = (hash >> 8) ^ table[buffer[i] ^ hash & 0xff]; - - return hash; - } - - /// Int 32 to big endian bytes. - /// The second uint 3. - /// A byte[]. - private static byte[] UInt32ToBigEndianBytes(uint uint32) - { - var result = BitConverter.GetBytes(uint32); - - if (BitConverter.IsLittleEndian) - Array.Reverse(result); - - return result; - } - } -} diff --git a/AlphaFS/Security/Crc64.cs b/AlphaFS/Security/Crc64.cs deleted file mode 100644 index 800d33a..0000000 --- a/AlphaFS/Security/Crc64.cs +++ /dev/null @@ -1,166 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - * - * - * Copyright (c) Damien Guard. All rights reserved. - * AlphaFS has written permission from the author to include the CRC code. - */ - -using System; -using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; -using System.Security.Cryptography; - -namespace Alphaleonis.Win32.Security -{ - /// Implements an ISO-3309 compliant 64-bit CRC hash algorithm. - [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Crc")] - internal class Crc64 : HashAlgorithm - { - private static ulong[] Table; - private const ulong Iso3309Polynomial = 0xD800000000000000; - private const ulong DefaultSeed = 0x0; - private readonly ulong[] m_table; - private readonly ulong m_seed; - private ulong m_hash; - - /// Initializes a new instance of - public Crc64() - : this(Iso3309Polynomial, DefaultSeed) - { - } - - /// Initializes a new instance of - /// The polynomial. - /// The seed. - private Crc64(ulong polynomial, ulong seed) - { - m_table = InitializeTable(polynomial); - this.m_seed = m_hash = seed; - } - - /// - /// Initializes an implementation of the - /// class. - /// - public override void Initialize() - { - m_hash = m_seed; - } - - /// When overridden in a derived class, routes data written to the object into the hash algorithm for computing the hash. - /// The input to compute the hash code for.. - /// The offset into the byte array from which to begin using data. - /// The number of bytes in the byte array to use as data. - protected override void HashCore(byte[] array, int ibStart, int cbSize) - { - m_hash = CalculateHash(m_hash, m_table, array, ibStart, cbSize); - } - - /// - /// Finalizes the hash computation after the last data is processed by the cryptographic stream - /// object. - /// - /// - /// This method finalizes any partial computation and returns the correct hash value for the data - /// stream. - /// - protected override byte[] HashFinal() - { - var hashBuffer = UInt64ToBigEndianBytes(m_hash); - HashValue = hashBuffer; - return hashBuffer; - } - - /// Gets the size, in bits, of the computed hash code. - /// The size, in bits, of the computed hash code. - public override int HashSize - { - get { return 64; } - } - - /// Calculates the hash. - /// The seed. - /// The table. - /// The buffer. - /// The start. - /// The size. - /// The calculated hash. - private static ulong CalculateHash(ulong seed, ulong[] table, IList buffer, int start, int size) - { - var hash = seed; - for (var i = start; i < start + size; i++) - unchecked - { - hash = (hash >> 8) ^ table[(buffer[i] ^ hash) & 0xff]; - } - return hash; - } - - /// Int 64 to big endian bytes. - /// The value. - /// A byte[]. - private static byte[] UInt64ToBigEndianBytes(ulong value) - { - var result = BitConverter.GetBytes(value); - - if (BitConverter.IsLittleEndian) - Array.Reverse(result); - - return result; - } - - /// Initializes the table. - /// The polynomial. - /// An ulong[]. - private static ulong[] InitializeTable(ulong polynomial) - { - if (polynomial == Iso3309Polynomial && Table != null) - return Table; - - var createTable = CreateTable(polynomial); - - if (polynomial == Iso3309Polynomial) - Table = createTable; - - return createTable; - } - - /// Creates a table. - /// The polynomial. - /// A new array of ulong. - private static ulong[] CreateTable(ulong polynomial) - { - var createTable = new ulong[256]; - for (var i = 0; i < 256; ++i) - { - var entry = (ulong)i; - for (var j = 0; j < 8; ++j) - if ((entry & 1) == 1) - entry = (entry >> 1) ^ polynomial; - else - entry = entry >> 1; - createTable[i] = entry; - } - - return createTable; - } - } -} diff --git a/AlphaFS/Security/Enumerations/HashType.cs b/AlphaFS/Security/Enumerations/HashType.cs deleted file mode 100644 index bd234c6..0000000 --- a/AlphaFS/Security/Enumerations/HashType.cs +++ /dev/null @@ -1,61 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System.Diagnostics.CodeAnalysis; - -namespace Alphaleonis.Win32.Security -{ - /// Enum containing the supported hash types. - public enum HashType - { - /// CRC-32 (Cyclic Redundancy Check) - [SuppressMessage("Microsoft.Naming", "CA1709:IdentifiersShouldBeCasedCorrectly", MessageId = "CRC")] - CRC32, - - /// CRC-64 ISO-3309 compliant. - [SuppressMessage("Microsoft.Naming", "CA1709:IdentifiersShouldBeCasedCorrectly", MessageId = "CRC")] - [SuppressMessage("Microsoft.Naming", "CA1709:IdentifiersShouldBeCasedCorrectly", MessageId = "ISO")] - CRC64ISO3309, - - /// MD5 (Message digest) - MD5, - - /// RIPEMD-160 is a 160-bit cryptographic hash function. It is intended for use as a replacement for the 128-bit hash functions MD4, MD5, and RIPEMD. - [SuppressMessage("Microsoft.Naming", "CA1709:IdentifiersShouldBeCasedCorrectly", MessageId = "RIPEMD")] - RIPEMD160, - - /// SHA-1 (Secure Hash Algorithm) - [SuppressMessage("Microsoft.Naming", "CA1709:IdentifiersShouldBeCasedCorrectly", MessageId = "SHA")] - SHA1, - - /// SHA-256 (Secure Hash Algorithm) - [SuppressMessage("Microsoft.Naming", "CA1709:IdentifiersShouldBeCasedCorrectly", MessageId = "SHA")] - SHA256, - - /// SHA-384 (Secure Hash Algorithm) - [SuppressMessage("Microsoft.Naming", "CA1709:IdentifiersShouldBeCasedCorrectly", MessageId = "SHA")] - SHA384, - - /// SHA-512 (Secure Hash Algorithm) - [SuppressMessage("Microsoft.Naming", "CA1709:IdentifiersShouldBeCasedCorrectly", MessageId = "SHA")] - SHA512 - } -} diff --git a/AlphaFS/Security/Enumerations/ObjectType.cs b/AlphaFS/Security/Enumerations/ObjectType.cs deleted file mode 100644 index 1d13f2f..0000000 --- a/AlphaFS/Security/Enumerations/ObjectType.cs +++ /dev/null @@ -1,76 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -namespace Alphaleonis.Win32.Security -{ - /// The ObjectType (SE_OBJECT_TYPE) enumeration contains values that correspond to the types of Windows objects that support security. - /// The functions, such as GetSecurityInfo and SetSecurityInfo, that set and retrieve the security information of an object, use these values to indicate the type of object. - /// - internal enum ObjectType - { - /// Unknown object type. - UnknownObjectType = 0, - - /// Indicates a file or directory. The name string that identifies a file or directory object can be in one of the following formats: - /// A relative path, such as FileName.dat or ..\FileName - /// An absolute path, such as FileName.dat, C:\DirectoryName\FileName.dat, or G:\RemoteDirectoryName\FileName.dat. - /// A UNC name, such as \\ComputerName\ShareName\FileName.dat. - /// - FileObject, - - /// Indicates a Windows service. A service object can be a local service, such as ServiceName, or a remote service, such as \\ComputerName\ServiceName. - Service, - - /// Indicates a printer. A printer object can be a local printer, such as PrinterName, or a remote printer, such as \\ComputerName\PrinterName. - Printer, - - /// Indicates a registry key. A registry key object can be in the local registry, such as CLASSES_ROOT\SomePath or in a remote registry, such as \\ComputerName\CLASSES_ROOT\SomePath. - /// The names of registry keys must use the following literal strings to identify the predefined registry keys: "CLASSES_ROOT", "CURRENT_USER", "MACHINE", and "USERS". - /// - RegistryKey, - - /// Indicates a network share. A share object can be local, such as ShareName, or remote, such as \\ComputerName\ShareName. - LmShare, - - /// Indicates a local kernel object. The GetSecurityInfo and SetSecurityInfo functions support all types of kernel objects. - /// The GetNamedSecurityInfo and SetNamedSecurityInfo functions work only with the following kernel objects: semaphore, event, mutex, waitable timer, and file mapping. - KernelObject, - - /// Indicates a window station or desktop object on the local computer. You cannot use GetNamedSecurityInfo and SetNamedSecurityInfo with these objects because the names of window stations or desktops are not unique. - WindowObject, - - /// Indicates a directory service object or a property set or property of a directory service object. - /// The name string for a directory service object must be in X.500 form, for example: CN=SomeObject,OU=ou2,OU=ou1,DC=DomainName,DC=CompanyName,DC=com,O=internet - DsObject, - - /// Indicates a directory service object and all of its property sets and properties. - DsObjectAll, - - /// Indicates a provider-defined object. - ProviderDefinedObject, - - /// Indicates a WMI object. - WmiGuidObject, - - /// Indicates an object for a registry entry under WOW64. - RegistryWow6432Key - } -} diff --git a/AlphaFS/Security/Enumerations/SecurityDescriptorControl.cs b/AlphaFS/Security/Enumerations/SecurityDescriptorControl.cs deleted file mode 100644 index b18ed13..0000000 --- a/AlphaFS/Security/Enumerations/SecurityDescriptorControl.cs +++ /dev/null @@ -1,76 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System; - -namespace Alphaleonis.Win32.Security -{ - /// The SECURITY_DESCRIPTOR_CONTROL data type is a set of bit flags that qualify the meaning of a security descriptor or its components. - /// Each security descriptor has a Control member that stores the SECURITY_DESCRIPTOR_CONTROL bits. - [Flags] - internal enum SecurityDescriptorControl - { - /// - None = 0, - - /// SE_OWNER_DEFAULTED (0x0001) - Indicates an SD with a default owner security identifier (SID). You can use this bit to find all of the objects that have default owner permissions set. - OwnerDefaulted = 1, - - /// SE_GROUP_DEFAULTED (0x0002) - Indicates an SD with a default group SID. You can use this bit to find all of the objects that have default group permissions set. - GroupDefaulted = 2, - - /// SE_DACL_PRESENT (0x0004) - Indicates an SD that has a discretionary access control list (DACL). If this flag is not set, or if this flag is set and the DACL is NULL, the SD allows full access to everyone. - DaclPresent = 4, - - /// SE_DACL_DEFAULTED (0x0008) - Indicates an SD with a default DACL. For example, if an object creator does not specify a DACL, the object receives the default DACL from the access token of the creator. This flag can affect how the system treats the DACL, with respect to access control entry (ACE) inheritance. The system ignores this flag if the SE_DACL_PRESENT flag is not set. - DaclDefaulted = 8, - - /// SE_SACL_PRESENT (0x0010) - Indicates an SD that has a system access control list (SACL). - SaclPresent = 16, - - /// SE_SACL_DEFAULTED (0x0020) - Indicates an SD with a default SACL. For example, if an object creator does not specify an SACL, the object receives the default SACL from the access token of the creator. This flag can affect how the system treats the SACL, with respect to ACE inheritance. The system ignores this flag if the SE_SACL_PRESENT flag is not set. - SaclDefaulted = 32, - - /// SE_DACL_AUTO_INHERIT_REQ (0x0100) - Requests that the provider for the object protected by the SD automatically propagate the DACL to existing child objects. If the provider supports automatic inheritance, it propagates the DACL to any existing child objects, and sets the SE_DACL_AUTO_INHERITED bit in the security descriptors of the object and its child objects. - DaclAutoInheritReq = 256, - - /// SE_SACL_AUTO_INHERIT_REQ (0x0200) - Requests that the provider for the object protected by the SD automatically propagate the SACL to existing child objects. If the provider supports automatic inheritance, it propagates the SACL to any existing child objects, and sets the SE_SACL_AUTO_INHERITED bit in the SDs of the object and its child objects. - SaclAutoInheritReq = 512, - - /// SE_DACL_AUTO_INHERITED (0x0400) - Windows 2000 only. Indicates an SD in which the DACL is set up to support automatic propagation of inheritable ACEs to existing child objects. The system sets this bit when it performs the automatic inheritance algorithm for the object and its existing child objects. This bit is not set in SDs for Windows NT versions 4.0 and earlier, which do not support automatic propagation of inheritable ACEs. - DaclAutoInherited = 1024, - - /// SE_SACL_AUTO_INHERITED (0x0800) - Windows 2000: Indicates an SD in which the SACL is set up to support automatic propagation of inheritable ACEs to existing child objects. The system sets this bit when it performs the automatic inheritance algorithm for the object and its existing child objects. This bit is not set in SDs for Windows NT versions 4.0 and earlier, which do not support automatic propagation of inheritable ACEs. - SaclAutoInherited = 2048, - - /// SE_DACL_PROTECTED (0x1000) - Windows 2000: Prevents the DACL of the SD from being modified by inheritable ACEs. - DaclProtected = 4096, - - /// SE_SACL_PROTECTED (0x2000) - Windows 2000: Prevents the SACL of the SD from being modified by inheritable ACEs. - SaclProtected = 8192, - - /// SE_RM_CONTROL_VALID (0x4000) - Indicates that the resource manager control is valid. - RmControlValid = 16384, - - /// SE_SELF_RELATIVE (0x8000) - Indicates an SD in self-relative format with all of the security information in a contiguous block of memory. If this flag is not set, the SD is in absolute format. For more information, see Absolute and Self-Relative Security Descriptors. - SelfRelative = 32768 - } -} \ No newline at end of file diff --git a/AlphaFS/Security/Enumerations/SecurityInformation.cs b/AlphaFS/Security/Enumerations/SecurityInformation.cs deleted file mode 100644 index c4540d2..0000000 --- a/AlphaFS/Security/Enumerations/SecurityInformation.cs +++ /dev/null @@ -1,87 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System; - -namespace Alphaleonis.Win32.Security -{ - /// The SECURITY_INFORMATION data type identifies the object-related security information being set or queried. - /// This security information includes: - /// The owner of an object; - /// The primary group of an object; - /// The discretionary access control list (DACL) of an object; - /// The system access control list (SACL) of an object; - /// - /// - /// An unsigned 32-bit integer specifies portions of a SECURITY_DESCRIPTOR by means of bit flags. - /// Individual bit values (combinable with the bitwise OR operation) are as shown in the following table. - /// - [Flags] - internal enum SecurityInformation : uint - { - /// - None = 0, - - /// OWNER_SECURITY_INFORMATION (0x00000001) - The owner identifier of the object is being referenced. - Owner = 1, - - /// GROUP_SECURITY_INFORMATION (0x00000002) - The primary group identifier of the object is being referenced. - Group = 2, - - /// DACL_SECURITY_INFORMATION (0x00000004) - The DACL of the object is being referenced. - Dacl = 4, - - /// SACL_SECURITY_INFORMATION (0x00000008) - The SACL of the object is being referenced. - Sacl = 8, - - /// LABEL_SECURITY_INFORMATION (0x00000010) - The mandatory integrity label is being referenced. The mandatory integrity label is an ACE in the SACL of the object. - /// Windows Server 2003 and Windows XP: This bit flag is not available. - Label = 16, - - /// ATTRIBUTE_SECURITY_INFORMATION (0x00000020) - The resource properties of the object being referenced. - /// The resource properties are stored in SYSTEM_RESOURCE_ATTRIBUTE_ACE types in the SACL of the security descriptor. - /// - /// Windows Server 2008 R2, Windows 7, Windows Server 2008, Windows Vista, Windows Server 2003, and Windows XP: This bit flag is not available. - Attribute = 32, - - /// SCOPE_SECURITY_INFORMATION (0x00000040) - The Central Access Policy (CAP) identifier applicable on the object that is being referenced. - /// Each CAP identifier is stored in a SYSTEM_SCOPED_POLICY_ID_ACE type in the SACL of the SD. - /// - /// Windows Server 2008 R2, Windows 7, Windows Server 2008, Windows Vista, Windows Server 2003, and Windows XP: This bit flag is not available. - Scope = 64, - - /// BACKUP_SECURITY_INFORMATION (0x00010000) - All parts of the security descriptor. This is useful for backup and restore software that needs to preserve the entire security descriptor. - /// Windows Server 2008 R2, Windows 7, Windows Server 2008, Windows Vista, Windows Server 2003, and Windows XP: This bit flag is not available. - Backup = 65536, - - /// UNPROTECTED_SACL_SECURITY_INFORMATION (0x10000000) - The SACL inherits ACEs from the parent object. - UnprotectedSacl = 268435456, - - /// UNPROTECTED_DACL_SECURITY_INFORMATION (0x20000000) - The DACL inherits ACEs from the parent object. - UnprotectedDacl = 536870912, - - /// PROTECTED_SACL_SECURITY_INFORMATION (0x40000000) - The SACL cannot inherit ACEs. - ProtectedSacl = 1073741824, - - /// PROTECTED_DACL_SECURITY_INFORMATION (0x80000000) - The DACL cannot inherit access control entries (ACEs). - ProtectedDacl = 2147483648 - } -} \ No newline at end of file diff --git a/AlphaFS/Security/InternalPrivilegeEnabler.cs b/AlphaFS/Security/InternalPrivilegeEnabler.cs deleted file mode 100644 index 14156a0..0000000 --- a/AlphaFS/Security/InternalPrivilegeEnabler.cs +++ /dev/null @@ -1,101 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System; -using System.Diagnostics.CodeAnalysis; -using System.Runtime.InteropServices; -using System.Security; -using System.Security.Principal; - -namespace Alphaleonis.Win32.Security -{ - /// - /// This object is used to enable a specific privilege for the currently running process during its lifetime. - /// It should be disposed as soon as the elevated privilege is no longer needed. - /// For more information see the documentation on AdjustTokenPrivileges on MSDN. - /// - internal sealed class InternalPrivilegeEnabler : IDisposable - { - /// Initializes a new instance of the class and enabling the specified privilege for the currently running process. - /// The name of the privilege. - [SuppressMessage("Microsoft.Security", "CA2122:DoNotIndirectlyExposeMethodsWithLinkDemands")] - [SecurityCritical] - public InternalPrivilegeEnabler(Privilege privilegeName) - { - if (privilegeName == null) - throw new ArgumentNullException("privilegeName"); - - _mPrivilege = privilegeName; - AdjustPrivilege(true); - } - - /// - /// Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. - /// In this case the privilege previously enabled will be disabled. - /// - public void Dispose() - { - try - { - if (_mPrivilege != null) - AdjustPrivilege(false); - } - finally - { - _mPrivilege = null; - } - } - - /// Adjusts the privilege. - /// the privilege will be enabled, otherwise disabled. - [SecurityCritical] - private void AdjustPrivilege(bool enable) - { - using (WindowsIdentity currentIdentity = WindowsIdentity.GetCurrent(TokenAccessLevels.Query | TokenAccessLevels.AdjustPrivileges)) - { - if (currentIdentity != null) - { - IntPtr hToken = currentIdentity.Token; - TokenPrivileges newPrivilege = new TokenPrivileges(); - TokenPrivileges mOldPrivilege = new TokenPrivileges(); - newPrivilege.PrivilegeCount = 1; - newPrivilege.Luid = Filesystem.NativeMethods.LongToLuid(_mPrivilege.LookupLuid()); - newPrivilege.Attributes = (uint)(enable ? 2 : 0); // 2 = SePrivilegeEnabled; - - uint length; - if (!NativeMethods.AdjustTokenPrivileges(hToken, false, ref newPrivilege, (uint) Marshal.SizeOf(mOldPrivilege), out mOldPrivilege, out length)) - NativeError.ThrowException(Marshal.GetLastWin32Error()); - - // If no privilege was changed, we don't want to reset it. - if (mOldPrivilege.PrivilegeCount == 0) - _mPrivilege = null; - } - } - } - - public Privilege EnabledPrivilege - { - get { return _mPrivilege; } - } - - private Privilege _mPrivilege; - } -} diff --git a/AlphaFS/Security/NativeMethods.cs b/AlphaFS/Security/NativeMethods.cs deleted file mode 100644 index 246ba9c..0000000 --- a/AlphaFS/Security/NativeMethods.cs +++ /dev/null @@ -1,275 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System; -using System.Diagnostics.CodeAnalysis; -using System.Runtime.InteropServices; -using System.Security; -using System.Text; - -namespace Alphaleonis.Win32.Security -{ - internal static partial class NativeMethods - { - #region AdjustTokenPrivileges - - /// The AdjustTokenPrivileges function enables or disables privileges in the specified access token. Enabling or disabling privileges in an access token requires TOKEN_ADJUST_PRIVILEGES access. - /// - /// If the function succeeds, the return value is nonzero. - /// To determine whether the function adjusted all of the specified privileges, call GetLastError. - /// - /// Minimum supported client: Windows XP [desktop apps only] - /// Minimum supported server: Windows Server 2003 [desktop apps only] - [SuppressMessage("Microsoft.Security", "CA5122:PInvokesShouldNotBeSafeCriticalFxCopRule")] - [DllImport("advapi32.dll", SetLastError = true, CharSet = CharSet.Unicode), SuppressUnmanagedCodeSecurity] - [return: MarshalAs(UnmanagedType.Bool)] - internal static extern bool AdjustTokenPrivileges(IntPtr tokenHandle, [MarshalAs(UnmanagedType.Bool)] bool disableAllPrivileges, ref TokenPrivileges newState, uint bufferLength, out TokenPrivileges previousState, out uint returnLength); - - #endregion // AdjustTokenPrivileges - - #region LookupPrivilegeDisplayName - - /// The LookupPrivilegeDisplayName function retrieves the display name that represents a specified privilege. - /// - /// If the function succeeds, the return value is nonzero. - /// If the function fails, it returns zero. To get extended error information, call GetLastError. - /// - /// Minimum supported client: Windows XP [desktop apps only] - /// Minimum supported server: Windows Server 2003 [desktop apps only] - [SuppressMessage("Microsoft.Security", "CA5122:PInvokesShouldNotBeSafeCriticalFxCopRule")] - [DllImport("advapi32.dll", SetLastError = true, CharSet = CharSet.Unicode, EntryPoint = "LookupPrivilegeDisplayNameW"), SuppressUnmanagedCodeSecurity] - [return: MarshalAs(UnmanagedType.Bool)] - internal static extern bool LookupPrivilegeDisplayName([MarshalAs(UnmanagedType.LPWStr)] string lpSystemName, [MarshalAs(UnmanagedType.LPWStr)] string lpName, ref StringBuilder lpDisplayName, ref uint cchDisplayName, out uint lpLanguageId); - - #endregion // LookupPrivilegeDisplayName - - #region LookupPrivilegeValue - - /// The LookupPrivilegeValue function retrieves the locally unique identifier (LUID) used on a specified system to locally represent the specified privilege name. - /// - /// If the function succeeds, the function returns nonzero. - /// If the function fails, it returns zero. To get extended error information, call GetLastError. - /// - /// Minimum supported client: Windows XP [desktop apps only] - /// Minimum supported server: Windows Server 2003 [desktop apps only] - [SuppressMessage("Microsoft.Security", "CA5122:PInvokesShouldNotBeSafeCriticalFxCopRule")] - [DllImport("advapi32.dll", SetLastError = true, CharSet = CharSet.Unicode, EntryPoint = "LookupPrivilegeValueW"), SuppressUnmanagedCodeSecurity] - [return: MarshalAs(UnmanagedType.Bool)] - internal static extern bool LookupPrivilegeValue([MarshalAs(UnmanagedType.LPWStr)] string lpSystemName, [MarshalAs(UnmanagedType.LPWStr)] string lpName, out Luid lpLuid); - - #endregion // LookupPrivilegeValue - - - #region GetNamedSecurityInfo - - /// The GetNamedSecurityInfo function retrieves a copy of the security descriptor for an object specified by name. - ///   - /// - /// If the function succeeds, the return value is ERROR_SUCCESS. - /// If the function fails, the return value is a nonzero error code defined in WinError.h. - /// - ///   - /// - /// Minimum supported client: Windows XP [desktop apps only] - /// Minimum supported server: Windows Server 2003 [desktop apps only] - /// - /// - [SuppressMessage("Microsoft.Security", "CA5122:PInvokesShouldNotBeSafeCriticalFxCopRule")] - [DllImport("advapi32.dll", SetLastError = true, CharSet = CharSet.Unicode, EntryPoint = "GetNamedSecurityInfoW"), SuppressUnmanagedCodeSecurity] - [return: MarshalAs(UnmanagedType.U4)] - internal static extern uint GetNamedSecurityInfo([MarshalAs(UnmanagedType.LPWStr)] string pObjectName, ObjectType objectType, SecurityInformation securityInfo, out IntPtr pSidOwner, out IntPtr pSidGroup, out IntPtr pDacl, out IntPtr pSacl, out SafeGlobalMemoryBufferHandle pSecurityDescriptor); - - #endregion // GetNamedSecurityInfo - - #region GetSecurityInfo - - /// The GetSecurityInfo function retrieves a copy of the security descriptor for an object specified by a handle. - /// - /// If the function succeeds, the function returns nonzero. - /// If the function fails, it returns zero. To get extended error information, call GetLastError. - /// - /// Minimum supported client: Windows XP [desktop apps only] - /// Minimum supported server: Windows Server 2003 [desktop apps only] - [SuppressMessage("Microsoft.Security", "CA5122:PInvokesShouldNotBeSafeCriticalFxCopRule")] - [DllImport("advapi32.dll", SetLastError = true, CharSet = CharSet.Unicode), SuppressUnmanagedCodeSecurity] - [return: MarshalAs(UnmanagedType.U4)] - internal static extern uint GetSecurityInfo(SafeHandle handle, ObjectType objectType, SecurityInformation securityInfo, out IntPtr pSidOwner, out IntPtr pSidGroup, out IntPtr pDacl, out IntPtr pSacl, out SafeGlobalMemoryBufferHandle pSecurityDescriptor); - - #endregion // GetSecurityInfo - - #region SetSecurityInfo - - /// The SetSecurityInfo function sets specified security information in the security descriptor of a specified object. - /// The caller identifies the object by a handle. - /// - /// If the function succeeds, the function returns ERROR_SUCCESS. - /// If the function fails, it returns a nonzero error code defined in WinError.h. - /// - /// Minimum supported client: Windows XP [desktop apps only] - /// Minimum supported server: Windows Server 2003 [desktop apps only] - [SuppressMessage("Microsoft.Security", "CA5122:PInvokesShouldNotBeSafeCriticalFxCopRule")] - [DllImport("advapi32.dll", SetLastError = true, CharSet = CharSet.Unicode), SuppressUnmanagedCodeSecurity] - [return: MarshalAs(UnmanagedType.U4)] - internal static extern uint SetSecurityInfo(SafeHandle handle, ObjectType objectType, SecurityInformation securityInfo, IntPtr psidOwner, IntPtr psidGroup, IntPtr pDacl, IntPtr pSacl); - - #endregion // SetSecurityInfo - - #region SetNamedSecurityInfo - - /// The SetNamedSecurityInfo function sets specified security information in the security descriptor of a specified object. The caller identifies the object by name. - ///   - /// - /// If the function succeeds, the function returns ERROR_SUCCESS. - /// If the function fails, it returns a nonzero error code defined in WinError.h. - /// - ///   - /// - /// Minimum supported client: Windows XP [desktop apps only] - /// Minimum supported server: Windows Server 2003 [desktop apps only] - /// - /// - [SuppressMessage("Microsoft.Security", "CA5122:PInvokesShouldNotBeSafeCriticalFxCopRule")] - [DllImport("advapi32.dll", SetLastError = true, CharSet = CharSet.Unicode, EntryPoint = "SetNamedSecurityInfoW"), SuppressUnmanagedCodeSecurity] - [return: MarshalAs(UnmanagedType.U4)] - internal static extern uint SetNamedSecurityInfo([MarshalAs(UnmanagedType.LPWStr)] string pObjectName, ObjectType objectType, SecurityInformation securityInfo, IntPtr pSidOwner, IntPtr pSidGroup, IntPtr pDacl, IntPtr pSacl); - - #endregion // SetNamedSecurityInfo - - - #region GetSecurityDescriptorDacl - - /// The GetSecurityDescriptorDacl function retrieves a pointer to the discretionary access control list (DACL) in a specified security descriptor. - /// - /// If the function succeeds, the function returns nonzero. - /// If the function fails, it returns zero. To get extended error information, call GetLastError. - /// - /// Minimum supported client: Windows XP [desktop apps only] - /// Minimum supported server: Windows Server 2003 [desktop apps only] - [SuppressMessage("Microsoft.Security", "CA5122:PInvokesShouldNotBeSafeCriticalFxCopRule")] - [DllImport("advapi32.dll", SetLastError = true, CharSet = CharSet.Unicode), SuppressUnmanagedCodeSecurity] - [return: MarshalAs(UnmanagedType.Bool)] - internal static extern bool GetSecurityDescriptorDacl(SafeGlobalMemoryBufferHandle pSecurityDescriptor, [MarshalAs(UnmanagedType.Bool)] out bool lpbDaclPresent, out IntPtr pDacl, [MarshalAs(UnmanagedType.Bool)] out bool lpbDaclDefaulted); - - #endregion // GetSecurityDescriptorDacl - - #region GetSecurityDescriptorSacl - - /// The GetSecurityDescriptorSacl function retrieves a pointer to the system access control list (SACL) in a specified security descriptor. - /// - /// If the function succeeds, the function returns nonzero. - /// If the function fails, it returns zero. To get extended error information, call GetLastError. - /// - /// Minimum supported client: Windows XP [desktop apps only] - /// Minimum supported server: Windows Server 2003 [desktop apps only] - [SuppressMessage("Microsoft.Security", "CA5122:PInvokesShouldNotBeSafeCriticalFxCopRule")] - [DllImport("advapi32.dll", SetLastError = true, CharSet = CharSet.Unicode), SuppressUnmanagedCodeSecurity] - [return: MarshalAs(UnmanagedType.Bool)] - internal static extern bool GetSecurityDescriptorSacl(SafeGlobalMemoryBufferHandle pSecurityDescriptor, [MarshalAs(UnmanagedType.Bool)] out bool lpbSaclPresent, out IntPtr pSacl, [MarshalAs(UnmanagedType.Bool)] out bool lpbSaclDefaulted); - - #endregion // GetSecurityDescriptorSacl - - #region GetSecurityDescriptorGroup - - /// The GetSecurityDescriptorGroup function retrieves the primary group information from a security descriptor. - /// - /// If the function succeeds, the function returns nonzero. - /// If the function fails, it returns zero. To get extended error information, call GetLastError. - /// - /// Minimum supported client: Windows XP [desktop apps only] - /// Minimum supported server: Windows Server 2003 [desktop apps only] - [SuppressMessage("Microsoft.Security", "CA5122:PInvokesShouldNotBeSafeCriticalFxCopRule")] - [DllImport("advapi32.dll", SetLastError = true, CharSet = CharSet.Unicode), SuppressUnmanagedCodeSecurity] - [return: MarshalAs(UnmanagedType.Bool)] - internal static extern bool GetSecurityDescriptorGroup(SafeGlobalMemoryBufferHandle pSecurityDescriptor, out IntPtr pGroup, [MarshalAs(UnmanagedType.Bool)] out bool lpbGroupDefaulted); - - #endregion // GetSecurityDescriptorGroup - - #region GetSecurityDescriptorControl - - /// The GetSecurityDescriptorControl function retrieves a security descriptor control and revision information. - /// - /// If the function succeeds, the function returns nonzero. - /// If the function fails, it returns zero. To get extended error information, call GetLastError. - /// - /// Minimum supported client: Windows XP [desktop apps only] - /// Minimum supported server: Windows Server 2003 [desktop apps only] - [SuppressMessage("Microsoft.Security", "CA5122:PInvokesShouldNotBeSafeCriticalFxCopRule")] - [DllImport("advapi32.dll", SetLastError = true, CharSet = CharSet.Unicode), SuppressUnmanagedCodeSecurity] - [return: MarshalAs(UnmanagedType.Bool)] - internal static extern bool GetSecurityDescriptorControl(SafeGlobalMemoryBufferHandle pSecurityDescriptor, out SecurityDescriptorControl pControl, out uint lpdwRevision); - - #endregion // GetSecurityDescriptorControl - - #region GetSecurityDescriptorOwner - - /// The GetSecurityDescriptorOwner function retrieves the owner information from a security descriptor. - /// - /// If the function succeeds, the function returns nonzero. - /// If the function fails, it returns zero. To get extended error information, call GetLastError. - /// - /// Minimum supported client: Windows XP [desktop apps only] - /// Minimum supported server: Windows Server 2003 [desktop apps only] - [SuppressMessage("Microsoft.Security", "CA5122:PInvokesShouldNotBeSafeCriticalFxCopRule")] - [DllImport("advapi32.dll", SetLastError = true, CharSet = CharSet.Unicode), SuppressUnmanagedCodeSecurity] - [return: MarshalAs(UnmanagedType.Bool)] - internal static extern bool GetSecurityDescriptorOwner(SafeGlobalMemoryBufferHandle pSecurityDescriptor, out IntPtr pOwner, [MarshalAs(UnmanagedType.Bool)] out bool lpbOwnerDefaulted); - - #endregion // GetSecurityDescriptorOwner - - #region GetSecurityDescriptorLength - - /// The GetSecurityDescriptorLength function returns the length, in bytes, of a structurally valid security descriptor. The length includes the length of all associated structures. - /// - /// If the function succeeds, the function returns the length, in bytes, of the SECURITY_DESCRIPTOR structure. - /// If the SECURITY_DESCRIPTOR structure is not valid, the return value is undefined. - /// - /// Minimum supported client: Windows XP [desktop apps only] - /// Minimum supported server: Windows Server 2003 [desktop apps only] - [SuppressMessage("Microsoft.Security", "CA5122:PInvokesShouldNotBeSafeCriticalFxCopRule")] - [DllImport("advapi32.dll", SetLastError = true, CharSet = CharSet.Unicode), SuppressUnmanagedCodeSecurity] - [return: MarshalAs(UnmanagedType.U4)] - internal static extern uint GetSecurityDescriptorLength(SafeGlobalMemoryBufferHandle pSecurityDescriptor); - - #endregion // GetSecurityDescriptorLength - - - #region LocalFree - - /// Frees the specified local memory object and invalidates its handle. - /// - /// If the function succeeds, the return value is . - /// If the function fails, the return value is equal to a handle to the local memory object. To get extended error information, call GetLastError. - /// - /// SetLastError is set to . - /// - /// Note The local functions have greater overhead and provide fewer features than other memory management functions. - /// New applications should use the heap functions unless documentation states that a local function should be used. - /// For more information, see Global and Local Functions. - /// - /// Minimum supported client: Windows XP [desktop apps only] - /// Minimum supported server: Windows Server 2003 [desktop apps only] - [SuppressMessage("Microsoft.Security", "CA5122:PInvokesShouldNotBeSafeCriticalFxCopRule")] - [DllImport("kernel32.dll", SetLastError = false, CharSet = CharSet.Unicode), SuppressUnmanagedCodeSecurity] - internal static extern IntPtr LocalFree(IntPtr hMem); - - #endregion // LocalFree - } -} \ No newline at end of file diff --git a/AlphaFS/Security/Privilege.cs b/AlphaFS/Security/Privilege.cs deleted file mode 100644 index f80273d..0000000 --- a/AlphaFS/Security/Privilege.cs +++ /dev/null @@ -1,494 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System; -using System.ComponentModel; -using System.Diagnostics.CodeAnalysis; -using System.Runtime.InteropServices; -using System.Security; -using System.Text; - -namespace Alphaleonis.Win32.Security -{ - /// Represents a privilege for an access token. The privileges available on the local machine are available as - /// static instances from this class. To create a representing a privilege on another system, - /// use the constructor specifying a system name together with one of these static instances. - /// - /// - [ImmutableObject(true)] - public class Privilege : IEquatable - { - #region System Privileges - - #region AssignPrimaryToken - - /// Required to assign the primary token of a process. User Right: Replace a process-level token. - [SuppressMessage("Microsoft.Security", "CA2104:DoNotDeclareReadOnlyMutableReferenceTypes")] - public static readonly Privilege AssignPrimaryToken = new Privilege("SeAssignPrimaryTokenPrivilege"); - - #endregion // AssignPrimaryToken - - #region Audit - - /// Required to generate audit-log entries. Give this privilege to secure servers. User Right: Generate security audits. - [SuppressMessage("Microsoft.Security", "CA2104:DoNotDeclareReadOnlyMutableReferenceTypes")] - public static readonly Privilege Audit = new Privilege("SeAuditPrivilege"); - - #endregion // Audit - - #region Backup - - /// Required to perform backup operations. This privilege causes the system to grant all read access control to any file, regardless of the access control list (ACL) specified for the file. Any access request other than read is still evaluated with the ACL. User Right: Back up files and directories. - [SuppressMessage("Microsoft.Security", "CA2104:DoNotDeclareReadOnlyMutableReferenceTypes")] - public static readonly Privilege Backup = new Privilege("SeBackupPrivilege"); - - #endregion // Backup - - #region ChangeNotify - - /// Required to receive notifications of changes to files or directories. This privilege also causes the system to skip all traversal access checks. It is enabled by default for all users. User Right: Bypass traverse checking. - [SuppressMessage("Microsoft.Security", "CA2104:DoNotDeclareReadOnlyMutableReferenceTypes")] - public static readonly Privilege ChangeNotify = new Privilege("SeChangeNotifyPrivilege"); - - #endregion // ChangeNotify - - #region CreateGlobal - - /// Required to create named file mapping objects in the global namespace during Terminal Services sessions. This privilege is enabled by default for administrators, services, and the local system account. User Right: Create global objects. - /// Windows XP/2000: This privilege is not supported. Note that this value is supported starting with Windows Server 2003, Windows XP SP2, and Windows 2000 SP4. - [SuppressMessage("Microsoft.Security", "CA2104:DoNotDeclareReadOnlyMutableReferenceTypes")] - public static readonly Privilege CreateGlobal = new Privilege("SeCreateGlobalPrivilege"); - - #endregion // CreateGlobal - - #region CreatePagefile - - /// Required to create a paging file. User Right: Create a pagefile. - [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Pagefile")] - [SuppressMessage("Microsoft.Security", "CA2104:DoNotDeclareReadOnlyMutableReferenceTypes")] - public static readonly Privilege CreatePagefile = new Privilege("SeCreatePagefilePrivilege"); - - #endregion // CreatePagefile - - #region CreatePermanent - - /// Required to create a permanent object. User Right: Create permanent shared objects. - [SuppressMessage("Microsoft.Security", "CA2104:DoNotDeclareReadOnlyMutableReferenceTypes")] - public static readonly Privilege CreatePermanent = new Privilege("SeCreatePermanentPrivilege"); - - #endregion // CreatePermanent - - #region CreateSymbolicLink - - /// Required to create a symbolic link. User Right: Create symbolic links. - [SuppressMessage("Microsoft.Security", "CA2104:DoNotDeclareReadOnlyMutableReferenceTypes")] - public static readonly Privilege CreateSymbolicLink = new Privilege("SeCreateSymbolicLinkPrivilege"); - - #endregion // CreateSymbolicLink - - #region CreateToken - - /// Required to create a primary token. User Right: Create a token object. - [SuppressMessage("Microsoft.Security", "CA2104:DoNotDeclareReadOnlyMutableReferenceTypes")] - public static readonly Privilege CreateToken = new Privilege("SeCreateTokenPrivilege"); - - #endregion // CreateToken - - #region Debug - - /// Required to debug and adjust the memory of a process owned by another account. User Right: Debug programs. - [SuppressMessage("Microsoft.Security", "CA2104:DoNotDeclareReadOnlyMutableReferenceTypes")] - public static readonly Privilege Debug = new Privilege("SeDebugPrivilege"); - - #endregion // Debug - - #region EnableDelegation - - /// Required to mark user and computer accounts as trusted for delegation. User Right: Enable computer and user accounts to be trusted for delegation. - [SuppressMessage("Microsoft.Security", "CA2104:DoNotDeclareReadOnlyMutableReferenceTypes")] - public static readonly Privilege EnableDelegation = new Privilege("SeEnableDelegationPrivilege"); - - #endregion // EnableDelegation - - #region Impersonate - - /// Required to impersonate. User Right: Impersonate a client after authentication. - /// Windows XP/2000: This privilege is not supported. Note that this value is supported starting with Windows Server 2003, Windows XP SP2, and Windows 2000 SP4. - [SuppressMessage("Microsoft.Security", "CA2104:DoNotDeclareReadOnlyMutableReferenceTypes")] - public static readonly Privilege Impersonate = new Privilege("SeImpersonatePrivilege"); - - #endregion // Impersonate - - #region IncreaseBasePriority - - /// Required to increase the base priority of a process. User Right: Increase scheduling priority. - [SuppressMessage("Microsoft.Security", "CA2104:DoNotDeclareReadOnlyMutableReferenceTypes")] - public static readonly Privilege IncreaseBasePriority = new Privilege("SeIncreaseBasePriorityPrivilege"); - - #endregion // IncreaseBasePriority - - #region IncreaseQuota - - /// Required to increase the quota assigned to a process. User Right: Adjust memory quotas for a process. - [SuppressMessage("Microsoft.Security", "CA2104:DoNotDeclareReadOnlyMutableReferenceTypes")] - public static readonly Privilege IncreaseQuota = new Privilege("SeIncreaseQuotaPrivilege"); - - #endregion // IncreaseQuota - - #region IncreaseWorkingSet - - /// Required to allocate more memory for applications that run in the context of users. User Right: Increase a process working set. - [SuppressMessage("Microsoft.Security", "CA2104:DoNotDeclareReadOnlyMutableReferenceTypes")] - public static readonly Privilege IncreaseWorkingSet = new Privilege("SeIncreaseWorkingSetPrivilege"); - - #endregion // IncreaseWorkingSet - - #region LoadDriver - - /// Required to load or unload a device driver. User Right: Load and unload device drivers. - [SuppressMessage("Microsoft.Security", "CA2104:DoNotDeclareReadOnlyMutableReferenceTypes")] - public static readonly Privilege LoadDriver = new Privilege("SeLoadDriverPrivilege"); - - #endregion // LoadDriver - - #region LockMemory - - /// Required to lock physical pages in memory. User Right: Lock pages in memory. - [SuppressMessage("Microsoft.Security", "CA2104:DoNotDeclareReadOnlyMutableReferenceTypes")] - public static readonly Privilege LockMemory = new Privilege("SeLockMemoryPrivilege"); - - #endregion // LockMemory - - #region MachineAccount - - /// Required to create a computer account. User Right: Add workstations to domain. - [SuppressMessage("Microsoft.Security", "CA2104:DoNotDeclareReadOnlyMutableReferenceTypes")] - public static readonly Privilege MachineAccount = new Privilege("SeMachineAccountPrivilege"); - - #endregion // MachineAccount - - #region ManageVolume - - /// Required to enable volume management privileges. User Right: Manage the files on a volume. - [SuppressMessage("Microsoft.Security", "CA2104:DoNotDeclareReadOnlyMutableReferenceTypes")] - public static readonly Privilege ManageVolume = new Privilege("SeManageVolumePrivilege"); - - #endregion // ManageVolume - - #region ProfileSingleProcess - - /// Required to gather profiling information for a single process. User Right: Profile single process. - [SuppressMessage("Microsoft.Security", "CA2104:DoNotDeclareReadOnlyMutableReferenceTypes")] - public static readonly Privilege ProfileSingleProcess = new Privilege("SeProfileSingleProcessPrivilege"); - - #endregion // ProfileSingleProcess - - #region Relabel - - /// Required to modify the mandatory integrity level of an object. User Right: Modify an object label. - [SuppressMessage("Microsoft.Security", "CA2104:DoNotDeclareReadOnlyMutableReferenceTypes")] - [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Relabel")] - public static readonly Privilege Relabel = new Privilege("SeRelabelPrivilege"); - - #endregion // Relabel - - #region RemoteShutdown - - /// Required to shut down a system using a network request. User Right: Force shutdown from a remote system. - [SuppressMessage("Microsoft.Security", "CA2104:DoNotDeclareReadOnlyMutableReferenceTypes")] - public static readonly Privilege RemoteShutdown = new Privilege("SeRemoteShutdownPrivilege"); - - #endregion // RemoteShutdown - - #region Restore - - /// Required to perform restore operations. This privilege causes the system to grant all write access control to any file, regardless of the ACL specified for the file. Any access request other than write is still evaluated with the ACL. Additionally, this privilege enables you to set any valid user or group SID as the owner of a file. User Right: Restore files and directories. - [SuppressMessage("Microsoft.Security", "CA2104:DoNotDeclareReadOnlyMutableReferenceTypes")] - public static readonly Privilege Restore = new Privilege("SeRestorePrivilege"); - - #endregion // Restore - - #region Security - - /// Required to perform a number of security-related functions, such as controlling and viewing audit messages. This privilege identifies its holder as a security operator. User Right: Manage auditing and security log. - [SuppressMessage("Microsoft.Security", "CA2104:DoNotDeclareReadOnlyMutableReferenceTypes")] - public static readonly Privilege Security = new Privilege("SeSecurityPrivilege"); - - #endregion // Security - - #region Shutdown - - /// Required to shut down a local system. User Right: Shut down the system. - [SuppressMessage("Microsoft.Security", "CA2104:DoNotDeclareReadOnlyMutableReferenceTypes")] - public static readonly Privilege Shutdown = new Privilege("SeShutdownPrivilege"); - - #endregion // Shutdown - - #region SyncAgent - - /// Required for a domain controller to use the LDAP directory synchronization services. This privilege enables the holder to read all objects and properties in the directory, regardless of the protection on the objects and properties. By default, it is assigned to the Administrator and LocalSystem accounts on domain controllers. User Right: Synchronize directory service data. - [SuppressMessage("Microsoft.Security", "CA2104:DoNotDeclareReadOnlyMutableReferenceTypes")] - public static readonly Privilege SyncAgent = new Privilege("SeSyncAgentPrivilege"); - - #endregion // SyncAgent - - #region SystemEnvironment - - /// Required to modify the nonvolatile RAM of systems that use this type of memory to store configuration information. User Right: Modify firmware environment values. - [SuppressMessage("Microsoft.Security", "CA2104:DoNotDeclareReadOnlyMutableReferenceTypes")] - public static readonly Privilege SystemEnvironment = new Privilege("SeSystemEnvironmentPrivilege"); - - #endregion // SystemEnvironment - - #region SystemProfile - - /// Required to gather profiling information for the entire system. User Right: Profile system performance. - [SuppressMessage("Microsoft.Security", "CA2104:DoNotDeclareReadOnlyMutableReferenceTypes")] - public static readonly Privilege SystemProfile = new Privilege("SeSystemProfilePrivilege"); - - #endregion // SystemProfile - - #region SystemTime - - /// Required to modify the system time. User Right: Change the system time. - [SuppressMessage("Microsoft.Security", "CA2104:DoNotDeclareReadOnlyMutableReferenceTypes")] - public static readonly Privilege SystemTime = new Privilege("SeSystemtimePrivilege"); - - #endregion // SystemTime - - #region TakeOwnership - - /// Required to take ownership of an object without being granted discretionary access. This privilege allows the owner value to be set only to those values that the holder may legitimately assign as the owner of an object. User Right: Take ownership of files or other objects. - [SuppressMessage("Microsoft.Security", "CA2104:DoNotDeclareReadOnlyMutableReferenceTypes")] - public static readonly Privilege TakeOwnership = new Privilege("SeTakeOwnershipPrivilege"); - - #endregion // TakeOwnership - - #region Tcb - - /// This privilege identifies its holder as part of the trusted computer base. Some trusted protected subsystems are granted this privilege. User Right: Act as part of the operating system. - [SuppressMessage("Microsoft.Security", "CA2104:DoNotDeclareReadOnlyMutableReferenceTypes")] - [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Tcb")] - public static readonly Privilege Tcb = new Privilege("SeTcbPrivilege"); - - #endregion // Tcb - - #region TimeZone - - /// Required to adjust the time zone associated with the computer's internal clock. User Right: Change the time zone. - [SuppressMessage("Microsoft.Security", "CA2104:DoNotDeclareReadOnlyMutableReferenceTypes")] - public static readonly Privilege TimeZone = new Privilege("SeTimeZonePrivilege"); - - #endregion // TimeZone - - #region TrustedCredManAccess - - /// Required to access Credential Manager as a trusted caller. User Right: Access Credential Manager as a trusted caller. - [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Cred")] - [SuppressMessage("Microsoft.Security", "CA2104:DoNotDeclareReadOnlyMutableReferenceTypes")] - public static readonly Privilege TrustedCredManAccess = new Privilege("SeTrustedCredManAccessPrivilege"); - - #endregion // TrustedCredManAccess - - #region Undock - - /// Required to undock a laptop. User Right: Remove computer from docking station. - [SuppressMessage("Microsoft.Security", "CA2104:DoNotDeclareReadOnlyMutableReferenceTypes")] - public static readonly Privilege Undock = new Privilege("SeUndockPrivilege"); - - #endregion // Undock - - #region UnsolicitedInput - - /// Required to read unsolicited input from a terminal device. User Right: Not applicable. - [SuppressMessage("Microsoft.Security", "CA2104:DoNotDeclareReadOnlyMutableReferenceTypes")] - public static readonly Privilege UnsolicitedInput = new Privilege("SeUnsolicitedInputPrivilege"); - - #endregion // UnsolicitedInput - - #endregion // System Privileges - - #region Privilege - - private readonly string _systemName; - - /// Create a new representing the specified privilege on the specified system. - /// Name of the system. - /// The privilege to copy the privilege name from. - public Privilege(string systemName, Privilege privilege) - { - if (Utils.IsNullOrWhiteSpace(systemName)) - throw new ArgumentException(Resources.Privilege_Name_Cannot_Be_Empty, "systemName"); - - _systemName = systemName; - - if (privilege != null) - _name = privilege._name; - } - - #endregion // Privilege - - #region Name - - private readonly string _name; - - /// Gets the system name identifying this privilege. - /// The system name identifying this privilege. - public string Name - { - get { return _name; } - } - - #endregion // Name - - #region LookupDisplayName - - /// Retrieves the display name that represents this privilege. - /// The display name that represents this privilege. - [SecurityCritical] - public string LookupDisplayName() - { - const uint initialCapacity = 10; - uint displayNameCapacity = initialCapacity; - StringBuilder displayName = new StringBuilder((int) displayNameCapacity); - uint languageId; - - if (!NativeMethods.LookupPrivilegeDisplayName(_systemName, _name, ref displayName, ref displayNameCapacity, out languageId)) - { - int lastError = Marshal.GetLastWin32Error(); - if (lastError == Win32Errors.ERROR_INSUFFICIENT_BUFFER) - { - displayName = new StringBuilder((int) displayNameCapacity + 1); - if (!NativeMethods.LookupPrivilegeDisplayName(_systemName, _name, ref displayName, ref displayNameCapacity, out languageId)) - NativeError.ThrowException(Marshal.GetLastWin32Error()); - } - else - NativeError.ThrowException(lastError); - } - return displayName.ToString(); - } - - #endregion // LookupDisplayName - - #region LookupLuid - - /// Retrieves the locally unique identifier (LUID) used on to represent this privilege (on the system from which it originates). - /// the locally unique identifier (LUID) used on to represent this privilege (on the system from which it originates). - [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Luid")] - [SecurityCritical] - public long LookupLuid() - { - Luid luid; - - if (!NativeMethods.LookupPrivilegeValue(_systemName, _name, out luid)) - NativeError.ThrowException(Marshal.GetLastWin32Error()); - - return Filesystem.NativeMethods.LuidToLong(luid); - } - - #endregion // LookupLuid - - #region Equals - - /// Indicates whether the current object is equal to another object of the same type. - /// An object to compare with this object. - /// if the current object is equal to the parameter; otherwise, . - public bool Equals(Privilege other) - { - if (other == null) - return false; - - return _name.Equals(other._name, StringComparison.OrdinalIgnoreCase) && - ((_systemName == null && other._systemName == null) || - (_systemName != null && _systemName.Equals(other._systemName, StringComparison.OrdinalIgnoreCase))); - } - - /// Determines whether the specified is equal to the current . - /// The to compare with the current . - /// if the specified is equal to the current ; otherwise, . - /// - public override bool Equals(object obj) - { - Privilege other = obj as Privilege; - - if (other == null) - return false; - - return _name.Equals(other._name, StringComparison.OrdinalIgnoreCase) && - ((_systemName == null && other._systemName == null) || - (_systemName != null && _systemName.Equals(other._systemName, StringComparison.OrdinalIgnoreCase))); - } - - #endregion // Equals - - #region GetHashCode - - // A random prime number will be picked and added to the HashCode, each time an instance is created. - [NonSerialized] private readonly int _random = new Random().Next(0, 19); - [NonSerialized] private static readonly int[] Primes = { 17, 23, 29, 37, 47, 59, 71, 89, 107, 131, 163, 197, 239, 293, 353, 431, 521, 631, 761, 919 }; - - /// Serves as a hash function for a particular type. - /// A hash code for the current Object. - public override int GetHashCode() - { - unchecked - { - int hash = Primes[_random]; - - if (!Utils.IsNullOrWhiteSpace(_name)) - hash = hash * Primes[1] + _name.GetHashCode(); - - if (!Utils.IsNullOrWhiteSpace(_systemName)) - hash = hash * Primes[1] + _systemName.GetHashCode(); - - return hash; - } - } - - #endregion // GetHashCode - - #region ToString - - /// Returns the system name for this privilege. - /// This is equivalent to . - /// A that represents the current . - public override string ToString() - { - return _name; - } - - #endregion // ToString - - #region Privilege - - /// Initializes a new instance of the class, representing a privilege with the specified name on the local system. - /// The name. - private Privilege(string name) - { - if (Utils.IsNullOrWhiteSpace(name)) - throw new ArgumentException(Resources.Privilege_Name_Cannot_Be_Empty, "name"); - - _name = name; - } - - #endregion // Privilege - }; -} diff --git a/AlphaFS/Security/PrivilegeEnabler.cs b/AlphaFS/Security/PrivilegeEnabler.cs deleted file mode 100644 index 8416e8b..0000000 --- a/AlphaFS/Security/PrivilegeEnabler.cs +++ /dev/null @@ -1,85 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System; -using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; -using System.Linq; - -namespace Alphaleonis.Win32.Security -{ - /// Used to enable one or more privileges. The privileges specified will be enabled during the lifetime of the instance. Users create an instance of this object in a using statement to ensure that it is properly disposed when the elevated privileges are no longer needed. - public sealed class PrivilegeEnabler : IDisposable - { - #region PrivilegeEnabler - - private readonly List _enabledPrivileges = new List(); - - /// Initializes a new instance of the class. - /// This will enable the privileges specified (unless already enabled), and ensure that they are disabled again when - /// the object is disposed. (Any privileges already enabled will not be disabled). - /// - /// The privilege to enable. - /// Additional privileges to enable. - public PrivilegeEnabler(Privilege privilege, params Privilege[] privileges) - { - _enabledPrivileges.Add(new InternalPrivilegeEnabler(privilege)); - - if (privileges != null) - foreach (Privilege priv in privileges) - _enabledPrivileges.Add(new InternalPrivilegeEnabler(priv)); - } - - #endregion // PrivilegeEnabler - - #region Dispose - - /// Makes sure any privileges enabled by this instance are disabled. - [SuppressMessage("Microsoft.Design", "CA1031:DoNotCatchGeneralExceptionTypes")] - public void Dispose() - { - foreach (InternalPrivilegeEnabler t in _enabledPrivileges) - { - try - { - t.Dispose(); - } - catch - { - // We ignore any exceptions here - } - } - } - - #endregion // Dispose - - #region EnabledPrivileges - - /// Gets the enabled privileges. Note that this might not contain all privileges specified to the constructor. Only the privileges actually enabled by this instance is returned. - /// The enabled privileges. - public IEnumerable EnabledPrivileges - { - get { return from priv in _enabledPrivileges where priv.EnabledPrivilege != null select priv.EnabledPrivilege; } - } - - #endregion // EnabledPrivileges - } -} \ No newline at end of file diff --git a/AlphaFS/Security/SecurityAttributes.cs b/AlphaFS/Security/SecurityAttributes.cs deleted file mode 100644 index 42cbd4e..0000000 --- a/AlphaFS/Security/SecurityAttributes.cs +++ /dev/null @@ -1,80 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System; -using System.Diagnostics.CodeAnalysis; -using System.Runtime.InteropServices; -using System.Security.AccessControl; - -namespace Alphaleonis.Win32.Security -{ - internal static partial class NativeMethods - { - /// Class used to represent the SECURITY_ATTRIBUES native Win32 structure. It provides initialization function from an object. - [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)] - internal sealed class SecurityAttributes : IDisposable - { - // Removing this member results in: "Invalid access to memory location: ..." - [MarshalAs(UnmanagedType.U4)] - private int _length; - - private readonly SafeGlobalMemoryBufferHandle _securityDescriptor; - - public SecurityAttributes(ObjectSecurity securityDescriptor) - { - SafeGlobalMemoryBufferHandle safeBuffer = ToUnmanagedSecurityAttributes(securityDescriptor); - _length = safeBuffer.Capacity; - _securityDescriptor = safeBuffer; - } - - /// Marshals an ObjectSecurity instance to unmanaged memory. - /// A safe handle containing the marshalled security descriptor. - /// The security descriptor. - [SuppressMessage("Microsoft.Performance", "CA1822:MarkMembersAsStatic")] - private static SafeGlobalMemoryBufferHandle ToUnmanagedSecurityAttributes(ObjectSecurity securityDescriptor) - { - if (securityDescriptor == null) - return new SafeGlobalMemoryBufferHandle(); - - - byte[] src = securityDescriptor.GetSecurityDescriptorBinaryForm(); - var safeBuffer = new SafeGlobalMemoryBufferHandle(src.Length); - - try - { - safeBuffer.CopyFrom(src, 0, src.Length); - return safeBuffer; - } - catch - { - safeBuffer.Close(); - throw; - } - } - - public void Dispose() - { - if (_securityDescriptor != null) - _securityDescriptor.Close(); - } - } - } -} diff --git a/AlphaFS/Security/Structures/Luid.cs b/AlphaFS/Security/Structures/Luid.cs deleted file mode 100644 index 7ed91f9..0000000 --- a/AlphaFS/Security/Structures/Luid.cs +++ /dev/null @@ -1,32 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System.Runtime.InteropServices; - -namespace Alphaleonis.Win32.Security -{ - [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)] - internal struct Luid - { - internal uint LowPart; - internal uint HighPart; - } -} diff --git a/AlphaFS/Security/Structures/TokenPrivileges.cs b/AlphaFS/Security/Structures/TokenPrivileges.cs deleted file mode 100644 index a8e690a..0000000 --- a/AlphaFS/Security/Structures/TokenPrivileges.cs +++ /dev/null @@ -1,33 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System.Runtime.InteropServices; - -namespace Alphaleonis.Win32.Security -{ - [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)] - internal struct TokenPrivileges - { - internal uint PrivilegeCount; - internal Luid Luid; - internal uint Attributes; - } -} diff --git a/AlphaFS/Utils.cs b/AlphaFS/Utils.cs deleted file mode 100644 index 7406576..0000000 --- a/AlphaFS/Utils.cs +++ /dev/null @@ -1,131 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Diagnostics.CodeAnalysis; -using System.Globalization; -using System.Linq; -using System.Reflection; - -namespace Alphaleonis -{ - internal static class Utils - { - #region EnumMemberToList - - public static IEnumerable EnumMemberToList() - { - Type enumType = typeof(T); - - // Can't use generic type constraints on value types, so have to do check like this. - if (enumType.BaseType != typeof(Enum)) - throw new ArgumentException("T must be of type System.Enum"); - - //Array enumValArray = Enum.GetValues(enumType); - //List enumValList = new List(enumValArray.Length); - IOrderedEnumerable enumValArray = Enum.GetValues(enumType).Cast().OrderBy(e => e.ToString()); - var enumValList = new List(enumValArray.Count()); - - enumValList.AddRange(enumValArray.Select(val => (T)Enum.Parse(enumType, val.ToString()))); - return enumValList; - } - - #endregion // EnumMemberToList - - #region GetEnumDescription - - /// Gets an attribute on an enum field value. - /// The description belonging to the enum option, as a string - /// One of the enum types. - [SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - public static string GetEnumDescription(Enum enumValue) - { - FieldInfo fi = enumValue.GetType().GetField(enumValue.ToString()); - var attributes = (DescriptionAttribute[])fi.GetCustomAttributes(typeof(DescriptionAttribute), false); - return attributes.Length > 0 ? attributes[0].Description : enumValue.ToString(); - } - - #endregion // GetEnumDescription - - #region IsNullOrWhiteSpace - - /// Indicates whether a specified string is null, empty, or consists only of white-space characters. - /// if the parameter is null or , or if consists exclusively of white-space characters. - /// The string to test. - public static bool IsNullOrWhiteSpace(string value) - { -#if NET35 - if (value != null) - { - for (int index = 0; index < value.Length; ++index) - { - if (!char.IsWhiteSpace(value[index])) - return false; - } - } - - return true; -#else - return string.IsNullOrWhiteSpace(value); -#endif - } - - #endregion // IsNullOrWhiteSpace - - #region UnitSizeToText - - /// Converts a number of type T to string, suffixed with a unit size. - public static string UnitSizeToText(T numberOfBytes) - { - string[] sizeFormats = - { - "B", "KB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB" - }; - - - var i = 0; - var bytes = Convert.ToDouble(numberOfBytes, CultureInfo.InvariantCulture); - - while (i < sizeFormats.Length && bytes > 1024) - { - i++; - bytes /= 1024; - } - - - // Will return "512 B" instead of "512,00 B". - return string.Format(CultureInfo.CurrentCulture, i == 0 ? "{0:0} {1}" : "{0:0.##} {1}", bytes, sizeFormats[i]); - } - - /// Calculates a percentage value. - /// - /// - /// - public static double PercentCalculate(double currentValue, double minimumValue, double maximumValue) - { - return (currentValue < 0 || maximumValue <= 0) ? 0 : currentValue * 100 / (maximumValue - minimumValue); - } - - #endregion // UnitSizeToText - } -} diff --git a/AlphaFS/Win32Errors.cs b/AlphaFS/Win32Errors.cs deleted file mode 100644 index ef0d89e..0000000 --- a/AlphaFS/Win32Errors.cs +++ /dev/null @@ -1,4262 +0,0 @@ -/* Copyright (C) 2008-2016 Peter Palotas, Jeffrey Jangli, Alexandr Normuradov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -namespace Alphaleonis.Win32 -{ - internal static class Win32Errors - { - /// Use this to translate error codes into HRESULTs like 0x80070006 for ERROR_INVALID_HANDLE. - public static int GetHrFromWin32Error(uint errorCode) - { - return (int) unchecked(((int) 0x80070000) | errorCode); - } - - // System Error Codes - // http://msdn.microsoft.com/en-us/library/windows/desktop/ms681381%28v=vs.85%29.aspx - - public const uint ERROR_INVALID_FILE_SIZE = 0xFFFFFFFF; - - /// (0) The operation completed successfully. - public const uint ERROR_SUCCESS = 0; - - /// (0) The operation completed successfully. - public const uint NO_ERROR = 0; - - /// (1) Incorrect function. - public const uint ERROR_INVALID_FUNCTION = 1; - - /// (2) The system cannot find the file specified. - public const uint ERROR_FILE_NOT_FOUND = 2; - - /// (3) The system cannot find the path specified. - public const uint ERROR_PATH_NOT_FOUND = 3; - //public const uint ERROR_TOO_MANY_OPEN_FILES = 4; - - /// (5) Access is denied. - public const uint ERROR_ACCESS_DENIED = 5; - - //public const uint ERROR_INVALID_HANDLE = 6; - //public const uint ERROR_ARENA_TRASHED = 7; - //public const uint ERROR_NOT_ENOUGH_MEMORY = 8; - //public const uint ERROR_INVALID_BLOCK = 9; - //public const uint ERROR_BAD_ENVIRONMENT = 10; - //public const uint ERROR_BAD_FORMAT = 11; - //public const uint ERROR_INVALID_ACCESS = 12; - //public const uint ERROR_INVALID_DATA = 13; - //public const uint ERROR_OUTOFMEMORY = 14; - - /// (15) The system cannot find the drive specified. - public const uint ERROR_INVALID_DRIVE = 15; - - //public const uint ERROR_CURRENT_DIRECTORY = 16; - - /// (17) The system cannot move the file to a different disk drive. - public const uint ERROR_NOT_SAME_DEVICE = 17; - - /// (18) There are no more files. - public const uint ERROR_NO_MORE_FILES = 18; - //public const uint ERROR_WRITE_PROTECT = 19; - //public const uint ERROR_BAD_UNIT = 20; - - /// (21) The device is not ready. - public const uint ERROR_NOT_READY = 21; - - //public const uint ERROR_BAD_COMMAND = 22; - //public const uint ERROR_CRC = 23; - //public const uint ERROR_BAD_LENGTH = 24; - - /// (25) The drive cannot locate a specific area or track on the disk. - public const uint ERROR_SEEK = 25; - - //public const uint ERROR_NOT_DOS_DISK = 26; - //public const uint ERROR_SECTOR_NOT_FOUND = 27; - //public const uint ERROR_OUT_OF_PAPER = 28; - //public const uint ERROR_WRITE_FAULT = 29; - //public const uint ERROR_READ_FAULT = 30; - //public const uint ERROR_GEN_FAILURE = 31; - - /// (32) The process cannot access the file because it is being used by another process. - public const uint ERROR_SHARING_VIOLATION = 32; - - /// (33) The process cannot access the file because another process has locked a portion of the file. - public const uint ERROR_LOCK_VIOLATION = 33; - - //public const uint ERROR_WRONG_DISK = 34; - //public const uint ERROR_SHARING_BUFFER_EXCEEDED = 36; - - /// (38) Reached the end of the file. - public const uint ERROR_HANDLE_EOF = 38; - - //public const uint ERROR_HANDLE_DISK_FULL = 39; - //public const uint ERROR_NOT_SUPPORTED = 50; - //public const uint ERROR_REM_NOT_LIST = 51; - //public const uint ERROR_DUP_NAME = 52; - - /// (53) The network path was not found. - public const uint ERROR_BAD_NETPATH = 53; - - //public const uint ERROR_NETWORK_BUSY = 54; - //public const uint ERROR_DEV_NOT_EXIST = 55; - //public const uint ERROR_TOO_MANY_CMDS = 56; - //public const uint ERROR_ADAP_HDW_ERR = 57; - //public const uint ERROR_BAD_NET_RESP = 58; - //public const uint ERROR_UNEXP_NET_ERR = 59; - //public const uint ERROR_BAD_REM_ADAP = 60; - //public const uint ERROR_PRINTQ_FULL = 61; - //public const uint ERROR_NO_SPOOL_SPACE = 62; - //public const uint ERROR_PRINT_CANCELLED = 63; - //public const uint ERROR_NETNAME_DELETED = 64; - - /// (65) Network access is denied. - public const uint ERROR_NETWORK_ACCESS_DENIED = 65; - - //public const uint ERROR_BAD_DEV_TYPE = 66; - - /// (67) The network name cannot be found. - public const uint ERROR_BAD_NET_NAME = 67; - - //public const uint ERROR_TOO_MANY_NAMES = 68; - //public const uint ERROR_TOO_MANY_SESS = 69; - //public const uint ERROR_SHARING_PAUSED = 70; - //public const uint ERROR_REQ_NOT_ACCEP = 71; - //public const uint ERROR_REDIR_PAUSED = 72; - - /// (80) The file exists. - public const uint ERROR_FILE_EXISTS = 80; - - //public const uint ERROR_CANNOT_MAKE = 82; - //public const uint ERROR_FAIL_I24 = 83; - //public const uint ERROR_OUT_OF_STRUCTURES = 84; - //public const uint ERROR_ALREADY_ASSIGNED = 85; - //public const uint ERROR_INVALID_PASSWORD = 86; - - /// (87) The parameter is incorrect. - public const uint ERROR_INVALID_PARAMETER = 87; - - //public const uint ERROR_NET_WRITE_FAULT = 88; - //public const uint ERROR_NO_PROC_SLOTS = 89; - //public const uint ERROR_TOO_MANY_SEMAPHORES = 100; - //public const uint ERROR_EXCL_SEM_ALREADY_OWNED = 101; - //public const uint ERROR_SEM_IS_SET = 102; - //public const uint ERROR_TOO_MANY_SEM_REQUESTS = 103; - //public const uint ERROR_INVALID_AT_INTERRUPT_TIME = 104; - //public const uint ERROR_SEM_OWNER_DIED = 105; - //public const uint ERROR_SEM_USER_LIMIT = 106; - //public const uint ERROR_DISK_CHANGE = 107; - //public const uint ERROR_DRIVE_LOCKED = 108; - //public const uint ERROR_BROKEN_PIPE = 109; - //public const uint ERROR_OPEN_FAILED = 110; - //public const uint ERROR_BUFFER_OVERFLOW = 111; - //public const uint ERROR_DISK_FULL = 112; - //public const uint ERROR_NO_MORE_SEARCH_HANDLES = 113; - //public const uint ERROR_INVALID_TARGET_HANDLE = 114; - //public const uint ERROR_INVALID_CATEGORY = 117; - //public const uint ERROR_INVALID_VERIFY_SWITCH = 118; - //public const uint ERROR_BAD_DRIVER_LEVEL = 119; - //public const uint ERROR_CALL_NOT_IMPLEMENTED = 120; - //public const uint ERROR_SEM_TIMEOUT = 121; - - /// (122) The data area passed to a system call is too small. - public const uint ERROR_INSUFFICIENT_BUFFER = 122; - - /// (123) The filename, directory name, or volume label syntax is incorrect. - public const uint ERROR_INVALID_NAME = 123; - - //public const uint ERROR_INVALID_LEVEL = 124; - //public const uint ERROR_NO_VOLUME_LABEL = 125; - //public const uint ERROR_INVALID_FILE_ATTRIBUTES = 0xFFFFFFFF; - //public const uint ERROR_MOD_NOT_FOUND = 126; - //public const uint ERROR_PROC_NOT_FOUND = 127; - //public const uint ERROR_WAIT_NO_CHILDREN = 128; - //public const uint ERROR_CHILD_NOT_COMPLETE = 129; - //public const uint ERROR_DIRECT_ACCESS_HANDLE = 130; - //public const uint ERROR_NEGATIVE_SEEK = 131; - //public const uint ERROR_SEEK_ON_DEVICE = 132; - //public const uint ERROR_IS_JOIN_TARGET = 133; - //public const uint ERROR_IS_JOINED = 134; - //public const uint ERROR_IS_SUBSTED = 135; - //public const uint ERROR_NOT_JOINED = 136; - //public const uint ERROR_NOT_SUBSTED = 137; - //public const uint ERROR_JOIN_TO_JOIN = 138; - //public const uint ERROR_SUBST_TO_SUBST = 139; - //public const uint ERROR_JOIN_TO_SUBST = 140; - //public const uint ERROR_SUBST_TO_JOIN = 141; - //public const uint ERROR_BUSY_DRIVE = 142; - - /// (143) The system cannot join or substitute a drive to or for a directory on the same drive. - public const uint ERROR_SAME_DRIVE = 143; - - //public const uint ERROR_DIR_NOT_ROOT = 144; - - /// (145) The directory is not empty. - public const uint ERROR_DIR_NOT_EMPTY = 145; - - //public const uint ERROR_IS_SUBST_PATH = 146; - //public const uint ERROR_IS_JOIN_PATH = 147; - //public const uint ERROR_PATH_BUSY = 148; - //public const uint ERROR_IS_SUBST_TARGET = 149; - //public const uint ERROR_SYSTEM_TRACE = 150; - //public const uint ERROR_INVALID_EVENT_COUNT = 151; - //public const uint ERROR_TOO_MANY_MUXWAITERS = 152; - //public const uint ERROR_INVALID_LIST_FORMAT = 153; - //public const uint ERROR_LABEL_TOO_LONG = 154; - //public const uint ERROR_TOO_MANY_TCBS = 155; - //public const uint ERROR_SIGNAL_REFUSED = 156; - //public const uint ERROR_DISCARDED = 157; - - /// (158) The segment is already unlocked. - public const uint ERROR_NOT_LOCKED = 158; - - //public const uint ERROR_BAD_THREADID_ADDR = 159; - //public const uint ERROR_BAD_ARGUMENTS = 160; - //public const uint ERROR_BAD_PATHNAME = 161; - //public const uint ERROR_SIGNAL_PENDING = 162; - //public const uint ERROR_MAX_THRDS_REACHED = 164; - //public const uint ERROR_LOCK_FAILED = 167; - //public const uint ERROR_BUSY = 170; - //public const uint ERROR_CANCEL_VIOLATION = 173; - //public const uint ERROR_ATOMIC_LOCKS_NOT_SUPPORTED = 174; - //public const uint ERROR_INVALID_SEGMENT_NUMBER = 180; - //public const uint ERROR_INVALID_ORDINAL = 182; - - /// (183) Cannot create a file when that file already exists. - public const uint ERROR_ALREADY_EXISTS = 183; - - //public const uint ERROR_INVALID_FLAG_NUMBER = 186; - //public const uint ERROR_SEM_NOT_FOUND = 187; - //public const uint ERROR_INVALID_STARTING_CODESEG = 188; - //public const uint ERROR_INVALID_STACKSEG = 189; - //public const uint ERROR_INVALID_MODULETYPE = 190; - //public const uint ERROR_INVALID_EXE_SIGNATURE = 191; - //public const uint ERROR_EXE_MARKED_INVALID = 192; - //public const uint ERROR_BAD_EXE_FORMAT = 193; - //public const uint ERROR_ITERATED_DATA_EXCEEDS_64k = 194; - //public const uint ERROR_INVALID_MINALLOCSIZE = 195; - //public const uint ERROR_DYNLINK_FROM_INVALID_RING = 196; - //public const uint ERROR_IOPL_NOT_ENABLED = 197; - //public const uint ERROR_INVALID_SEGDPL = 198; - //public const uint ERROR_AUTODATASEG_EXCEEDS_64k = 199; - //public const uint ERROR_RING2SEG_MUST_BE_MOVABLE = 200; - //public const uint ERROR_RELOC_CHAIN_XEEDS_SEGLIM = 201; - //public const uint ERROR_INFLOOP_IN_RELOC_CHAIN = 202; - - /// (203) The system could not find the environment option that was entered. - public const uint ERROR_ENVVAR_NOT_FOUND = 203; - - //public const uint ERROR_NO_SIGNAL_SENT = 205; - //public const uint ERROR_FILENAME_EXCED_RANGE = 206; - //public const uint ERROR_RING2_STACK_IN_USE = 207; - //public const uint ERROR_META_EXPANSION_TOO_LONG = 208; - //public const uint ERROR_INVALID_SIGNAL_NUMBER = 209; - //public const uint ERROR_THREAD_1_INACTIVE = 210; - //public const uint ERROR_LOCKED = 212; - //public const uint ERROR_TOO_MANY_MODULES = 214; - //public const uint ERROR_NESTING_NOT_ALLOWED = 215; - //public const uint ERROR_EXE_MACHINE_TYPE_MISMATCH = 216; - //public const uint ERROR_EXE_CANNOT_MODIFY_SIGNED_BINARY = 217; - //public const uint ERROR_EXE_CANNOT_MODIFY_STRONG_SIGNED_BINARY = 218; - //public const uint ERROR_BAD_PIPE = 230; - //public const uint ERROR_PIPE_BUSY = 231; - //public const uint ERROR_NO_DATA = 232; - //public const uint ERROR_PIPE_NOT_CONNECTED = 233; - - /// (234) More data is available. - public const uint ERROR_MORE_DATA = 234; - - //public const uint ERROR_VC_DISCONNECTED = 240; - //public const uint ERROR_INVALID_EA_NAME = 254; - //public const uint ERROR_EA_LIST_INCONSISTENT = 255; - //public const uint WAIT_TIMEOUT = 258; - - ///// (259) No more data is available. - //public const uint ERROR_NO_MORE_ITEMS = 259; - - //public const uint ERROR_CANNOT_COPY = 266; - - /// (267) The directory name is invalid. - public const uint ERROR_DIRECTORY = 267; - - //public const uint ERROR_EAS_DIDNT_FIT = 275; - //public const uint ERROR_EA_FILE_CORRUPT = 276; - //public const uint ERROR_EA_TABLE_FULL = 277; - //public const uint ERROR_INVALID_EA_HANDLE = 278; - //public const uint ERROR_EAS_NOT_SUPPORTED = 282; - //public const uint ERROR_NOT_OWNER = 288; - //public const uint ERROR_TOO_MANY_POSTS = 298; - //public const uint ERROR_PARTIAL_COPY = 299; - //public const uint ERROR_OPLOCK_NOT_GRANTED = 300; - //public const uint ERROR_INVALID_OPLOCK_PROTOCOL = 301; - //public const uint ERROR_DISK_TOO_FRAGMENTED = 302; - //public const uint ERROR_DELETE_PENDING = 303; - //public const uint ERROR_MR_MID_NOT_FOUND = 317; - //public const uint ERROR_SCOPE_NOT_FOUND = 318; - //public const uint ERROR_INVALID_ADDRESS = 487; - //public const uint ERROR_ARITHMETIC_OVERFLOW = 534; - //public const uint ERROR_PIPE_CONNECTED = 535; - //public const uint ERROR_PIPE_LISTENING = 536; - //public const uint ERROR_EA_ACCESS_DENIED = 994; - - /// (995) The I/O operation has been aborted because of either a thread exit or an application request. - public const uint ERROR_OPERATION_ABORTED = 995; - - //public const uint ERROR_IO_INCOMPLETE = 996; - - /// (997) Overlapped I/O operation is in progress. - public const uint ERROR_IO_PENDING = 997; - - //public const uint ERROR_NOACCESS = 998; - //public const uint ERROR_SWAPERROR = 999; - //public const uint ERROR_STACK_OVERFLOW = 1001; - //public const uint ERROR_INVALID_MESSAGE = 1002; - //public const uint ERROR_CAN_NOT_COMPLETE = 1003; - //public const uint ERROR_INVALID_FLAGS = 1004; - //public const uint ERROR_UNRECOGNIZED_VOLUME = 1005; - //public const uint ERROR_FILE_INVALID = 1006; - //public const uint ERROR_FULLSCREEN_MODE = 1007; - //public const uint ERROR_NO_TOKEN = 1008; - //public const uint ERROR_BADDB = 1009; - //public const uint ERROR_BADKEY = 1010; - //public const uint ERROR_CANTOPEN = 1011; - //public const uint ERROR_CANTREAD = 1012; - //public const uint ERROR_CANTWRITE = 1013; - //public const uint ERROR_REGISTRY_RECOVERED = 1014; - //public const uint ERROR_REGISTRY_CORRUPT = 1015; - //public const uint ERROR_REGISTRY_IO_FAILED = 1016; - //public const uint ERROR_NOT_REGISTRY_FILE = 1017; - //public const uint ERROR_KEY_DELETED = 1018; - //public const uint ERROR_NO_LOG_SPACE = 1019; - //public const uint ERROR_KEY_HAS_CHILDREN = 1020; - //public const uint ERROR_CHILD_MUST_BE_VOLATILE = 1021; - //public const uint ERROR_NOTIFY_ENUM_DIR = 1022; - //public const uint ERROR_DEPENDENT_SERVICES_RUNNING = 1051; - //public const uint ERROR_INVALID_SERVICE_CONTROL = 1052; - //public const uint ERROR_SERVICE_REQUEST_TIMEOUT = 1053; - //public const uint ERROR_SERVICE_NO_THREAD = 1054; - //public const uint ERROR_SERVICE_DATABASE_LOCKED = 1055; - //public const uint ERROR_SERVICE_ALREADY_RUNNING = 1056; - //public const uint ERROR_INVALID_SERVICE_ACCOUNT = 1057; - //public const uint ERROR_SERVICE_DISABLED = 1058; - //public const uint ERROR_CIRCULAR_DEPENDENCY = 1059; - //public const uint ERROR_SERVICE_DOES_NOT_EXIST = 1060; - //public const uint ERROR_SERVICE_CANNOT_ACCEPT_CTRL = 1061; - //public const uint ERROR_SERVICE_NOT_ACTIVE = 1062; - //public const uint ERROR_FAILED_SERVICE_CONTROLLER_CONNECT = 1063; - //public const uint ERROR_EXCEPTION_IN_SERVICE = 1064; - //public const uint ERROR_DATABASE_DOES_NOT_EXIST = 1065; - //public const uint ERROR_SERVICE_SPECIFIC_ERROR = 1066; - //public const uint ERROR_PROCESS_ABORTED = 1067; - //public const uint ERROR_SERVICE_DEPENDENCY_FAIL = 1068; - //public const uint ERROR_SERVICE_LOGON_FAILED = 1069; - //public const uint ERROR_SERVICE_START_HANG = 1070; - //public const uint ERROR_INVALID_SERVICE_LOCK = 1071; - //public const uint ERROR_SERVICE_MARKED_FOR_DELETE = 1072; - //public const uint ERROR_SERVICE_EXISTS = 1073; - //public const uint ERROR_ALREADY_RUNNING_LKG = 1074; - //public const uint ERROR_SERVICE_DEPENDENCY_DELETED = 1075; - //public const uint ERROR_BOOT_ALREADY_ACCEPTED = 1076; - //public const uint ERROR_SERVICE_NEVER_STARTED = 1077; - //public const uint ERROR_DUPLICATE_SERVICE_NAME = 1078; - //public const uint ERROR_DIFFERENT_SERVICE_ACCOUNT = 1079; - //public const uint ERROR_CANNOT_DETECT_DRIVER_FAILURE = 1080; - //public const uint ERROR_CANNOT_DETECT_PROCESS_ABORT = 1081; - //public const uint ERROR_NO_RECOVERY_PROGRAM = 1082; - //public const uint ERROR_SERVICE_NOT_IN_EXE = 1083; - //public const uint ERROR_NOT_SAFEBOOT_SERVICE = 1084; - //public const uint ERROR_END_OF_MEDIA = 1100; - //public const uint ERROR_FILEMARK_DETECTED = 1101; - //public const uint ERROR_BEGINNING_OF_MEDIA = 1102; - //public const uint ERROR_SETMARK_DETECTED = 1103; - //public const uint ERROR_NO_DATA_DETECTED = 1104; - //public const uint ERROR_PARTITION_FAILURE = 1105; - //public const uint ERROR_INVALID_BLOCK_LENGTH = 1106; - //public const uint ERROR_DEVICE_NOT_PARTITIONED = 1107; - //public const uint ERROR_UNABLE_TO_LOCK_MEDIA = 1108; - //public const uint ERROR_UNABLE_TO_UNLOAD_MEDIA = 1109; - //public const uint ERROR_MEDIA_CHANGED = 1110; - //public const uint ERROR_BUS_RESET = 1111; - //public const uint ERROR_NO_MEDIA_IN_DRIVE = 1112; - //public const uint ERROR_NO_UNICODE_TRANSLATION = 1113; - //public const uint ERROR_DLL_INIT_FAILED = 1114; - //public const uint ERROR_SHUTDOWN_IN_PROGRESS = 1115; - //public const uint ERROR_NO_SHUTDOWN_IN_PROGRESS = 1116; - //public const uint ERROR_IO_DEVICE = 1117; - //public const uint ERROR_SERIAL_NO_DEVICE = 1118; - //public const uint ERROR_IRQ_BUSY = 1119; - //public const uint ERROR_MORE_WRITES = 1120; - //public const uint ERROR_COUNTER_TIMEOUT = 1121; - //public const uint ERROR_FLOPPY_ID_MARK_NOT_FOUND = 1122; - //public const uint ERROR_FLOPPY_WRONG_CYLINDER = 1123; - //public const uint ERROR_FLOPPY_UNKNOWN_ERROR = 1124; - //public const uint ERROR_FLOPPY_BAD_REGISTERS = 1125; - //public const uint ERROR_DISK_RECALIBRATE_FAILED = 1126; - //public const uint ERROR_DISK_OPERATION_FAILED = 1127; - //public const uint ERROR_DISK_RESET_FAILED = 1128; - //public const uint ERROR_EOM_OVERFLOW = 1129; - //public const uint ERROR_NOT_ENOUGH_SERVER_MEMORY = 1130; - //public const uint ERROR_POSSIBLE_DEADLOCK = 1131; - //public const uint ERROR_MAPPED_ALIGNMENT = 1132; - //public const uint ERROR_SET_POWER_STATE_VETOED = 1140; - //public const uint ERROR_SET_POWER_STATE_FAILED = 1141; - //public const uint ERROR_TOO_MANY_LINKS = 1142; - //public const uint ERROR_OLD_WIN_VERSION = 1150; - //public const uint ERROR_APP_WRONG_OS = 1151; - //public const uint ERROR_SINGLE_INSTANCE_APP = 1152; - //public const uint ERROR_RMODE_APP = 1153; - //public const uint ERROR_INVALID_DLL = 1154; - //public const uint ERROR_NO_ASSOCIATION = 1155; - //public const uint ERROR_DDE_FAIL = 1156; - //public const uint ERROR_DLL_NOT_FOUND = 1157; - //public const uint ERROR_NO_MORE_USER_HANDLES = 1158; - //public const uint ERROR_MESSAGE_SYNC_ONLY = 1159; - //public const uint ERROR_SOURCE_ELEMENT_EMPTY = 1160; - //public const uint ERROR_DESTINATION_ELEMENT_FULL = 1161; - //public const uint ERROR_ILLEGAL_ELEMENT_ADDRESS = 1162; - //public const uint ERROR_MAGAZINE_NOT_PRESENT = 1163; - //public const uint ERROR_DEVICE_REINITIALIZATION_NEEDED = 1164; - //public const uint ERROR_DEVICE_REQUIRES_CLEANING = 1165; - //public const uint ERROR_DEVICE_DOOR_OPEN = 1166; - //public const uint ERROR_DEVICE_NOT_CONNECTED = 1167; - //public const uint ERROR_NOT_FOUND = 1168; - //public const uint ERROR_NO_MATCH = 1169; - //public const uint ERROR_SET_NOT_FOUND = 1170; - //public const uint ERROR_POINT_NOT_FOUND = 1171; - //public const uint ERROR_NO_TRACKING_SERVICE = 1172; - //public const uint ERROR_NO_VOLUME_ID = 1173; - //public const uint ERROR_UNABLE_TO_REMOVE_REPLACED = 1175; - //public const uint ERROR_UNABLE_TO_MOVE_REPLACEMENT = 1176; - //public const uint ERROR_UNABLE_TO_MOVE_REPLACEMENT_2 = 1177; - //public const uint ERROR_JOURNAL_DELETE_IN_PROGRESS = 1178; - //public const uint ERROR_JOURNAL_NOT_ACTIVE = 1179; - //public const uint ERROR_POTENTIAL_FILE_FOUND = 1180; - //public const uint ERROR_JOURNAL_ENTRY_DELETED = 1181; - - /// (1200) The specified device name is invalid. - public const uint ERROR_BAD_DEVICE = 1200; - - //public const uint ERROR_CONNECTION_UNAVAIL = 1201; - //public const uint ERROR_DEVICE_ALREADY_REMEMBERED = 1202; - //public const uint ERROR_NO_NET_OR_BAD_PATH = 1203; - //public const uint ERROR_BAD_PROVIDER = 1204; - //public const uint ERROR_CANNOT_OPEN_PROFILE = 1205; - //public const uint ERROR_BAD_PROFILE = 1206; - //public const uint ERROR_NOT_CONTAINER = 1207; - - /// (1208) An extended error has occurred. - public const uint ERROR_EXTENDED_ERROR = 1208; - - //public const uint ERROR_INVALID_GROUPNAME = 1209; - //public const uint ERROR_INVALID_COMPUTERNAME = 1210; - //public const uint ERROR_INVALID_EVENTNAME = 1211; - //public const uint ERROR_INVALID_DOMAINNAME = 1212; - //public const uint ERROR_INVALID_SERVICENAME = 1213; - //public const uint ERROR_INVALID_NETNAME = 1214; - //public const uint ERROR_INVALID_SHARENAME = 1215; - //public const uint ERROR_INVALID_PASSWORDNAME = 1216; - //public const uint ERROR_INVALID_MESSAGENAME = 1217; - //public const uint ERROR_INVALID_MESSAGEDEST = 1218; - //public const uint ERROR_SESSION_CREDENTIAL_CONFLICT = 1219; - //public const uint ERROR_REMOTE_SESSION_LIMIT_EXCEEDED = 1220; - //public const uint ERROR_DUP_DOMAINNAME = 1221; - - /// (1222) The network is not present or not started. - public const uint ERROR_NO_NETWORK = 1222; - - //public const uint ERROR_CANCELLED = 1223; - //public const uint ERROR_USER_MAPPED_FILE = 1224; - //public const uint ERROR_CONNECTION_REFUSED = 1225; - //public const uint ERROR_GRACEFUL_DISCONNECT = 1226; - //public const uint ERROR_ADDRESS_ALREADY_ASSOCIATED = 1227; - //public const uint ERROR_ADDRESS_NOT_ASSOCIATED = 1228; - //public const uint ERROR_CONNECTION_INVALID = 1229; - //public const uint ERROR_CONNECTION_ACTIVE = 1230; - //public const uint ERROR_NETWORK_UNREACHABLE = 1231; - //public const uint ERROR_HOST_UNREACHABLE = 1232; - //public const uint ERROR_PROTOCOL_UNREACHABLE = 1233; - //public const uint ERROR_PORT_UNREACHABLE = 1234; - - /// (1235) The request was aborted. - public const uint ERROR_REQUEST_ABORTED = 1235; - - //public const uint ERROR_CONNECTION_ABORTED = 1236; - //public const uint ERROR_RETRY = 1237; - //public const uint ERROR_CONNECTION_COUNT_LIMIT = 1238; - //public const uint ERROR_LOGIN_TIME_RESTRICTION = 1239; - //public const uint ERROR_LOGIN_WKSTA_RESTRICTION = 1240; - //public const uint ERROR_INCORRECT_ADDRESS = 1241; - //public const uint ERROR_ALREADY_REGISTERED = 1242; - //public const uint ERROR_SERVICE_NOT_FOUND = 1243; - //public const uint ERROR_NOT_AUTHENTICATED = 1244; - //public const uint ERROR_NOT_LOGGED_ON = 1245; - //public const uint ERROR_CONTINUE = 1246; - //public const uint ERROR_ALREADY_INITIALIZED = 1247; - //public const uint ERROR_NO_MORE_DEVICES = 1248; - //public const uint ERROR_NO_SUCH_SITE = 1249; - //public const uint ERROR_DOMAIN_CONTROLLER_EXISTS = 1250; - //public const uint ERROR_ONLY_IF_CONNECTED = 1251; - //public const uint ERROR_OVERRIDE_NOCHANGES = 1252; - //public const uint ERROR_BAD_USER_PROFILE = 1253; - //public const uint ERROR_NOT_SUPPORTED_ON_SBS = 1254; - //public const uint ERROR_SERVER_SHUTDOWN_IN_PROGRESS = 1255; - //public const uint ERROR_HOST_DOWN = 1256; - //public const uint ERROR_NON_ACCOUNT_SID = 1257; - //public const uint ERROR_NON_DOMAIN_SID = 1258; - //public const uint ERROR_APPHELP_BLOCK = 1259; - //public const uint ERROR_ACCESS_DISABLED_BY_POLICY = 1260; - //public const uint ERROR_REG_NAT_CONSUMPTION = 1261; - //public const uint ERROR_CSCSHARE_OFFLINE = 1262; - //public const uint ERROR_PKINIT_FAILURE = 1263; - //public const uint ERROR_SMARTCARD_SUBSYSTEM_FAILURE = 1264; - //public const uint ERROR_DOWNGRADE_DETECTED = 1265; - //public const uint ERROR_MACHINE_LOCKED = 1271; - //public const uint ERROR_CALLBACK_SUPPLIED_INVALID_DATA = 1273; - //public const uint ERROR_SYNC_FOREGROUND_REFRESH_REQUIRED = 1274; - //public const uint ERROR_DRIVER_BLOCKED = 1275; - //public const uint ERROR_INVALID_IMPORT_OF_NON_DLL = 1276; - //public const uint ERROR_ACCESS_DISABLED_WEBBLADE = 1277; - //public const uint ERROR_ACCESS_DISABLED_WEBBLADE_TAMPER = 1278; - //public const uint ERROR_RECOVERY_FAILURE = 1279; - //public const uint ERROR_ALREADY_FIBER = 1280; - //public const uint ERROR_ALREADY_THREAD = 1281; - //public const uint ERROR_STACK_BUFFER_OVERRUN = 1282; - //public const uint ERROR_PARAMETER_QUOTA_EXCEEDED = 1283; - //public const uint ERROR_DEBUGGER_INACTIVE = 1284; - //public const uint ERROR_DELAY_LOAD_FAILED = 1285; - //public const uint ERROR_VDM_DISALLOWED = 1286; - //public const uint ERROR_UNIDENTIFIED_ERROR = 1287; - //public const uint ERROR_NOT_ALL_ASSIGNED = 1300; - //public const uint ERROR_SOME_NOT_MAPPED = 1301; - //public const uint ERROR_NO_QUOTAS_FOR_ACCOUNT = 1302; - //public const uint ERROR_LOCAL_USER_SESSION_KEY = 1303; - //public const uint ERROR_NULL_LM_PASSWORD = 1304; - //public const uint ERROR_UNKNOWN_REVISION = 1305; - //public const uint ERROR_REVISION_MISMATCH = 1306; - //public const uint ERROR_INVALID_OWNER = 1307; - //public const uint ERROR_INVALID_PRIMARY_GROUP = 1308; - //public const uint ERROR_NO_IMPERSONATION_TOKEN = 1309; - //public const uint ERROR_CANT_DISABLE_MANDATORY = 1310; - //public const uint ERROR_NO_LOGON_SERVERS = 1311; - //public const uint ERROR_NO_SUCH_LOGON_SESSION = 1312; - //public const uint ERROR_NO_SUCH_PRIVILEGE = 1313; - //public const uint ERROR_PRIVILEGE_NOT_HELD = 1314; - //public const uint ERROR_INVALID_ACCOUNT_NAME = 1315; - //public const uint ERROR_USER_EXISTS = 1316; - //public const uint ERROR_NO_SUCH_USER = 1317; - //public const uint ERROR_GROUP_EXISTS = 1318; - //public const uint ERROR_NO_SUCH_GROUP = 1319; - //public const uint ERROR_MEMBER_IN_GROUP = 1320; - //public const uint ERROR_MEMBER_NOT_IN_GROUP = 1321; - //public const uint ERROR_LAST_ADMIN = 1322; - //public const uint ERROR_WRONG_PASSWORD = 1323; - //public const uint ERROR_ILL_FORMED_PASSWORD = 1324; - //public const uint ERROR_PASSWORD_RESTRICTION = 1325; - //public const uint ERROR_LOGON_FAILURE = 1326; - //public const uint ERROR_ACCOUNT_RESTRICTION = 1327; - //public const uint ERROR_INVALID_LOGON_HOURS = 1328; - //public const uint ERROR_INVALID_WORKSTATION = 1329; - //public const uint ERROR_PASSWORD_EXPIRED = 1330; - //public const uint ERROR_ACCOUNT_DISABLED = 1331; - //public const uint ERROR_NONE_MAPPED = 1332; - //public const uint ERROR_TOO_MANY_LUIDS_REQUESTED = 1333; - //public const uint ERROR_LUIDS_EXHAUSTED = 1334; - //public const uint ERROR_INVALID_SUB_AUTHORITY = 1335; - //public const uint ERROR_INVALID_ACL = 1336; - //public const uint ERROR_INVALID_SID = 1337; - //public const uint ERROR_INVALID_SECURITY_DESCR = 1338; - //public const uint ERROR_BAD_INHERITANCE_ACL = 1340; - //public const uint ERROR_SERVER_DISABLED = 1341; - //public const uint ERROR_SERVER_NOT_DISABLED = 1342; - //public const uint ERROR_INVALID_ID_AUTHORITY = 1343; - //public const uint ERROR_ALLOTTED_SPACE_EXCEEDED = 1344; - //public const uint ERROR_INVALID_GROUP_ATTRIBUTES = 1345; - //public const uint ERROR_BAD_IMPERSONATION_LEVEL = 1346; - //public const uint ERROR_CANT_OPEN_ANONYMOUS = 1347; - //public const uint ERROR_BAD_VALIDATION_CLASS = 1348; - //public const uint ERROR_BAD_TOKEN_TYPE = 1349; - //public const uint ERROR_NO_SECURITY_ON_OBJECT = 1350; - //public const uint ERROR_CANT_ACCESS_DOMAIN_INFO = 1351; - //public const uint ERROR_INVALID_SERVER_STATE = 1352; - //public const uint ERROR_INVALID_DOMAIN_STATE = 1353; - //public const uint ERROR_INVALID_DOMAIN_ROLE = 1354; - //public const uint ERROR_NO_SUCH_DOMAIN = 1355; - //public const uint ERROR_DOMAIN_EXISTS = 1356; - //public const uint ERROR_DOMAIN_LIMIT_EXCEEDED = 1357; - //public const uint ERROR_INTERNAL_DB_CORRUPTION = 1358; - //public const uint ERROR_INTERNAL_ERROR = 1359; - //public const uint ERROR_GENERIC_NOT_MAPPED = 1360; - //public const uint ERROR_BAD_DESCRIPTOR_FORMAT = 1361; - //public const uint ERROR_NOT_LOGON_PROCESS = 1362; - //public const uint ERROR_LOGON_SESSION_EXISTS = 1363; - //public const uint ERROR_NO_SUCH_PACKAGE = 1364; - //public const uint ERROR_BAD_LOGON_SESSION_STATE = 1365; - //public const uint ERROR_LOGON_SESSION_COLLISION = 1366; - //public const uint ERROR_INVALID_LOGON_TYPE = 1367; - //public const uint ERROR_CANNOT_IMPERSONATE = 1368; - //public const uint ERROR_RXACT_INVALID_STATE = 1369; - //public const uint ERROR_RXACT_COMMIT_FAILURE = 1370; - //public const uint ERROR_SPECIAL_ACCOUNT = 1371; - //public const uint ERROR_SPECIAL_GROUP = 1372; - //public const uint ERROR_SPECIAL_USER = 1373; - //public const uint ERROR_MEMBERS_PRIMARY_GROUP = 1374; - //public const uint ERROR_TOKEN_ALREADY_IN_USE = 1375; - //public const uint ERROR_NO_SUCH_ALIAS = 1376; - //public const uint ERROR_MEMBER_NOT_IN_ALIAS = 1377; - //public const uint ERROR_MEMBER_IN_ALIAS = 1378; - //public const uint ERROR_ALIAS_EXISTS = 1379; - //public const uint ERROR_LOGON_NOT_GRANTED = 1380; - //public const uint ERROR_TOO_MANY_SECRETS = 1381; - //public const uint ERROR_SECRET_TOO_LONG = 1382; - //public const uint ERROR_INTERNAL_DB_ERROR = 1383; - //public const uint ERROR_TOO_MANY_CONTEXT_IDS = 1384; - //public const uint ERROR_LOGON_TYPE_NOT_GRANTED = 1385; - //public const uint ERROR_NT_CROSS_ENCRYPTION_REQUIRED = 1386; - //public const uint ERROR_NO_SUCH_MEMBER = 1387; - //public const uint ERROR_INVALID_MEMBER = 1388; - //public const uint ERROR_TOO_MANY_SIDS = 1389; - //public const uint ERROR_LM_CROSS_ENCRYPTION_REQUIRED = 1390; - //public const uint ERROR_NO_INHERITANCE = 1391; - //public const uint ERROR_FILE_CORRUPT = 1392; - //public const uint ERROR_DISK_CORRUPT = 1393; - //public const uint ERROR_NO_USER_SESSION_KEY = 1394; - //public const uint ERROR_LICENSE_QUOTA_EXCEEDED = 1395; - //public const uint ERROR_WRONG_TARGET_NAME = 1396; - //public const uint ERROR_MUTUAL_AUTH_FAILED = 1397; - //public const uint ERROR_TIME_SKEW = 1398; - //public const uint ERROR_CURRENT_DOMAIN_NOT_ALLOWED = 1399; - //public const uint ERROR_INVALID_WINDOW_HANDLE = 1400; - //public const uint ERROR_INVALID_MENU_HANDLE = 1401; - //public const uint ERROR_INVALID_CURSOR_HANDLE = 1402; - //public const uint ERROR_INVALID_ACCEL_HANDLE = 1403; - //public const uint ERROR_INVALID_HOOK_HANDLE = 1404; - //public const uint ERROR_INVALID_DWP_HANDLE = 1405; - //public const uint ERROR_TLW_WITH_WSCHILD = 1406; - //public const uint ERROR_CANNOT_FIND_WND_CLASS = 1407; - //public const uint ERROR_WINDOW_OF_OTHER_THREAD = 1408; - //public const uint ERROR_HOTKEY_ALREADY_REGISTERED = 1409; - //public const uint ERROR_CLASS_ALREADY_EXISTS = 1410; - //public const uint ERROR_CLASS_DOES_NOT_EXIST = 1411; - //public const uint ERROR_CLASS_HAS_WINDOWS = 1412; - //public const uint ERROR_INVALID_INDEX = 1413; - //public const uint ERROR_INVALID_ICON_HANDLE = 1414; - //public const uint ERROR_PRIVATE_DIALOG_INDEX = 1415; - //public const uint ERROR_LISTBOX_ID_NOT_FOUND = 1416; - //public const uint ERROR_NO_WILDCARD_CHARACTERS = 1417; - //public const uint ERROR_CLIPBOARD_NOT_OPEN = 1418; - //public const uint ERROR_HOTKEY_NOT_REGISTERED = 1419; - //public const uint ERROR_WINDOW_NOT_DIALOG = 1420; - //public const uint ERROR_CONTROL_ID_NOT_FOUND = 1421; - //public const uint ERROR_INVALID_COMBOBOX_MESSAGE = 1422; - //public const uint ERROR_WINDOW_NOT_COMBOBOX = 1423; - //public const uint ERROR_INVALID_EDIT_HEIGHT = 1424; - //public const uint ERROR_DC_NOT_FOUND = 1425; - //public const uint ERROR_INVALID_HOOK_FILTER = 1426; - //public const uint ERROR_INVALID_FILTER_PROC = 1427; - //public const uint ERROR_HOOK_NEEDS_HMOD = 1428; - //public const uint ERROR_GLOBAL_ONLY_HOOK = 1429; - //public const uint ERROR_JOURNAL_HOOK_SET = 1430; - //public const uint ERROR_HOOK_NOT_INSTALLED = 1431; - //public const uint ERROR_INVALID_LB_MESSAGE = 1432; - //public const uint ERROR_SETCOUNT_ON_BAD_LB = 1433; - //public const uint ERROR_LB_WITHOUT_TABSTOPS = 1434; - //public const uint ERROR_DESTROY_OBJECT_OF_OTHER_THREAD = 1435; - //public const uint ERROR_CHILD_WINDOW_MENU = 1436; - //public const uint ERROR_NO_SYSTEM_MENU = 1437; - //public const uint ERROR_INVALID_MSGBOX_STYLE = 1438; - //public const uint ERROR_INVALID_SPI_VALUE = 1439; - //public const uint ERROR_SCREEN_ALREADY_LOCKED = 1440; - //public const uint ERROR_HWNDS_HAVE_DIFF_PARENT = 1441; - //public const uint ERROR_NOT_CHILD_WINDOW = 1442; - //public const uint ERROR_INVALID_GW_COMMAND = 1443; - //public const uint ERROR_INVALID_THREAD_ID = 1444; - //public const uint ERROR_NON_MDICHILD_WINDOW = 1445; - //public const uint ERROR_POPUP_ALREADY_ACTIVE = 1446; - //public const uint ERROR_NO_SCROLLBARS = 1447; - //public const uint ERROR_INVALID_SCROLLBAR_RANGE = 1448; - //public const uint ERROR_INVALID_SHOWWIN_COMMAND = 1449; - //public const uint ERROR_NO_SYSTEM_RESOURCES = 1450; - //public const uint ERROR_NONPAGED_SYSTEM_RESOURCES = 1451; - //public const uint ERROR_PAGED_SYSTEM_RESOURCES = 1452; - //public const uint ERROR_WORKING_SET_QUOTA = 1453; - //public const uint ERROR_PAGEFILE_QUOTA = 1454; - //public const uint ERROR_COMMITMENT_LIMIT = 1455; - //public const uint ERROR_MENU_ITEM_NOT_FOUND = 1456; - //public const uint ERROR_INVALID_KEYBOARD_HANDLE = 1457; - //public const uint ERROR_HOOK_TYPE_NOT_ALLOWED = 1458; - //public const uint ERROR_REQUIRES_INTERACTIVE_WINDOWSTATION = 1459; - //public const uint ERROR_TIMEOUT = 1460; - //public const uint ERROR_INVALID_MONITOR_HANDLE = 1461; - //public const uint ERROR_INCORRECT_SIZE = 1462; - //public const uint ERROR_EVENTLOG_FILE_CORRUPT = 1500; - //public const uint ERROR_EVENTLOG_CANT_START = 1501; - //public const uint ERROR_LOG_FILE_FULL = 1502; - //public const uint ERROR_EVENTLOG_FILE_CHANGED = 1503; - //public const uint ERROR_INSTALL_SERVICE_FAILURE = 1601; - //public const uint ERROR_INSTALL_USEREXIT = 1602; - //public const uint ERROR_INSTALL_FAILURE = 1603; - //public const uint ERROR_INSTALL_SUSPEND = 1604; - //public const uint ERROR_UNKNOWN_PRODUCT = 1605; - //public const uint ERROR_UNKNOWN_FEATURE = 1606; - //public const uint ERROR_UNKNOWN_COMPONENT = 1607; - //public const uint ERROR_UNKNOWN_PROPERTY = 1608; - //public const uint ERROR_INVALID_HANDLE_STATE = 1609; - //public const uint ERROR_BAD_CONFIGURATION = 1610; - //public const uint ERROR_INDEX_ABSENT = 1611; - //public const uint ERROR_INSTALL_SOURCE_ABSENT = 1612; - //public const uint ERROR_INSTALL_PACKAGE_VERSION = 1613; - //public const uint ERROR_PRODUCT_UNINSTALLED = 1614; - //public const uint ERROR_BAD_QUERY_SYNTAX = 1615; - //public const uint ERROR_INVALID_FIELD = 1616; - //public const uint ERROR_DEVICE_REMOVED = 1617; - //public const uint ERROR_INSTALL_ALREADY_RUNNING = 1618; - //public const uint ERROR_INSTALL_PACKAGE_OPEN_FAILED = 1619; - //public const uint ERROR_INSTALL_PACKAGE_INVALID = 1620; - //public const uint ERROR_INSTALL_UI_FAILURE = 1621; - //public const uint ERROR_INSTALL_LOG_FAILURE = 1622; - //public const uint ERROR_INSTALL_LANGUAGE_UNSUPPORTED = 1623; - //public const uint ERROR_INSTALL_TRANSFORM_FAILURE = 1624; - //public const uint ERROR_INSTALL_PACKAGE_REJECTED = 1625; - //public const uint ERROR_FUNCTION_NOT_CALLED = 1626; - //public const uint ERROR_FUNCTION_FAILED = 1627; - //public const uint ERROR_INVALID_TABLE = 1628; - //public const uint ERROR_DATATYPE_MISMATCH = 1629; - //public const uint ERROR_UNSUPPORTED_TYPE = 1630; - //public const uint ERROR_CREATE_FAILED = 1631; - //public const uint ERROR_INSTALL_TEMP_UNWRITABLE = 1632; - //public const uint ERROR_INSTALL_PLATFORM_UNSUPPORTED = 1633; - //public const uint ERROR_INSTALL_NOTUSED = 1634; - //public const uint ERROR_PATCH_PACKAGE_OPEN_FAILED = 1635; - //public const uint ERROR_PATCH_PACKAGE_INVALID = 1636; - //public const uint ERROR_PATCH_PACKAGE_UNSUPPORTED = 1637; - //public const uint ERROR_PRODUCT_VERSION = 1638; - //public const uint ERROR_INVALID_COMMAND_LINE = 1639; - //public const uint ERROR_INSTALL_REMOTE_DISALLOWED = 1640; - - /// (1641) The requested operation completed successfully. - /// The system will be restarted so the changes can take effect. - /// - public const uint ERROR_SUCCESS_REBOOT_INITIATED = 1641; - - //public const uint ERROR_PATCH_TARGET_NOT_FOUND = 1642; - //public const uint ERROR_PATCH_PACKAGE_REJECTED = 1643; - //public const uint ERROR_INSTALL_TRANSFORM_REJECTED = 1644; - //public const uint ERROR_INSTALL_REMOTE_PROHIBITED = 1645; - //public const uint RPC_S_INVALID_STRING_BINDING = 1700; - //public const uint RPC_S_WRONG_KIND_OF_BINDING = 1701; - //public const uint RPC_S_INVALID_BINDING = 1702; - //public const uint RPC_S_PROTSEQ_NOT_SUPPORTED = 1703; - //public const uint RPC_S_INVALID_RPC_PROTSEQ = 1704; - //public const uint RPC_S_INVALID_STRING_UUID = 1705; - //public const uint RPC_S_INVALID_ENDPOINT_FORMAT = 1706; - //public const uint RPC_S_INVALID_NET_ADDR = 1707; - //public const uint RPC_S_NO_ENDPOINT_FOUND = 1708; - //public const uint RPC_S_INVALID_TIMEOUT = 1709; - //public const uint RPC_S_OBJECT_NOT_FOUND = 1710; - //public const uint RPC_S_ALREADY_REGISTERED = 1711; - //public const uint RPC_S_TYPE_ALREADY_REGISTERED = 1712; - //public const uint RPC_S_ALREADY_LISTENING = 1713; - //public const uint RPC_S_NO_PROTSEQS_REGISTERED = 1714; - //public const uint RPC_S_NOT_LISTENING = 1715; - //public const uint RPC_S_UNKNOWN_MGR_TYPE = 1716; - //public const uint RPC_S_UNKNOWN_IF = 1717; - //public const uint RPC_S_NO_BINDINGS = 1718; - //public const uint RPC_S_NO_PROTSEQS = 1719; - //public const uint RPC_S_CANT_CREATE_ENDPOINT = 1720; - //public const uint RPC_S_OUT_OF_RESOURCES = 1721; - //public const uint RPC_S_SERVER_UNAVAILABLE = 1722; - //public const uint RPC_S_SERVER_TOO_BUSY = 1723; - //public const uint RPC_S_INVALID_NETWORK_OPTIONS = 1724; - //public const uint RPC_S_NO_CALL_ACTIVE = 1725; - //public const uint RPC_S_CALL_FAILED = 1726; - //public const uint RPC_S_CALL_FAILED_DNE = 1727; - //public const uint RPC_S_PROTOCOL_ERROR = 1728; - //public const uint RPC_S_UNSUPPORTED_TRANS_SYN = 1730; - //public const uint RPC_S_UNSUPPORTED_TYPE = 1732; - //public const uint RPC_S_INVALID_TAG = 1733; - //public const uint RPC_S_INVALID_BOUND = 1734; - //public const uint RPC_S_NO_ENTRY_NAME = 1735; - //public const uint RPC_S_INVALID_NAME_SYNTAX = 1736; - //public const uint RPC_S_UNSUPPORTED_NAME_SYNTAX = 1737; - //public const uint RPC_S_UUID_NO_ADDRESS = 1739; - //public const uint RPC_S_DUPLICATE_ENDPOINT = 1740; - //public const uint RPC_S_UNKNOWN_AUTHN_TYPE = 1741; - //public const uint RPC_S_MAX_CALLS_TOO_SMALL = 1742; - //public const uint RPC_S_STRING_TOO_LONG = 1743; - //public const uint RPC_S_PROTSEQ_NOT_FOUND = 1744; - //public const uint RPC_S_PROCNUM_OUT_OF_RANGE = 1745; - //public const uint RPC_S_BINDING_HAS_NO_AUTH = 1746; - //public const uint RPC_S_UNKNOWN_AUTHN_SERVICE = 1747; - //public const uint RPC_S_UNKNOWN_AUTHN_LEVEL = 1748; - //public const uint RPC_S_INVALID_AUTH_IDENTITY = 1749; - //public const uint RPC_S_UNKNOWN_AUTHZ_SERVICE = 1750; - //public const uint EPT_S_INVALID_ENTRY = 1751; - //public const uint EPT_S_CANT_PERFORM_OP = 1752; - //public const uint EPT_S_NOT_REGISTERED = 1753; - //public const uint RPC_S_NOTHING_TO_EXPORT = 1754; - //public const uint RPC_S_INCOMPLETE_NAME = 1755; - //public const uint RPC_S_INVALID_VERS_OPTION = 1756; - //public const uint RPC_S_NO_MORE_MEMBERS = 1757; - //public const uint RPC_S_NOT_ALL_OBJS_UNEXPORTED = 1758; - //public const uint RPC_S_INTERFACE_NOT_FOUND = 1759; - //public const uint RPC_S_ENTRY_ALREADY_EXISTS = 1760; - //public const uint RPC_S_ENTRY_NOT_FOUND = 1761; - //public const uint RPC_S_NAME_SERVICE_UNAVAILABLE = 1762; - //public const uint RPC_S_INVALID_NAF_ID = 1763; - //public const uint RPC_S_CANNOT_SUPPORT = 1764; - //public const uint RPC_S_NO_CONTEXT_AVAILABLE = 1765; - //public const uint RPC_S_INTERNAL_ERROR = 1766; - //public const uint RPC_S_ZERO_DIVIDE = 1767; - //public const uint RPC_S_ADDRESS_ERROR = 1768; - //public const uint RPC_S_FP_DIV_ZERO = 1769; - //public const uint RPC_S_FP_UNDERFLOW = 1770; - //public const uint RPC_S_FP_OVERFLOW = 1771; - //public const uint RPC_X_NO_MORE_ENTRIES = 1772; - //public const uint RPC_X_SS_CHAR_TRANS_OPEN_FAIL = 1773; - //public const uint RPC_X_SS_CHAR_TRANS_SHORT_FILE = 1774; - //public const uint RPC_X_SS_IN_NULL_CONTEXT = 1775; - //public const uint RPC_X_SS_CONTEXT_DAMAGED = 1777; - //public const uint RPC_X_SS_HANDLES_MISMATCH = 1778; - //public const uint RPC_X_SS_CANNOT_GET_CALL_HANDLE = 1779; - //public const uint RPC_X_NULL_REF_POINTER = 1780; - //public const uint RPC_X_ENUM_VALUE_OUT_OF_RANGE = 1781; - //public const uint RPC_X_BYTE_COUNT_TOO_SMALL = 1782; - - /// (1783) The stub received bad data. - public const uint RPC_X_BAD_STUB_DATA = 1783; - - //public const uint ERROR_INVALID_USER_BUFFER = 1784; - //public const uint ERROR_UNRECOGNIZED_MEDIA = 1785; - //public const uint ERROR_NO_TRUST_LSA_SECRET = 1786; - //public const uint ERROR_NO_TRUST_SAM_ACCOUNT = 1787; - //public const uint ERROR_TRUSTED_DOMAIN_FAILURE = 1788; - //public const uint ERROR_TRUSTED_RELATIONSHIP_FAILURE = 1789; - //public const uint ERROR_TRUST_FAILURE = 1790; - //public const uint RPC_S_CALL_IN_PROGRESS = 1791; - //public const uint ERROR_NETLOGON_NOT_STARTED = 1792; - //public const uint ERROR_ACCOUNT_EXPIRED = 1793; - //public const uint ERROR_REDIRECTOR_HAS_OPEN_HANDLES = 1794; - //public const uint ERROR_PRINTER_DRIVER_ALREADY_INSTALLED = 1795; - //public const uint ERROR_UNKNOWN_PORT = 1796; - //public const uint ERROR_UNKNOWN_PRINTER_DRIVER = 1797; - //public const uint ERROR_UNKNOWN_PRINTPROCESSOR = 1798; - //public const uint ERROR_INVALID_SEPARATOR_FILE = 1799; - //public const uint ERROR_INVALID_PRIORITY = 1800; - //public const uint ERROR_INVALID_PRINTER_NAME = 1801; - //public const uint ERROR_PRINTER_ALREADY_EXISTS = 1802; - //public const uint ERROR_INVALID_PRINTER_COMMAND = 1803; - //public const uint ERROR_INVALID_DATATYPE = 1804; - //public const uint ERROR_INVALID_ENVIRONMENT = 1805; - //public const uint RPC_S_NO_MORE_BINDINGS = 1806; - //public const uint ERROR_NOLOGON_INTERDOMAIN_TRUST_ACCOUNT = 1807; - //public const uint ERROR_NOLOGON_WORKSTATION_TRUST_ACCOUNT = 1808; - //public const uint ERROR_NOLOGON_SERVER_TRUST_ACCOUNT = 1809; - //public const uint ERROR_DOMAIN_TRUST_INCONSISTENT = 1810; - //public const uint ERROR_SERVER_HAS_OPEN_HANDLES = 1811; - //public const uint ERROR_RESOURCE_DATA_NOT_FOUND = 1812; - //public const uint ERROR_RESOURCE_TYPE_NOT_FOUND = 1813; - //public const uint ERROR_RESOURCE_NAME_NOT_FOUND = 1814; - //public const uint ERROR_RESOURCE_LANG_NOT_FOUND = 1815; - //public const uint ERROR_NOT_ENOUGH_QUOTA = 1816; - //public const uint RPC_S_NO_INTERFACES = 1817; - //public const uint RPC_S_CALL_CANCELLED = 1818; - //public const uint RPC_S_BINDING_INCOMPLETE = 1819; - //public const uint RPC_S_COMM_FAILURE = 1820; - //public const uint RPC_S_UNSUPPORTED_AUTHN_LEVEL = 1821; - //public const uint RPC_S_NO_PRINC_NAME = 1822; - //public const uint RPC_S_NOT_RPC_ERROR = 1823; - //public const uint RPC_S_UUID_LOCAL_ONLY = 1824; - //public const uint RPC_S_SEC_PKG_ERROR = 1825; - //public const uint RPC_S_NOT_CANCELLED = 1826; - //public const uint RPC_X_INVALID_ES_ACTION = 1827; - //public const uint RPC_X_WRONG_ES_VERSION = 1828; - //public const uint RPC_X_WRONG_STUB_VERSION = 1829; - //public const uint RPC_X_INVALID_PIPE_OBJECT = 1830; - //public const uint RPC_X_WRONG_PIPE_ORDER = 1831; - //public const uint RPC_X_WRONG_PIPE_VERSION = 1832; - //public const uint RPC_S_GROUP_MEMBER_NOT_FOUND = 1898; - //public const uint EPT_S_CANT_CREATE = 1899; - //public const uint RPC_S_INVALID_OBJECT = 1900; - //public const uint ERROR_INVALID_TIME = 1901; - //public const uint ERROR_INVALID_FORM_NAME = 1902; - //public const uint ERROR_INVALID_FORM_SIZE = 1903; - //public const uint ERROR_ALREADY_WAITING = 1904; - //public const uint ERROR_PRINTER_DELETED = 1905; - //public const uint ERROR_INVALID_PRINTER_STATE = 1906; - //public const uint ERROR_PASSWORD_MUST_CHANGE = 1907; - //public const uint ERROR_DOMAIN_CONTROLLER_NOT_FOUND = 1908; - //public const uint ERROR_ACCOUNT_LOCKED_OUT = 1909; - //public const uint OR_INVALID_OXID = 1910; - //public const uint OR_INVALID_OID = 1911; - //public const uint OR_INVALID_SET = 1912; - //public const uint RPC_S_SEND_INCOMPLETE = 1913; - //public const uint RPC_S_INVALID_ASYNC_HANDLE = 1914; - //public const uint RPC_S_INVALID_ASYNC_CALL = 1915; - //public const uint RPC_X_PIPE_CLOSED = 1916; - //public const uint RPC_X_PIPE_DISCIPLINE_ERROR = 1917; - //public const uint RPC_X_PIPE_EMPTY = 1918; - //public const uint ERROR_NO_SITENAME = 1919; - //public const uint ERROR_CANT_ACCESS_FILE = 1920; - //public const uint ERROR_CANT_RESOLVE_FILENAME = 1921; - //public const uint RPC_S_ENTRY_TYPE_MISMATCH = 1922; - //public const uint RPC_S_NOT_ALL_OBJS_EXPORTED = 1923; - //public const uint RPC_S_INTERFACE_NOT_EXPORTED = 1924; - //public const uint RPC_S_PROFILE_NOT_ADDED = 1925; - //public const uint RPC_S_PRF_ELT_NOT_ADDED = 1926; - //public const uint RPC_S_PRF_ELT_NOT_REMOVED = 1927; - //public const uint RPC_S_GRP_ELT_NOT_ADDED = 1928; - //public const uint RPC_S_GRP_ELT_NOT_REMOVED = 1929; - //public const uint ERROR_KM_DRIVER_BLOCKED = 1930; - //public const uint ERROR_CONTEXT_EXPIRED = 1931; - //public const uint ERROR_PER_USER_TRUST_QUOTA_EXCEEDED = 1932; - //public const uint ERROR_ALL_USER_TRUST_QUOTA_EXCEEDED = 1933; - //public const uint ERROR_USER_DELETE_TRUST_QUOTA_EXCEEDED = 1934; - //public const uint ERROR_AUTHENTICATION_FIREWALL_FAILED = 1935; - //public const uint ERROR_REMOTE_PRINT_CONNECTIONS_BLOCKED = 1936; - //public const uint ERROR_INVALID_PIXEL_FORMAT = 2000; - //public const uint ERROR_BAD_DRIVER = 2001; - //public const uint ERROR_INVALID_WINDOW_STYLE = 2002; - //public const uint ERROR_METAFILE_NOT_SUPPORTED = 2003; - //public const uint ERROR_TRANSFORM_NOT_SUPPORTED = 2004; - //public const uint ERROR_CLIPPING_NOT_SUPPORTED = 2005; - //public const uint ERROR_INVALID_CMM = 2010; - //public const uint ERROR_INVALID_PROFILE = 2011; - //public const uint ERROR_TAG_NOT_FOUND = 2012; - //public const uint ERROR_TAG_NOT_PRESENT = 2013; - //public const uint ERROR_DUPLICATE_TAG = 2014; - //public const uint ERROR_PROFILE_NOT_ASSOCIATED_WITH_DEVICE = 2015; - //public const uint ERROR_PROFILE_NOT_FOUND = 2016; - //public const uint ERROR_INVALID_COLORSPACE = 2017; - //public const uint ERROR_ICM_NOT_ENABLED = 2018; - //public const uint ERROR_DELETING_ICM_XFORM = 2019; - //public const uint ERROR_INVALID_TRANSFORM = 2020; - //public const uint ERROR_COLORSPACE_MISMATCH = 2021; - //public const uint ERROR_INVALID_COLORINDEX = 2022; - //public const uint ERROR_CONNECTED_OTHER_PASSWORD = 2108; - //public const uint ERROR_CONNECTED_OTHER_PASSWORD_DEFAULT = 2109; - //public const uint ERROR_UNKNOWN_PRINT_MONITOR = 3000; - //public const uint ERROR_PRINTER_DRIVER_IN_USE = 3001; - //public const uint ERROR_SPOOL_FILE_NOT_FOUND = 3002; - //public const uint ERROR_SPL_NO_STARTDOC = 3003; - //public const uint ERROR_SPL_NO_ADDJOB = 3004; - //public const uint ERROR_PRINT_PROCESSOR_ALREADY_INSTALLED = 3005; - //public const uint ERROR_PRINT_MONITOR_ALREADY_INSTALLED = 3006; - //public const uint ERROR_INVALID_PRINT_MONITOR = 3007; - //public const uint ERROR_PRINT_MONITOR_IN_USE = 3008; - //public const uint ERROR_PRINTER_HAS_JOBS_QUEUED = 3009; - - /// (3010) The requested operation is successful. - /// Changes will not be effective until the system is rebooted. - /// - public const uint ERROR_SUCCESS_REBOOT_REQUIRED = 3010; - - /// (3011) The requested operation is successful. - /// Changes will not be effective until the service is restarted. - /// - public const uint ERROR_SUCCESS_RESTART_REQUIRED = 3011; - - //public const uint ERROR_PRINTER_NOT_FOUND = 3012; - //public const uint ERROR_PRINTER_DRIVER_WARNED = 3013; - //public const uint ERROR_PRINTER_DRIVER_BLOCKED = 3014; - //public const uint ERROR_WINS_INTERNAL = 4000; - //public const uint ERROR_CAN_NOT_DEL_LOCAL_WINS = 4001; - //public const uint ERROR_STATIC_INIT = 4002; - //public const uint ERROR_INC_BACKUP = 4003; - //public const uint ERROR_FULL_BACKUP = 4004; - //public const uint ERROR_REC_NON_EXISTENT = 4005; - //public const uint ERROR_RPL_NOT_ALLOWED = 4006; - //public const uint ERROR_DHCP_ADDRESS_CONFLICT = 4100; - //public const uint ERROR_WMI_GUID_NOT_FOUND = 4200; - //public const uint ERROR_WMI_INSTANCE_NOT_FOUND = 4201; - //public const uint ERROR_WMI_ITEMID_NOT_FOUND = 4202; - //public const uint ERROR_WMI_TRY_AGAIN = 4203; - //public const uint ERROR_WMI_DP_NOT_FOUND = 4204; - //public const uint ERROR_WMI_UNRESOLVED_INSTANCE_REF = 4205; - //public const uint ERROR_WMI_ALREADY_ENABLED = 4206; - //public const uint ERROR_WMI_GUID_DISCONNECTED = 4207; - //public const uint ERROR_WMI_SERVER_UNAVAILABLE = 4208; - //public const uint ERROR_WMI_DP_FAILED = 4209; - //public const uint ERROR_WMI_INVALID_MOF = 4210; - //public const uint ERROR_WMI_INVALID_REGINFO = 4211; - //public const uint ERROR_WMI_ALREADY_DISABLED = 4212; - //public const uint ERROR_WMI_READ_ONLY = 4213; - //public const uint ERROR_WMI_SET_FAILURE = 4214; - //public const uint ERROR_INVALID_MEDIA = 4300; - //public const uint ERROR_INVALID_LIBRARY = 4301; - //public const uint ERROR_INVALID_MEDIA_POOL = 4302; - //public const uint ERROR_DRIVE_MEDIA_MISMATCH = 4303; - //public const uint ERROR_MEDIA_OFFLINE = 4304; - //public const uint ERROR_LIBRARY_OFFLINE = 4305; - //public const uint ERROR_EMPTY = 4306; - //public const uint ERROR_NOT_EMPTY = 4307; - //public const uint ERROR_MEDIA_UNAVAILABLE = 4308; - //public const uint ERROR_RESOURCE_DISABLED = 4309; - //public const uint ERROR_INVALID_CLEANER = 4310; - //public const uint ERROR_UNABLE_TO_CLEAN = 4311; - //public const uint ERROR_OBJECT_NOT_FOUND = 4312; - //public const uint ERROR_DATABASE_FAILURE = 4313; - //public const uint ERROR_DATABASE_FULL = 4314; - //public const uint ERROR_MEDIA_INCOMPATIBLE = 4315; - //public const uint ERROR_RESOURCE_NOT_PRESENT = 4316; - //public const uint ERROR_INVALID_OPERATION = 4317; - //public const uint ERROR_MEDIA_NOT_AVAILABLE = 4318; - //public const uint ERROR_DEVICE_NOT_AVAILABLE = 4319; - //public const uint ERROR_REQUEST_REFUSED = 4320; - //public const uint ERROR_INVALID_DRIVE_OBJECT = 4321; - //public const uint ERROR_LIBRARY_FULL = 4322; - //public const uint ERROR_MEDIUM_NOT_ACCESSIBLE = 4323; - //public const uint ERROR_UNABLE_TO_LOAD_MEDIUM = 4324; - //public const uint ERROR_UNABLE_TO_INVENTORY_DRIVE = 4325; - //public const uint ERROR_UNABLE_TO_INVENTORY_SLOT = 4326; - //public const uint ERROR_UNABLE_TO_INVENTORY_TRANSPORT = 4327; - //public const uint ERROR_TRANSPORT_FULL = 4328; - //public const uint ERROR_CONTROLLING_IEPORT = 4329; - //public const uint ERROR_UNABLE_TO_EJECT_MOUNTED_MEDIA = 4330; - //public const uint ERROR_CLEANER_SLOT_SET = 4331; - //public const uint ERROR_CLEANER_SLOT_NOT_SET = 4332; - //public const uint ERROR_CLEANER_CARTRIDGE_SPENT = 4333; - //public const uint ERROR_UNEXPECTED_OMID = 4334; - //public const uint ERROR_CANT_DELETE_LAST_ITEM = 4335; - //public const uint ERROR_MESSAGE_EXCEEDS_MAX_SIZE = 4336; - //public const uint ERROR_VOLUME_CONTAINS_SYS_FILES = 4337; - //public const uint ERROR_INDIGENOUS_TYPE = 4338; - //public const uint ERROR_NO_SUPPORTING_DRIVES = 4339; - //public const uint ERROR_CLEANER_CARTRIDGE_INSTALLED = 4340; - //public const uint ERROR_IEPORT_FULL = 4341; - //public const uint ERROR_FILE_OFFLINE = 4350; - //public const uint ERROR_REMOTE_STORAGE_NOT_ACTIVE = 4351; - //public const uint ERROR_REMOTE_STORAGE_MEDIA_ERROR = 4352; - - /// (4390) The file or directory is not a reparse point. - public const uint ERROR_NOT_A_REPARSE_POINT = 4390; - - //public const uint ERROR_REPARSE_ATTRIBUTE_CONFLICT = 4391; - //public const uint ERROR_INVALID_REPARSE_DATA = 4392; - //public const uint ERROR_REPARSE_TAG_INVALID = 4393; - //public const uint ERROR_REPARSE_TAG_MISMATCH = 4394; - //public const uint ERROR_VOLUME_NOT_SIS_ENABLED = 4500; - //public const uint ERROR_DEPENDENT_RESOURCE_EXISTS = 5001; - //public const uint ERROR_DEPENDENCY_NOT_FOUND = 5002; - //public const uint ERROR_DEPENDENCY_ALREADY_EXISTS = 5003; - //public const uint ERROR_RESOURCE_NOT_ONLINE = 5004; - //public const uint ERROR_HOST_NODE_NOT_AVAILABLE = 5005; - //public const uint ERROR_RESOURCE_NOT_AVAILABLE = 5006; - //public const uint ERROR_RESOURCE_NOT_FOUND = 5007; - //public const uint ERROR_SHUTDOWN_CLUSTER = 5008; - //public const uint ERROR_CANT_EVICT_ACTIVE_NODE = 5009; - //public const uint ERROR_OBJECT_ALREADY_EXISTS = 5010; - //public const uint ERROR_OBJECT_IN_LIST = 5011; - //public const uint ERROR_GROUP_NOT_AVAILABLE = 5012; - //public const uint ERROR_GROUP_NOT_FOUND = 5013; - //public const uint ERROR_GROUP_NOT_ONLINE = 5014; - //public const uint ERROR_HOST_NODE_NOT_RESOURCE_OWNER = 5015; - //public const uint ERROR_HOST_NODE_NOT_GROUP_OWNER = 5016; - //public const uint ERROR_RESMON_CREATE_FAILED = 5017; - //public const uint ERROR_RESMON_ONLINE_FAILED = 5018; - //public const uint ERROR_RESOURCE_ONLINE = 5019; - //public const uint ERROR_QUORUM_RESOURCE = 5020; - //public const uint ERROR_NOT_QUORUM_CAPABLE = 5021; - //public const uint ERROR_CLUSTER_SHUTTING_DOWN = 5022; - //public const uint ERROR_INVALID_STATE = 5023; - //public const uint ERROR_RESOURCE_PROPERTIES_STORED = 5024; - //public const uint ERROR_NOT_QUORUM_CLASS = 5025; - //public const uint ERROR_CORE_RESOURCE = 5026; - //public const uint ERROR_QUORUM_RESOURCE_ONLINE_FAILED = 5027; - //public const uint ERROR_QUORUMLOG_OPEN_FAILED = 5028; - //public const uint ERROR_CLUSTERLOG_CORRUPT = 5029; - //public const uint ERROR_CLUSTERLOG_RECORD_EXCEEDS_MAXSIZE = 5030; - //public const uint ERROR_CLUSTERLOG_EXCEEDS_MAXSIZE = 5031; - //public const uint ERROR_CLUSTERLOG_CHKPOINT_NOT_FOUND = 5032; - //public const uint ERROR_CLUSTERLOG_NOT_ENOUGH_SPACE = 5033; - //public const uint ERROR_QUORUM_OWNER_ALIVE = 5034; - //public const uint ERROR_NETWORK_NOT_AVAILABLE = 5035; - //public const uint ERROR_NODE_NOT_AVAILABLE = 5036; - //public const uint ERROR_ALL_NODES_NOT_AVAILABLE = 5037; - //public const uint ERROR_RESOURCE_FAILED = 5038; - //public const uint ERROR_CLUSTER_INVALID_NODE = 5039; - //public const uint ERROR_CLUSTER_NODE_EXISTS = 5040; - //public const uint ERROR_CLUSTER_JOIN_IN_PROGRESS = 5041; - //public const uint ERROR_CLUSTER_NODE_NOT_FOUND = 5042; - //public const uint ERROR_CLUSTER_LOCAL_NODE_NOT_FOUND = 5043; - //public const uint ERROR_CLUSTER_NETWORK_EXISTS = 5044; - //public const uint ERROR_CLUSTER_NETWORK_NOT_FOUND = 5045; - //public const uint ERROR_CLUSTER_NETINTERFACE_EXISTS = 5046; - //public const uint ERROR_CLUSTER_NETINTERFACE_NOT_FOUND = 5047; - //public const uint ERROR_CLUSTER_INVALID_REQUEST = 5048; - //public const uint ERROR_CLUSTER_INVALID_NETWORK_PROVIDER = 5049; - //public const uint ERROR_CLUSTER_NODE_DOWN = 5050; - //public const uint ERROR_CLUSTER_NODE_UNREACHABLE = 5051; - //public const uint ERROR_CLUSTER_NODE_NOT_MEMBER = 5052; - //public const uint ERROR_CLUSTER_JOIN_NOT_IN_PROGRESS = 5053; - //public const uint ERROR_CLUSTER_INVALID_NETWORK = 5054; - //public const uint ERROR_CLUSTER_NODE_UP = 5056; - //public const uint ERROR_CLUSTER_IPADDR_IN_USE = 5057; - //public const uint ERROR_CLUSTER_NODE_NOT_PAUSED = 5058; - //public const uint ERROR_CLUSTER_NO_SECURITY_CONTEXT = 5059; - //public const uint ERROR_CLUSTER_NETWORK_NOT_INTERNAL = 5060; - //public const uint ERROR_CLUSTER_NODE_ALREADY_UP = 5061; - //public const uint ERROR_CLUSTER_NODE_ALREADY_DOWN = 5062; - //public const uint ERROR_CLUSTER_NETWORK_ALREADY_ONLINE = 5063; - //public const uint ERROR_CLUSTER_NETWORK_ALREADY_OFFLINE = 5064; - //public const uint ERROR_CLUSTER_NODE_ALREADY_MEMBER = 5065; - //public const uint ERROR_CLUSTER_LAST_INTERNAL_NETWORK = 5066; - //public const uint ERROR_CLUSTER_NETWORK_HAS_DEPENDENTS = 5067; - //public const uint ERROR_INVALID_OPERATION_ON_QUORUM = 5068; - //public const uint ERROR_DEPENDENCY_NOT_ALLOWED = 5069; - //public const uint ERROR_CLUSTER_NODE_PAUSED = 5070; - //public const uint ERROR_NODE_CANT_HOST_RESOURCE = 5071; - //public const uint ERROR_CLUSTER_NODE_NOT_READY = 5072; - //public const uint ERROR_CLUSTER_NODE_SHUTTING_DOWN = 5073; - //public const uint ERROR_CLUSTER_JOIN_ABORTED = 5074; - //public const uint ERROR_CLUSTER_INCOMPATIBLE_VERSIONS = 5075; - //public const uint ERROR_CLUSTER_MAXNUM_OF_RESOURCES_EXCEEDED = 5076; - //public const uint ERROR_CLUSTER_SYSTEM_CONFIG_CHANGED = 5077; - //public const uint ERROR_CLUSTER_RESOURCE_TYPE_NOT_FOUND = 5078; - //public const uint ERROR_CLUSTER_RESTYPE_NOT_SUPPORTED = 5079; - //public const uint ERROR_CLUSTER_RESNAME_NOT_FOUND = 5080; - //public const uint ERROR_CLUSTER_NO_RPC_PACKAGES_REGISTERED = 5081; - //public const uint ERROR_CLUSTER_OWNER_NOT_IN_PREFLIST = 5082; - //public const uint ERROR_CLUSTER_DATABASE_SEQMISMATCH = 5083; - //public const uint ERROR_RESMON_INVALID_STATE = 5084; - //public const uint ERROR_CLUSTER_GUM_NOT_LOCKER = 5085; - //public const uint ERROR_QUORUM_DISK_NOT_FOUND = 5086; - //public const uint ERROR_DATABASE_BACKUP_CORRUPT = 5087; - //public const uint ERROR_CLUSTER_NODE_ALREADY_HAS_DFS_ROOT = 5088; - //public const uint ERROR_RESOURCE_PROPERTY_UNCHANGEABLE = 5089; - //public const uint ERROR_CLUSTER_MEMBERSHIP_INVALID_STATE = 5890; - //public const uint ERROR_CLUSTER_QUORUMLOG_NOT_FOUND = 5891; - //public const uint ERROR_CLUSTER_MEMBERSHIP_HALT = 5892; - //public const uint ERROR_CLUSTER_INSTANCE_ID_MISMATCH = 5893; - //public const uint ERROR_CLUSTER_NETWORK_NOT_FOUND_FOR_IP = 5894; - //public const uint ERROR_CLUSTER_PROPERTY_DATA_TYPE_MISMATCH = 5895; - //public const uint ERROR_CLUSTER_EVICT_WITHOUT_CLEANUP = 5896; - //public const uint ERROR_CLUSTER_PARAMETER_MISMATCH = 5897; - //public const uint ERROR_NODE_CANNOT_BE_CLUSTERED = 5898; - //public const uint ERROR_CLUSTER_WRONG_OS_VERSION = 5899; - //public const uint ERROR_CLUSTER_CANT_CREATE_DUP_CLUSTER_NAME = 5900; - //public const uint ERROR_CLUSCFG_ALREADY_COMMITTED = 5901; - //public const uint ERROR_CLUSCFG_ROLLBACK_FAILED = 5902; - //public const uint ERROR_CLUSCFG_SYSTEM_DISK_DRIVE_LETTER_CONFLICT = 5903; - //public const uint ERROR_CLUSTER_OLD_VERSION = 5904; - //public const uint ERROR_CLUSTER_MISMATCHED_COMPUTER_ACCT_NAME = 5905; - //public const uint ERROR_ENCRYPTION_FAILED = 6000; - //public const uint ERROR_DECRYPTION_FAILED = 6001; - //public const uint ERROR_FILE_ENCRYPTED = 6002; - //public const uint ERROR_NO_RECOVERY_POLICY = 6003; - //public const uint ERROR_NO_EFS = 6004; - //public const uint ERROR_WRONG_EFS = 6005; - //public const uint ERROR_NO_USER_KEYS = 6006; - //public const uint ERROR_FILE_NOT_ENCRYPTED = 6007; - //public const uint ERROR_NOT_EXPORT_FORMAT = 6008; - - - /// (6009) The specified file is read only. - public const uint ERROR_FILE_READ_ONLY = 6009; - - //public const uint ERROR_DIR_EFS_DISALLOWED = 6010; - //public const uint ERROR_EFS_SERVER_NOT_TRUSTED = 6011; - - /// (6012) Recovery policy configured for this system contains invalid recovery certificate. - public const uint ERROR_BAD_RECOVERY_POLICY = 6012; - - //public const uint ERROR_EFS_ALG_BLOB_TOO_BIG = 6013; - //public const uint ERROR_VOLUME_NOT_SUPPORT_EFS = 6014; - //public const uint ERROR_EFS_DISABLED = 6015; - //public const uint ERROR_EFS_VERSION_NOT_SUPPORT = 6016; - //public const uint ERROR_NO_BROWSER_SERVERS_FOUND = 6118; - //public const uint SCHED_E_SERVICE_NOT_LOCALSYSTEM = 6200; - - /// (6700) The transaction handle associated with this operation is not valid. - public const uint ERROR_INVALID_TRANSACTION = 6700; - - /// (6701) The requested operation was made in the context - /// of a transaction that is no longer active. - /// - public const uint ERROR_TRANSACTION_NOT_ACTIVE = 6701; - - /// (6702) The requested operation is not valid - /// on the Transaction object in its current state. - /// - public const uint ERROR_TRANSACTION_REQUEST_NOT_VALID = 6702; - - /// (6703) The caller has called a response API, but the response is not expected - /// because the TM did not issue the corresponding request to the caller. - /// - public const uint ERROR_TRANSACTION_NOT_REQUESTED = 6703; - - /// (6704) It is too late to perform the requested operation, - /// since the Transaction has already been aborted. - /// - public const uint ERROR_TRANSACTION_ALREADY_ABORTED = 6704; - - /// (6705) It is too late to perform the requested operation, - /// since the Transaction has already been committed. - /// - public const uint ERROR_TRANSACTION_ALREADY_COMMITTED = 6705; - - /// (6800) The function attempted to use a name - /// that is reserved for use by another transaction. - /// - public const uint ERROR_TRANSACTIONAL_CONFLICT = 6800; - - /// (6805) The remote server or share does not support transacted file operations. - public const uint ERROR_TRANSACTIONS_UNSUPPORTED_REMOTE = 6805; - - //public const uint ERROR_CTX_WINSTATION_NAME_INVALID = 7001; - //public const uint ERROR_CTX_INVALID_PD = 7002; - //public const uint ERROR_CTX_PD_NOT_FOUND = 7003; - //public const uint ERROR_CTX_WD_NOT_FOUND = 7004; - //public const uint ERROR_CTX_CANNOT_MAKE_EVENTLOG_ENTRY = 7005; - //public const uint ERROR_CTX_SERVICE_NAME_COLLISION = 7006; - //public const uint ERROR_CTX_CLOSE_PENDING = 7007; - //public const uint ERROR_CTX_NO_OUTBUF = 7008; - //public const uint ERROR_CTX_MODEM_INF_NOT_FOUND = 7009; - //public const uint ERROR_CTX_INVALID_MODEMNAME = 7010; - //public const uint ERROR_CTX_MODEM_RESPONSE_ERROR = 7011; - //public const uint ERROR_CTX_MODEM_RESPONSE_TIMEOUT = 7012; - //public const uint ERROR_CTX_MODEM_RESPONSE_NO_CARRIER = 7013; - //public const uint ERROR_CTX_MODEM_RESPONSE_NO_DIALTONE = 7014; - //public const uint ERROR_CTX_MODEM_RESPONSE_BUSY = 7015; - //public const uint ERROR_CTX_MODEM_RESPONSE_VOICE = 7016; - //public const uint ERROR_CTX_TD_ERROR = 7017; - //public const uint ERROR_CTX_WINSTATION_NOT_FOUND = 7022; - //public const uint ERROR_CTX_WINSTATION_ALREADY_EXISTS = 7023; - //public const uint ERROR_CTX_WINSTATION_BUSY = 7024; - //public const uint ERROR_CTX_BAD_VIDEO_MODE = 7025; - //public const uint ERROR_CTX_GRAPHICS_INVALID = 7035; - //public const uint ERROR_CTX_LOGON_DISABLED = 7037; - //public const uint ERROR_CTX_NOT_CONSOLE = 7038; - //public const uint ERROR_CTX_CLIENT_QUERY_TIMEOUT = 7040; - //public const uint ERROR_CTX_CONSOLE_DISCONNECT = 7041; - //public const uint ERROR_CTX_CONSOLE_CONNECT = 7042; - //public const uint ERROR_CTX_SHADOW_DENIED = 7044; - //public const uint ERROR_CTX_WINSTATION_ACCESS_DENIED = 7045; - //public const uint ERROR_CTX_INVALID_WD = 7049; - //public const uint ERROR_CTX_SHADOW_INVALID = 7050; - //public const uint ERROR_CTX_SHADOW_DISABLED = 7051; - //public const uint ERROR_CTX_CLIENT_LICENSE_IN_USE = 7052; - //public const uint ERROR_CTX_CLIENT_LICENSE_NOT_SET = 7053; - //public const uint ERROR_CTX_LICENSE_NOT_AVAILABLE = 7054; - //public const uint ERROR_CTX_LICENSE_CLIENT_INVALID = 7055; - //public const uint ERROR_CTX_LICENSE_EXPIRED = 7056; - //public const uint ERROR_CTX_SHADOW_NOT_RUNNING = 7057; - //public const uint ERROR_CTX_SHADOW_ENDED_BY_MODE_CHANGE = 7058; - //public const uint ERROR_ACTIVATION_COUNT_EXCEEDED = 7059; - //public const uint FRS_ERR_INVALID_API_SEQUENCE = 8001; - //public const uint FRS_ERR_STARTING_SERVICE = 8002; - //public const uint FRS_ERR_STOPPING_SERVICE = 8003; - //public const uint FRS_ERR_INTERNAL_API = 8004; - //public const uint FRS_ERR_INTERNAL = 8005; - //public const uint FRS_ERR_SERVICE_COMM = 8006; - //public const uint FRS_ERR_INSUFFICIENT_PRIV = 8007; - //public const uint FRS_ERR_AUTHENTICATION = 8008; - //public const uint FRS_ERR_PARENT_INSUFFICIENT_PRIV = 8009; - //public const uint FRS_ERR_PARENT_AUTHENTICATION = 8010; - //public const uint FRS_ERR_CHILD_TO_PARENT_COMM = 8011; - //public const uint FRS_ERR_PARENT_TO_CHILD_COMM = 8012; - //public const uint FRS_ERR_SYSVOL_POPULATE = 8013; - //public const uint FRS_ERR_SYSVOL_POPULATE_TIMEOUT = 8014; - //public const uint FRS_ERR_SYSVOL_IS_BUSY = 8015; - //public const uint FRS_ERR_SYSVOL_DEMOTE = 8016; - //public const uint FRS_ERR_INVALID_SERVICE_PARAMETER = 8017; - //public const uint ERROR_DS_NOT_INSTALLED = 8200; - //public const uint ERROR_DS_MEMBERSHIP_EVALUATED_LOCALLY = 8201; - //public const uint ERROR_DS_NO_ATTRIBUTE_OR_VALUE = 8202; - //public const uint ERROR_DS_INVALID_ATTRIBUTE_SYNTAX = 8203; - //public const uint ERROR_DS_ATTRIBUTE_TYPE_UNDEFINED = 8204; - //public const uint ERROR_DS_ATTRIBUTE_OR_VALUE_EXISTS = 8205; - //public const uint ERROR_DS_BUSY = 8206; - //public const uint ERROR_DS_UNAVAILABLE = 8207; - //public const uint ERROR_DS_NO_RIDS_ALLOCATED = 8208; - //public const uint ERROR_DS_NO_MORE_RIDS = 8209; - //public const uint ERROR_DS_INCORRECT_ROLE_OWNER = 8210; - //public const uint ERROR_DS_RIDMGR_INIT_ERROR = 8211; - //public const uint ERROR_DS_OBJ_CLASS_VIOLATION = 8212; - //public const uint ERROR_DS_CANT_ON_NON_LEAF = 8213; - //public const uint ERROR_DS_CANT_ON_RDN = 8214; - //public const uint ERROR_DS_CANT_MOD_OBJ_CLASS = 8215; - //public const uint ERROR_DS_CROSS_DOM_MOVE_ERROR = 8216; - //public const uint ERROR_DS_GC_NOT_AVAILABLE = 8217; - //public const uint ERROR_SHARED_POLICY = 8218; - //public const uint ERROR_POLICY_OBJECT_NOT_FOUND = 8219; - //public const uint ERROR_POLICY_ONLY_IN_DS = 8220; - //public const uint ERROR_PROMOTION_ACTIVE = 8221; - //public const uint ERROR_NO_PROMOTION_ACTIVE = 8222; - //public const uint ERROR_DS_OPERATIONS_ERROR = 8224; - //public const uint ERROR_DS_PROTOCOL_ERROR = 8225; - //public const uint ERROR_DS_TIMELIMIT_EXCEEDED = 8226; - //public const uint ERROR_DS_SIZELIMIT_EXCEEDED = 8227; - //public const uint ERROR_DS_ADMIN_LIMIT_EXCEEDED = 8228; - //public const uint ERROR_DS_COMPARE_FALSE = 8229; - //public const uint ERROR_DS_COMPARE_TRUE = 8230; - //public const uint ERROR_DS_AUTH_METHOD_NOT_SUPPORTED = 8231; - //public const uint ERROR_DS_STRONG_AUTH_REQUIRED = 8232; - //public const uint ERROR_DS_INAPPROPRIATE_AUTH = 8233; - //public const uint ERROR_DS_AUTH_UNKNOWN = 8234; - //public const uint ERROR_DS_REFERRAL = 8235; - //public const uint ERROR_DS_UNAVAILABLE_CRIT_EXTENSION = 8236; - //public const uint ERROR_DS_CONFIDENTIALITY_REQUIRED = 8237; - //public const uint ERROR_DS_INAPPROPRIATE_MATCHING = 8238; - //public const uint ERROR_DS_CONSTRAINT_VIOLATION = 8239; - //public const uint ERROR_DS_NO_SUCH_OBJECT = 8240; - //public const uint ERROR_DS_ALIAS_PROBLEM = 8241; - //public const uint ERROR_DS_INVALID_DN_SYNTAX = 8242; - //public const uint ERROR_DS_IS_LEAF = 8243; - //public const uint ERROR_DS_ALIAS_DEREF_PROBLEM = 8244; - //public const uint ERROR_DS_UNWILLING_TO_PERFORM = 8245; - //public const uint ERROR_DS_LOOP_DETECT = 8246; - //public const uint ERROR_DS_NAMING_VIOLATION = 8247; - //public const uint ERROR_DS_OBJECT_RESULTS_TOO_LARGE = 8248; - //public const uint ERROR_DS_AFFECTS_MULTIPLE_DSAS = 8249; - //public const uint ERROR_DS_SERVER_DOWN = 8250; - //public const uint ERROR_DS_LOCAL_ERROR = 8251; - //public const uint ERROR_DS_ENCODING_ERROR = 8252; - //public const uint ERROR_DS_DECODING_ERROR = 8253; - //public const uint ERROR_DS_FILTER_UNKNOWN = 8254; - //public const uint ERROR_DS_PARAM_ERROR = 8255; - //public const uint ERROR_DS_NOT_SUPPORTED = 8256; - //public const uint ERROR_DS_NO_RESULTS_RETURNED = 8257; - //public const uint ERROR_DS_CONTROL_NOT_FOUND = 8258; - //public const uint ERROR_DS_CLIENT_LOOP = 8259; - //public const uint ERROR_DS_REFERRAL_LIMIT_EXCEEDED = 8260; - //public const uint ERROR_DS_SORT_CONTROL_MISSING = 8261; - //public const uint ERROR_DS_OFFSET_RANGE_ERROR = 8262; - //public const uint ERROR_DS_ROOT_MUST_BE_NC = 8301; - //public const uint ERROR_DS_ADD_REPLICA_INHIBITED = 8302; - //public const uint ERROR_DS_ATT_NOT_DEF_IN_SCHEMA = 8303; - //public const uint ERROR_DS_MAX_OBJ_SIZE_EXCEEDED = 8304; - //public const uint ERROR_DS_OBJ_STRING_NAME_EXISTS = 8305; - //public const uint ERROR_DS_NO_RDN_DEFINED_IN_SCHEMA = 8306; - //public const uint ERROR_DS_RDN_DOESNT_MATCH_SCHEMA = 8307; - //public const uint ERROR_DS_NO_REQUESTED_ATTS_FOUND = 8308; - //public const uint ERROR_DS_USER_BUFFER_TO_SMALL = 8309; - //public const uint ERROR_DS_ATT_IS_NOT_ON_OBJ = 8310; - //public const uint ERROR_DS_ILLEGAL_MOD_OPERATION = 8311; - //public const uint ERROR_DS_OBJ_TOO_LARGE = 8312; - //public const uint ERROR_DS_BAD_INSTANCE_TYPE = 8313; - //public const uint ERROR_DS_MASTERDSA_REQUIRED = 8314; - //public const uint ERROR_DS_OBJECT_CLASS_REQUIRED = 8315; - //public const uint ERROR_DS_MISSING_REQUIRED_ATT = 8316; - //public const uint ERROR_DS_ATT_NOT_DEF_FOR_CLASS = 8317; - //public const uint ERROR_DS_ATT_ALREADY_EXISTS = 8318; - //public const uint ERROR_DS_CANT_ADD_ATT_VALUES = 8320; - //public const uint ERROR_DS_SINGLE_VALUE_CONSTRAINT = 8321; - //public const uint ERROR_DS_RANGE_CONSTRAINT = 8322; - //public const uint ERROR_DS_ATT_VAL_ALREADY_EXISTS = 8323; - //public const uint ERROR_DS_CANT_REM_MISSING_ATT = 8324; - //public const uint ERROR_DS_CANT_REM_MISSING_ATT_VAL = 8325; - //public const uint ERROR_DS_ROOT_CANT_BE_SUBREF = 8326; - //public const uint ERROR_DS_NO_CHAINING = 8327; - //public const uint ERROR_DS_NO_CHAINED_EVAL = 8328; - //public const uint ERROR_DS_NO_PARENT_OBJECT = 8329; - //public const uint ERROR_DS_PARENT_IS_AN_ALIAS = 8330; - //public const uint ERROR_DS_CANT_MIX_MASTER_AND_REPS = 8331; - //public const uint ERROR_DS_CHILDREN_EXIST = 8332; - //public const uint ERROR_DS_OBJ_NOT_FOUND = 8333; - //public const uint ERROR_DS_ALIASED_OBJ_MISSING = 8334; - //public const uint ERROR_DS_BAD_NAME_SYNTAX = 8335; - //public const uint ERROR_DS_ALIAS_POINTS_TO_ALIAS = 8336; - //public const uint ERROR_DS_CANT_DEREF_ALIAS = 8337; - //public const uint ERROR_DS_OUT_OF_SCOPE = 8338; - //public const uint ERROR_DS_OBJECT_BEING_REMOVED = 8339; - //public const uint ERROR_DS_CANT_DELETE_DSA_OBJ = 8340; - //public const uint ERROR_DS_GENERIC_ERROR = 8341; - //public const uint ERROR_DS_DSA_MUST_BE_INT_MASTER = 8342; - //public const uint ERROR_DS_CLASS_NOT_DSA = 8343; - //public const uint ERROR_DS_INSUFF_ACCESS_RIGHTS = 8344; - //public const uint ERROR_DS_ILLEGAL_SUPERIOR = 8345; - //public const uint ERROR_DS_ATTRIBUTE_OWNED_BY_SAM = 8346; - //public const uint ERROR_DS_NAME_TOO_MANY_PARTS = 8347; - //public const uint ERROR_DS_NAME_TOO_LONG = 8348; - //public const uint ERROR_DS_NAME_VALUE_TOO_LONG = 8349; - //public const uint ERROR_DS_NAME_UNPARSEABLE = 8350; - //public const uint ERROR_DS_NAME_TYPE_UNKNOWN = 8351; - //public const uint ERROR_DS_NOT_AN_OBJECT = 8352; - //public const uint ERROR_DS_SEC_DESC_TOO_SHORT = 8353; - //public const uint ERROR_DS_SEC_DESC_INVALID = 8354; - //public const uint ERROR_DS_NO_DELETED_NAME = 8355; - //public const uint ERROR_DS_SUBREF_MUST_HAVE_PARENT = 8356; - //public const uint ERROR_DS_NCNAME_MUST_BE_NC = 8357; - //public const uint ERROR_DS_CANT_ADD_SYSTEM_ONLY = 8358; - //public const uint ERROR_DS_CLASS_MUST_BE_CONCRETE = 8359; - //public const uint ERROR_DS_INVALID_DMD = 8360; - //public const uint ERROR_DS_OBJ_GUID_EXISTS = 8361; - //public const uint ERROR_DS_NOT_ON_BACKLINK = 8362; - //public const uint ERROR_DS_NO_CROSSREF_FOR_NC = 8363; - //public const uint ERROR_DS_SHUTTING_DOWN = 8364; - //public const uint ERROR_DS_UNKNOWN_OPERATION = 8365; - //public const uint ERROR_DS_INVALID_ROLE_OWNER = 8366; - //public const uint ERROR_DS_COULDNT_CONTACT_FSMO = 8367; - //public const uint ERROR_DS_CROSS_NC_DN_RENAME = 8368; - //public const uint ERROR_DS_CANT_MOD_SYSTEM_ONLY = 8369; - //public const uint ERROR_DS_REPLICATOR_ONLY = 8370; - //public const uint ERROR_DS_OBJ_CLASS_NOT_DEFINED = 8371; - //public const uint ERROR_DS_OBJ_CLASS_NOT_SUBCLASS = 8372; - //public const uint ERROR_DS_NAME_REFERENCE_INVALID = 8373; - //public const uint ERROR_DS_CROSS_REF_EXISTS = 8374; - //public const uint ERROR_DS_CANT_DEL_MASTER_CROSSREF = 8375; - //public const uint ERROR_DS_SUBTREE_NOTIFY_NOT_NC_HEAD = 8376; - //public const uint ERROR_DS_NOTIFY_FILTER_TOO_COMPLEX = 8377; - //public const uint ERROR_DS_DUP_RDN = 8378; - //public const uint ERROR_DS_DUP_OID = 8379; - //public const uint ERROR_DS_DUP_MAPI_ID = 8380; - //public const uint ERROR_DS_DUP_SCHEMA_ID_GUID = 8381; - //public const uint ERROR_DS_DUP_LDAP_DISPLAY_NAME = 8382; - //public const uint ERROR_DS_SEMANTIC_ATT_TEST = 8383; - //public const uint ERROR_DS_SYNTAX_MISMATCH = 8384; - //public const uint ERROR_DS_EXISTS_IN_MUST_HAVE = 8385; - //public const uint ERROR_DS_EXISTS_IN_MAY_HAVE = 8386; - //public const uint ERROR_DS_NONEXISTENT_MAY_HAVE = 8387; - //public const uint ERROR_DS_NONEXISTENT_MUST_HAVE = 8388; - //public const uint ERROR_DS_AUX_CLS_TEST_FAIL = 8389; - //public const uint ERROR_DS_NONEXISTENT_POSS_SUP = 8390; - //public const uint ERROR_DS_SUB_CLS_TEST_FAIL = 8391; - //public const uint ERROR_DS_BAD_RDN_ATT_ID_SYNTAX = 8392; - //public const uint ERROR_DS_EXISTS_IN_AUX_CLS = 8393; - //public const uint ERROR_DS_EXISTS_IN_SUB_CLS = 8394; - //public const uint ERROR_DS_EXISTS_IN_POSS_SUP = 8395; - //public const uint ERROR_DS_RECALCSCHEMA_FAILED = 8396; - //public const uint ERROR_DS_TREE_DELETE_NOT_FINISHED = 8397; - //public const uint ERROR_DS_CANT_DELETE = 8398; - //public const uint ERROR_DS_ATT_SCHEMA_REQ_ID = 8399; - //public const uint ERROR_DS_BAD_ATT_SCHEMA_SYNTAX = 8400; - //public const uint ERROR_DS_CANT_CACHE_ATT = 8401; - //public const uint ERROR_DS_CANT_CACHE_CLASS = 8402; - //public const uint ERROR_DS_CANT_REMOVE_ATT_CACHE = 8403; - //public const uint ERROR_DS_CANT_REMOVE_CLASS_CACHE = 8404; - //public const uint ERROR_DS_CANT_RETRIEVE_DN = 8405; - //public const uint ERROR_DS_MISSING_SUPREF = 8406; - //public const uint ERROR_DS_CANT_RETRIEVE_INSTANCE = 8407; - //public const uint ERROR_DS_CODE_INCONSISTENCY = 8408; - //public const uint ERROR_DS_DATABASE_ERROR = 8409; - //public const uint ERROR_DS_GOVERNSID_MISSING = 8410; - //public const uint ERROR_DS_MISSING_EXPECTED_ATT = 8411; - //public const uint ERROR_DS_NCNAME_MISSING_CR_REF = 8412; - //public const uint ERROR_DS_SECURITY_CHECKING_ERROR = 8413; - //public const uint ERROR_DS_SCHEMA_NOT_LOADED = 8414; - //public const uint ERROR_DS_SCHEMA_ALLOC_FAILED = 8415; - //public const uint ERROR_DS_ATT_SCHEMA_REQ_SYNTAX = 8416; - //public const uint ERROR_DS_GCVERIFY_ERROR = 8417; - //public const uint ERROR_DS_DRA_SCHEMA_MISMATCH = 8418; - //public const uint ERROR_DS_CANT_FIND_DSA_OBJ = 8419; - //public const uint ERROR_DS_CANT_FIND_EXPECTED_NC = 8420; - //public const uint ERROR_DS_CANT_FIND_NC_IN_CACHE = 8421; - //public const uint ERROR_DS_CANT_RETRIEVE_CHILD = 8422; - //public const uint ERROR_DS_SECURITY_ILLEGAL_MODIFY = 8423; - //public const uint ERROR_DS_CANT_REPLACE_HIDDEN_REC = 8424; - //public const uint ERROR_DS_BAD_HIERARCHY_FILE = 8425; - //public const uint ERROR_DS_BUILD_HIERARCHY_TABLE_FAILED = 8426; - //public const uint ERROR_DS_CONFIG_PARAM_MISSING = 8427; - //public const uint ERROR_DS_COUNTING_AB_INDICES_FAILED = 8428; - //public const uint ERROR_DS_HIERARCHY_TABLE_MALLOC_FAILED = 8429; - //public const uint ERROR_DS_INTERNAL_FAILURE = 8430; - //public const uint ERROR_DS_UNKNOWN_ERROR = 8431; - //public const uint ERROR_DS_ROOT_REQUIRES_CLASS_TOP = 8432; - //public const uint ERROR_DS_REFUSING_FSMO_ROLES = 8433; - //public const uint ERROR_DS_MISSING_FSMO_SETTINGS = 8434; - //public const uint ERROR_DS_UNABLE_TO_SURRENDER_ROLES = 8435; - //public const uint ERROR_DS_DRA_GENERIC = 8436; - //public const uint ERROR_DS_DRA_INVALID_PARAMETER = 8437; - //public const uint ERROR_DS_DRA_BUSY = 8438; - //public const uint ERROR_DS_DRA_BAD_DN = 8439; - //public const uint ERROR_DS_DRA_BAD_NC = 8440; - //public const uint ERROR_DS_DRA_DN_EXISTS = 8441; - //public const uint ERROR_DS_DRA_INTERNAL_ERROR = 8442; - //public const uint ERROR_DS_DRA_INCONSISTENT_DIT = 8443; - //public const uint ERROR_DS_DRA_CONNECTION_FAILED = 8444; - //public const uint ERROR_DS_DRA_BAD_INSTANCE_TYPE = 8445; - //public const uint ERROR_DS_DRA_OUT_OF_MEM = 8446; - //public const uint ERROR_DS_DRA_MAIL_PROBLEM = 8447; - //public const uint ERROR_DS_DRA_REF_ALREADY_EXISTS = 8448; - //public const uint ERROR_DS_DRA_REF_NOT_FOUND = 8449; - //public const uint ERROR_DS_DRA_OBJ_IS_REP_SOURCE = 8450; - //public const uint ERROR_DS_DRA_DB_ERROR = 8451; - //public const uint ERROR_DS_DRA_NO_REPLICA = 8452; - //public const uint ERROR_DS_DRA_ACCESS_DENIED = 8453; - //public const uint ERROR_DS_DRA_NOT_SUPPORTED = 8454; - //public const uint ERROR_DS_DRA_RPC_CANCELLED = 8455; - //public const uint ERROR_DS_DRA_SOURCE_DISABLED = 8456; - //public const uint ERROR_DS_DRA_SINK_DISABLED = 8457; - //public const uint ERROR_DS_DRA_NAME_COLLISION = 8458; - //public const uint ERROR_DS_DRA_SOURCE_REINSTALLED = 8459; - //public const uint ERROR_DS_DRA_MISSING_PARENT = 8460; - //public const uint ERROR_DS_DRA_PREEMPTED = 8461; - //public const uint ERROR_DS_DRA_ABANDON_SYNC = 8462; - //public const uint ERROR_DS_DRA_SHUTDOWN = 8463; - //public const uint ERROR_DS_DRA_INCOMPATIBLE_PARTIAL_SET = 8464; - //public const uint ERROR_DS_DRA_SOURCE_IS_PARTIAL_REPLICA = 8465; - //public const uint ERROR_DS_DRA_EXTN_CONNECTION_FAILED = 8466; - //public const uint ERROR_DS_INSTALL_SCHEMA_MISMATCH = 8467; - //public const uint ERROR_DS_DUP_LINK_ID = 8468; - //public const uint ERROR_DS_NAME_ERROR_RESOLVING = 8469; - //public const uint ERROR_DS_NAME_ERROR_NOT_FOUND = 8470; - //public const uint ERROR_DS_NAME_ERROR_NOT_UNIQUE = 8471; - //public const uint ERROR_DS_NAME_ERROR_NO_MAPPING = 8472; - //public const uint ERROR_DS_NAME_ERROR_DOMAIN_ONLY = 8473; - //public const uint ERROR_DS_NAME_ERROR_NO_SYNTACTICAL_MAPPING = 8474; - //public const uint ERROR_DS_CONSTRUCTED_ATT_MOD = 8475; - //public const uint ERROR_DS_WRONG_OM_OBJ_CLASS = 8476; - //public const uint ERROR_DS_DRA_REPL_PENDING = 8477; - //public const uint ERROR_DS_DS_REQUIRED = 8478; - //public const uint ERROR_DS_INVALID_LDAP_DISPLAY_NAME = 8479; - //public const uint ERROR_DS_NON_BASE_SEARCH = 8480; - //public const uint ERROR_DS_CANT_RETRIEVE_ATTS = 8481; - //public const uint ERROR_DS_BACKLINK_WITHOUT_LINK = 8482; - //public const uint ERROR_DS_EPOCH_MISMATCH = 8483; - //public const uint ERROR_DS_SRC_NAME_MISMATCH = 8484; - //public const uint ERROR_DS_SRC_AND_DST_NC_IDENTICAL = 8485; - //public const uint ERROR_DS_DST_NC_MISMATCH = 8486; - //public const uint ERROR_DS_NOT_AUTHORITIVE_FOR_DST_NC = 8487; - //public const uint ERROR_DS_SRC_GUID_MISMATCH = 8488; - //public const uint ERROR_DS_CANT_MOVE_DELETED_OBJECT = 8489; - //public const uint ERROR_DS_PDC_OPERATION_IN_PROGRESS = 8490; - //public const uint ERROR_DS_CROSS_DOMAIN_CLEANUP_REQD = 8491; - //public const uint ERROR_DS_ILLEGAL_XDOM_MOVE_OPERATION = 8492; - //public const uint ERROR_DS_CANT_WITH_ACCT_GROUP_MEMBERSHPS = 8493; - //public const uint ERROR_DS_NC_MUST_HAVE_NC_PARENT = 8494; - //public const uint ERROR_DS_CR_IMPOSSIBLE_TO_VALIDATE = 8495; - //public const uint ERROR_DS_DST_DOMAIN_NOT_NATIVE = 8496; - //public const uint ERROR_DS_MISSING_INFRASTRUCTURE_CONTAINER = 8497; - //public const uint ERROR_DS_CANT_MOVE_ACCOUNT_GROUP = 8498; - //public const uint ERROR_DS_CANT_MOVE_RESOURCE_GROUP = 8499; - //public const uint ERROR_DS_INVALID_SEARCH_FLAG = 8500; - //public const uint ERROR_DS_NO_TREE_DELETE_ABOVE_NC = 8501; - //public const uint ERROR_DS_COULDNT_LOCK_TREE_FOR_DELETE = 8502; - //public const uint ERROR_DS_COULDNT_IDENTIFY_OBJECTS_FOR_TREE_DELETE = 8503; - //public const uint ERROR_DS_SAM_INIT_FAILURE = 8504; - //public const uint ERROR_DS_SENSITIVE_GROUP_VIOLATION = 8505; - //public const uint ERROR_DS_CANT_MOD_PRIMARYGROUPID = 8506; - //public const uint ERROR_DS_ILLEGAL_BASE_SCHEMA_MOD = 8507; - //public const uint ERROR_DS_NONSAFE_SCHEMA_CHANGE = 8508; - //public const uint ERROR_DS_SCHEMA_UPDATE_DISALLOWED = 8509; - //public const uint ERROR_DS_CANT_CREATE_UNDER_SCHEMA = 8510; - //public const uint ERROR_DS_INSTALL_NO_SRC_SCH_VERSION = 8511; - //public const uint ERROR_DS_INSTALL_NO_SCH_VERSION_IN_INIFILE = 8512; - //public const uint ERROR_DS_INVALID_GROUP_TYPE = 8513; - //public const uint ERROR_DS_NO_NEST_GLOBALGROUP_IN_MIXEDDOMAIN = 8514; - //public const uint ERROR_DS_NO_NEST_LOCALGROUP_IN_MIXEDDOMAIN = 8515; - //public const uint ERROR_DS_GLOBAL_CANT_HAVE_LOCAL_MEMBER = 8516; - //public const uint ERROR_DS_GLOBAL_CANT_HAVE_UNIVERSAL_MEMBER = 8517; - //public const uint ERROR_DS_UNIVERSAL_CANT_HAVE_LOCAL_MEMBER = 8518; - //public const uint ERROR_DS_GLOBAL_CANT_HAVE_CROSSDOMAIN_MEMBER = 8519; - //public const uint ERROR_DS_LOCAL_CANT_HAVE_CROSSDOMAIN_LOCAL_MEMBER = 8520; - //public const uint ERROR_DS_HAVE_PRIMARY_MEMBERS = 8521; - //public const uint ERROR_DS_STRING_SD_CONVERSION_FAILED = 8522; - //public const uint ERROR_DS_NAMING_MASTER_GC = 8523; - //public const uint ERROR_DS_DNS_LOOKUP_FAILURE = 8524; - //public const uint ERROR_DS_COULDNT_UPDATE_SPNS = 8525; - //public const uint ERROR_DS_CANT_RETRIEVE_SD = 8526; - //public const uint ERROR_DS_KEY_NOT_UNIQUE = 8527; - //public const uint ERROR_DS_WRONG_LINKED_ATT_SYNTAX = 8528; - //public const uint ERROR_DS_SAM_NEED_BOOTKEY_PASSWORD = 8529; - //public const uint ERROR_DS_SAM_NEED_BOOTKEY_FLOPPY = 8530; - //public const uint ERROR_DS_CANT_START = 8531; - //public const uint ERROR_DS_INIT_FAILURE = 8532; - //public const uint ERROR_DS_NO_PKT_PRIVACY_ON_CONNECTION = 8533; - //public const uint ERROR_DS_SOURCE_DOMAIN_IN_FOREST = 8534; - //public const uint ERROR_DS_DESTINATION_DOMAIN_NOT_IN_FOREST = 8535; - //public const uint ERROR_DS_DESTINATION_AUDITING_NOT_ENABLED = 8536; - //public const uint ERROR_DS_CANT_FIND_DC_FOR_SRC_DOMAIN = 8537; - //public const uint ERROR_DS_SRC_OBJ_NOT_GROUP_OR_USER = 8538; - //public const uint ERROR_DS_SRC_SID_EXISTS_IN_FOREST = 8539; - //public const uint ERROR_DS_SRC_AND_DST_OBJECT_CLASS_MISMATCH = 8540; - //public const uint ERROR_SAM_INIT_FAILURE = 8541; - //public const uint ERROR_DS_DRA_SCHEMA_INFO_SHIP = 8542; - //public const uint ERROR_DS_DRA_SCHEMA_CONFLICT = 8543; - //public const uint ERROR_DS_DRA_EARLIER_SCHEMA_CONFLICT = 8544; - //public const uint ERROR_DS_DRA_OBJ_NC_MISMATCH = 8545; - //public const uint ERROR_DS_NC_STILL_HAS_DSAS = 8546; - //public const uint ERROR_DS_GC_REQUIRED = 8547; - //public const uint ERROR_DS_LOCAL_MEMBER_OF_LOCAL_ONLY = 8548; - //public const uint ERROR_DS_NO_FPO_IN_UNIVERSAL_GROUPS = 8549; - //public const uint ERROR_DS_CANT_ADD_TO_GC = 8550; - //public const uint ERROR_DS_NO_CHECKPOINT_WITH_PDC = 8551; - //public const uint ERROR_DS_SOURCE_AUDITING_NOT_ENABLED = 8552; - //public const uint ERROR_DS_CANT_CREATE_IN_NONDOMAIN_NC = 8553; - //public const uint ERROR_DS_INVALID_NAME_FOR_SPN = 8554; - //public const uint ERROR_DS_FILTER_USES_CONTRUCTED_ATTRS = 8555; - //public const uint ERROR_DS_UNICODEPWD_NOT_IN_QUOTES = 8556; - //public const uint ERROR_DS_MACHINE_ACCOUNT_QUOTA_EXCEEDED = 8557; - //public const uint ERROR_DS_MUST_BE_RUN_ON_DST_DC = 8558; - //public const uint ERROR_DS_SRC_DC_MUST_BE_SP4_OR_GREATER = 8559; - //public const uint ERROR_DS_CANT_TREE_DELETE_CRITICAL_OBJ = 8560; - //public const uint ERROR_DS_INIT_FAILURE_CONSOLE = 8561; - //public const uint ERROR_DS_SAM_INIT_FAILURE_CONSOLE = 8562; - //public const uint ERROR_DS_FOREST_VERSION_TOO_HIGH = 8563; - //public const uint ERROR_DS_DOMAIN_VERSION_TOO_HIGH = 8564; - //public const uint ERROR_DS_FOREST_VERSION_TOO_LOW = 8565; - //public const uint ERROR_DS_DOMAIN_VERSION_TOO_LOW = 8566; - //public const uint ERROR_DS_INCOMPATIBLE_VERSION = 8567; - //public const uint ERROR_DS_LOW_DSA_VERSION = 8568; - //public const uint ERROR_DS_NO_BEHAVIOR_VERSION_IN_MIXEDDOMAIN = 8569; - //public const uint ERROR_DS_NOT_SUPPORTED_SORT_ORDER = 8570; - //public const uint ERROR_DS_NAME_NOT_UNIQUE = 8571; - //public const uint ERROR_DS_MACHINE_ACCOUNT_CREATED_PRENT4 = 8572; - //public const uint ERROR_DS_OUT_OF_VERSION_STORE = 8573; - //public const uint ERROR_DS_INCOMPATIBLE_CONTROLS_USED = 8574; - //public const uint ERROR_DS_NO_REF_DOMAIN = 8575; - //public const uint ERROR_DS_RESERVED_LINK_ID = 8576; - //public const uint ERROR_DS_LINK_ID_NOT_AVAILABLE = 8577; - //public const uint ERROR_DS_AG_CANT_HAVE_UNIVERSAL_MEMBER = 8578; - //public const uint ERROR_DS_MODIFYDN_DISALLOWED_BY_INSTANCE_TYPE = 8579; - //public const uint ERROR_DS_NO_OBJECT_MOVE_IN_SCHEMA_NC = 8580; - //public const uint ERROR_DS_MODIFYDN_DISALLOWED_BY_FLAG = 8581; - //public const uint ERROR_DS_MODIFYDN_WRONG_GRANDPARENT = 8582; - //public const uint ERROR_DS_NAME_ERROR_TRUST_REFERRAL = 8583; - //public const uint ERROR_NOT_SUPPORTED_ON_STANDARD_SERVER = 8584; - //public const uint ERROR_DS_CANT_ACCESS_REMOTE_PART_OF_AD = 8585; - //public const uint ERROR_DS_CR_IMPOSSIBLE_TO_VALIDATE_V2 = 8586; - //public const uint ERROR_DS_THREAD_LIMIT_EXCEEDED = 8587; - //public const uint ERROR_DS_NOT_CLOSEST = 8588; - //public const uint ERROR_DS_CANT_DERIVE_SPN_WITHOUT_SERVER_REF = 8589; - //public const uint ERROR_DS_SINGLE_USER_MODE_FAILED = 8590; - //public const uint ERROR_DS_NTDSCRIPT_SYNTAX_ERROR = 8591; - //public const uint ERROR_DS_NTDSCRIPT_PROCESS_ERROR = 8592; - //public const uint ERROR_DS_DIFFERENT_REPL_EPOCHS = 8593; - //public const uint ERROR_DS_DRS_EXTENSIONS_CHANGED = 8594; - //public const uint ERROR_DS_REPLICA_SET_CHANGE_NOT_ALLOWED_ON_DISABLED_CR = 8595; - //public const uint ERROR_DS_NO_MSDS_INTID = 8596; - //public const uint ERROR_DS_DUP_MSDS_INTID = 8597; - //public const uint ERROR_DS_EXISTS_IN_RDNATTID = 8598; - //public const uint ERROR_DS_AUTHORIZATION_FAILED = 8599; - //public const uint ERROR_DS_INVALID_SCRIPT = 8600; - //public const uint ERROR_DS_REMOTE_CROSSREF_OP_FAILED = 8601; - //public const uint ERROR_DS_CROSS_REF_BUSY = 8602; - //public const uint ERROR_DS_CANT_DERIVE_SPN_FOR_DELETED_DOMAIN = 8603; - //public const uint ERROR_DS_CANT_DEMOTE_WITH_WRITEABLE_NC = 8604; - //public const uint ERROR_DS_DUPLICATE_ID_FOUND = 8605; - //public const uint ERROR_DS_INSUFFICIENT_ATTR_TO_CREATE_OBJECT = 8606; - //public const uint ERROR_DS_GROUP_CONVERSION_ERROR = 8607; - //public const uint ERROR_DS_CANT_MOVE_APP_BASIC_GROUP = 8608; - //public const uint ERROR_DS_CANT_MOVE_APP_QUERY_GROUP = 8609; - //public const uint ERROR_DS_ROLE_NOT_VERIFIED = 8610; - //public const uint ERROR_DS_WKO_CONTAINER_CANNOT_BE_SPECIAL = 8611; - //public const uint ERROR_DS_DOMAIN_RENAME_IN_PROGRESS = 8612; - //public const uint ERROR_DS_EXISTING_AD_CHILD_NC = 8613; - //public const uint ERROR_DS_REPL_LIFETIME_EXCEEDED = 8614; - //public const uint ERROR_DS_DISALLOWED_IN_SYSTEM_CONTAINER = 8615; - //public const uint ERROR_DS_LDAP_SEND_QUEUE_FULL = 8616; - //public const uint ERROR_DS_DRA_OUT_SCHEDULE_WINDOW = 8617; - //public const uint DNS_ERROR_RESPONSE_CODES_BASE = 9000; - //public const uint DNS_ERROR_RCODE_NO_ERROR = NO_ERROR; - //public const uint DNS_ERROR_MASK = 0x00002328; - //public const uint DNS_ERROR_RCODE_FORMAT_ERROR = 9001; - //public const uint DNS_ERROR_RCODE_SERVER_FAILURE = 9002; - //public const uint DNS_ERROR_RCODE_NAME_ERROR = 9003; - //public const uint DNS_ERROR_RCODE_NOT_IMPLEMENTED = 9004; - //public const uint DNS_ERROR_RCODE_REFUSED = 9005; - //public const uint DNS_ERROR_RCODE_YXDOMAIN = 9006; - //public const uint DNS_ERROR_RCODE_YXRRSET = 9007; - //public const uint DNS_ERROR_RCODE_NXRRSET = 9008; - //public const uint DNS_ERROR_RCODE_NOTAUTH = 9009; - //public const uint DNS_ERROR_RCODE_NOTZONE = 9010; - //public const uint DNS_ERROR_RCODE_BADSIG = 9016; - //public const uint DNS_ERROR_RCODE_BADKEY = 9017; - //public const uint DNS_ERROR_RCODE_BADTIME = 9018; - //public const uint DNS_ERROR_RCODE_LAST = DNS_ERROR_RCODE_BADTIME; - //public const uint DNS_ERROR_PACKET_FMT_BASE = 9500; - //public const uint DNS_INFO_NO_RECORDS = 9501; - //public const uint DNS_ERROR_BAD_PACKET = 9502; - //public const uint DNS_ERROR_NO_PACKET = 9503; - //public const uint DNS_ERROR_RCODE = 9504; - //public const uint DNS_ERROR_UNSECURE_PACKET = 9505; - //public const uint DNS_STATUS_PACKET_UNSECURE = DNS_ERROR_UNSECURE_PACKET; - //public const uint DNS_ERROR_NO_MEMORY = ERROR_OUTOFMEMORY; - //public const uint DNS_ERROR_INVALID_NAME = ERROR_INVALID_NAME; - //public const uint DNS_ERROR_INVALID_DATA = ERROR_INVALID_DATA; - //public const uint DNS_ERROR_GENERAL_API_BASE = 9550; - //public const uint DNS_ERROR_INVALID_TYPE = 9551; - //public const uint DNS_ERROR_INVALID_IP_ADDRESS = 9552; - //public const uint DNS_ERROR_INVALID_PROPERTY = 9553; - //public const uint DNS_ERROR_TRY_AGAIN_LATER = 9554; - //public const uint DNS_ERROR_NOT_UNIQUE = 9555; - //public const uint DNS_ERROR_NON_RFC_NAME = 9556; - //public const uint DNS_STATUS_FQDN = 9557; - //public const uint DNS_STATUS_DOTTED_NAME = 9558; - //public const uint DNS_STATUS_SINGLE_PART_NAME = 9559; - //public const uint DNS_ERROR_INVALID_NAME_CHAR = 9560; - //public const uint DNS_ERROR_NUMERIC_NAME = 9561; - //public const uint DNS_ERROR_NOT_ALLOWED_ON_ROOT_SERVER = 9562; - //public const uint DNS_ERROR_NOT_ALLOWED_UNDER_DELEGATION = 9563; - //public const uint DNS_ERROR_CANNOT_FIND_ROOT_HINTS = 9564; - //public const uint DNS_ERROR_INCONSISTENT_ROOT_HINTS = 9565; - //public const uint DNS_ERROR_ZONE_BASE = 9600; - //public const uint DNS_ERROR_ZONE_DOES_NOT_EXIST = 9601; - //public const uint DNS_ERROR_NO_ZONE_INFO = 9602; - //public const uint DNS_ERROR_INVALID_ZONE_OPERATION = 9603; - //public const uint DNS_ERROR_ZONE_CONFIGURATION_ERROR = 9604; - //public const uint DNS_ERROR_ZONE_HAS_NO_SOA_RECORD = 9605; - //public const uint DNS_ERROR_ZONE_HAS_NO_NS_RECORDS = 9606; - //public const uint DNS_ERROR_ZONE_LOCKED = 9607; - //public const uint DNS_ERROR_ZONE_CREATION_FAILED = 9608; - //public const uint DNS_ERROR_ZONE_ALREADY_EXISTS = 9609; - //public const uint DNS_ERROR_AUTOZONE_ALREADY_EXISTS = 9610; - //public const uint DNS_ERROR_INVALID_ZONE_TYPE = 9611; - //public const uint DNS_ERROR_SECONDARY_REQUIRES_MASTER_IP = 9612; - //public const uint DNS_ERROR_ZONE_NOT_SECONDARY = 9613; - //public const uint DNS_ERROR_NEED_SECONDARY_ADDRESSES = 9614; - //public const uint DNS_ERROR_WINS_INIT_FAILED = 9615; - //public const uint DNS_ERROR_NEED_WINS_SERVERS = 9616; - //public const uint DNS_ERROR_NBSTAT_INIT_FAILED = 9617; - //public const uint DNS_ERROR_SOA_DELETE_INVALID = 9618; - //public const uint DNS_ERROR_FORWARDER_ALREADY_EXISTS = 9619; - //public const uint DNS_ERROR_ZONE_REQUIRES_MASTER_IP = 9620; - //public const uint DNS_ERROR_ZONE_IS_SHUTDOWN = 9621; - //public const uint DNS_ERROR_DATAFILE_BASE = 9650; - //public const uint DNS_ERROR_PRIMARY_REQUIRES_DATAFILE = 9651; - //public const uint DNS_ERROR_INVALID_DATAFILE_NAME = 9652; - //public const uint DNS_ERROR_DATAFILE_OPEN_FAILURE = 9653; - //public const uint DNS_ERROR_FILE_WRITEBACK_FAILED = 9654; - //public const uint DNS_ERROR_DATAFILE_PARSING = 9655; - //public const uint DNS_ERROR_DATABASE_BASE = 9700; - //public const uint DNS_ERROR_RECORD_DOES_NOT_EXIST = 9701; - //public const uint DNS_ERROR_RECORD_FORMAT = 9702; - //public const uint DNS_ERROR_NODE_CREATION_FAILED = 9703; - //public const uint DNS_ERROR_UNKNOWN_RECORD_TYPE = 9704; - //public const uint DNS_ERROR_RECORD_TIMED_OUT = 9705; - //public const uint DNS_ERROR_NAME_NOT_IN_ZONE = 9706; - //public const uint DNS_ERROR_CNAME_LOOP = 9707; - //public const uint DNS_ERROR_NODE_IS_CNAME = 9708; - //public const uint DNS_ERROR_CNAME_COLLISION = 9709; - //public const uint DNS_ERROR_RECORD_ONLY_AT_ZONE_ROOT = 9710; - //public const uint DNS_ERROR_RECORD_ALREADY_EXISTS = 9711; - //public const uint DNS_ERROR_SECONDARY_DATA = 9712; - //public const uint DNS_ERROR_NO_CREATE_CACHE_DATA = 9713; - //public const uint DNS_ERROR_NAME_DOES_NOT_EXIST = 9714; - //public const uint DNS_WARNING_PTR_CREATE_FAILED = 9715; - //public const uint DNS_WARNING_DOMAIN_UNDELETED = 9716; - //public const uint DNS_ERROR_DS_UNAVAILABLE = 9717; - //public const uint DNS_ERROR_DS_ZONE_ALREADY_EXISTS = 9718; - //public const uint DNS_ERROR_NO_BOOTFILE_IF_DS_ZONE = 9719; - //public const uint DNS_ERROR_OPERATION_BASE = 9750; - //public const uint DNS_INFO_AXFR_COMPLETE = 9751; - //public const uint DNS_ERROR_AXFR = 9752; - //public const uint DNS_INFO_ADDED_LOCAL_WINS = 9753; - //public const uint DNS_ERROR_SECURE_BASE = 9800; - //public const uint DNS_STATUS_CONTINUE_NEEDED = 9801; - //public const uint DNS_ERROR_SETUP_BASE = 9850; - //public const uint DNS_ERROR_NO_TCPIP = 9851; - //public const uint DNS_ERROR_NO_DNS_SERVERS = 9852; - //public const uint DNS_ERROR_DP_BASE = 9900; - //public const uint DNS_ERROR_DP_DOES_NOT_EXIST = 9901; - //public const uint DNS_ERROR_DP_ALREADY_EXISTS = 9902; - //public const uint DNS_ERROR_DP_NOT_ENLISTED = 9903; - //public const uint DNS_ERROR_DP_ALREADY_ENLISTED = 9904; - //public const uint DNS_ERROR_DP_NOT_AVAILABLE = 9905; - //public const uint DNS_ERROR_DP_FSMO_ERROR = 9906; - //public const uint WSABASEERR = 10000; - //public const uint WSAEINTR = 10004; - //public const uint WSAEBADF = 10009; - //public const uint WSAEACCES = 10013; - //public const uint WSAEFAULT = 10014; - //public const uint WSAEINVAL = 10022; - //public const uint WSAEMFILE = 10024; - //public const uint WSAEWOULDBLOCK = 10035; - //public const uint WSAEINPROGRESS = 10036; - //public const uint WSAEALREADY = 10037; - //public const uint WSAENOTSOCK = 10038; - //public const uint WSAEDESTADDRREQ = 10039; - //public const uint WSAEMSGSIZE = 10040; - //public const uint WSAEPROTOTYPE = 10041; - //public const uint WSAENOPROTOOPT = 10042; - //public const uint WSAEPROTONOSUPPORT = 10043; - //public const uint WSAESOCKTNOSUPPORT = 10044; - //public const uint WSAEOPNOTSUPP = 10045; - //public const uint WSAEPFNOSUPPORT = 10046; - //public const uint WSAEAFNOSUPPORT = 10047; - //public const uint WSAEADDRINUSE = 10048; - //public const uint WSAEADDRNOTAVAIL = 10049; - //public const uint WSAENETDOWN = 10050; - //public const uint WSAENETUNREACH = 10051; - //public const uint WSAENETRESET = 10052; - //public const uint WSAECONNABORTED = 10053; - //public const uint WSAECONNRESET = 10054; - //public const uint WSAENOBUFS = 10055; - //public const uint WSAEISCONN = 10056; - //public const uint WSAENOTCONN = 10057; - //public const uint WSAESHUTDOWN = 10058; - //public const uint WSAETOOMANYREFS = 10059; - //public const uint WSAETIMEDOUT = 10060; - //public const uint WSAECONNREFUSED = 10061; - //public const uint WSAELOOP = 10062; - //public const uint WSAENAMETOOLONG = 10063; - //public const uint WSAEHOSTDOWN = 10064; - //public const uint WSAEHOSTUNREACH = 10065; - //public const uint WSAENOTEMPTY = 10066; - //public const uint WSAEPROCLIM = 10067; - //public const uint WSAEUSERS = 10068; - //public const uint WSAEDQUOT = 10069; - //public const uint WSAESTALE = 10070; - //public const uint WSAEREMOTE = 10071; - //public const uint WSASYSNOTREADY = 10091; - //public const uint WSAVERNOTSUPPORTED = 10092; - //public const uint WSANOTINITIALISED = 10093; - //public const uint WSAEDISCON = 10101; - //public const uint WSAENOMORE = 10102; - //public const uint WSAECANCELLED = 10103; - //public const uint WSAEINVALIDPROCTABLE = 10104; - //public const uint WSAEINVALIDPROVIDER = 10105; - //public const uint WSAEPROVIDERFAILEDINIT = 10106; - //public const uint WSASYSCALLFAILURE = 10107; - //public const uint WSASERVICE_NOT_FOUND = 10108; - //public const uint WSATYPE_NOT_FOUND = 10109; - //public const uint WSA_E_NO_MORE = 10110; - //public const uint WSA_E_CANCELLED = 10111; - //public const uint WSAEREFUSED = 10112; - //public const uint WSAHOST_NOT_FOUND = 11001; - //public const uint WSATRY_AGAIN = 11002; - //public const uint WSANO_RECOVERY = 11003; - //public const uint WSANO_DATA = 11004; - //public const uint WSA_QOS_RECEIVERS = 11005; - //public const uint WSA_QOS_SENDERS = 11006; - //public const uint WSA_QOS_NO_SENDERS = 11007; - //public const uint WSA_QOS_NO_RECEIVERS = 11008; - //public const uint WSA_QOS_REQUEST_CONFIRMED = 11009; - //public const uint WSA_QOS_ADMISSION_FAILURE = 11010; - //public const uint WSA_QOS_POLICY_FAILURE = 11011; - //public const uint WSA_QOS_BAD_STYLE = 11012; - //public const uint WSA_QOS_BAD_OBJECT = 11013; - //public const uint WSA_QOS_TRAFFIC_CTRL_ERROR = 11014; - //public const uint WSA_QOS_GENERIC_ERROR = 11015; - //public const uint WSA_QOS_ESERVICETYPE = 11016; - //public const uint WSA_QOS_EFLOWSPEC = 11017; - //public const uint WSA_QOS_EPROVSPECBUF = 11018; - //public const uint WSA_QOS_EFILTERSTYLE = 11019; - //public const uint WSA_QOS_EFILTERTYPE = 11020; - //public const uint WSA_QOS_EFILTERCOUNT = 11021; - //public const uint WSA_QOS_EOBJLENGTH = 11022; - //public const uint WSA_QOS_EFLOWCOUNT = 11023; - //public const uint WSA_QOS_EUNKOWNPSOBJ = 11024; - //public const uint WSA_QOS_EPOLICYOBJ = 11025; - //public const uint WSA_QOS_EFLOWDESC = 11026; - //public const uint WSA_QOS_EPSFLOWSPEC = 11027; - //public const uint WSA_QOS_EPSFILTERSPEC = 11028; - //public const uint WSA_QOS_ESDMODEOBJ = 11029; - //public const uint WSA_QOS_ESHAPERATEOBJ = 11030; - //public const uint WSA_QOS_RESERVED_PETYPE = 11031; - //public const uint ERROR_SXS_SECTION_NOT_FOUND = 14000; - //public const uint ERROR_SXS_CANT_GEN_ACTCTX = 14001; - //public const uint ERROR_SXS_INVALID_ACTCTXDATA_FORMAT = 14002; - //public const uint ERROR_SXS_ASSEMBLY_NOT_FOUND = 14003; - //public const uint ERROR_SXS_MANIFEST_FORMAT_ERROR = 14004; - //public const uint ERROR_SXS_MANIFEST_PARSE_ERROR = 14005; - //public const uint ERROR_SXS_ACTIVATION_CONTEXT_DISABLED = 14006; - //public const uint ERROR_SXS_KEY_NOT_FOUND = 14007; - //public const uint ERROR_SXS_VERSION_CONFLICT = 14008; - //public const uint ERROR_SXS_WRONG_SECTION_TYPE = 14009; - //public const uint ERROR_SXS_THREAD_QUERIES_DISABLED = 14010; - //public const uint ERROR_SXS_PROCESS_DEFAULT_ALREADY_SET = 14011; - //public const uint ERROR_SXS_UNKNOWN_ENCODING_GROUP = 14012; - //public const uint ERROR_SXS_UNKNOWN_ENCODING = 14013; - //public const uint ERROR_SXS_INVALID_XML_NAMESPACE_URI = 14014; - //public const uint ERROR_SXS_ROOT_MANIFEST_DEPENDENCY_NOT_INSTALLED = 14015; - //public const uint ERROR_SXS_LEAF_MANIFEST_DEPENDENCY_NOT_INSTALLED = 14016; - //public const uint ERROR_SXS_INVALID_ASSEMBLY_IDENTITY_ATTRIBUTE = 14017; - //public const uint ERROR_SXS_MANIFEST_MISSING_REQUIRED_DEFAULT_NAMESPACE = 14018; - //public const uint ERROR_SXS_MANIFEST_INVALID_REQUIRED_DEFAULT_NAMESPACE = 14019; - //public const uint ERROR_SXS_PRIVATE_MANIFEST_CROSS_PATH_WITH_REPARSE_POINT = 14020; - //public const uint ERROR_SXS_DUPLICATE_DLL_NAME = 14021; - //public const uint ERROR_SXS_DUPLICATE_WINDOWCLASS_NAME = 14022; - //public const uint ERROR_SXS_DUPLICATE_CLSID = 14023; - //public const uint ERROR_SXS_DUPLICATE_IID = 14024; - //public const uint ERROR_SXS_DUPLICATE_TLBID = 14025; - //public const uint ERROR_SXS_DUPLICATE_PROGID = 14026; - //public const uint ERROR_SXS_DUPLICATE_ASSEMBLY_NAME = 14027; - //public const uint ERROR_SXS_FILE_HASH_MISMATCH = 14028; - //public const uint ERROR_SXS_POLICY_PARSE_ERROR = 14029; - //public const uint ERROR_SXS_XML_E_MISSINGQUOTE = 14030; - //public const uint ERROR_SXS_XML_E_COMMENTSYNTAX = 14031; - //public const uint ERROR_SXS_XML_E_BADSTARTNAMECHAR = 14032; - //public const uint ERROR_SXS_XML_E_BADNAMECHAR = 14033; - //public const uint ERROR_SXS_XML_E_BADCHARINSTRING = 14034; - //public const uint ERROR_SXS_XML_E_XMLDECLSYNTAX = 14035; - //public const uint ERROR_SXS_XML_E_BADCHARDATA = 14036; - //public const uint ERROR_SXS_XML_E_MISSINGWHITESPACE = 14037; - //public const uint ERROR_SXS_XML_E_EXPECTINGTAGEND = 14038; - //public const uint ERROR_SXS_XML_E_MISSINGSEMICOLON = 14039; - //public const uint ERROR_SXS_XML_E_UNBALANCEDPAREN = 14040; - //public const uint ERROR_SXS_XML_E_INTERNALERROR = 14041; - //public const uint ERROR_SXS_XML_E_UNEXPECTED_WHITESPACE = 14042; - //public const uint ERROR_SXS_XML_E_INCOMPLETE_ENCODING = 14043; - //public const uint ERROR_SXS_XML_E_MISSING_PAREN = 14044; - //public const uint ERROR_SXS_XML_E_EXPECTINGCLOSEQUOTE = 14045; - //public const uint ERROR_SXS_XML_E_MULTIPLE_COLONS = 14046; - //public const uint ERROR_SXS_XML_E_INVALID_DECIMAL = 14047; - //public const uint ERROR_SXS_XML_E_INVALID_HEXIDECIMAL = 14048; - //public const uint ERROR_SXS_XML_E_INVALID_UNICODE = 14049; - //public const uint ERROR_SXS_XML_E_WHITESPACEORQUESTIONMARK = 14050; - //public const uint ERROR_SXS_XML_E_UNEXPECTEDENDTAG = 14051; - //public const uint ERROR_SXS_XML_E_UNCLOSEDTAG = 14052; - //public const uint ERROR_SXS_XML_E_DUPLICATEATTRIBUTE = 14053; - //public const uint ERROR_SXS_XML_E_MULTIPLEROOTS = 14054; - //public const uint ERROR_SXS_XML_E_INVALIDATROOTLEVEL = 14055; - //public const uint ERROR_SXS_XML_E_BADXMLDECL = 14056; - //public const uint ERROR_SXS_XML_E_MISSINGROOT = 14057; - //public const uint ERROR_SXS_XML_E_UNEXPECTEDEOF = 14058; - //public const uint ERROR_SXS_XML_E_BADPEREFINSUBSET = 14059; - //public const uint ERROR_SXS_XML_E_UNCLOSEDSTARTTAG = 14060; - //public const uint ERROR_SXS_XML_E_UNCLOSEDENDTAG = 14061; - //public const uint ERROR_SXS_XML_E_UNCLOSEDSTRING = 14062; - //public const uint ERROR_SXS_XML_E_UNCLOSEDCOMMENT = 14063; - //public const uint ERROR_SXS_XML_E_UNCLOSEDDECL = 14064; - //public const uint ERROR_SXS_XML_E_UNCLOSEDCDATA = 14065; - //public const uint ERROR_SXS_XML_E_RESERVEDNAMESPACE = 14066; - //public const uint ERROR_SXS_XML_E_INVALIDENCODING = 14067; - //public const uint ERROR_SXS_XML_E_INVALIDSWITCH = 14068; - //public const uint ERROR_SXS_XML_E_BADXMLCASE = 14069; - //public const uint ERROR_SXS_XML_E_INVALID_STANDALONE = 14070; - //public const uint ERROR_SXS_XML_E_UNEXPECTED_STANDALONE = 14071; - //public const uint ERROR_SXS_XML_E_INVALID_VERSION = 14072; - //public const uint ERROR_SXS_XML_E_MISSINGEQUALS = 14073; - //public const uint ERROR_SXS_PROTECTION_RECOVERY_FAILED = 14074; - //public const uint ERROR_SXS_PROTECTION_PUBLIC_KEY_TOO_SHORT = 14075; - //public const uint ERROR_SXS_PROTECTION_CATALOG_NOT_VALID = 14076; - //public const uint ERROR_SXS_UNTRANSLATABLE_HRESULT = 14077; - //public const uint ERROR_SXS_PROTECTION_CATALOG_FILE_MISSING = 14078; - //public const uint ERROR_SXS_MISSING_ASSEMBLY_IDENTITY_ATTRIBUTE = 14079; - //public const uint ERROR_SXS_INVALID_ASSEMBLY_IDENTITY_ATTRIBUTE_NAME = 14080; - //public const uint ERROR_IPSEC_QM_POLICY_EXISTS = 13000; - //public const uint ERROR_IPSEC_QM_POLICY_NOT_FOUND = 13001; - //public const uint ERROR_IPSEC_QM_POLICY_IN_USE = 13002; - //public const uint ERROR_IPSEC_MM_POLICY_EXISTS = 13003; - //public const uint ERROR_IPSEC_MM_POLICY_NOT_FOUND = 13004; - //public const uint ERROR_IPSEC_MM_POLICY_IN_USE = 13005; - //public const uint ERROR_IPSEC_MM_FILTER_EXISTS = 13006; - //public const uint ERROR_IPSEC_MM_FILTER_NOT_FOUND = 13007; - //public const uint ERROR_IPSEC_TRANSPORT_FILTER_EXISTS = 13008; - //public const uint ERROR_IPSEC_TRANSPORT_FILTER_NOT_FOUND = 13009; - //public const uint ERROR_IPSEC_MM_AUTH_EXISTS = 13010; - //public const uint ERROR_IPSEC_MM_AUTH_NOT_FOUND = 13011; - //public const uint ERROR_IPSEC_MM_AUTH_IN_USE = 13012; - //public const uint ERROR_IPSEC_DEFAULT_MM_POLICY_NOT_FOUND = 13013; - //public const uint ERROR_IPSEC_DEFAULT_MM_AUTH_NOT_FOUND = 13014; - //public const uint ERROR_IPSEC_DEFAULT_QM_POLICY_NOT_FOUND = 13015; - //public const uint ERROR_IPSEC_TUNNEL_FILTER_EXISTS = 13016; - //public const uint ERROR_IPSEC_TUNNEL_FILTER_NOT_FOUND = 13017; - //public const uint ERROR_IPSEC_MM_FILTER_PENDING_DELETION = 13018; - //public const uint ERROR_IPSEC_TRANSPORT_FILTER_PENDING_DELETION = 13019; - //public const uint ERROR_IPSEC_TUNNEL_FILTER_PENDING_DELETION = 13020; - //public const uint ERROR_IPSEC_MM_POLICY_PENDING_DELETION = 13021; - //public const uint ERROR_IPSEC_MM_AUTH_PENDING_DELETION = 13022; - //public const uint ERROR_IPSEC_QM_POLICY_PENDING_DELETION = 13023; - //public const uint WARNING_IPSEC_MM_POLICY_PRUNED = 13024; - //public const uint WARNING_IPSEC_QM_POLICY_PRUNED = 13025; - //public const uint ERROR_IPSEC_IKE_NEG_STATUS_BEGIN = 13800; - //public const uint ERROR_IPSEC_IKE_AUTH_FAIL = 13801; - //public const uint ERROR_IPSEC_IKE_ATTRIB_FAIL = 13802; - //public const uint ERROR_IPSEC_IKE_NEGOTIATION_PENDING = 13803; - //public const uint ERROR_IPSEC_IKE_GENERAL_PROCESSING_ERROR = 13804; - //public const uint ERROR_IPSEC_IKE_TIMED_OUT = 13805; - //public const uint ERROR_IPSEC_IKE_NO_CERT = 13806; - //public const uint ERROR_IPSEC_IKE_SA_DELETED = 13807; - //public const uint ERROR_IPSEC_IKE_SA_REAPED = 13808; - //public const uint ERROR_IPSEC_IKE_MM_ACQUIRE_DROP = 13809; - //public const uint ERROR_IPSEC_IKE_QM_ACQUIRE_DROP = 13810; - //public const uint ERROR_IPSEC_IKE_QUEUE_DROP_MM = 13811; - //public const uint ERROR_IPSEC_IKE_QUEUE_DROP_NO_MM = 13812; - //public const uint ERROR_IPSEC_IKE_DROP_NO_RESPONSE = 13813; - //public const uint ERROR_IPSEC_IKE_MM_DELAY_DROP = 13814; - //public const uint ERROR_IPSEC_IKE_QM_DELAY_DROP = 13815; - //public const uint ERROR_IPSEC_IKE_ERROR = 13816; - //public const uint ERROR_IPSEC_IKE_CRL_FAILED = 13817; - //public const uint ERROR_IPSEC_IKE_INVALID_KEY_USAGE = 13818; - //public const uint ERROR_IPSEC_IKE_INVALID_CERT_TYPE = 13819; - //public const uint ERROR_IPSEC_IKE_NO_PRIVATE_KEY = 13820; - //public const uint ERROR_IPSEC_IKE_DH_FAIL = 13822; - //public const uint ERROR_IPSEC_IKE_INVALID_HEADER = 13824; - //public const uint ERROR_IPSEC_IKE_NO_POLICY = 13825; - //public const uint ERROR_IPSEC_IKE_INVALID_SIGNATURE = 13826; - //public const uint ERROR_IPSEC_IKE_KERBEROS_ERROR = 13827; - //public const uint ERROR_IPSEC_IKE_NO_PUBLIC_KEY = 13828; - //public const uint ERROR_IPSEC_IKE_PROCESS_ERR = 13829; - //public const uint ERROR_IPSEC_IKE_PROCESS_ERR_SA = 13830; - //public const uint ERROR_IPSEC_IKE_PROCESS_ERR_PROP = 13831; - //public const uint ERROR_IPSEC_IKE_PROCESS_ERR_TRANS = 13832; - //public const uint ERROR_IPSEC_IKE_PROCESS_ERR_KE = 13833; - //public const uint ERROR_IPSEC_IKE_PROCESS_ERR_ID = 13834; - //public const uint ERROR_IPSEC_IKE_PROCESS_ERR_CERT = 13835; - //public const uint ERROR_IPSEC_IKE_PROCESS_ERR_CERT_REQ = 13836; - //public const uint ERROR_IPSEC_IKE_PROCESS_ERR_HASH = 13837; - //public const uint ERROR_IPSEC_IKE_PROCESS_ERR_SIG = 13838; - //public const uint ERROR_IPSEC_IKE_PROCESS_ERR_NONCE = 13839; - //public const uint ERROR_IPSEC_IKE_PROCESS_ERR_NOTIFY = 13840; - //public const uint ERROR_IPSEC_IKE_PROCESS_ERR_DELETE = 13841; - //public const uint ERROR_IPSEC_IKE_PROCESS_ERR_VENDOR = 13842; - //public const uint ERROR_IPSEC_IKE_INVALID_PAYLOAD = 13843; - //public const uint ERROR_IPSEC_IKE_LOAD_SOFT_SA = 13844; - //public const uint ERROR_IPSEC_IKE_SOFT_SA_TORN_DOWN = 13845; - //public const uint ERROR_IPSEC_IKE_INVALID_COOKIE = 13846; - //public const uint ERROR_IPSEC_IKE_NO_PEER_CERT = 13847; - //public const uint ERROR_IPSEC_IKE_PEER_CRL_FAILED = 13848; - //public const uint ERROR_IPSEC_IKE_POLICY_CHANGE = 13849; - //public const uint ERROR_IPSEC_IKE_NO_MM_POLICY = 13850; - //public const uint ERROR_IPSEC_IKE_NOTCBPRIV = 13851; - //public const uint ERROR_IPSEC_IKE_SECLOADFAIL = 13852; - //public const uint ERROR_IPSEC_IKE_FAILSSPINIT = 13853; - //public const uint ERROR_IPSEC_IKE_FAILQUERYSSP = 13854; - //public const uint ERROR_IPSEC_IKE_SRVACQFAIL = 13855; - //public const uint ERROR_IPSEC_IKE_SRVQUERYCRED = 13856; - //public const uint ERROR_IPSEC_IKE_GETSPIFAIL = 13857; - //public const uint ERROR_IPSEC_IKE_INVALID_FILTER = 13858; - //public const uint ERROR_IPSEC_IKE_OUT_OF_MEMORY = 13859; - //public const uint ERROR_IPSEC_IKE_ADD_UPDATE_KEY_FAILED = 13860; - //public const uint ERROR_IPSEC_IKE_INVALID_POLICY = 13861; - //public const uint ERROR_IPSEC_IKE_UNKNOWN_DOI = 13862; - //public const uint ERROR_IPSEC_IKE_INVALID_SITUATION = 13863; - //public const uint ERROR_IPSEC_IKE_DH_FAILURE = 13864; - //public const uint ERROR_IPSEC_IKE_INVALID_GROUP = 13865; - //public const uint ERROR_IPSEC_IKE_ENCRYPT = 13866; - //public const uint ERROR_IPSEC_IKE_DECRYPT = 13867; - //public const uint ERROR_IPSEC_IKE_POLICY_MATCH = 13868; - //public const uint ERROR_IPSEC_IKE_UNSUPPORTED_ID = 13869; - //public const uint ERROR_IPSEC_IKE_INVALID_HASH = 13870; - //public const uint ERROR_IPSEC_IKE_INVALID_HASH_ALG = 13871; - //public const uint ERROR_IPSEC_IKE_INVALID_HASH_SIZE = 13872; - //public const uint ERROR_IPSEC_IKE_INVALID_ENCRYPT_ALG = 13873; - //public const uint ERROR_IPSEC_IKE_INVALID_AUTH_ALG = 13874; - //public const uint ERROR_IPSEC_IKE_INVALID_SIG = 13875; - //public const uint ERROR_IPSEC_IKE_LOAD_FAILED = 13876; - //public const uint ERROR_IPSEC_IKE_RPC_DELETE = 13877; - //public const uint ERROR_IPSEC_IKE_BENIGN_REINIT = 13878; - //public const uint ERROR_IPSEC_IKE_INVALID_RESPONDER_LIFETIME_NOTIFY = 13879; - //public const uint ERROR_IPSEC_IKE_INVALID_CERT_KEYLEN = 13881; - //public const uint ERROR_IPSEC_IKE_MM_LIMIT = 13882; - //public const uint ERROR_IPSEC_IKE_NEGOTIATION_DISABLED = 13883; - //public const uint ERROR_IPSEC_IKE_NEG_STATUS_END = 13884; - //public const uint SEVERITY_SUCCESS = 0; - //public const uint SEVERITY_ERROR = 1; - //public const uint NOERROR = 0; - - //public const uint E_UNEXPECTED = 0x8000FFFF; - //public const uint E_NOTIMPL = 0x80004001; - //public const uint E_OUTOFMEMORY = 0x8007000E; - //public const uint E_INVALIDARG = 0x80070057; - //public const uint E_NOINTERFACE = 0x80004002; - public const uint E_POINTER = 0x80004003; - //public const uint E_HANDLE = 0x80070006; - //public const uint E_ABORT = 0x80004004; - //public const uint E_FAIL = 0x80004005; - //public const uint E_ACCESSDENIED = 0x80070005; - //public const uint E_PENDING = 0x8000000A; - //public const uint CO_E_INIT_TLS = 0x80004006; - //public const uint CO_E_INIT_SHARED_ALLOCATOR = 0x80004007; - //public const uint CO_E_INIT_MEMORY_ALLOCATOR = 0x80004008; - //public const uint CO_E_INIT_CLASS_CACHE = 0x80004009; - //public const uint CO_E_INIT_RPC_CHANNEL = 0x8000400A; - //public const uint CO_E_INIT_TLS_SET_CHANNEL_CONTROL = 0x8000400B; - //public const uint CO_E_INIT_TLS_CHANNEL_CONTROL = 0x8000400C; - //public const uint CO_E_INIT_UNACCEPTED_USER_ALLOCATOR = 0x8000400D; - //public const uint CO_E_INIT_SCM_MUTEX_EXISTS = 0x8000400E; - //public const uint CO_E_INIT_SCM_FILE_MAPPING_EXISTS = 0x8000400F; - //public const uint CO_E_INIT_SCM_MAP_VIEW_OF_FILE = 0x80004010; - //public const uint CO_E_INIT_SCM_EXEC_FAILURE = 0x80004011; - //public const uint CO_E_INIT_ONLY_SINGLE_THREADED = 0x80004012; - //public const uint CO_E_CANT_REMOTE = 0x80004013; - //public const uint CO_E_BAD_SERVER_NAME = 0x80004014; - //public const uint CO_E_WRONG_SERVER_IDENTITY = 0x80004015; - //public const uint CO_E_OLE1DDE_DISABLED = 0x80004016; - //public const uint CO_E_RUNAS_SYNTAX = 0x80004017; - //public const uint CO_E_CREATEPROCESS_FAILURE = 0x80004018; - //public const uint CO_E_RUNAS_CREATEPROCESS_FAILURE = 0x80004019; - //public const uint CO_E_RUNAS_LOGON_FAILURE = 0x8000401A; - //public const uint CO_E_LAUNCH_PERMSSION_DENIED = 0x8000401B; - //public const uint CO_E_START_SERVICE_FAILURE = 0x8000401C; - //public const uint CO_E_REMOTE_COMMUNICATION_FAILURE = 0x8000401D; - //public const uint CO_E_SERVER_START_TIMEOUT = 0x8000401E; - //public const uint CO_E_CLSREG_INCONSISTENT = 0x8000401F; - //public const uint CO_E_IIDREG_INCONSISTENT = 0x80004020; - //public const uint CO_E_NOT_SUPPORTED = 0x80004021; - //public const uint CO_E_RELOAD_DLL = 0x80004022; - //public const uint CO_E_MSI_ERROR = 0x80004023; - //public const uint CO_E_ATTEMPT_TO_CREATE_OUTSIDE_CLIENT_CONTEXT = 0x80004024; - //public const uint CO_E_SERVER_PAUSED = 0x80004025; - //public const uint CO_E_SERVER_NOT_PAUSED = 0x80004026; - //public const uint CO_E_CLASS_DISABLED = 0x80004027; - //public const uint CO_E_CLRNOTAVAILABLE = 0x80004028; - //public const uint CO_E_ASYNC_WORK_REJECTED = 0x80004029; - //public const uint CO_E_SERVER_INIT_TIMEOUT = 0x8000402A; - //public const uint CO_E_NO_SECCTX_IN_ACTIVATE = 0x8000402B; - //public const uint CO_E_TRACKER_CONFIG = 0x80004030; - //public const uint CO_E_THREADPOOL_CONFIG = 0x80004031; - //public const uint CO_E_SXS_CONFIG = 0x80004032; - //public const uint CO_E_MALFORMED_SPN = 0x80004033; - - /// (0) The operation completed successfully. - public const uint S_OK = 0x00000000; - - //public const uint S_FALSE = 0x00000001; - //public const uint OLE_E_FIRST = 0x80040000; - //public const uint OLE_E_LAST = 0x800400FF; - //public const uint OLE_S_FIRST = 0x00040000; - //public const uint OLE_S_LAST = 0x000400FF; - //public const uint OLE_E_OLEVERB = 0x80040000; - //public const uint OLE_E_ADVF = 0x80040001; - //public const uint OLE_E_ENUM_NOMORE = 0x80040002; - //public const uint OLE_E_ADVISENOTSUPPORTED = 0x80040003; - //public const uint OLE_E_NOCONNECTION = 0x80040004; - //public const uint OLE_E_NOTRUNNING = 0x80040005; - //public const uint OLE_E_NOCACHE = 0x80040006; - //public const uint OLE_E_BLANK = 0x80040007; - //public const uint OLE_E_CLASSDIFF = 0x80040008; - //public const uint OLE_E_CANT_GETMONIKER = 0x80040009; - //public const uint OLE_E_CANT_BINDTOSOURCE = 0x8004000A; - //public const uint OLE_E_STATIC = 0x8004000B; - //public const uint OLE_E_PROMPTSAVECANCELLED = 0x8004000C; - //public const uint OLE_E_INVALIDRECT = 0x8004000D; - //public const uint OLE_E_WRONGCOMPOBJ = 0x8004000E; - //public const uint OLE_E_INVALIDHWND = 0x8004000F; - //public const uint OLE_E_NOT_INPLACEACTIVE = 0x80040010; - //public const uint OLE_E_CANTCONVERT = 0x80040011; - //public const uint OLE_E_NOSTORAGE = 0x80040012; - //public const uint DV_E_FORMATETC = 0x80040064; - //public const uint DV_E_DVTARGETDEVICE = 0x80040065; - //public const uint DV_E_STGMEDIUM = 0x80040066; - //public const uint DV_E_STATDATA = 0x80040067; - //public const uint DV_E_LINDEX = 0x80040068; - //public const uint DV_E_TYMED = 0x80040069; - //public const uint DV_E_CLIPFORMAT = 0x8004006A; - //public const uint DV_E_DVASPECT = 0x8004006B; - //public const uint DV_E_DVTARGETDEVICE_SIZE = 0x8004006C; - //public const uint DV_E_NOIVIEWOBJECT = 0x8004006D; - //public const uint DRAGDROP_E_FIRST = 0x80040100; - //public const uint DRAGDROP_E_LAST = 0x8004010F; - //public const uint DRAGDROP_S_FIRST = 0x00040100; - //public const uint DRAGDROP_S_LAST = 0x0004010F; - //public const uint DRAGDROP_E_NOTREGISTERED = 0x80040100; - //public const uint DRAGDROP_E_ALREADYREGISTERED = 0x80040101; - //public const uint DRAGDROP_E_INVALIDHWND = 0x80040102; - //public const uint CLASSFACTORY_E_FIRST = 0x80040110; - //public const uint CLASSFACTORY_E_LAST = 0x8004011F; - //public const uint CLASSFACTORY_S_FIRST = 0x00040110; - //public const uint CLASSFACTORY_S_LAST = 0x0004011F; - //public const uint CLASS_E_NOAGGREGATION = 0x80040110; - //public const uint CLASS_E_CLASSNOTAVAILABLE = 0x80040111; - //public const uint CLASS_E_NOTLICENSED = 0x80040112; - //public const uint MARSHAL_E_FIRST = 0x80040120; - //public const uint MARSHAL_E_LAST = 0x8004012F; - //public const uint MARSHAL_S_FIRST = 0x00040120; - //public const uint MARSHAL_S_LAST = 0x0004012F; - //public const uint DATA_E_FIRST = 0x80040130; - //public const uint DATA_E_LAST = 0x8004013F; - //public const uint DATA_S_FIRST = 0x00040130; - //public const uint DATA_S_LAST = 0x0004013F; - //public const uint VIEW_E_FIRST = 0x80040140; - //public const uint VIEW_E_LAST = 0x8004014F; - //public const uint VIEW_S_FIRST = 0x00040140; - //public const uint VIEW_S_LAST = 0x0004014F; - //public const uint VIEW_E_DRAW = 0x80040140; - //public const uint REGDB_E_FIRST = 0x80040150; - //public const uint REGDB_E_LAST = 0x8004015F; - //public const uint REGDB_S_FIRST = 0x00040150; - //public const uint REGDB_S_LAST = 0x0004015F; - //public const uint REGDB_E_READREGDB = 0x80040150; - //public const uint REGDB_E_WRITEREGDB = 0x80040151; - //public const uint REGDB_E_KEYMISSING = 0x80040152; - //public const uint REGDB_E_INVALIDVALUE = 0x80040153; - //public const uint REGDB_E_CLASSNOTREG = 0x80040154; - //public const uint REGDB_E_IIDNOTREG = 0x80040155; - //public const uint REGDB_E_BADTHREADINGMODEL = 0x80040156; - //public const uint CAT_E_FIRST = 0x80040160; - //public const uint CAT_E_LAST = 0x80040161; - //public const uint CAT_E_CATIDNOEXIST = 0x80040160; - //public const uint CAT_E_NODESCRIPTION = 0x80040161; - //public const uint CS_E_FIRST = 0x80040164; - //public const uint CS_E_LAST = 0x8004016F; - //public const uint CS_E_PACKAGE_NOTFOUND = 0x80040164; - //public const uint CS_E_NOT_DELETABLE = 0x80040165; - //public const uint CS_E_CLASS_NOTFOUND = 0x80040166; - //public const uint CS_E_INVALID_VERSION = 0x80040167; - //public const uint CS_E_NO_CLASSSTORE = 0x80040168; - //public const uint CS_E_OBJECT_NOTFOUND = 0x80040169; - //public const uint CS_E_OBJECT_ALREADY_EXISTS = 0x8004016A; - //public const uint CS_E_INVALID_PATH = 0x8004016B; - //public const uint CS_E_NETWORK_ERROR = 0x8004016C; - //public const uint CS_E_ADMIN_LIMIT_EXCEEDED = 0x8004016D; - //public const uint CS_E_SCHEMA_MISMATCH = 0x8004016E; - //public const uint CS_E_INTERNAL_ERROR = 0x8004016F; - //public const uint CACHE_E_FIRST = 0x80040170; - //public const uint CACHE_E_LAST = 0x8004017F; - //public const uint CACHE_S_FIRST = 0x00040170; - //public const uint CACHE_S_LAST = 0x0004017F; - //public const uint CACHE_E_NOCACHE_UPDATED = 0x80040170; - //public const uint OLEOBJ_E_FIRST = 0x80040180; - //public const uint OLEOBJ_E_LAST = 0x8004018F; - //public const uint OLEOBJ_S_FIRST = 0x00040180; - //public const uint OLEOBJ_S_LAST = 0x0004018F; - //public const uint OLEOBJ_E_NOVERBS = 0x80040180; - //public const uint OLEOBJ_E_INVALIDVERB = 0x80040181; - //public const uint CLIENTSITE_E_FIRST = 0x80040190; - //public const uint CLIENTSITE_E_LAST = 0x8004019F; - //public const uint CLIENTSITE_S_FIRST = 0x00040190; - //public const uint CLIENTSITE_S_LAST = 0x0004019F; - //public const uint INPLACE_E_NOTUNDOABLE = 0x800401A0; - //public const uint INPLACE_E_NOTOOLSPACE = 0x800401A1; - //public const uint INPLACE_E_FIRST = 0x800401A0; - //public const uint INPLACE_E_LAST = 0x800401AF; - //public const uint INPLACE_S_FIRST = 0x000401A0; - //public const uint INPLACE_S_LAST = 0x000401AF; - //public const uint ENUM_E_FIRST = 0x800401B0; - //public const uint ENUM_E_LAST = 0x800401BF; - //public const uint ENUM_S_FIRST = 0x000401B0; - //public const uint ENUM_S_LAST = 0x000401BF; - //public const uint CONVERT10_E_FIRST = 0x800401C0; - //public const uint CONVERT10_E_LAST = 0x800401CF; - //public const uint CONVERT10_S_FIRST = 0x000401C0; - //public const uint CONVERT10_S_LAST = 0x000401CF; - //public const uint CONVERT10_E_OLESTREAM_GET = 0x800401C0; - //public const uint CONVERT10_E_OLESTREAM_PUT = 0x800401C1; - //public const uint CONVERT10_E_OLESTREAM_FMT = 0x800401C2; - //public const uint CONVERT10_E_OLESTREAM_BITMAP_TO_DIB = 0x800401C3; - //public const uint CONVERT10_E_STG_FMT = 0x800401C4; - //public const uint CONVERT10_E_STG_NO_STD_STREAM = 0x800401C5; - //public const uint CONVERT10_E_STG_DIB_TO_BITMAP = 0x800401C6; - //public const uint CLIPBRD_E_FIRST = 0x800401D0; - //public const uint CLIPBRD_E_LAST = 0x800401DF; - //public const uint CLIPBRD_S_FIRST = 0x000401D0; - //public const uint CLIPBRD_S_LAST = 0x000401DF; - //public const uint CLIPBRD_E_CANT_OPEN = 0x800401D0; - //public const uint CLIPBRD_E_CANT_EMPTY = 0x800401D1; - //public const uint CLIPBRD_E_CANT_SET = 0x800401D2; - //public const uint CLIPBRD_E_BAD_DATA = 0x800401D3; - //public const uint CLIPBRD_E_CANT_CLOSE = 0x800401D4; - //public const uint MK_E_FIRST = 0x800401E0; - //public const uint MK_E_LAST = 0x800401EF; - //public const uint MK_S_FIRST = 0x000401E0; - //public const uint MK_S_LAST = 0x000401EF; - //public const uint MK_E_CONNECTMANUALLY = 0x800401E0; - //public const uint MK_E_EXCEEDEDDEADLINE = 0x800401E1; - //public const uint MK_E_NEEDGENERIC = 0x800401E2; - //public const uint MK_E_UNAVAILABLE = 0x800401E3; - //public const uint MK_E_SYNTAX = 0x800401E4; - //public const uint MK_E_NOOBJECT = 0x800401E5; - //public const uint MK_E_INVALIDEXTENSION = 0x800401E6; - //public const uint MK_E_INTERMEDIATEINTERFACENOTSUPPORTED = 0x800401E7; - //public const uint MK_E_NOTBINDABLE = 0x800401E8; - //public const uint MK_E_NOTBOUND = 0x800401E9; - //public const uint MK_E_CANTOPENFILE = 0x800401EA; - //public const uint MK_E_MUSTBOTHERUSER = 0x800401EB; - //public const uint MK_E_NOINVERSE = 0x800401EC; - //public const uint MK_E_NOSTORAGE = 0x800401ED; - //public const uint MK_E_NOPREFIX = 0x800401EE; - //public const uint MK_E_ENUMERATION_FAILED = 0x800401EF; - //public const uint CO_E_FIRST = 0x800401F0; - //public const uint CO_E_LAST = 0x800401FF; - //public const uint CO_S_FIRST = 0x000401F0; - //public const uint CO_S_LAST = 0x000401FF; - //public const uint CO_E_NOTINITIALIZED = 0x800401F0; - //public const uint CO_E_ALREADYINITIALIZED = 0x800401F1; - //public const uint CO_E_CANTDETERMINECLASS = 0x800401F2; - //public const uint CO_E_CLASSSTRING = 0x800401F3; - //public const uint CO_E_IIDSTRING = 0x800401F4; - //public const uint CO_E_APPNOTFOUND = 0x800401F5; - //public const uint CO_E_APPSINGLEUSE = 0x800401F6; - //public const uint CO_E_ERRORINAPP = 0x800401F7; - //public const uint CO_E_DLLNOTFOUND = 0x800401F8; - //public const uint CO_E_ERRORINDLL = 0x800401F9; - //public const uint CO_E_WRONGOSFORAPP = 0x800401FA; - //public const uint CO_E_OBJNOTREG = 0x800401FB; - //public const uint CO_E_OBJISREG = 0x800401FC; - //public const uint CO_E_OBJNOTCONNECTED = 0x800401FD; - //public const uint CO_E_APPDIDNTREG = 0x800401FE; - //public const uint CO_E_RELEASED = 0x800401FF; - //public const uint EVENT_E_FIRST = 0x80040200; - //public const uint EVENT_E_LAST = 0x8004021F; - //public const uint EVENT_S_FIRST = 0x00040200; - //public const uint EVENT_S_LAST = 0x0004021F; - //public const uint EVENT_S_SOME_SUBSCRIBERS_FAILED = 0x00040200; - //public const uint EVENT_E_ALL_SUBSCRIBERS_FAILED = 0x80040201; - //public const uint EVENT_S_NOSUBSCRIBERS = 0x00040202; - //public const uint EVENT_E_QUERYSYNTAX = 0x80040203; - //public const uint EVENT_E_QUERYFIELD = 0x80040204; - //public const uint EVENT_E_INTERNALEXCEPTION = 0x80040205; - //public const uint EVENT_E_INTERNALERROR = 0x80040206; - //public const uint EVENT_E_INVALID_PER_USER_SID = 0x80040207; - //public const uint EVENT_E_USER_EXCEPTION = 0x80040208; - //public const uint EVENT_E_TOO_MANY_METHODS = 0x80040209; - //public const uint EVENT_E_MISSING_EVENTCLASS = 0x8004020A; - //public const uint EVENT_E_NOT_ALL_REMOVED = 0x8004020B; - //public const uint EVENT_E_COMPLUS_NOT_INSTALLED = 0x8004020C; - //public const uint EVENT_E_CANT_MODIFY_OR_DELETE_UNCONFIGURED_OBJECT = 0x8004020D; - //public const uint EVENT_E_CANT_MODIFY_OR_DELETE_CONFIGURED_OBJECT = 0x8004020E; - //public const uint EVENT_E_INVALID_EVENT_CLASS_PARTITION = 0x8004020F; - //public const uint EVENT_E_PER_USER_SID_NOT_LOGGED_ON = 0x80040210; - //public const uint XACT_E_FIRST = 0x8004D000; - //public const uint XACT_E_LAST = 0x8004D029; - //public const uint XACT_S_FIRST = 0x0004D000; - //public const uint XACT_S_LAST = 0x0004D010; - //public const uint XACT_E_ALREADYOTHERSINGLEPHASE = 0x8004D000; - //public const uint XACT_E_CANTRETAIN = 0x8004D001; - //public const uint XACT_E_COMMITFAILED = 0x8004D002; - //public const uint XACT_E_COMMITPREVENTED = 0x8004D003; - //public const uint XACT_E_HEURISTICABORT = 0x8004D004; - //public const uint XACT_E_HEURISTICCOMMIT = 0x8004D005; - //public const uint XACT_E_HEURISTICDAMAGE = 0x8004D006; - //public const uint XACT_E_HEURISTICDANGER = 0x8004D007; - //public const uint XACT_E_ISOLATIONLEVEL = 0x8004D008; - //public const uint XACT_E_NOASYNC = 0x8004D009; - //public const uint XACT_E_NOENLIST = 0x8004D00A; - //public const uint XACT_E_NOISORETAIN = 0x8004D00B; - //public const uint XACT_E_NORESOURCE = 0x8004D00C; - //public const uint XACT_E_NOTCURRENT = 0x8004D00D; - //public const uint XACT_E_NOTRANSACTION = 0x8004D00E; - //public const uint XACT_E_NOTSUPPORTED = 0x8004D00F; - //public const uint XACT_E_UNKNOWNRMGRID = 0x8004D010; - //public const uint XACT_E_WRONGSTATE = 0x8004D011; - //public const uint XACT_E_WRONGUOW = 0x8004D012; - //public const uint XACT_E_XTIONEXISTS = 0x8004D013; - //public const uint XACT_E_NOIMPORTOBJECT = 0x8004D014; - //public const uint XACT_E_INVALIDCOOKIE = 0x8004D015; - //public const uint XACT_E_INDOUBT = 0x8004D016; - //public const uint XACT_E_NOTIMEOUT = 0x8004D017; - //public const uint XACT_E_ALREADYINPROGRESS = 0x8004D018; - //public const uint XACT_E_ABORTED = 0x8004D019; - //public const uint XACT_E_LOGFULL = 0x8004D01A; - //public const uint XACT_E_TMNOTAVAILABLE = 0x8004D01B; - //public const uint XACT_E_CONNECTION_DOWN = 0x8004D01C; - //public const uint XACT_E_CONNECTION_DENIED = 0x8004D01D; - //public const uint XACT_E_REENLISTTIMEOUT = 0x8004D01E; - //public const uint XACT_E_TIP_CONNECT_FAILED = 0x8004D01F; - //public const uint XACT_E_TIP_PROTOCOL_ERROR = 0x8004D020; - //public const uint XACT_E_TIP_PULL_FAILED = 0x8004D021; - //public const uint XACT_E_DEST_TMNOTAVAILABLE = 0x8004D022; - //public const uint XACT_E_TIP_DISABLED = 0x8004D023; - //public const uint XACT_E_NETWORK_TX_DISABLED = 0x8004D024; - //public const uint XACT_E_PARTNER_NETWORK_TX_DISABLED = 0x8004D025; - //public const uint XACT_E_XA_TX_DISABLED = 0x8004D026; - //public const uint XACT_E_UNABLE_TO_READ_DTC_CONFIG = 0x8004D027; - //public const uint XACT_E_UNABLE_TO_LOAD_DTC_PROXY = 0x8004D028; - //public const uint XACT_E_ABORTING = 0x8004D029; - //public const uint XACT_E_CLERKNOTFOUND = 0x8004D080; - //public const uint XACT_E_CLERKEXISTS = 0x8004D081; - //public const uint XACT_E_RECOVERYINPROGRESS = 0x8004D082; - //public const uint XACT_E_TRANSACTIONCLOSED = 0x8004D083; - //public const uint XACT_E_INVALIDLSN = 0x8004D084; - //public const uint XACT_E_REPLAYREQUEST = 0x8004D085; - //public const uint XACT_S_ASYNC = 0x0004D000; - //public const uint XACT_S_DEFECT = 0x0004D001; - //public const uint XACT_S_READONLY = 0x0004D002; - //public const uint XACT_S_SOMENORETAIN = 0x0004D003; - //public const uint XACT_S_OKINFORM = 0x0004D004; - //public const uint XACT_S_MADECHANGESCONTENT = 0x0004D005; - //public const uint XACT_S_MADECHANGESINFORM = 0x0004D006; - //public const uint XACT_S_ALLNORETAIN = 0x0004D007; - //public const uint XACT_S_ABORTING = 0x0004D008; - //public const uint XACT_S_SINGLEPHASE = 0x0004D009; - //public const uint XACT_S_LOCALLY_OK = 0x0004D00A; - //public const uint XACT_S_LASTRESOURCEMANAGER = 0x0004D010; - //public const uint CONTEXT_E_FIRST = 0x8004E000; - //public const uint CONTEXT_E_LAST = 0x8004E02F; - //public const uint CONTEXT_S_FIRST = 0x0004E000; - //public const uint CONTEXT_S_LAST = 0x0004E02F; - //public const uint CONTEXT_E_ABORTED = 0x8004E002; - //public const uint CONTEXT_E_ABORTING = 0x8004E003; - //public const uint CONTEXT_E_NOCONTEXT = 0x8004E004; - //public const uint CONTEXT_E_WOULD_DEADLOCK = 0x8004E005; - //public const uint CONTEXT_E_SYNCH_TIMEOUT = 0x8004E006; - //public const uint CONTEXT_E_OLDREF = 0x8004E007; - //public const uint CONTEXT_E_ROLENOTFOUND = 0x8004E00C; - //public const uint CONTEXT_E_TMNOTAVAILABLE = 0x8004E00F; - //public const uint CO_E_ACTIVATIONFAILED = 0x8004E021; - //public const uint CO_E_ACTIVATIONFAILED_EVENTLOGGED = 0x8004E022; - //public const uint CO_E_ACTIVATIONFAILED_CATALOGERROR = 0x8004E023; - //public const uint CO_E_ACTIVATIONFAILED_TIMEOUT = 0x8004E024; - //public const uint CO_E_INITIALIZATIONFAILED = 0x8004E025; - //public const uint CONTEXT_E_NOJIT = 0x8004E026; - //public const uint CONTEXT_E_NOTRANSACTION = 0x8004E027; - //public const uint CO_E_THREADINGMODEL_CHANGED = 0x8004E028; - //public const uint CO_E_NOIISINTRINSICS = 0x8004E029; - //public const uint CO_E_NOCOOKIES = 0x8004E02A; - //public const uint CO_E_DBERROR = 0x8004E02B; - //public const uint CO_E_NOTPOOLED = 0x8004E02C; - //public const uint CO_E_NOTCONSTRUCTED = 0x8004E02D; - //public const uint CO_E_NOSYNCHRONIZATION = 0x8004E02E; - //public const uint CO_E_ISOLEVELMISMATCH = 0x8004E02F; - //public const uint OLE_S_USEREG = 0x00040000; - //public const uint OLE_S_STATIC = 0x00040001; - //public const uint OLE_S_MAC_CLIPFORMAT = 0x00040002; - //public const uint DRAGDROP_S_DROP = 0x00040100; - //public const uint DRAGDROP_S_CANCEL = 0x00040101; - //public const uint DRAGDROP_S_USEDEFAULTCURSORS = 0x00040102; - //public const uint DATA_S_SAMEFORMATETC = 0x00040130; - //public const uint VIEW_S_ALREADY_FROZEN = 0x00040140; - //public const uint CACHE_S_FORMATETC_NOTSUPPORTED = 0x00040170; - //public const uint CACHE_S_SAMECACHE = 0x00040171; - //public const uint CACHE_S_SOMECACHES_NOTUPDATED = 0x00040172; - //public const uint OLEOBJ_S_INVALIDVERB = 0x00040180; - //public const uint OLEOBJ_S_CANNOT_DOVERB_NOW = 0x00040181; - //public const uint OLEOBJ_S_INVALIDHWND = 0x00040182; - //public const uint INPLACE_S_TRUNCATED = 0x000401A0; - //public const uint CONVERT10_S_NO_PRESENTATION = 0x000401C0; - //public const uint MK_S_REDUCED_TO_SELF = 0x000401E2; - //public const uint MK_S_ME = 0x000401E4; - //public const uint MK_S_HIM = 0x000401E5; - //public const uint MK_S_US = 0x000401E6; - //public const uint MK_S_MONIKERALREADYREGISTERED = 0x000401E7; - //public const uint SCHED_S_TASK_READY = 0x00041300; - //public const uint SCHED_S_TASK_RUNNING = 0x00041301; - //public const uint SCHED_S_TASK_DISABLED = 0x00041302; - //public const uint SCHED_S_TASK_HAS_NOT_RUN = 0x00041303; - //public const uint SCHED_S_TASK_NO_MORE_RUNS = 0x00041304; - //public const uint SCHED_S_TASK_NOT_SCHEDULED = 0x00041305; - //public const uint SCHED_S_TASK_TERMINATED = 0x00041306; - //public const uint SCHED_S_TASK_NO_VALID_TRIGGERS = 0x00041307; - //public const uint SCHED_S_EVENT_TRIGGER = 0x00041308; - //public const uint SCHED_E_TRIGGER_NOT_FOUND = 0x80041309; - //public const uint SCHED_E_TASK_NOT_READY = 0x8004130A; - //public const uint SCHED_E_TASK_NOT_RUNNING = 0x8004130B; - //public const uint SCHED_E_SERVICE_NOT_INSTALLED = 0x8004130C; - //public const uint SCHED_E_CANNOT_OPEN_TASK = 0x8004130D; - //public const uint SCHED_E_INVALID_TASK = 0x8004130E; - //public const uint SCHED_E_ACCOUNT_INFORMATION_NOT_SET = 0x8004130F; - //public const uint SCHED_E_ACCOUNT_NAME_NOT_FOUND = 0x80041310; - //public const uint SCHED_E_ACCOUNT_DBASE_CORRUPT = 0x80041311; - //public const uint SCHED_E_NO_SECURITY_SERVICES = 0x80041312; - //public const uint SCHED_E_UNKNOWN_OBJECT_VERSION = 0x80041313; - //public const uint SCHED_E_UNSUPPORTED_ACCOUNT_OPTION = 0x80041314; - //public const uint SCHED_E_SERVICE_NOT_RUNNING = 0x80041315; - //public const uint CO_E_CLASS_CREATE_FAILED = 0x80080001; - //public const uint CO_E_SCM_ERROR = 0x80080002; - //public const uint CO_E_SCM_RPC_FAILURE = 0x80080003; - //public const uint CO_E_BAD_PATH = 0x80080004; - //public const uint CO_E_SERVER_EXEC_FAILURE = 0x80080005; - //public const uint CO_E_OBJSRV_RPC_FAILURE = 0x80080006; - //public const uint MK_E_NO_NORMALIZED = 0x80080007; - //public const uint CO_E_SERVER_STOPPING = 0x80080008; - //public const uint MEM_E_INVALID_ROOT = 0x80080009; - //public const uint MEM_E_INVALID_LINK = 0x80080010; - //public const uint MEM_E_INVALID_SIZE = 0x80080011; - //public const uint CO_S_NOTALLINTERFACES = 0x00080012; - //public const uint CO_S_MACHINENAMENOTFOUND = 0x00080013; - //public const uint DISP_E_UNKNOWNINTERFACE = 0x80020001; - //public const uint DISP_E_MEMBERNOTFOUND = 0x80020003; - //public const uint DISP_E_PARAMNOTFOUND = 0x80020004; - //public const uint DISP_E_TYPEMISMATCH = 0x80020005; - //public const uint DISP_E_UNKNOWNNAME = 0x80020006; - //public const uint DISP_E_NONAMEDARGS = 0x80020007; - //public const uint DISP_E_BADVARTYPE = 0x80020008; - //public const uint DISP_E_EXCEPTION = 0x80020009; - //public const uint DISP_E_OVERFLOW = 0x8002000A; - //public const uint DISP_E_BADINDEX = 0x8002000B; - //public const uint DISP_E_UNKNOWNLCID = 0x8002000C; - //public const uint DISP_E_ARRAYISLOCKED = 0x8002000D; - //public const uint DISP_E_BADPARAMCOUNT = 0x8002000E; - //public const uint DISP_E_PARAMNOTOPTIONAL = 0x8002000F; - //public const uint DISP_E_BADCALLEE = 0x80020010; - //public const uint DISP_E_NOTACOLLECTION = 0x80020011; - //public const uint DISP_E_DIVBYZERO = 0x80020012; - //public const uint DISP_E_BUFFERTOOSMALL = 0x80020013; - //public const uint TYPE_E_BUFFERTOOSMALL = 0x80028016; - //public const uint TYPE_E_FIELDNOTFOUND = 0x80028017; - //public const uint TYPE_E_INVDATAREAD = 0x80028018; - //public const uint TYPE_E_UNSUPFORMAT = 0x80028019; - //public const uint TYPE_E_REGISTRYACCESS = 0x8002801C; - //public const uint TYPE_E_LIBNOTREGISTERED = 0x8002801D; - //public const uint TYPE_E_UNDEFINEDTYPE = 0x80028027; - //public const uint TYPE_E_QUALIFIEDNAMEDISALLOWED = 0x80028028; - //public const uint TYPE_E_INVALIDSTATE = 0x80028029; - //public const uint TYPE_E_WRONGTYPEKIND = 0x8002802A; - //public const uint TYPE_E_ELEMENTNOTFOUND = 0x8002802B; - //public const uint TYPE_E_AMBIGUOUSNAME = 0x8002802C; - //public const uint TYPE_E_NAMECONFLICT = 0x8002802D; - //public const uint TYPE_E_UNKNOWNLCID = 0x8002802E; - //public const uint TYPE_E_DLLFUNCTIONNOTFOUND = 0x8002802F; - //public const uint TYPE_E_BADMODULEKIND = 0x800288BD; - //public const uint TYPE_E_SIZETOOBIG = 0x800288C5; - //public const uint TYPE_E_DUPLICATEID = 0x800288C6; - //public const uint TYPE_E_INVALIDID = 0x800288CF; - //public const uint TYPE_E_TYPEMISMATCH = 0x80028CA0; - //public const uint TYPE_E_OUTOFBOUNDS = 0x80028CA1; - //public const uint TYPE_E_IOERROR = 0x80028CA2; - //public const uint TYPE_E_CANTCREATETMPFILE = 0x80028CA3; - //public const uint TYPE_E_CANTLOADLIBRARY = 0x80029C4A; - //public const uint TYPE_E_INCONSISTENTPROPFUNCS = 0x80029C83; - //public const uint TYPE_E_CIRCULARTYPE = 0x80029C84; - //public const uint STG_E_INVALIDFUNCTION = 0x80030001; - //public const uint STG_E_FILENOTFOUND = 0x80030002; - //public const uint STG_E_PATHNOTFOUND = 0x80030003; - //public const uint STG_E_TOOMANYOPENFILES = 0x80030004; - //public const uint STG_E_ACCESSDENIED = 0x80030005; - //public const uint STG_E_INVALIDHANDLE = 0x80030006; - //public const uint STG_E_INSUFFICIENTMEMORY = 0x80030008; - //public const uint STG_E_INVALIDPOINTER = 0x80030009; - //public const uint STG_E_NOMOREFILES = 0x80030012; - //public const uint STG_E_DISKISWRITEPROTECTED = 0x80030013; - //public const uint STG_E_SEEKERROR = 0x80030019; - //public const uint STG_E_WRITEFAULT = 0x8003001D; - //public const uint STG_E_READFAULT = 0x8003001E; - //public const uint STG_E_SHAREVIOLATION = 0x80030020; - //public const uint STG_E_LOCKVIOLATION = 0x80030021; - //public const uint STG_E_FILEALREADYEXISTS = 0x80030050; - //public const uint STG_E_INVALIDPARAMETER = 0x80030057; - //public const uint STG_E_MEDIUMFULL = 0x80030070; - //public const uint STG_E_PROPSETMISMATCHED = 0x800300F0; - //public const uint STG_E_ABNORMALAPIEXIT = 0x800300FA; - //public const uint STG_E_INVALIDHEADER = 0x800300FB; - //public const uint STG_E_INVALIDNAME = 0x800300FC; - //public const uint STG_E_UNKNOWN = 0x800300FD; - //public const uint STG_E_UNIMPLEMENTEDFUNCTION = 0x800300FE; - //public const uint STG_E_INVALIDFLAG = 0x800300FF; - //public const uint STG_E_INUSE = 0x80030100; - //public const uint STG_E_NOTCURRENT = 0x80030101; - //public const uint STG_E_REVERTED = 0x80030102; - //public const uint STG_E_CANTSAVE = 0x80030103; - //public const uint STG_E_OLDFORMAT = 0x80030104; - //public const uint STG_E_OLDDLL = 0x80030105; - //public const uint STG_E_SHAREREQUIRED = 0x80030106; - //public const uint STG_E_NOTFILEBASEDSTORAGE = 0x80030107; - //public const uint STG_E_EXTANTMARSHALLINGS = 0x80030108; - //public const uint STG_E_DOCFILECORRUPT = 0x80030109; - //public const uint STG_E_BADBASEADDRESS = 0x80030110; - //public const uint STG_E_DOCFILETOOLARGE = 0x80030111; - //public const uint STG_E_NOTSIMPLEFORMAT = 0x80030112; - //public const uint STG_E_INCOMPLETE = 0x80030201; - //public const uint STG_E_TERMINATED = 0x80030202; - //public const uint STG_S_CONVERTED = 0x00030200; - //public const uint STG_S_BLOCK = 0x00030201; - //public const uint STG_S_RETRYNOW = 0x00030202; - //public const uint STG_S_MONITORING = 0x00030203; - //public const uint STG_S_MULTIPLEOPENS = 0x00030204; - //public const uint STG_S_CONSOLIDATIONFAILED = 0x00030205; - //public const uint STG_S_CANNOTCONSOLIDATE = 0x00030206; - //public const uint STG_E_STATUS_COPY_PROTECTION_FAILURE = 0x80030305; - //public const uint STG_E_CSS_AUTHENTICATION_FAILURE = 0x80030306; - //public const uint STG_E_CSS_KEY_NOT_PRESENT = 0x80030307; - //public const uint STG_E_CSS_KEY_NOT_ESTABLISHED = 0x80030308; - //public const uint STG_E_CSS_SCRAMBLED_SECTOR = 0x80030309; - //public const uint STG_E_CSS_REGION_MISMATCH = 0x8003030A; - //public const uint STG_E_RESETS_EXHAUSTED = 0x8003030B; - //public const uint RPC_E_CALL_REJECTED = 0x80010001; - //public const uint RPC_E_CALL_CANCELED = 0x80010002; - //public const uint RPC_E_CANTPOST_INSENDCALL = 0x80010003; - //public const uint RPC_E_CANTCALLOUT_INASYNCCALL = 0x80010004; - //public const uint RPC_E_CANTCALLOUT_INEXTERNALCALL = 0x80010005; - //public const uint RPC_E_CONNECTION_TERMINATED = 0x80010006; - //public const uint RPC_E_SERVER_DIED = 0x80010007; - //public const uint RPC_E_CLIENT_DIED = 0x80010008; - //public const uint RPC_E_INVALID_DATAPACKET = 0x80010009; - //public const uint RPC_E_CANTTRANSMIT_CALL = 0x8001000A; - //public const uint RPC_E_CLIENT_CANTMARSHAL_DATA = 0x8001000B; - //public const uint RPC_E_CLIENT_CANTUNMARSHAL_DATA = 0x8001000C; - //public const uint RPC_E_SERVER_CANTMARSHAL_DATA = 0x8001000D; - //public const uint RPC_E_SERVER_CANTUNMARSHAL_DATA = 0x8001000E; - //public const uint RPC_E_INVALID_DATA = 0x8001000F; - //public const uint RPC_E_INVALID_PARAMETER = 0x80010010; - //public const uint RPC_E_CANTCALLOUT_AGAIN = 0x80010011; - //public const uint RPC_E_SERVER_DIED_DNE = 0x80010012; - //public const uint RPC_E_SYS_CALL_FAILED = 0x80010100; - //public const uint RPC_E_OUT_OF_RESOURCES = 0x80010101; - //public const uint RPC_E_ATTEMPTED_MULTITHREAD = 0x80010102; - //public const uint RPC_E_NOT_REGISTERED = 0x80010103; - //public const uint RPC_E_FAULT = 0x80010104; - //public const uint RPC_E_SERVERFAULT = 0x80010105; - //public const uint RPC_E_CHANGED_MODE = 0x80010106; - //public const uint RPC_E_INVALIDMETHOD = 0x80010107; - //public const uint RPC_E_DISCONNECTED = 0x80010108; - //public const uint RPC_E_RETRY = 0x80010109; - //public const uint RPC_E_SERVERCALL_RETRYLATER = 0x8001010A; - //public const uint RPC_E_SERVERCALL_REJECTED = 0x8001010B; - //public const uint RPC_E_INVALID_CALLDATA = 0x8001010C; - //public const uint RPC_E_CANTCALLOUT_ININPUTSYNCCALL = 0x8001010D; - //public const uint RPC_E_WRONG_THREAD = 0x8001010E; - //public const uint RPC_E_THREAD_NOT_INIT = 0x8001010F; - //public const uint RPC_E_VERSION_MISMATCH = 0x80010110; - //public const uint RPC_E_INVALID_HEADER = 0x80010111; - //public const uint RPC_E_INVALID_EXTENSION = 0x80010112; - //public const uint RPC_E_INVALID_IPID = 0x80010113; - //public const uint RPC_E_INVALID_OBJECT = 0x80010114; - //public const uint RPC_S_CALLPENDING = 0x80010115; - //public const uint RPC_S_WAITONTIMER = 0x80010116; - //public const uint RPC_E_CALL_COMPLETE = 0x80010117; - //public const uint RPC_E_UNSECURE_CALL = 0x80010118; - //public const uint RPC_E_TOO_LATE = 0x80010119; - //public const uint RPC_E_NO_GOOD_SECURITY_PACKAGES = 0x8001011A; - //public const uint RPC_E_ACCESS_DENIED = 0x8001011B; - //public const uint RPC_E_REMOTE_DISABLED = 0x8001011C; - //public const uint RPC_E_INVALID_OBJREF = 0x8001011D; - //public const uint RPC_E_NO_CONTEXT = 0x8001011E; - //public const uint RPC_E_TIMEOUT = 0x8001011F; - //public const uint RPC_E_NO_SYNC = 0x80010120; - //public const uint RPC_E_FULLSIC_REQUIRED = 0x80010121; - //public const uint RPC_E_INVALID_STD_NAME = 0x80010122; - //public const uint CO_E_FAILEDTOIMPERSONATE = 0x80010123; - //public const uint CO_E_FAILEDTOGETSECCTX = 0x80010124; - //public const uint CO_E_FAILEDTOOPENTHREADTOKEN = 0x80010125; - //public const uint CO_E_FAILEDTOGETTOKENINFO = 0x80010126; - //public const uint CO_E_TRUSTEEDOESNTMATCHCLIENT = 0x80010127; - //public const uint CO_E_FAILEDTOQUERYCLIENTBLANKET = 0x80010128; - //public const uint CO_E_FAILEDTOSETDACL = 0x80010129; - //public const uint CO_E_ACCESSCHECKFAILED = 0x8001012A; - //public const uint CO_E_NETACCESSAPIFAILED = 0x8001012B; - //public const uint CO_E_WRONGTRUSTEENAMESYNTAX = 0x8001012C; - //public const uint CO_E_INVALIDSID = 0x8001012D; - //public const uint CO_E_CONVERSIONFAILED = 0x8001012E; - //public const uint CO_E_NOMATCHINGSIDFOUND = 0x8001012F; - //public const uint CO_E_LOOKUPACCSIDFAILED = 0x80010130; - //public const uint CO_E_NOMATCHINGNAMEFOUND = 0x80010131; - //public const uint CO_E_LOOKUPACCNAMEFAILED = 0x80010132; - //public const uint CO_E_SETSERLHNDLFAILED = 0x80010133; - //public const uint CO_E_FAILEDTOGETWINDIR = 0x80010134; - //public const uint CO_E_PATHTOOLONG = 0x80010135; - //public const uint CO_E_FAILEDTOGENUUID = 0x80010136; - //public const uint CO_E_FAILEDTOCREATEFILE = 0x80010137; - //public const uint CO_E_FAILEDTOCLOSEHANDLE = 0x80010138; - //public const uint CO_E_EXCEEDSYSACLLIMIT = 0x80010139; - //public const uint CO_E_ACESINWRONGORDER = 0x8001013A; - //public const uint CO_E_INCOMPATIBLESTREAMVERSION = 0x8001013B; - //public const uint CO_E_FAILEDTOOPENPROCESSTOKEN = 0x8001013C; - //public const uint CO_E_DECODEFAILED = 0x8001013D; - //public const uint CO_E_ACNOTINITIALIZED = 0x8001013F; - //public const uint CO_E_CANCEL_DISABLED = 0x80010140; - //public const uint RPC_E_UNEXPECTED = 0x8001FFFF; - //public const uint ERROR_AUDITING_DISABLED = 0xC0090001; - //public const uint ERROR_ALL_SIDS_FILTERED = 0xC0090002; - //public const uint NTE_BAD_UID = 0x80090001; - //public const uint NTE_BAD_HASH = 0x80090002; - //public const uint NTE_BAD_KEY = 0x80090003; - //public const uint NTE_BAD_LEN = 0x80090004; - //public const uint NTE_BAD_DATA = 0x80090005; - //public const uint NTE_BAD_SIGNATURE = 0x80090006; - //public const uint NTE_BAD_VER = 0x80090007; - //public const uint NTE_BAD_ALGID = 0x80090008; - //public const uint NTE_BAD_FLAGS = 0x80090009; - //public const uint NTE_BAD_TYPE = 0x8009000A; - //public const uint NTE_BAD_KEY_STATE = 0x8009000B; - //public const uint NTE_BAD_HASH_STATE = 0x8009000C; - //public const uint NTE_NO_KEY = 0x8009000D; - //public const uint NTE_NO_MEMORY = 0x8009000E; - //public const uint NTE_EXISTS = 0x8009000F; - //public const uint NTE_PERM = 0x80090010; - //public const uint NTE_NOT_FOUND = 0x80090011; - //public const uint NTE_DOUBLE_ENCRYPT = 0x80090012; - //public const uint NTE_BAD_PROVIDER = 0x80090013; - //public const uint NTE_BAD_PROV_TYPE = 0x80090014; - //public const uint NTE_BAD_PUBLIC_KEY = 0x80090015; - //public const uint NTE_BAD_KEYSET = 0x80090016; - //public const uint NTE_PROV_TYPE_NOT_DEF = 0x80090017; - //public const uint NTE_PROV_TYPE_ENTRY_BAD = 0x80090018; - //public const uint NTE_KEYSET_NOT_DEF = 0x80090019; - //public const uint NTE_KEYSET_ENTRY_BAD = 0x8009001A; - //public const uint NTE_PROV_TYPE_NO_MATCH = 0x8009001B; - //public const uint NTE_SIGNATURE_FILE_BAD = 0x8009001C; - //public const uint NTE_PROVIDER_DLL_FAIL = 0x8009001D; - //public const uint NTE_PROV_DLL_NOT_FOUND = 0x8009001E; - //public const uint NTE_BAD_KEYSET_PARAM = 0x8009001F; - //public const uint NTE_FAIL = 0x80090020; - //public const uint NTE_SYS_ERR = 0x80090021; - //public const uint NTE_SILENT_CONTEXT = 0x80090022; - //public const uint NTE_TOKEN_KEYSET_STORAGE_FULL = 0x80090023; - //public const uint NTE_TEMPORARY_PROFILE = 0x80090024; - //public const uint NTE_FIXEDPARAMETER = 0x80090025; - //public const uint SEC_E_INSUFFICIENT_MEMORY = 0x80090300; - //public const uint SEC_E_INVALID_HANDLE = 0x80090301; - //public const uint SEC_E_UNSUPPORTED_FUNCTION = 0x80090302; - //public const uint SEC_E_TARGET_UNKNOWN = 0x80090303; - //public const uint SEC_E_INTERNAL_ERROR = 0x80090304; - //public const uint SEC_E_SECPKG_NOT_FOUND = 0x80090305; - //public const uint SEC_E_NOT_OWNER = 0x80090306; - //public const uint SEC_E_CANNOT_INSTALL = 0x80090307; - //public const uint SEC_E_INVALID_TOKEN = 0x80090308; - //public const uint SEC_E_CANNOT_PACK = 0x80090309; - //public const uint SEC_E_QOP_NOT_SUPPORTED = 0x8009030A; - //public const uint SEC_E_NO_IMPERSONATION = 0x8009030B; - //public const uint SEC_E_LOGON_DENIED = 0x8009030C; - //public const uint SEC_E_UNKNOWN_CREDENTIALS = 0x8009030D; - //public const uint SEC_E_NO_CREDENTIALS = 0x8009030E; - //public const uint SEC_E_MESSAGE_ALTERED = 0x8009030F; - //public const uint SEC_E_OUT_OF_SEQUENCE = 0x80090310; - //public const uint SEC_E_NO_AUTHENTICATING_AUTHORITY = 0x80090311; - //public const uint SEC_I_CONTINUE_NEEDED = 0x00090312; - //public const uint SEC_I_COMPLETE_NEEDED = 0x00090313; - //public const uint SEC_I_COMPLETE_AND_CONTINUE = 0x00090314; - //public const uint SEC_I_LOCAL_LOGON = 0x00090315; - //public const uint SEC_E_BAD_PKGID = 0x80090316; - //public const uint SEC_E_CONTEXT_EXPIRED = 0x80090317; - //public const uint SEC_I_CONTEXT_EXPIRED = 0x00090317; - //public const uint SEC_E_INCOMPLETE_MESSAGE = 0x80090318; - //public const uint SEC_E_INCOMPLETE_CREDENTIALS = 0x80090320; - //public const uint SEC_E_BUFFER_TOO_SMALL = 0x80090321; - //public const uint SEC_I_INCOMPLETE_CREDENTIALS = 0x00090320; - //public const uint SEC_I_RENEGOTIATE = 0x00090321; - //public const uint SEC_E_WRONG_PRINCIPAL = 0x80090322; - //public const uint SEC_I_NO_LSA_CONTEXT = 0x00090323; - //public const uint SEC_E_TIME_SKEW = 0x80090324; - //public const uint SEC_E_UNTRUSTED_ROOT = 0x80090325; - //public const uint SEC_E_ILLEGAL_MESSAGE = 0x80090326; - //public const uint SEC_E_CERT_UNKNOWN = 0x80090327; - //public const uint SEC_E_CERT_EXPIRED = 0x80090328; - //public const uint SEC_E_ENCRYPT_FAILURE = 0x80090329; - //public const uint SEC_E_DECRYPT_FAILURE = 0x80090330; - //public const uint SEC_E_ALGORITHM_MISMATCH = 0x80090331; - //public const uint SEC_E_SECURITY_QOS_FAILED = 0x80090332; - //public const uint SEC_E_UNFINISHED_CONTEXT_DELETED = 0x80090333; - //public const uint SEC_E_NO_TGT_REPLY = 0x80090334; - //public const uint SEC_E_NO_IP_ADDRESSES = 0x80090335; - //public const uint SEC_E_WRONG_CREDENTIAL_HANDLE = 0x80090336; - //public const uint SEC_E_CRYPTO_SYSTEM_INVALID = 0x80090337; - //public const uint SEC_E_MAX_REFERRALS_EXCEEDED = 0x80090338; - //public const uint SEC_E_MUST_BE_KDC = 0x80090339; - //public const uint SEC_E_STRONG_CRYPTO_NOT_SUPPORTED = 0x8009033A; - //public const uint SEC_E_TOO_MANY_PRINCIPALS = 0x8009033B; - //public const uint SEC_E_NO_PA_DATA = 0x8009033C; - //public const uint SEC_E_PKINIT_NAME_MISMATCH = 0x8009033D; - //public const uint SEC_E_SMARTCARD_LOGON_REQUIRED = 0x8009033E; - //public const uint SEC_E_SHUTDOWN_IN_PROGRESS = 0x8009033F; - //public const uint SEC_E_KDC_INVALID_REQUEST = 0x80090340; - //public const uint SEC_E_KDC_UNABLE_TO_REFER = 0x80090341; - //public const uint SEC_E_KDC_UNKNOWN_ETYPE = 0x80090342; - //public const uint SEC_E_UNSUPPORTED_PREAUTH = 0x80090343; - //public const uint SEC_E_DELEGATION_REQUIRED = 0x80090345; - //public const uint SEC_E_BAD_BINDINGS = 0x80090346; - //public const uint SEC_E_MULTIPLE_ACCOUNTS = 0x80090347; - //public const uint SEC_E_NO_KERB_KEY = 0x80090348; - //public const uint SEC_E_CERT_WRONG_USAGE = 0x80090349; - //public const uint SEC_E_DOWNGRADE_DETECTED = 0x80090350; - //public const uint SEC_E_SMARTCARD_CERT_REVOKED = 0x80090351; - //public const uint SEC_E_ISSUING_CA_UNTRUSTED = 0x80090352; - //public const uint SEC_E_REVOCATION_OFFLINE_C = 0x80090353; - //public const uint SEC_E_PKINIT_CLIENT_FAILURE = 0x80090354; - //public const uint SEC_E_SMARTCARD_CERT_EXPIRED = 0x80090355; - //public const uint SEC_E_NO_S4U_PROT_SUPPORT = 0x80090356; - //public const uint SEC_E_CROSSREALM_DELEGATION_FAILURE = 0x80090357; - //public const uint SEC_E_REVOCATION_OFFLINE_KDC = 0x80090358; - //public const uint SEC_E_ISSUING_CA_UNTRUSTED_KDC = 0x80090359; - //public const uint SEC_E_KDC_CERT_EXPIRED = 0x8009035A; - //public const uint SEC_E_KDC_CERT_REVOKED = 0x8009035B; - //public const uint SEC_E_NO_SPM = SEC_E_INTERNAL_ERROR; - //public const uint SEC_E_NOT_SUPPORTED = SEC_E_UNSUPPORTED_FUNCTION; - //public const uint CRYPT_E_MSG_ERROR = 0x80091001; - //public const uint CRYPT_E_UNKNOWN_ALGO = 0x80091002; - //public const uint CRYPT_E_OID_FORMAT = 0x80091003; - //public const uint CRYPT_E_INVALID_MSG_TYPE = 0x80091004; - //public const uint CRYPT_E_UNEXPECTED_ENCODING = 0x80091005; - //public const uint CRYPT_E_AUTH_ATTR_MISSING = 0x80091006; - //public const uint CRYPT_E_HASH_VALUE = 0x80091007; - //public const uint CRYPT_E_INVALID_INDEX = 0x80091008; - //public const uint CRYPT_E_ALREADY_DECRYPTED = 0x80091009; - //public const uint CRYPT_E_NOT_DECRYPTED = 0x8009100A; - //public const uint CRYPT_E_RECIPIENT_NOT_FOUND = 0x8009100B; - //public const uint CRYPT_E_CONTROL_TYPE = 0x8009100C; - //public const uint CRYPT_E_ISSUER_SERIALNUMBER = 0x8009100D; - //public const uint CRYPT_E_SIGNER_NOT_FOUND = 0x8009100E; - //public const uint CRYPT_E_ATTRIBUTES_MISSING = 0x8009100F; - //public const uint CRYPT_E_STREAM_MSG_NOT_READY = 0x80091010; - //public const uint CRYPT_E_STREAM_INSUFFICIENT_DATA = 0x80091011; - //public const uint CRYPT_I_NEW_PROTECTION_REQUIRED = 0x00091012; - //public const uint CRYPT_E_BAD_LEN = 0x80092001; - //public const uint CRYPT_E_BAD_ENCODE = 0x80092002; - //public const uint CRYPT_E_FILE_ERROR = 0x80092003; - //public const uint CRYPT_E_NOT_FOUND = 0x80092004; - //public const uint CRYPT_E_EXISTS = 0x80092005; - //public const uint CRYPT_E_NO_PROVIDER = 0x80092006; - //public const uint CRYPT_E_SELF_SIGNED = 0x80092007; - //public const uint CRYPT_E_DELETED_PREV = 0x80092008; - //public const uint CRYPT_E_NO_MATCH = 0x80092009; - //public const uint CRYPT_E_UNEXPECTED_MSG_TYPE = 0x8009200A; - //public const uint CRYPT_E_NO_KEY_PROPERTY = 0x8009200B; - //public const uint CRYPT_E_NO_DECRYPT_CERT = 0x8009200C; - //public const uint CRYPT_E_BAD_MSG = 0x8009200D; - //public const uint CRYPT_E_NO_SIGNER = 0x8009200E; - //public const uint CRYPT_E_PENDING_CLOSE = 0x8009200F; - //public const uint CRYPT_E_REVOKED = 0x80092010; - //public const uint CRYPT_E_NO_REVOCATION_DLL = 0x80092011; - //public const uint CRYPT_E_NO_REVOCATION_CHECK = 0x80092012; - //public const uint CRYPT_E_REVOCATION_OFFLINE = 0x80092013; - //public const uint CRYPT_E_NOT_IN_REVOCATION_DATABASE = 0x80092014; - //public const uint CRYPT_E_INVALID_NUMERIC_STRING = 0x80092020; - //public const uint CRYPT_E_INVALID_PRINTABLE_STRING = 0x80092021; - //public const uint CRYPT_E_INVALID_IA5_STRING = 0x80092022; - //public const uint CRYPT_E_INVALID_X500_STRING = 0x80092023; - //public const uint CRYPT_E_NOT_CHAR_STRING = 0x80092024; - //public const uint CRYPT_E_FILERESIZED = 0x80092025; - //public const uint CRYPT_E_SECURITY_SETTINGS = 0x80092026; - //public const uint CRYPT_E_NO_VERIFY_USAGE_DLL = 0x80092027; - //public const uint CRYPT_E_NO_VERIFY_USAGE_CHECK = 0x80092028; - //public const uint CRYPT_E_VERIFY_USAGE_OFFLINE = 0x80092029; - //public const uint CRYPT_E_NOT_IN_CTL = 0x8009202A; - //public const uint CRYPT_E_NO_TRUSTED_SIGNER = 0x8009202B; - //public const uint CRYPT_E_MISSING_PUBKEY_PARA = 0x8009202C; - //public const uint CRYPT_E_OSS_ERROR = 0x80093000; - //public const uint OSS_MORE_BUF = 0x80093001; - //public const uint OSS_NEGATIVE_longEGER = 0x80093002; - //public const uint OSS_PDU_RANGE = 0x80093003; - //public const uint OSS_MORE_INPUT = 0x80093004; - //public const uint OSS_DATA_ERROR = 0x80093005; - //public const uint OSS_BAD_ARG = 0x80093006; - //public const uint OSS_BAD_VERSION = 0x80093007; - //public const uint OSS_OUT_MEMORY = 0x80093008; - //public const uint OSS_PDU_MISMATCH = 0x80093009; - //public const uint OSS_LIMITED = 0x8009300A; - //public const uint OSS_BAD_PTR = 0x8009300B; - //public const uint OSS_BAD_TIME = 0x8009300C; - //public const uint OSS_INDEFINITE_NOT_SUPPORTED = 0x8009300D; - //public const uint OSS_MEM_ERROR = 0x8009300E; - //public const uint OSS_BAD_TABLE = 0x8009300F; - //public const uint OSS_TOO_LONG = 0x80093010; - //public const uint OSS_CONSTRAINT_VIOLATED = 0x80093011; - //public const uint OSS_FATAL_ERROR = 0x80093012; - //public const uint OSS_ACCESS_SERIALIZATION_ERROR = 0x80093013; - //public const uint OSS_NULL_TBL = 0x80093014; - //public const uint OSS_NULL_FCN = 0x80093015; - //public const uint OSS_BAD_ENCRULES = 0x80093016; - //public const uint OSS_UNAVAIL_ENCRULES = 0x80093017; - //public const uint OSS_CANT_OPEN_TRACE_WINDOW = 0x80093018; - //public const uint OSS_UNIMPLEMENTED = 0x80093019; - //public const uint OSS_OID_DLL_NOT_LINKED = 0x8009301A; - //public const uint OSS_CANT_OPEN_TRACE_FILE = 0x8009301B; - //public const uint OSS_TRACE_FILE_ALREADY_OPEN = 0x8009301C; - //public const uint OSS_TABLE_MISMATCH = 0x8009301D; - //public const uint OSS_TYPE_NOT_SUPPORTED = 0x8009301E; - //public const uint OSS_REAL_DLL_NOT_LINKED = 0x8009301F; - //public const uint OSS_REAL_CODE_NOT_LINKED = 0x80093020; - //public const uint OSS_OUT_OF_RANGE = 0x80093021; - //public const uint OSS_COPIER_DLL_NOT_LINKED = 0x80093022; - //public const uint OSS_CONSTRAINT_DLL_NOT_LINKED = 0x80093023; - //public const uint OSS_COMPARATOR_DLL_NOT_LINKED = 0x80093024; - //public const uint OSS_COMPARATOR_CODE_NOT_LINKED = 0x80093025; - //public const uint OSS_MEM_MGR_DLL_NOT_LINKED = 0x80093026; - //public const uint OSS_PDV_DLL_NOT_LINKED = 0x80093027; - //public const uint OSS_PDV_CODE_NOT_LINKED = 0x80093028; - //public const uint OSS_API_DLL_NOT_LINKED = 0x80093029; - //public const uint OSS_BERDER_DLL_NOT_LINKED = 0x8009302A; - //public const uint OSS_PER_DLL_NOT_LINKED = 0x8009302B; - //public const uint OSS_OPEN_TYPE_ERROR = 0x8009302C; - //public const uint OSS_MUTEX_NOT_CREATED = 0x8009302D; - //public const uint OSS_CANT_CLOSE_TRACE_FILE = 0x8009302E; - //public const uint CRYPT_E_ASN1_ERROR = 0x80093100; - //public const uint CRYPT_E_ASN1_INTERNAL = 0x80093101; - //public const uint CRYPT_E_ASN1_EOD = 0x80093102; - //public const uint CRYPT_E_ASN1_CORRUPT = 0x80093103; - //public const uint CRYPT_E_ASN1_LARGE = 0x80093104; - //public const uint CRYPT_E_ASN1_CONSTRAINT = 0x80093105; - //public const uint CRYPT_E_ASN1_MEMORY = 0x80093106; - //public const uint CRYPT_E_ASN1_OVERFLOW = 0x80093107; - //public const uint CRYPT_E_ASN1_BADPDU = 0x80093108; - //public const uint CRYPT_E_ASN1_BADARGS = 0x80093109; - //public const uint CRYPT_E_ASN1_BADREAL = 0x8009310A; - //public const uint CRYPT_E_ASN1_BADTAG = 0x8009310B; - //public const uint CRYPT_E_ASN1_CHOICE = 0x8009310C; - //public const uint CRYPT_E_ASN1_RULE = 0x8009310D; - //public const uint CRYPT_E_ASN1_UTF8 = 0x8009310E; - //public const uint CRYPT_E_ASN1_PDU_TYPE = 0x80093133; - //public const uint CRYPT_E_ASN1_NYI = 0x80093134; - //public const uint CRYPT_E_ASN1_EXTENDED = 0x80093201; - //public const uint CRYPT_E_ASN1_NOEOD = 0x80093202; - //public const uint CERTSRV_E_BAD_REQUESTSUBJECT = 0x80094001; - //public const uint CERTSRV_E_NO_REQUEST = 0x80094002; - //public const uint CERTSRV_E_BAD_REQUESTSTATUS = 0x80094003; - //public const uint CERTSRV_E_PROPERTY_EMPTY = 0x80094004; - //public const uint CERTSRV_E_INVALID_CA_CERTIFICATE = 0x80094005; - //public const uint CERTSRV_E_SERVER_SUSPENDED = 0x80094006; - //public const uint CERTSRV_E_ENCODING_LENGTH = 0x80094007; - //public const uint CERTSRV_E_ROLECONFLICT = 0x80094008; - //public const uint CERTSRV_E_RESTRICTEDOFFICER = 0x80094009; - //public const uint CERTSRV_E_KEY_ARCHIVAL_NOT_CONFIGURED = 0x8009400A; - //public const uint CERTSRV_E_NO_VALID_KRA = 0x8009400B; - //public const uint CERTSRV_E_BAD_REQUEST_KEY_ARCHIVAL = 0x8009400C; - //public const uint CERTSRV_E_NO_CAADMIN_DEFINED = 0x8009400D; - //public const uint CERTSRV_E_BAD_RENEWAL_CERT_ATTRIBUTE = 0x8009400E; - //public const uint CERTSRV_E_NO_DB_SESSIONS = 0x8009400F; - //public const uint CERTSRV_E_ALIGNMENT_FAULT = 0x80094010; - //public const uint CERTSRV_E_ENROLL_DENIED = 0x80094011; - //public const uint CERTSRV_E_TEMPLATE_DENIED = 0x80094012; - //public const uint CERTSRV_E_DOWNLEVEL_DC_SSL_OR_UPGRADE = 0x80094013; - //public const uint CERTSRV_E_UNSUPPORTED_CERT_TYPE = 0x80094800; - //public const uint CERTSRV_E_NO_CERT_TYPE = 0x80094801; - //public const uint CERTSRV_E_TEMPLATE_CONFLICT = 0x80094802; - //public const uint CERTSRV_E_SUBJECT_ALT_NAME_REQUIRED = 0x80094803; - //public const uint CERTSRV_E_ARCHIVED_KEY_REQUIRED = 0x80094804; - //public const uint CERTSRV_E_SMIME_REQUIRED = 0x80094805; - //public const uint CERTSRV_E_BAD_RENEWAL_SUBJECT = 0x80094806; - //public const uint CERTSRV_E_BAD_TEMPLATE_VERSION = 0x80094807; - //public const uint CERTSRV_E_TEMPLATE_POLICY_REQUIRED = 0x80094808; - //public const uint CERTSRV_E_SIGNATURE_POLICY_REQUIRED = 0x80094809; - //public const uint CERTSRV_E_SIGNATURE_COUNT = 0x8009480A; - //public const uint CERTSRV_E_SIGNATURE_REJECTED = 0x8009480B; - //public const uint CERTSRV_E_ISSUANCE_POLICY_REQUIRED = 0x8009480C; - //public const uint CERTSRV_E_SUBJECT_UPN_REQUIRED = 0x8009480D; - //public const uint CERTSRV_E_SUBJECT_DIRECTORY_GUID_REQUIRED = 0x8009480E; - //public const uint CERTSRV_E_SUBJECT_DNS_REQUIRED = 0x8009480F; - //public const uint CERTSRV_E_ARCHIVED_KEY_UNEXPECTED = 0x80094810; - //public const uint CERTSRV_E_KEY_LENGTH = 0x80094811; - //public const uint CERTSRV_E_SUBJECT_EMAIL_REQUIRED = 0x80094812; - //public const uint CERTSRV_E_UNKNOWN_CERT_TYPE = 0x80094813; - //public const uint CERTSRV_E_CERT_TYPE_OVERLAP = 0x80094814; - //public const uint XENROLL_E_KEY_NOT_EXPORTABLE = 0x80095000; - //public const uint XENROLL_E_CANNOT_ADD_ROOT_CERT = 0x80095001; - //public const uint XENROLL_E_RESPONSE_KA_HASH_NOT_FOUND = 0x80095002; - //public const uint XENROLL_E_RESPONSE_UNEXPECTED_KA_HASH = 0x80095003; - //public const uint XENROLL_E_RESPONSE_KA_HASH_MISMATCH = 0x80095004; - //public const uint XENROLL_E_KEYSPEC_SMIME_MISMATCH = 0x80095005; - //public const uint TRUST_E_SYSTEM_ERROR = 0x80096001; - //public const uint TRUST_E_NO_SIGNER_CERT = 0x80096002; - //public const uint TRUST_E_COUNTER_SIGNER = 0x80096003; - //public const uint TRUST_E_CERT_SIGNATURE = 0x80096004; - //public const uint TRUST_E_TIME_STAMP = 0x80096005; - //public const uint TRUST_E_BAD_DIGEST = 0x80096010; - //public const uint TRUST_E_BASIC_CONSTRAINTS = 0x80096019; - //public const uint TRUST_E_FINANCIAL_CRITERIA = 0x8009601E; - //public const uint MSSIPOTF_E_OUTOFMEMRANGE = 0x80097001; - //public const uint MSSIPOTF_E_CANTGETOBJECT = 0x80097002; - //public const uint MSSIPOTF_E_NOHEADTABLE = 0x80097003; - //public const uint MSSIPOTF_E_BAD_MAGICNUMBER = 0x80097004; - //public const uint MSSIPOTF_E_BAD_OFFSET_TABLE = 0x80097005; - //public const uint MSSIPOTF_E_TABLE_TAGORDER = 0x80097006; - //public const uint MSSIPOTF_E_TABLE_LONGWORD = 0x80097007; - //public const uint MSSIPOTF_E_BAD_FIRST_TABLE_PLACEMENT = 0x80097008; - //public const uint MSSIPOTF_E_TABLES_OVERLAP = 0x80097009; - //public const uint MSSIPOTF_E_TABLE_PADBYTES = 0x8009700A; - //public const uint MSSIPOTF_E_FILETOOSMALL = 0x8009700B; - //public const uint MSSIPOTF_E_TABLE_CHECKSUM = 0x8009700C; - //public const uint MSSIPOTF_E_FILE_CHECKSUM = 0x8009700D; - //public const uint MSSIPOTF_E_FAILED_POLICY = 0x80097010; - //public const uint MSSIPOTF_E_FAILED_HINTS_CHECK = 0x80097011; - //public const uint MSSIPOTF_E_NOT_OPENTYPE = 0x80097012; - //public const uint MSSIPOTF_E_FILE = 0x80097013; - //public const uint MSSIPOTF_E_CRYPT = 0x80097014; - //public const uint MSSIPOTF_E_BADVERSION = 0x80097015; - //public const uint MSSIPOTF_E_DSIG_STRUCTURE = 0x80097016; - //public const uint MSSIPOTF_E_PCONST_CHECK = 0x80097017; - //public const uint MSSIPOTF_E_STRUCTURE = 0x80097018; - //public const uint NTE_OP_OK = 0; - //public const uint TRUST_E_PROVIDER_UNKNOWN = 0x800B0001; - //public const uint TRUST_E_ACTION_UNKNOWN = 0x800B0002; - //public const uint TRUST_E_SUBJECT_FORM_UNKNOWN = 0x800B0003; - //public const uint TRUST_E_SUBJECT_NOT_TRUSTED = 0x800B0004; - //public const uint DIGSIG_E_ENCODE = 0x800B0005; - //public const uint DIGSIG_E_DECODE = 0x800B0006; - //public const uint DIGSIG_E_EXTENSIBILITY = 0x800B0007; - //public const uint DIGSIG_E_CRYPTO = 0x800B0008; - //public const uint PERSIST_E_SIZEDEFINITE = 0x800B0009; - //public const uint PERSIST_E_SIZEINDEFINITE = 0x800B000A; - //public const uint PERSIST_E_NOTSELFSIZING = 0x800B000B; - //public const uint TRUST_E_NOSIGNATURE = 0x800B0100; - //public const uint CERT_E_EXPIRED = 0x800B0101; - //public const uint CERT_E_VALIDITYPERIODNESTING = 0x800B0102; - //public const uint CERT_E_ROLE = 0x800B0103; - //public const uint CERT_E_PATHLENCONST = 0x800B0104; - //public const uint CERT_E_CRITICAL = 0x800B0105; - //public const uint CERT_E_PURPOSE = 0x800B0106; - //public const uint CERT_E_ISSUERCHAINING = 0x800B0107; - //public const uint CERT_E_MALFORMED = 0x800B0108; - //public const uint CERT_E_UNTRUSTEDROOT = 0x800B0109; - //public const uint CERT_E_CHAINING = 0x800B010A; - //public const uint TRUST_E_FAIL = 0x800B010B; - //public const uint CERT_E_REVOKED = 0x800B010C; - //public const uint CERT_E_UNTRUSTEDTESTROOT = 0x800B010D; - //public const uint CERT_E_REVOCATION_FAILURE = 0x800B010E; - //public const uint CERT_E_CN_NO_MATCH = 0x800B010F; - //public const uint CERT_E_WRONG_USAGE = 0x800B0110; - //public const uint TRUST_E_EXPLICIT_DISTRUST = 0x800B0111; - //public const uint CERT_E_UNTRUSTEDCA = 0x800B0112; - //public const uint CERT_E_INVALID_POLICY = 0x800B0113; - //public const uint CERT_E_INVALID_NAME = 0x800B0114; - //public const uint SPAPI_E_EXPECTED_SECTION_NAME = 0x800F0000; - //public const uint SPAPI_E_BAD_SECTION_NAME_LINE = 0x800F0001; - //public const uint SPAPI_E_SECTION_NAME_TOO_LONG = 0x800F0002; - //public const uint SPAPI_E_GENERAL_SYNTAX = 0x800F0003; - //public const uint SPAPI_E_WRONG_INF_STYLE = 0x800F0100; - //public const uint SPAPI_E_SECTION_NOT_FOUND = 0x800F0101; - //public const uint SPAPI_E_LINE_NOT_FOUND = 0x800F0102; - //public const uint SPAPI_E_NO_BACKUP = 0x800F0103; - //public const uint SPAPI_E_NO_ASSOCIATED_CLASS = 0x800F0200; - //public const uint SPAPI_E_CLASS_MISMATCH = 0x800F0201; - //public const uint SPAPI_E_DUPLICATE_FOUND = 0x800F0202; - //public const uint SPAPI_E_NO_DRIVER_SELECTED = 0x800F0203; - //public const uint SPAPI_E_KEY_DOES_NOT_EXIST = 0x800F0204; - //public const uint SPAPI_E_INVALID_DEVINST_NAME = 0x800F0205; - //public const uint SPAPI_E_INVALID_CLASS = 0x800F0206; - //public const uint SPAPI_E_DEVINST_ALREADY_EXISTS = 0x800F0207; - //public const uint SPAPI_E_DEVINFO_NOT_REGISTERED = 0x800F0208; - //public const uint SPAPI_E_INVALID_REG_PROPERTY = 0x800F0209; - //public const uint SPAPI_E_NO_INF = 0x800F020A; - //public const uint SPAPI_E_NO_SUCH_DEVINST = 0x800F020B; - //public const uint SPAPI_E_CANT_LOAD_CLASS_ICON = 0x800F020C; - //public const uint SPAPI_E_INVALID_CLASS_INSTALLER = 0x800F020D; - //public const uint SPAPI_E_DI_DO_DEFAULT = 0x800F020E; - //public const uint SPAPI_E_DI_NOFILECOPY = 0x800F020F; - //public const uint SPAPI_E_INVALID_HWPROFILE = 0x800F0210; - //public const uint SPAPI_E_NO_DEVICE_SELECTED = 0x800F0211; - //public const uint SPAPI_E_DEVINFO_LIST_LOCKED = 0x800F0212; - //public const uint SPAPI_E_DEVINFO_DATA_LOCKED = 0x800F0213; - //public const uint SPAPI_E_DI_BAD_PATH = 0x800F0214; - //public const uint SPAPI_E_NO_CLASSINSTALL_PARAMS = 0x800F0215; - //public const uint SPAPI_E_FILEQUEUE_LOCKED = 0x800F0216; - //public const uint SPAPI_E_BAD_SERVICE_INSTALLSECT = 0x800F0217; - //public const uint SPAPI_E_NO_CLASS_DRIVER_LIST = 0x800F0218; - //public const uint SPAPI_E_NO_ASSOCIATED_SERVICE = 0x800F0219; - //public const uint SPAPI_E_NO_DEFAULT_DEVICE_INTERFACE = 0x800F021A; - //public const uint SPAPI_E_DEVICE_INTERFACE_ACTIVE = 0x800F021B; - //public const uint SPAPI_E_DEVICE_INTERFACE_REMOVED = 0x800F021C; - //public const uint SPAPI_E_BAD_INTERFACE_INSTALLSECT = 0x800F021D; - //public const uint SPAPI_E_NO_SUCH_INTERFACE_CLASS = 0x800F021E; - //public const uint SPAPI_E_INVALID_REFERENCE_STRING = 0x800F021F; - //public const uint SPAPI_E_INVALID_MACHINENAME = 0x800F0220; - //public const uint SPAPI_E_REMOTE_COMM_FAILURE = 0x800F0221; - //public const uint SPAPI_E_MACHINE_UNAVAILABLE = 0x800F0222; - //public const uint SPAPI_E_NO_CONFIGMGR_SERVICES = 0x800F0223; - //public const uint SPAPI_E_INVALID_PROPPAGE_PROVIDER = 0x800F0224; - //public const uint SPAPI_E_NO_SUCH_DEVICE_INTERFACE = 0x800F0225; - //public const uint SPAPI_E_DI_POSTPROCESSING_REQUIRED = 0x800F0226; - //public const uint SPAPI_E_INVALID_COINSTALLER = 0x800F0227; - //public const uint SPAPI_E_NO_COMPAT_DRIVERS = 0x800F0228; - //public const uint SPAPI_E_NO_DEVICE_ICON = 0x800F0229; - //public const uint SPAPI_E_INVALID_INF_LOGCONFIG = 0x800F022A; - //public const uint SPAPI_E_DI_DONT_INSTALL = 0x800F022B; - //public const uint SPAPI_E_INVALID_FILTER_DRIVER = 0x800F022C; - //public const uint SPAPI_E_NON_WINDOWS_NT_DRIVER = 0x800F022D; - //public const uint SPAPI_E_NON_WINDOWS_DRIVER = 0x800F022E; - //public const uint SPAPI_E_NO_CATALOG_FOR_OEM_INF = 0x800F022F; - //public const uint SPAPI_E_DEVINSTALL_QUEUE_NONNATIVE = 0x800F0230; - //public const uint SPAPI_E_NOT_DISABLEABLE = 0x800F0231; - //public const uint SPAPI_E_CANT_REMOVE_DEVINST = 0x800F0232; - //public const uint SPAPI_E_INVALID_TARGET = 0x800F0233; - //public const uint SPAPI_E_DRIVER_NONNATIVE = 0x800F0234; - //public const uint SPAPI_E_IN_WOW64 = 0x800F0235; - //public const uint SPAPI_E_SET_SYSTEM_RESTORE_POINT = 0x800F0236; - //public const uint SPAPI_E_INCORRECTLY_COPIED_INF = 0x800F0237; - //public const uint SPAPI_E_SCE_DISABLED = 0x800F0238; - //public const uint SPAPI_E_UNKNOWN_EXCEPTION = 0x800F0239; - //public const uint SPAPI_E_PNP_REGISTRY_ERROR = 0x800F023A; - //public const uint SPAPI_E_REMOTE_REQUEST_UNSUPPORTED = 0x800F023B; - //public const uint SPAPI_E_NOT_AN_INSTALLED_OEM_INF = 0x800F023C; - //public const uint SPAPI_E_INF_IN_USE_BY_DEVICES = 0x800F023D; - //public const uint SPAPI_E_DI_FUNCTION_OBSOLETE = 0x800F023E; - //public const uint SPAPI_E_NO_AUTHENTICODE_CATALOG = 0x800F023F; - //public const uint SPAPI_E_AUTHENTICODE_DISALLOWED = 0x800F0240; - //public const uint SPAPI_E_AUTHENTICODE_TRUSTED_PUBLISHER = 0x800F0241; - //public const uint SPAPI_E_AUTHENTICODE_TRUST_NOT_ESTABLISHED = 0x800F0242; - //public const uint SPAPI_E_AUTHENTICODE_PUBLISHER_NOT_TRUSTED = 0x800F0243; - //public const uint SPAPI_E_SIGNATURE_OSATTRIBUTE_MISMATCH = 0x800F0244; - //public const uint SPAPI_E_ONLY_VALIDATE_VIA_AUTHENTICODE = 0x800F0245; - //public const uint SPAPI_E_UNRECOVERABLE_STACK_OVERFLOW = 0x800F0300; - //public const uint SPAPI_E_ERROR_NOT_INSTALLED = 0x800F1000; - //public const uint SCARD_S_SUCCESS = NO_ERROR; - //public const uint SCARD_F_INTERNAL_ERROR = 0x80100001; - //public const uint SCARD_E_CANCELLED = 0x80100002; - //public const uint SCARD_E_INVALID_HANDLE = 0x80100003; - //public const uint SCARD_E_INVALID_PARAMETER = 0x80100004; - //public const uint SCARD_E_INVALID_TARGET = 0x80100005; - //public const uint SCARD_E_NO_MEMORY = 0x80100006; - //public const uint SCARD_F_WAITED_TOO_LONG = 0x80100007; - //public const uint SCARD_E_INSUFFICIENT_BUFFER = 0x80100008; - //public const uint SCARD_E_UNKNOWN_READER = 0x80100009; - //public const uint SCARD_E_TIMEOUT = 0x8010000A; - //public const uint SCARD_E_SHARING_VIOLATION = 0x8010000B; - //public const uint SCARD_E_NO_SMARTCARD = 0x8010000C; - //public const uint SCARD_E_UNKNOWN_CARD = 0x8010000D; - //public const uint SCARD_E_CANT_DISPOSE = 0x8010000E; - //public const uint SCARD_E_PROTO_MISMATCH = 0x8010000F; - //public const uint SCARD_E_NOT_READY = 0x80100010; - //public const uint SCARD_E_INVALID_VALUE = 0x80100011; - //public const uint SCARD_E_SYSTEM_CANCELLED = 0x80100012; - //public const uint SCARD_F_COMM_ERROR = 0x80100013; - //public const uint SCARD_F_UNKNOWN_ERROR = 0x80100014; - //public const uint SCARD_E_INVALID_ATR = 0x80100015; - //public const uint SCARD_E_NOT_TRANSACTED = 0x80100016; - //public const uint SCARD_E_READER_UNAVAILABLE = 0x80100017; - //public const uint SCARD_P_SHUTDOWN = 0x80100018; - //public const uint SCARD_E_PCI_TOO_SMALL = 0x80100019; - //public const uint SCARD_E_READER_UNSUPPORTED = 0x8010001A; - //public const uint SCARD_E_DUPLICATE_READER = 0x8010001B; - //public const uint SCARD_E_CARD_UNSUPPORTED = 0x8010001C; - //public const uint SCARD_E_NO_SERVICE = 0x8010001D; - //public const uint SCARD_E_SERVICE_STOPPED = 0x8010001E; - //public const uint SCARD_E_UNEXPECTED = 0x8010001F; - //public const uint SCARD_E_ICC_INSTALLATION = 0x80100020; - //public const uint SCARD_E_ICC_CREATEORDER = 0x80100021; - //public const uint SCARD_E_UNSUPPORTED_FEATURE = 0x80100022; - //public const uint SCARD_E_DIR_NOT_FOUND = 0x80100023; - //public const uint SCARD_E_FILE_NOT_FOUND = 0x80100024; - //public const uint SCARD_E_NO_DIR = 0x80100025; - //public const uint SCARD_E_NO_FILE = 0x80100026; - //public const uint SCARD_E_NO_ACCESS = 0x80100027; - //public const uint SCARD_E_WRITE_TOO_MANY = 0x80100028; - //public const uint SCARD_E_BAD_SEEK = 0x80100029; - //public const uint SCARD_E_INVALID_CHV = 0x8010002A; - //public const uint SCARD_E_UNKNOWN_RES_MNG = 0x8010002B; - //public const uint SCARD_E_NO_SUCH_CERTIFICATE = 0x8010002C; - //public const uint SCARD_E_CERTIFICATE_UNAVAILABLE = 0x8010002D; - //public const uint SCARD_E_NO_READERS_AVAILABLE = 0x8010002E; - //public const uint SCARD_E_COMM_DATA_LOST = 0x8010002F; - //public const uint SCARD_E_NO_KEY_CONTAINER = 0x80100030; - //public const uint SCARD_E_SERVER_TOO_BUSY = 0x80100031; - //public const uint SCARD_W_UNSUPPORTED_CARD = 0x80100065; - //public const uint SCARD_W_UNRESPONSIVE_CARD = 0x80100066; - //public const uint SCARD_W_UNPOWERED_CARD = 0x80100067; - //public const uint SCARD_W_RESET_CARD = 0x80100068; - //public const uint SCARD_W_REMOVED_CARD = 0x80100069; - //public const uint SCARD_W_SECURITY_VIOLATION = 0x8010006A; - //public const uint SCARD_W_WRONG_CHV = 0x8010006B; - //public const uint SCARD_W_CHV_BLOCKED = 0x8010006C; - //public const uint SCARD_W_EOF = 0x8010006D; - //public const uint SCARD_W_CANCELLED_BY_USER = 0x8010006E; - //public const uint SCARD_W_CARD_NOT_AUTHENTICATED = 0x8010006F; - //public const uint COMADMIN_E_OBJECTERRORS = 0x80110401; - //public const uint COMADMIN_E_OBJECTINVALID = 0x80110402; - //public const uint COMADMIN_E_KEYMISSING = 0x80110403; - //public const uint COMADMIN_E_ALREADYINSTALLED = 0x80110404; - //public const uint COMADMIN_E_APP_FILE_WRITEFAIL = 0x80110407; - //public const uint COMADMIN_E_APP_FILE_READFAIL = 0x80110408; - //public const uint COMADMIN_E_APP_FILE_VERSION = 0x80110409; - //public const uint COMADMIN_E_BADPATH = 0x8011040A; - //public const uint COMADMIN_E_APPLICATIONEXISTS = 0x8011040B; - //public const uint COMADMIN_E_ROLEEXISTS = 0x8011040C; - //public const uint COMADMIN_E_CANTCOPYFILE = 0x8011040D; - //public const uint COMADMIN_E_NOUSER = 0x8011040F; - //public const uint COMADMIN_E_INVALIDUSERIDS = 0x80110410; - //public const uint COMADMIN_E_NOREGISTRYCLSID = 0x80110411; - //public const uint COMADMIN_E_BADREGISTRYPROGID = 0x80110412; - //public const uint COMADMIN_E_AUTHENTICATIONLEVEL = 0x80110413; - //public const uint COMADMIN_E_USERPASSWDNOTVALID = 0x80110414; - //public const uint COMADMIN_E_CLSIDORIIDMISMATCH = 0x80110418; - //public const uint COMADMIN_E_REMOTEINTERFACE = 0x80110419; - //public const uint COMADMIN_E_DLLREGISTERSERVER = 0x8011041A; - //public const uint COMADMIN_E_NOSERVERSHARE = 0x8011041B; - //public const uint COMADMIN_E_DLLLOADFAILED = 0x8011041D; - //public const uint COMADMIN_E_BADREGISTRYLIBID = 0x8011041E; - //public const uint COMADMIN_E_APPDIRNOTFOUND = 0x8011041F; - //public const uint COMADMIN_E_REGISTRARFAILED = 0x80110423; - //public const uint COMADMIN_E_COMPFILE_DOESNOTEXIST = 0x80110424; - //public const uint COMADMIN_E_COMPFILE_LOADDLLFAIL = 0x80110425; - //public const uint COMADMIN_E_COMPFILE_GETCLASSOBJ = 0x80110426; - //public const uint COMADMIN_E_COMPFILE_CLASSNOTAVAIL = 0x80110427; - //public const uint COMADMIN_E_COMPFILE_BADTLB = 0x80110428; - //public const uint COMADMIN_E_COMPFILE_NOTINSTALLABLE = 0x80110429; - //public const uint COMADMIN_E_NOTCHANGEABLE = 0x8011042A; - //public const uint COMADMIN_E_NOTDELETEABLE = 0x8011042B; - //public const uint COMADMIN_E_SESSION = 0x8011042C; - //public const uint COMADMIN_E_COMP_MOVE_LOCKED = 0x8011042D; - //public const uint COMADMIN_E_COMP_MOVE_BAD_DEST = 0x8011042E; - //public const uint COMADMIN_E_REGISTERTLB = 0x80110430; - //public const uint COMADMIN_E_SYSTEMAPP = 0x80110433; - //public const uint COMADMIN_E_COMPFILE_NOREGISTRAR = 0x80110434; - //public const uint COMADMIN_E_COREQCOMPINSTALLED = 0x80110435; - //public const uint COMADMIN_E_SERVICENOTINSTALLED = 0x80110436; - //public const uint COMADMIN_E_PROPERTYSAVEFAILED = 0x80110437; - //public const uint COMADMIN_E_OBJECTEXISTS = 0x80110438; - //public const uint COMADMIN_E_COMPONENTEXISTS = 0x80110439; - //public const uint COMADMIN_E_REGFILE_CORRUPT = 0x8011043B; - //public const uint COMADMIN_E_PROPERTY_OVERFLOW = 0x8011043C; - //public const uint COMADMIN_E_NOTINREGISTRY = 0x8011043E; - //public const uint COMADMIN_E_OBJECTNOTPOOLABLE = 0x8011043F; - //public const uint COMADMIN_E_APPLID_MATCHES_CLSID = 0x80110446; - //public const uint COMADMIN_E_ROLE_DOES_NOT_EXIST = 0x80110447; - //public const uint COMADMIN_E_START_APP_NEEDS_COMPONENTS = 0x80110448; - //public const uint COMADMIN_E_REQUIRES_DIFFERENT_PLATFORM = 0x80110449; - //public const uint COMADMIN_E_CAN_NOT_EXPORT_APP_PROXY = 0x8011044A; - //public const uint COMADMIN_E_CAN_NOT_START_APP = 0x8011044B; - //public const uint COMADMIN_E_CAN_NOT_EXPORT_SYS_APP = 0x8011044C; - //public const uint COMADMIN_E_CANT_SUBSCRIBE_TO_COMPONENT = 0x8011044D; - //public const uint COMADMIN_E_EVENTCLASS_CANT_BE_SUBSCRIBER = 0x8011044E; - //public const uint COMADMIN_E_LIB_APP_PROXY_INCOMPATIBLE = 0x8011044F; - //public const uint COMADMIN_E_BASE_PARTITION_ONLY = 0x80110450; - //public const uint COMADMIN_E_START_APP_DISABLED = 0x80110451; - //public const uint COMADMIN_E_CAT_DUPLICATE_PARTITION_NAME = 0x80110457; - //public const uint COMADMIN_E_CAT_INVALID_PARTITION_NAME = 0x80110458; - //public const uint COMADMIN_E_CAT_PARTITION_IN_USE = 0x80110459; - //public const uint COMADMIN_E_FILE_PARTITION_DUPLICATE_FILES = 0x8011045A; - //public const uint COMADMIN_E_CAT_IMPORTED_COMPONENTS_NOT_ALLOWED = 0x8011045B; - //public const uint COMADMIN_E_AMBIGUOUS_APPLICATION_NAME = 0x8011045C; - //public const uint COMADMIN_E_AMBIGUOUS_PARTITION_NAME = 0x8011045D; - //public const uint COMADMIN_E_REGDB_NOTINITIALIZED = 0x80110472; - //public const uint COMADMIN_E_REGDB_NOTOPEN = 0x80110473; - //public const uint COMADMIN_E_REGDB_SYSTEMERR = 0x80110474; - //public const uint COMADMIN_E_REGDB_ALREADYRUNNING = 0x80110475; - //public const uint COMADMIN_E_MIG_VERSIONNOTSUPPORTED = 0x80110480; - //public const uint COMADMIN_E_MIG_SCHEMANOTFOUND = 0x80110481; - //public const uint COMADMIN_E_CAT_BITNESSMISMATCH = 0x80110482; - //public const uint COMADMIN_E_CAT_UNACCEPTABLEBITNESS = 0x80110483; - //public const uint COMADMIN_E_CAT_WRONGAPPBITNESS = 0x80110484; - //public const uint COMADMIN_E_CAT_PAUSE_RESUME_NOT_SUPPORTED = 0x80110485; - //public const uint COMADMIN_E_CAT_SERVERFAULT = 0x80110486; - //public const uint COMQC_E_APPLICATION_NOT_QUEUED = 0x80110600; - //public const uint COMQC_E_NO_QUEUEABLE_INTERFACES = 0x80110601; - //public const uint COMQC_E_QUEUING_SERVICE_NOT_AVAILABLE = 0x80110602; - //public const uint COMQC_E_NO_IPERSISTSTREAM = 0x80110603; - //public const uint COMQC_E_BAD_MESSAGE = 0x80110604; - //public const uint COMQC_E_UNAUTHENTICATED = 0x80110605; - //public const uint COMQC_E_UNTRUSTED_ENQUEUER = 0x80110606; - //public const uint MSDTC_E_DUPLICATE_RESOURCE = 0x80110701; - //public const uint COMADMIN_E_OBJECT_PARENT_MISSING = 0x80110808; - //public const uint COMADMIN_E_OBJECT_DOES_NOT_EXIST = 0x80110809; - //public const uint COMADMIN_E_APP_NOT_RUNNING = 0x8011080A; - //public const uint COMADMIN_E_INVALID_PARTITION = 0x8011080B; - //public const uint COMADMIN_E_SVCAPP_NOT_POOLABLE_OR_RECYCLABLE = 0x8011080D; - //public const uint COMADMIN_E_USER_IN_SET = 0x8011080E; - //public const uint COMADMIN_E_CANTRECYCLELIBRARYAPPS = 0x8011080F; - //public const uint COMADMIN_E_CANTRECYCLESERVICEAPPS = 0x80110811; - //public const uint COMADMIN_E_PROCESSALREADYRECYCLED = 0x80110812; - //public const uint COMADMIN_E_PAUSEDPROCESSMAYNOTBERECYCLED = 0x80110813; - //public const uint COMADMIN_E_CANTMAKEINPROCSERVICE = 0x80110814; - //public const uint COMADMIN_E_PROGIDINUSEBYCLSID = 0x80110815; - //public const uint COMADMIN_E_DEFAULT_PARTITION_NOT_IN_SET = 0x80110816; - //public const uint COMADMIN_E_RECYCLEDPROCESSMAYNOTBEPAUSED = 0x80110817; - //public const uint COMADMIN_E_PARTITION_ACCESSDENIED = 0x80110818; - //public const uint COMADMIN_E_PARTITION_MSI_ONLY = 0x80110819; - //public const uint COMADMIN_E_LEGACYCOMPS_NOT_ALLOWED_IN_1_0_FORMAT = 0x8011081A; - //public const uint COMADMIN_E_LEGACYCOMPS_NOT_ALLOWED_IN_NONBASE_PARTITIONS = 0x8011081B; - //public const uint COMADMIN_E_COMP_MOVE_SOURCE = 0x8011081C; - //public const uint COMADMIN_E_COMP_MOVE_DEST = 0x8011081D; - //public const uint COMADMIN_E_COMP_MOVE_PRIVATE = 0x8011081E; - //public const uint COMADMIN_E_BASEPARTITION_REQUIRED_IN_SET = 0x8011081F; - //public const uint COMADMIN_E_CANNOT_ALIAS_EVENTCLASS = 0x80110820; - //public const uint COMADMIN_E_PRIVATE_ACCESSDENIED = 0x80110821; - //public const uint COMADMIN_E_SAFERINVALID = 0x80110822; - //public const uint COMADMIN_E_REGISTRY_ACCESSDENIED = 0x80110823; - //public const uint COMADMIN_E_PARTITIONS_DISABLED = 0x80110824; - - - #region Network Management Error Codes - - // http://msdn.microsoft.com/en-us/library/windows/desktop/aa370674%28v=vs.85%29.aspx - - /// (0) The operation completed successfully. - public const uint NERR_Success = 0; - - ///// The workstation driver is not installed. - //public const uint NERR_NetNotStarted = 2102; - - ///// The server could not be located. - //public const uint NERR_UnknownServer = 2103; - - ///// An internal error occurred. The network cannot access a shared memory segment. - //public const uint NERR_ShareMem = 2104; - - ///// A network resource shortage occurred. - //public const uint NERR_NoNetworkResource = 2105; - - ///// This operation is not supported on workstations. - //public const uint NERR_RemoteOnly = 2106; - - ///// The device is not connected. - //public const uint NERR_DevNotRedirected = 2107; - - ///// The Server service is not started. - //public const uint NERR_ServerNotStarted = 2114; - - ///// The queue is empty. - //public const uint NERR_ItemNotFound = 2115; - - ///// The device or directory does not exist. - //public const uint NERR_UnknownDevDir = 2116; - - ///// The operation is invalid on a redirected resource. - //public const uint NERR_RedirectedPath = 2117; - - ///// The name has already been shared. - //public const uint NERR_DuplicateShare = 2118; - - ///// The server is currently out of the requested resource. - //public const uint NERR_NoRoom = 2119; - - ///// Requested addition of items exceeds the maximum allowed. - //public const uint NERR_TooManyItems = 2121; - - ///// The Peer service supports only two simultaneous users. - //public const uint NERR_InvalidMaxUsers = 2122; - - ///// The API return buffer is too small. - //public const uint NERR_BufTooSmall = 2123; - - ///// A remote API error occurred. - //public const uint NERR_RemoteErr = 2127; - - ///// An error occurred when opening or reading the configuration file. - //public const uint NERR_LanmanIniError = 2131; - - ///// A general network error occurred. - //public const uint NERR_NetworkError = 2136; - - ///// The Workstation service is in an inconsistent state. Restart the computer before restarting the Workstation service. - //public const uint NERR_WkstaInconsistentState = 2137; - - ///// The Workstation service has not been started. - //public const uint NERR_WkstaNotStarted = 2138; - - ///// The requested information is not available. - //public const uint NERR_BrowserNotStarted = 2139; - - ///// An internal error occurred. - //public const uint NERR_InternalError = 2140; - - ///// The server is not configured for transactions. - //public const uint NERR_BadTransactConfig = 2141; - - ///// The requested API is not supported on the remote server. - //public const uint NERR_InvalidAPI = 2142; - - ///// The event name is invalid. - //public const uint NERR_BadEventName = 2143; - - ///// The computer name already exists on the network. Change it and restart the computer. - //public const uint NERR_DupNameReboot = 2144; - - ///// The specified component could not be found in the configuration information. - //public const uint NERR_CfgCompNotFound = 2146; - - ///// The specified parameter could not be found in the configuration information. - //public const uint NERR_CfgParamNotFound = 2147; - - ///// A line in the configuration file is too long. - //public const uint NERR_LineTooLong = 2149; - - ///// The printer does not exist. - //public const uint NERR_QNotFound = 2150; - - ///// The print job does not exist. - //public const uint NERR_JobNotFound = 2151; - - ///// The printer destination cannot be found. - //public const uint NERR_DestNotFound = 2152; - - ///// The printer destination already exists. - //public const uint NERR_DestExists = 2153; - - ///// The printer queue already exists. - //public const uint NERR_QExists = 2154; - - ///// No more printers can be added. - //public const uint NERR_QNoRoom = 2155; - - ///// No more print jobs can be added. - //public const uint NERR_JobNoRoom = 2156; - - ///// No more printer destinations can be added. - //public const uint NERR_DestNoRoom = 2157; - - ///// This printer destination is idle and cannot accept control operations. - //public const uint NERR_DestIdle = 2158; - - ///// This printer destination request contains an invalid control function. - //public const uint NERR_DestInvalidOp = 2159; - - ///// The print processor is not responding. - //public const uint NERR_ProcNoRespond = 2160; - - ///// The spooler is not running. - //public const uint NERR_SpoolerNotLoaded = 2161; - - ///// This operation cannot be performed on the print destination in its current state. - //public const uint NERR_DestInvalidState = 2162; - - ///// This operation cannot be performed on the printer queue in its current state. - //public const uint NERR_QinvalidState = 2163; - - ///// This operation cannot be performed on the print job in its current state. - //public const uint NERR_JobInvalidState = 2164; - - ///// A spooler memory allocation failure occurred. - //public const uint NERR_SpoolNoMemory = 2165; - - ///// The device driver does not exist. - //public const uint NERR_DriverNotFound = 2166; - - ///// The data type is not supported by the print processor. - //public const uint NERR_DataTypeInvalid = 2167; - - ///// The print processor is not installed. - //public const uint NERR_ProcNotFound = 2168; - - ///// The service database is locked. - //public const uint NERR_ServiceTableLocked = 2180; - - ///// The service table is full. - //public const uint NERR_ServiceTableFull = 2181; - - ///// The requested service has already been started. - //public const uint NERR_ServiceInstalled = 2182; - - ///// The service does not respond to control actions. - //public const uint NERR_ServiceEntryLocked = 2183; - - ///// The service has not been started. - //public const uint NERR_ServiceNotInstalled = 2184; - - ///// The service name is invalid. - //public const uint NERR_BadServiceName = 2185; - - ///// The service is not responding to the control function. - //public const uint NERR_ServiceCtlTimeout = 2186; - - ///// The service control is busy. - //public const uint NERR_ServiceCtlBusy = 2187; - - ///// The configuration file contains an invalid service program name. - //public const uint NERR_BadServiceProgName = 2188; - - ///// The service could not be controlled in its present state. - //public const uint NERR_ServiceNotCtrl = 2189; - - ///// The service ended abnormally. - //public const uint NERR_ServiceKillProc = 2190; - - ///// The requested pause or stop is not valid for this service. - //public const uint NERR_ServiceCtlNotValid = 2191; - - ///// The service control dispatcher could not find the service name in the dispatch table. - //public const uint NERR_NotInDispatchTbl = 2192; - - ///// The service control dispatcher pipe read failed. - //public const uint NERR_BadControlRecv = 2193; - - ///// A thread for the new service could not be created. - //public const uint NERR_ServiceNotStarting = 2194; - - ///// This workstation is already logged on to the local-area network. - //public const uint NERR_AlreadyLoggedOn = 2200; - - ///// The workstation is not logged on to the local-area network. - //public const uint NERR_NotLoggedOn = 2201; - - ///// The user name or group name parameter is invalid. - //public const uint NERR_BadUsername = 2202; - - ///// The password parameter is invalid. - //public const uint NERR_BadPassword = 2203; - - ///// @W The logon processor did not add the message alias. - //public const uint NERR_UnableToAddName_W = 2204; - - ///// The logon processor did not add the message alias. - //public const uint NERR_UnableToAddName_F = 2205; - - ///// @W The logoff processor did not delete the message alias. - //public const uint NERR_UnableToDelName_W = 2206; - - ///// The logoff processor did not delete the message alias. - //public const uint NERR_UnableToDelName_F = 2207; - - ///// Network logons are paused. - //public const uint NERR_LogonsPaused = 2209; - - ///// A centralized logon-server conflict occurred. - //public const uint NERR_LogonServerConflict = 2210; - - ///// The server is configured without a valid user path. - //public const uint NERR_LogonNoUserPath = 2211; - - ///// An error occurred while loading or running the logon script. - //public const uint NERR_LogonScriptError = 2212; - - ///// The logon server was not specified. Your computer will be logged on as STANDALONE. - //public const uint NERR_StandaloneLogon = 2214; - - ///// The logon server could not be found. - //public const uint NERR_LogonServerNotFound = 2215; - - ///// There is already a logon domain for this computer. - //public const uint NERR_LogonDomainExists = 2216; - - ///// The logon server could not validate the logon. - //public const uint NERR_NonValidatedLogon = 2217; - - ///// The security database could not be found. - //public const uint NERR_ACFNotFound = 2219; - - ///// The group name could not be found. - //public const uint NERR_GroupNotFound = 2220; - - ///// The user name could not be found. - //public const uint NERR_UserNotFound = 2221; - - ///// The resource name could not be found. - //public const uint NERR_ResourceNotFound = 2222; - - ///// The group already exists. - //public const uint NERR_GroupExists = 2223; - - ///// The user account already exists. - //public const uint NERR_UserExists = 2224; - - ///// The resource permission list already exists. - //public const uint NERR_ResourceExists = 2225; - - ///// This operation is only allowed on the primary domain controller of the domain. - //public const uint NERR_NotPrimary = 2226; - - ///// The security database has not been started. - //public const uint NERR_ACFNotLoaded = 2227; - - ///// There are too many names in the user accounts database. - //public const uint NERR_ACFNoRoom = 2228; - - ///// A disk I/O failure occurred. - //public const uint NERR_ACFFileIOFail = 2229; - - ///// The limit of 64 entries per resource was exceeded. - //public const uint NERR_ACFTooManyLists = 2230; - - ///// Deleting a user with a session is not allowed. - //public const uint NERR_UserLogon = 2231; - - ///// The parent directory could not be located. - //public const uint NERR_ACFNoParent = 2232; - - ///// Unable to add to the security database session cache segment. - //public const uint NERR_CanNotGrowSegment = 2233; - - ///// This operation is not allowed on this special group. - //public const uint NERR_SpeGroupOp = 2234; - - ///// This user is not cached in user accounts database session cache. - //public const uint NERR_NotInCache = 2235; - - ///// The user already belongs to this group. - //public const uint NERR_UserInGroup = 2236; - - ///// The user does not belong to this group. - //public const uint NERR_UserNotInGroup = 2237; - - ///// This user account is undefined. - //public const uint NERR_AccountUndefined = 2238; - - ///// This user account has expired. - //public const uint NERR_AccountExpired = 2239; - - ///// The user is not allowed to log on from this workstation. - //public const uint NERR_InvalidWorkstation = 2240; - - ///// The user is not allowed to log on at this time. - //public const uint NERR_InvalidLogonHours = 2241; - - ///// The password of this user has expired. - //public const uint NERR_PasswordExpired = 2242; - - ///// The password of this user cannot change. - //public const uint NERR_PasswordCantChange = 2243; - - ///// This password cannot be used now. - //public const uint NERR_PasswordHistConflict = 2244; - - ///// The password does not meet the password policy requirements. Check the minimum password length, password complexity and password history requirements. - //public const uint NERR_PasswordTooShort = 2245; - - ///// The password of this user is too recent to change. - //public const uint NERR_PasswordTooRecent = 2246; - - ///// The security database is corrupted. - //public const uint NERR_InvalidDatabase = 2247; - - ///// No updates are necessary to this replicant network/local security database. - //public const uint NERR_DatabaseUpToDate = 2248; - - ///// This replicant database is outdated; synchronization is required. - //public const uint NERR_SyncRequired = 2249; - - /// (2250) The network connection could not be found. - public const uint NERR_UseNotFound = 2250; - - ///// This asg_type is invalid. - //public const uint NERR_BadAsgType = 2251; - - ///// This device is currently being shared. - //public const uint NERR_DeviceIsShared = 2252; - - ///// The computer name could not be added as a message alias. The name may already exist on the network. - //public const uint NERR_NoComputerName = 2270; - - ///// The Messenger service is already started. - //public const uint NERR_MsgAlreadyStarted = 2271; - - ///// The Messenger service failed to start. - //public const uint NERR_MsgInitFailed = 2272; - - ///// The message alias could not be found on the network. - //public const uint NERR_NameNotFound = 2273; - - ///// This message alias has already been forwarded. - //public const uint NERR_AlreadyForwarded = 2274; - - ///// This message alias has been added but is still forwarded. - //public const uint NERR_AddForwarded = 2275; - - ///// This message alias already exists locally. - //public const uint NERR_AlreadyExists = 2276; - - ///// The maximum number of added message aliases has been exceeded. - //public const uint NERR_TooManyNames = 2277; - - ///// The computer name could not be deleted. - //public const uint NERR_DelComputerName = 2278; - - ///// Messages cannot be forwarded back to the same workstation. - //public const uint NERR_LocalForward = 2279; - - ///// An error occurred in the domain message processor. - //public const uint NERR_GrpMsgProcessor = 2280; - - ///// The message was sent, but the recipient has paused the Messenger service. - //public const uint NERR_PausedRemote = 2281; - - ///// The message was sent but not received. - //public const uint NERR_BadReceive = 2282; - - ///// The message alias is currently in use. Try again later. - //public const uint NERR_NameInUse = 2283; - - ///// The Messenger service has not been started. - //public const uint NERR_MsgNotStarted = 2284; - - ///// The name is not on the local computer. - //public const uint NERR_NotLocalName = 2285; - - ///// The forwarded message alias could not be found on the network. - //public const uint NERR_NoForwardName = 2286; - - ///// The message alias table on the remote station is full. - //public const uint NERR_RemoteFull = 2287; - - ///// Messages for this alias are not currently being forwarded. - //public const uint NERR_NameNotForwarded = 2288; - - ///// The broadcast message was truncated. - //public const uint NERR_TruncatedBroadcast = 2289; - - ///// This is an invalid device name. - //public const uint NERR_InvalidDevice = 2294; - - ///// A write fault occurred. - //public const uint NERR_WriteFault = 2295; - - ///// A duplicate message alias exists on the network. - //public const uint NERR_DuplicateName = 2297; - - ///// @W This message alias will be deleted later. - //public const uint NERR_DeleteLater = 2298; - - ///// The message alias was not successfully deleted from all networks. - //public const uint NERR_IncompleteDel = 2299; - - ///// This operation is not supported on computers with multiple networks. - //public const uint NERR_MultipleNets = 2300; - - /// (2310) This shared resource does not exist. - public const uint NERR_NetNameNotFound = 2310; - - ///// This device is not shared. - //public const uint NERR_DeviceNotShared = 2311; - - ///// A session does not exist with that computer name. - //public const uint NERR_ClientNameNotFound = 2312; - - /// (2314) There is not an open file with that identification number. - public const uint NERR_FileIdNotFound = 2314; - - ///// A failure occurred when executing a remote administration command. - //public const uint NERR_ExecFailure = 2315; - - ///// A failure occurred when opening a remote temporary file. - //public const uint NERR_TmpFile = 2316; - - ///// The data returned from a remote administration command has been truncated to 64K. - //public const uint NERR_TooMuchData = 2317; - - ///// This device cannot be shared as both a spooled and a non-spooled resource. - //public const uint NERR_DeviceShareConflict = 2318; - - ///// The information in the list of servers may be incorrect. - //public const uint NERR_BrowserTableIncomplete = 2319; - - ///// The computer is not active in this domain. - //public const uint NERR_NotLocalDomain = 2320; - - ///// The share must be removed from the Distributed File System before it can be deleted. - //public const uint NERR_IsDfsShare = 2321; - - ///// The operation is invalid for this device. - //public const uint NERR_DevInvalidOpCode = 2331; - - ///// This device cannot be shared. - //public const uint NERR_DevNotFound = 2332; - - ///// This device was not open. - //public const uint NERR_DevNotOpen = 2333; - - ///// This device name list is invalid. - //public const uint NERR_BadQueueDevString = 2334; - - ///// The queue priority is invalid. - //public const uint NERR_BadQueuePriority = 2335; - - ///// There are no shared communication devices. - //public const uint NERR_NoCommDevs = 2337; - - ///// The queue you specified does not exist. - //public const uint NERR_QueueNotFound = 2338; - - ///// This list of devices is invalid. - //public const uint NERR_BadDevString = 2340; - - ///// The requested device is invalid. - //public const uint NERR_BadDev = 2341; - - ///// This device is already in use by the spooler. - //public const uint NERR_InUseBySpooler = 2342; - - ///// This device is already in use as a communication device. - //public const uint NERR_CommDevInUse = 2343; - - ///// This computer name is invalid. - //public const uint NERR_InvalidComputer = 2351; - - ///// The string and prefix specified are too long. - //public const uint NERR_MaxLenExceeded = 2354; - - ///// This path component is invalid. - //public const uint NERR_BadComponent = 2356; - - ///// Could not determine the type of input. - //public const uint NERR_CantType = 2357; - - ///// The buffer for types is not big enough. - //public const uint NERR_TooManyEntries = 2362; - - ///// Profile files cannot exceed 64K. - //public const uint NERR_ProfileFileTooBig = 2370; - - ///// The start offset is out of range. - //public const uint NERR_ProfileOffset = 2371; - - ///// The system cannot delete current connections to network resources. - //public const uint NERR_ProfileCleanup = 2372; - - ///// The system was unable to parse the command line in this file. - //public const uint NERR_ProfileUnknownCmd = 2373; - - ///// An error occurred while loading the profile file. - //public const uint NERR_ProfileLoadErr = 2374; - - ///// @W Errors occurred while saving the profile file. The profile was partially saved. - //public const uint NERR_ProfileSaveErr = 2375; - - ///// Log file %1 is full. - //public const uint NERR_LogOverflow = 2377; - - ///// This log file has changed between reads. - //public const uint NERR_LogFileChanged = 2378; - - ///// Log file %1 is corrupt. - //public const uint NERR_LogFileCorrupt = 2379; - - ///// The source path cannot be a directory. - //public const uint NERR_SourceIsDir = 2380; - - ///// The source path is illegal. - //public const uint NERR_BadSource = 2381; - - ///// The destination path is illegal. - //public const uint NERR_BadDest = 2382; - - ///// The source and destination paths are on different servers. - //public const uint NERR_DifferentServers = 2383; - - ///// The Run server you requested is paused. - //public const uint NERR_RunSrvPaused = 2385; - - ///// An error occurred when communicating with a Run server. - //public const uint NERR_ErrCommRunSrv = 2389; - - ///// An error occurred when starting a background process. - //public const uint NERR_ErrorExecingGhost = 2391; - - ///// The shared resource you are connected to could not be found. - //public const uint NERR_ShareNotFound = 2392; - - ///// The LAN adapter number is invalid. - //public const uint NERR_InvalidLana = 2400; - - ///// There are open files on the connection. - //public const uint NERR_OpenFiles = 2401; - - ///// Active connections still exist. - //public const uint NERR_ActiveConns = 2402; - - ///// This share name or password is invalid. - //public const uint NERR_BadPasswordCore = 2403; - - ///// The device is being accessed by an active process. - //public const uint NERR_DevInUse = 2404; - - ///// The drive letter is in use locally. - //public const uint NERR_LocalDrive = 2405; - - ///// The specified client is already registered for the specified event. - //public const uint NERR_AlertExists = 2430; - - ///// The alert table is full. - //public const uint NERR_TooManyAlerts = 2431; - - ///// An invalid or nonexistent alert name was raised. - //public const uint NERR_NoSuchAlert = 2432; - - ///// The alert recipient is invalid. - //public const uint NERR_BadRecipient = 2433; - - ///// A user's session with this server has been deleted - //public const uint NERR_AcctLimitExceeded = 2434; - - ///// The log file does not contain the requested record number. - //public const uint NERR_InvalidLogSeek = 2440; - - ///// The user accounts database is not configured correctly. - //public const uint NERR_BadUasConfig = 2450; - - ///// This operation is not permitted when the Netlogon service is running. - //public const uint NERR_InvalidUASOp = 2451; - - ///// This operation is not allowed on the last administrative account. - //public const uint NERR_LastAdmin = 2452; - - ///// Could not find domain controller for this domain. - //public const uint NERR_DCNotFound = 2453; - - ///// Could not set logon information for this user. - //public const uint NERR_LogonTrackingError = 2454; - - ///// The Netlogon service has not been started. - //public const uint NERR_NetlogonNotStarted = 2455; - - ///// Unable to add to the user accounts database. - //public const uint NERR_CanNotGrowUASFile = 2456; - - ///// This server's clock is not synchronized with the primary domain controller's clock. - //public const uint NERR_TimeDiffAtDC = 2457; - - ///// A password mismatch has been detected. - //public const uint NERR_PasswordMismatch = 2458; - - ///// The server identification does not specify a valid server. - //public const uint NERR_NoSuchServer = 2460; - - ///// The session identification does not specify a valid session. - //public const uint NERR_NoSuchSession = 2461; - - ///// The connection identification does not specify a valid connection. - //public const uint NERR_NoSuchConnection = 2462; - - ///// There is no space for another entry in the table of available servers. - //public const uint NERR_TooManyServers = 2463; - - ///// The server has reached the maximum number of sessions it supports. - //public const uint NERR_TooManySessions = 2464; - - ///// The server has reached the maximum number of connections it supports. - //public const uint NERR_TooManyConnections = 2465; - - ///// The server cannot open more files because it has reached its maximum number. - //public const uint NERR_TooManyFiles = 2466; - - ///// There are no alternate servers registered on this server. - //public const uint NERR_NoAlternateServers = 2467; - - ///// Try down-level (remote admin protocol) version of API instead. - //public const uint NERR_TryDownLevel = 2470; - - ///// The UPS driver could not be accessed by the UPS service. - //public const uint NERR_UPSDriverNotStarted = 2480; - - ///// The UPS service is not configured correctly. - //public const uint NERR_UPSInvalidConfig = 2481; - - ///// The UPS service could not access the specified Comm Port. - //public const uint NERR_UPSInvalidCommPort = 2482; - - ///// The UPS indicated a line fail or low battery situation. Service not started. - //public const uint NERR_UPSSignalAsserted = 2483; - - ///// The UPS service failed to perform a system shut down. - //public const uint NERR_UPSShutdownFailed = 2484; - - ///// The program below returned an MS-DOS error code: - //public const uint NERR_BadDosRetCode = 2500; - - ///// The program below needs more memory: - //public const uint NERR_ProgNeedsExtraMem = 2501; - - ///// The program below called an unsupported MS-DOS function: - //public const uint NERR_BadDosFunction = 2502; - - ///// The workstation failed to boot. - //public const uint NERR_RemoteBootFailed = 2503; - - ///// The file below is corrupt. - //public const uint NERR_BadFileCheckSum = 2504; - - ///// No loader is specified in the boot-block definition file. - //public const uint NERR_NoRplBootSystem = 2505; - - ///// NetBIOS returned an error: The NCB and SMB are dumped above. - //public const uint NERR_RplLoadrNetBiosErr = 2506; - - ///// A disk I/O error occurred. - //public const uint NERR_RplLoadrDiskErr = 2507; - - ///// Image parameter substitution failed. - //public const uint NERR_ImageParamErr = 2508; - - ///// Too many image parameters cross disk sector boundaries. - //public const uint NERR_TooManyImageParams = 2509; - - ///// The image was not generated from an MS-DOS diskette formatted with /S. - //public const uint NERR_NonDosFloppyUsed = 2510; - - ///// Remote boot will be restarted later. - //public const uint NERR_RplBootRestart = 2511; - - ///// The call to the Remoteboot server failed. - //public const uint NERR_RplSrvrCallFailed = 2512; - - ///// Cannot connect to the Remoteboot server. - //public const uint NERR_CantConnectRplSrvr = 2513; - - ///// Cannot open image file on the Remoteboot server. - //public const uint NERR_CantOpenImageFile = 2514; - - ///// Connecting to the Remoteboot server... - //public const uint NERR_CallingRplSrvr = 2515; - - ///// Connecting to the Remoteboot server... - //public const uint NERR_StartingRplBoot = 2516; - - ///// Remote boot service was stopped; check the error log for the cause of the problem. - //public const uint NERR_RplBootServiceTerm = 2517; - - ///// Remote boot startup failed; check the error log for the cause of the problem. - //public const uint NERR_RplBootStartFailed = 2518; - - ////// A second connection to a Remoteboot resource is not allowed. - //public const uint NERR_RplConnected = 2519; - - ///// The browser service was configured with MaintainServerList=No. - //public const uint NERR_BrowserConfiguredToNotRun = 2550; - - ///// Service failed to start since none of the network adapters started with this service. - //public const uint NERR_RplNoAdaptersStarted = 2610; - - ///// Service failed to start due to bad startup information in the registry. - //public const uint NERR_RplBadRegistry = 2611; - - ///// Service failed to start because its database is absent or corrupt. - //public const uint NERR_RplBadDatabase = 2612; - - ///// Service failed to start because RPLFILES share is absent. - //public const uint NERR_RplRplfilesShare = 2613; - - ///// Service failed to start because RPLUSER group is absent. - //public const uint NERR_RplNotRplServer = 2614; - - ///// Cannot enumerate service records. - //public const uint NERR_RplCannotEnum = 2615; - - ///// Workstation record information has been corrupted. - //public const uint NERR_RplWkstaInfoCorrupted = 2616; - - ///// Workstation record was not found. - //public const uint NERR_RplWkstaNotFound = 2617; - - ///// Workstation name is in use by some other workstation. - //public const uint NERR_RplWkstaNameUnavailable = 2618; - - ///// Profile record information has been corrupted. - //public const uint NERR_RplProfileInfoCorrupted = 2619; - - ///// Profile record was not found. - //public const uint NERR_RplProfileNotFound = 2620; - - ///// Profile name is in use by some other profile. - //public const uint NERR_RplProfileNameUnavailable = 2621; - - ///// There are workstations using this profile. - //public const uint NERR_RplProfileNotEmpty = 2622; - - ///// Configuration record information has been corrupted. - //public const uint NERR_RplConfigInfoCorrupted = 2623; - - ///// Configuration record was not found. - //public const uint NERR_RplConfigNotFound = 2624; - - ///// Adapter ID record information has been corrupted. - //public const uint NERR_RplAdapterInfoCorrupted = 2625; - - ///// An internal service error has occurred. - //public const uint NERR_RplInternal = 2626; - - ///// Vendor ID record information has been corrupted. - //public const uint NERR_RplVendorInfoCorrupted = 2627; - - ///// Boot block record information has been corrupted. - //public const uint NERR_RplBootInfoCorrupted = 2628; - - ///// The user account for this workstation record is missing. - //public const uint NERR_RplWkstaNeedsUserAcct = 2629; - - ///// The RPLUSER local group could not be found. - //public const uint NERR_RplNeedsRPLUSERAcct = 2630; - - ///// Boot block record was not found. - //public const uint NERR_RplBootNotFound = 2631; - - ///// Chosen profile is incompatible with this workstation. - //public const uint NERR_RplIncompatibleProfile = 2632; - - ///// Chosen network adapter ID is in use by some other workstation. - //public const uint NERR_RplAdapterNameUnavailable = 2633; - - ///// There are profiles using this configuration. - //public const uint NERR_RplConfigNotEmpty = 2634; - - ///// There are workstations, profiles, or configurations using this boot block. - //public const uint NERR_RplBootInUse = 2635; - - ///// Service failed to backup Remoteboot database. - //public const uint NERR_RplBackupDatabase = 2636; - - ///// Adapter record was not found. - //public const uint NERR_RplAdapterNotFound = 2637; - - ///// Vendor record was not found. - //public const uint NERR_RplVendorNotFound = 2638; - - ///// Vendor name is in use by some other vendor record. - //public const uint NERR_RplVendorNameUnavailable = 2639; - - ///// (boot name, vendor ID) is in use by some other boot block record. - //public const uint NERR_RplBootNameUnavailable = 2640; - - ///// Configuration name is in use by some other configuration. - //public const uint NERR_RplConfigNameUnavailable = 2641; - - ///// The internal database maintained by the Dfs service is corrupt. - //public const uint NERR_DfsInternalCorruption = 2660; - - ///// One of the records in the internal Dfs database is corrupt. - //public const uint NERR_DfsVolumeDataCorrupt = 2661; - - ///// There is no DFS name whose entry path matches the input Entry Path. - //public const uint NERR_DfsNoSuchVolume = 2662; - - ///// A root or link with the given name already exists. - //public const uint NERR_DfsVolumeAlreadyExists = 2663; - - ///// The server share specified is already shared in the Dfs. - //public const uint NERR_DfsAlreadyShared = 2664; - - ///// The indicated server share does not support the indicated DFS namespace. - //public const uint NERR_DfsNoSuchShare = 2665; - - ///// The operation is not valid on this portion of the namespace. - //public const uint NERR_DfsNotALeafVolume = 2666; - - ///// The operation is not valid on this portion of the namespace. - //public const uint NERR_DfsLeafVolume = 2667; - - ///// The operation is ambiguous because the link has multiple servers. - //public const uint NERR_DfsVolumeHasMultipleServers = 2668; - - ///// Unable to create a link. - //public const uint NERR_DfsCantCreateJunctionPoint = 2669; - - ///// The server is not Dfs Aware. - //public const uint NERR_DfsServerNotDfsAware = 2670; - - ///// The specified rename target path is invalid. - //public const uint NERR_DfsBadRenamePath = 2671; - - ///// The specified DFS link is offline. - //public const uint NERR_DfsVolumeIsOffline = 2672; - - ///// The specified server is not a server for this link. - //public const uint NERR_DfsNoSuchServer = 2673; - - ///// A cycle in the Dfs name was detected. - //public const uint NERR_DfsCyclicalName = 2674; - - ///// The operation is not supported on a server-based Dfs. - //public const uint NERR_DfsNotSupportedInServerDfs = 2675; - - ///// This link is already supported by the specified server-share. - //public const uint NERR_DfsDuplicateService = 2676; - - ///// Can't remove the last server-share supporting this root or link. - //public const uint NERR_DfsCantRemoveLastServerShare = 2677; - - ///// The operation is not supported for an Inter-DFS link. - //public const uint NERR_DfsVolumeIsInterDfs = 2678; - - ///// The internal state of the Dfs Service has become inconsistent. - //public const uint NERR_DfsInconsistent = 2679; - - ///// The Dfs Service has been installed on the specified server. - //public const uint NERR_DfsServerUpgraded = 2680; - - ///// The Dfs data being reconciled is identical. - //public const uint NERR_DfsDataIsIdentical = 2681; - - ///// The DFS root cannot be deleted. Uninstall DFS if required. - //public const uint NERR_DfsCantRemoveDfsRoot = 2682; - - ///// A child or parent directory of the share is already in a Dfs. - //public const uint NERR_DfsChildOrParentInDfs = 2683; - - ///// Dfs internal error. - //public const uint NERR_DfsInternalError = 2690; - - ///// This computer is already joined to a domain. - //public const uint NERR_SetupAlreadyJoined = 2691; - - ///// This computer is not currently joined to a domain. - //public const uint NERR_SetupNotJoined = 2692; - - ///// This computer is a domain controller and cannot be unjoined from a domain. - //public const uint NERR_SetupDomainController = 2693; - - ///// The destination domain controller does not support creating machine accounts in OUs. - //public const uint NERR_DefaultJoinRequired = 2694; - - ///// The specified workgroup name is invalid. - //public const uint NERR_InvalidWorkgroupName = 2695; - - ///// The specified computer name is incompatible with the default language used on the domain controller. - //public const uint NERR_NameUsesIncompatibleCodePage = 2696; - - ///// The specified computer account could not be found. - //public const uint NERR_ComputerAccountNotFound = 2697; - - ///// This version of Windows cannot be joined to a domain. - //public const uint NERR_PersonalSku = 2698; - - ///// The password must change at the next logon. - //public const uint NERR_PasswordMustChange = 2701; - - ///// The account is locked out. - //public const uint NERR_AccountLockedOut = 2702; - - ///// The password is too long. - //public const uint NERR_PasswordTooLong = 2703; - - ///// The password does not meet the complexity policy. - //public const uint NERR_PasswordNotComplexEnough = 2704; - - ///// The password does not meet the requirements of the password filter DLLs. - //public const uint NERR_PasswordFilterError = 2705; - - ///// The offline join completion information was not found. - //public const uint NERR_NoOfflineJoinInfo = 2709; - - ///// The offline join completion information was bad. - //public const uint NERR_BadOfflineJoinInfo = 2710; - - ///// Unable to create offline join information. Please ensure you have access to the specified path location and permissions to modify its contents. Running as an elevated administrator may be required. - //public const uint NERR_CantCreateJoinInfo = 2711; - - ///// The domain join info being saved was incomplete or bad. - //public const uint NERR_BadDomainJoinInfo = 2712; - - ///// Offline join operation successfully completed but a restart is needed. - //public const uint NERR_JoinPerformedMustRestart = 2713; - - ///// There was no offline join operation pending. - //public const uint NERR_NoJoinPending = 2714; - - ///// Unable to set one or more requested machine or domain name values on the local computer. - //public const uint NERR_ValuesNotSet = 2715; - - ///// Could not verify the current machine's hostname against the saved value in the join completion information. - //public const uint NERR_CantVerifyHostname = 2716; - - ///// Unable to load the specified offline registry hive. Please ensure you have access to the specified path location and permissions to modify its contents. Running as an elevated administrator may be required. - //public const uint NERR_CantLoadOfflineHive = 2717; - - ///// The minimum session security requirements for this operation were not met. - //public const uint NERR_ConnectionInsecure = 2718; - - ///// Computer account provisioning blob version is not supported. - //public const uint NERR_RplBootInUse = 2719; - - #endregion // Network Management Error Codes - - #region Configuration Manager Error Codes - - /// (0) The operation completed successfully. - public const uint CR_SUCCESS = 0; - - //public const uint CR_DEFAULT = 1; - //public const uint CR_OUT_OF_MEMORY = 2; - //public const uint CR_INVALID_POINTER = 3; - //public const uint CR_INVALID_FLAG = 4; - //public const uint CR_INVALID_DEVNODE = 5; - //public const uint CR_INVALID_DEVINST = CR_INVALID_DEVNODE; - //public const uint CR_INVALID_RES_DES = 6; - //public const uint CR_INVALID_LOG_CONF = 7; - //public const uint CR_INVALID_ARBITRATOR = 8; - //public const uint CR_INVALID_NODELIST = 9; - //public const uint CR_DEVNODE_HAS_REQS = 10; - //public const uint CR_DEVINST_HAS_REQS = CR_DEVNODE_HAS_REQS; - //public const uint CR_INVALID_RESOURCEID = 11; - //public const uint CR_DLVXD_NOT_FOUND = 12; // WIN 95 ONLY - //public const uint CR_NO_SUCH_DEVNODE = 13; - //public const uint CR_NO_SUCH_DEVINST = CR_NO_SUCH_DEVNODE; - //public const uint CR_NO_MORE_LOG_CONF = 14; - //public const uint CR_NO_MORE_RES_DES = 15; - //public const uint CR_ALREADY_SUCH_DEVNODE = 16; - //public const uint CR_ALREADY_SUCH_DEVINST = CR_ALREADY_SUCH_DEVNODE; - //public const uint CR_INVALID_RANGE_LIST = 17; - //public const uint CR_INVALID_RANGE = 18; - //public const uint CR_FAILURE = 19; - //public const uint CR_NO_SUCH_LOGICAL_DEV = 20; - //public const uint CR_CREATE_BLOCKED = 21; - //public const uint CR_NOT_SYSTEM_VM = 22; // WIN 95 ONLY - //public const uint CR_REMOVE_VETOED = 23; - //public const uint CR_APM_VETOED = 24; - //public const uint CR_INVALID_LOAD_TYPE = 25; - //public const uint CR_BUFFER_SMALL = 26; - //public const uint CR_NO_ARBITRATOR = 27; - //public const uint CR_NO_REGISTRY_HANDLE = 28; - //public const uint CR_REGISTRY_ERROR = 29; - //public const uint CR_INVALID_DEVICE_ID = 30; - //public const uint CR_INVALID_DATA = 31; - //public const uint CR_INVALID_API = 32; - //public const uint CR_DEVLOADER_NOT_READY = 33; - //public const uint CR_NEED_RESTART = 34; - //public const uint CR_NO_MORE_HW_PROFILES = 35; - //public const uint CR_DEVICE_NOT_THERE = 36; - //public const uint CR_NO_SUCH_VALUE = 37; - //public const uint CR_WRONG_TYPE = 38; - //public const uint CR_INVALID_PRIORITY = 39; - //public const uint CR_NOT_DISABLEABLE = 40; - //public const uint CR_FREE_RESOURCES = 41; - //public const uint CR_QUERY_VETOED = 42; - //public const uint CR_CANT_SHARE_IRQ = 43; - //public const uint CR_NO_DEPENDENT = 44; - //public const uint CR_SAME_RESOURCES = 45; - //public const uint CR_NO_SUCH_REGISTRY_KEY = 46; - //public const uint CR_INVALID_MACHINENAME = 47; // NT ONLY - //public const uint CR_REMOTE_COMM_FAILURE = 48; // NT ONLY - //public const uint CR_MACHINE_UNAVAILABLE = 49; // NT ONLY - //public const uint CR_NO_CM_SERVICES = 50; // NT ONLY - //public const uint CR_ACCESS_DENIED = 51; // NT ONLY - //public const uint CR_CALL_NOT_IMPLEMENTED = 52; - //public const uint CR_INVALID_PROPERTY = 53; - //public const uint CR_DEVICE_INTERFACE_ACTIVE = 54; - //public const uint CR_NO_SUCH_DEVICE_INTERFACE = 55; - //public const uint CR_INVALID_REFERENCE_STRING = 56; - //public const uint NUM_CR_RESULTS = 57; - - #endregion // Configuration Manager Error Codes - } -} diff --git a/AlphaFS/app.config b/AlphaFS/app.config deleted file mode 100644 index bd4cf43..0000000 --- a/AlphaFS/app.config +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/AlphaFS/obj/Debug/AlphaFS.pdb b/AlphaFS/obj/Debug/AlphaFS.pdb deleted file mode 100644 index 6758b597a2f28bc5108b8821e8ebaf63adb92374..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 947712 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 diff --git a/AlphaFS/packages.config b/AlphaFS/packages.config deleted file mode 100644 index f7ed71d..0000000 --- a/AlphaFS/packages.config +++ /dev/null @@ -1,4 +0,0 @@ - - - - \ No newline at end of file diff --git a/Log/Log.cs b/Log/Log.cs deleted file mode 100644 index 0a1e301..0000000 --- a/Log/Log.cs +++ /dev/null @@ -1,253 +0,0 @@ -using System; -using System.Diagnostics; - -namespace Log -{ - #region Log - - namespace Log - { - public class ParameterCountMismatchArgumentCountException : Exception - { - public ParameterCountMismatchArgumentCountException() - : base() { } - - public ParameterCountMismatchArgumentCountException(string message) - : base(message) - { } - } - - public class Log : Microsoft.VisualBasic.Logging.Log, IDisposable - { - public Log() - : base() - { - if (!string.IsNullOrEmpty(System.Configuration.ConfigurationManager.AppSettings["LogPath"])) - { - string LogPath = System.Configuration.ConfigurationManager.AppSettings["LogPath"]; - string LogName = System.Reflection.Assembly.GetCallingAssembly().GetName().Name; - DefaultFileLogWriter.CustomLocation = System.IO.Path.GetDirectoryName(LogPath); - DefaultFileLogWriter.BaseFileName = LogName; - DefaultFileLogWriter.Location = Microsoft.VisualBasic.Logging.LogFileLocation.Custom; - DefaultFileLogWriter.CustomLocation = LogPath; - } - else if (System.Reflection.Assembly.GetEntryAssembly() != null) - { - DefaultFileLogWriter.Location = Microsoft.VisualBasic.Logging.LogFileLocation.ExecutableDirectory; - } - - DefaultFileLogWriter.Append = true; - DefaultFileLogWriter.AutoFlush = true; - DefaultFileLogWriter.Delimiter = ";"; - DefaultFileLogWriter.MaxFileSize = 2621440000; //2500 MB - DefaultFileLogWriter.ReserveDiskSpace = 1048576000; //1000 MB - DefaultFileLogWriter.LogFileCreationSchedule = Microsoft.VisualBasic.Logging.LogFileCreationScheduleOption.Daily; - if (System.Configuration.ConfigurationManager.AppSettings["Debug"] == "true") - TraceSource.Switch.Level = SourceLevels.All; - else - TraceSource.Switch.Level = SourceLevels.Information; - - WriteEntry("Starting log..."); - WriteEntry("Log instance created"); - } - - public Log(string name) - : this() - { - DefaultFileLogWriter.BaseFileName = name; - } - - public Log(string name, string logPath, SourceLevels level) - : this() - { - DefaultFileLogWriter.CustomLocation = System.IO.Path.GetDirectoryName(logPath); - DefaultFileLogWriter.BaseFileName = name; - DefaultFileLogWriter.Location = Microsoft.VisualBasic.Logging.LogFileLocation.Custom; - DefaultFileLogWriter.CustomLocation = logPath; - DefaultFileLogWriter.Append = true; - DefaultFileLogWriter.AutoFlush = true; - DefaultFileLogWriter.Delimiter = ";"; - DefaultFileLogWriter.MaxFileSize = 2621440000; //2500 MB - DefaultFileLogWriter.ReserveDiskSpace = 1048576000; //1000 MB - DefaultFileLogWriter.LogFileCreationSchedule = Microsoft.VisualBasic.Logging.LogFileCreationScheduleOption.Daily; - TraceSource.Switch.Level = level; - - WriteEntry("Starting log..."); - WriteEntry("Log instance created"); - } - - public void Dispose() - { - WriteEntry("Log Class gets disposed."); - WriteEntry("Closing log..."); - DefaultFileLogWriter.Close(); - } - - public void WriteFunctionEntry() - { - string message = string.Empty; - - string callingMethod = new StackFrame(1, true).GetMethod().Name; - string callingClass = new StackFrame(1, true).GetMethod().ReflectedType.Name; - - message = string.Format("{0} : {1}(", callingClass, callingMethod); - - System.Reflection.ParameterInfo[] parameterInfos = new StackFrame(1, true).GetMethod().GetParameters(); - foreach (System.Reflection.ParameterInfo parameterInfo in parameterInfos) - { - message += parameterInfo.ParameterType.Name + " " + parameterInfo.Name + ", "; - } - - //remove the "," at the end of the line - if (message.EndsWith(", ")) { message = message.Substring(0, message.Length - 2); } - - message += ") : entering..."; - - WriteEntry(message, TraceEventType.Verbose); - } - - public void WriteFunctionEntry(params object[] args) - { - string message = string.Empty; - - string callingMethod = new StackFrame(1, true).GetMethod().Name; - string callingClass = new StackFrame(1, true).GetMethod().ReflectedType.Name; - - message = string.Format("{0} : {1}(", callingClass, callingMethod); - - System.Reflection.ParameterInfo[] parameterInfos = new StackFrame(1, true).GetMethod().GetParameters(); - if (parameterInfos.Length != args.Length) - { - throw new ParameterCountMismatchArgumentCountException(); - } - - int parameterIterator = 0; - foreach (System.Reflection.ParameterInfo parameterInfo in parameterInfos) - { - message += parameterInfo.ParameterType.Name + " " + parameterInfo.Name; - message += string.Format("={0}, ", - args[parameterIterator] != null ? - args[parameterIterator].ToString() : - "null"); - parameterIterator++; - } - - //remove the "," at the end of the line - if (message.EndsWith(", ")) { message = message.Substring(0, message.Length - 2); } - - message += ") : entering..."; - - WriteEntry(message, TraceEventType.Verbose); - } - - public void WriteFunctionExit() - { - string message = string.Empty; - - string callingMethod = new StackFrame(1, true).GetMethod().Name; - string callingClass = new StackFrame(1, true).GetMethod().ReflectedType.Name; - - message = string.Format("{0} : {1}(", callingClass, callingMethod); - - System.Reflection.ParameterInfo[] parameterInfos = new StackFrame(1, true).GetMethod().GetParameters(); - foreach (System.Reflection.ParameterInfo parameterInfo in parameterInfos) - { - message += parameterInfo.ParameterType.Name + " " + parameterInfo.Name + ", "; - } - - //remove the "," at the end of the line - if (message.EndsWith(", ")) { message = message.Substring(0, message.Length - 2); } - - message += ") : leaving..."; - - WriteEntry(message, TraceEventType.Verbose); - } - - public void WriteFunctionExit(object returnValue) - { - string message = string.Empty; - - string callingMethod = new StackFrame(1, true).GetMethod().Name; - string callingClass = new StackFrame(1, true).GetMethod().ReflectedType.Name; - - message = string.Format("{0} : {1}(", callingClass, callingMethod); - - System.Reflection.ParameterInfo[] parameterInfos = new StackFrame(1, true).GetMethod().GetParameters(); - foreach (System.Reflection.ParameterInfo parameterInfo in parameterInfos) - { - message += parameterInfo.ParameterType.Name + " " + parameterInfo.Name + ", "; - } - - //remove the "," at the end of the line - if (message.EndsWith(", ")) { message = message.Substring(0, message.Length - 2); } - - message += ") : leaving... ReturnValue is " + returnValue.ToString(); - - WriteEntry(message, TraceEventType.Verbose); - } - - public void WriteFunctionExitWithError(Exception ex) - { - string message = string.Empty; - string error = ex.GetType().Name; - if (!string.IsNullOrEmpty(error)) - { - error += ": " + ex.Message; - } - - string callingMethod = new StackFrame(1, true).GetMethod().Name; - string callingClass = new StackFrame(1, true).GetMethod().ReflectedType.Name; - - message = string.Format("{0} : {1}(", callingClass, callingMethod); - - System.Reflection.ParameterInfo[] parameterInfos = new StackFrame(1, true).GetMethod().GetParameters(); - foreach (System.Reflection.ParameterInfo parameterInfo in parameterInfos) - { - message += parameterInfo.ParameterType.Name + " " + parameterInfo.Name + ", "; - } - - //remove the "," at the end of the line - if (message.EndsWith(", ")) { message = message.Substring(0, message.Length - 2); } - - message += ") : leaving with error '" + error + "'"; - - WriteEntry(message, TraceEventType.Error); - } - - private new void WriteEntry(string message, TraceEventType severity) - { - message = string.Format("{0}:{1}:{2}.{3};{4}", - DateTime.Now.Hour, - DateTime.Now.Minute, - DateTime.Now.Second, - DateTime.Now.Millisecond, - message); - base.WriteEntry(message, severity); - } - - private new void WriteEntry(string message) - { - WriteEntry(message, TraceEventType.Information); - } - - public void WriteEntry(string message, TraceEventType severity, params object[] args) - { - string callingMethod = new StackFrame(1, true).GetMethod().Name; - string callingClass = new StackFrame(1, true).GetMethod().ReflectedType.Name; - - message = string.Format(message, args); - string messageHeader = string.Format("{0} : {1}", callingClass, callingMethod); - message = string.Format("{0};{1}", messageHeader, message); - - WriteEntry(message, severity); - } - - private void WriteEntry(string message, params object[] args) - { - message = string.Format(message, args); - WriteEntry(message, TraceEventType.Information); - } - } - } - #endregion Log -} \ No newline at end of file diff --git a/Log/Log.csproj b/Log/Log.csproj deleted file mode 100644 index 75519e2..0000000 --- a/Log/Log.csproj +++ /dev/null @@ -1,59 +0,0 @@ - - - - - Debug - AnyCPU - {66624E57-402E-44F4-A072-9DB1827A5E20} - Library - Properties - Log - Log - v3.5 - 512 - SAK - SAK - SAK - SAK - Client - - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/Log/Log.csproj.vspscc b/Log/Log.csproj.vspscc deleted file mode 100644 index b6d3289..0000000 --- a/Log/Log.csproj.vspscc +++ /dev/null @@ -1,10 +0,0 @@ -"" -{ -"FILE_VERSION" = "9237" -"ENLISTMENT_CHOICE" = "NEVER" -"PROJECT_FILE_RELATIVE_PATH" = "" -"NUMBER_OF_EXCLUDED_FILES" = "0" -"ORIGINAL_PROJECT_FILE_PATH" = "" -"NUMBER_OF_NESTED_PROJECTS" = "0" -"SOURCE_CONTROL_SETTINGS_PROVIDER" = "PROVIDER" -} diff --git a/Log/Properties/AssemblyInfo.cs b/Log/Properties/AssemblyInfo.cs deleted file mode 100644 index 4dfa911..0000000 --- a/Log/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,36 +0,0 @@ -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("Log")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("Log")] -[assembly: AssemblyCopyright("Copyright © 2012")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("642209e6-51c3-4e00-936f-e0a41b3c65de")] - -// 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")] diff --git a/Log/bin/Debug/Log.dll b/Log/bin/Debug/Log.dll deleted file mode 100644 index f82ad68baf2f1fe984741ce77c70f53c9fdb076d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9216 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 Vf09omG=KNzA3y$l{r`)={{o_fo~Hl+ diff --git a/Log/bin/Debug/Log.pdb b/Log/bin/Debug/Log.pdb deleted file mode 100644 index b9d31abf826869738ef561e54c97ab52747a0927..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17920 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 diff --git a/Log/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache b/Log/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache deleted file mode 100644 index 41efea9b1c4b96242ff49abb4fb55b05babdcb7c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7017 zcmeHMZBrXJ5VpZwFoYD-ln`i=qfJ|qx>p-wUNXanU_;B4FpTYz&TtHo?_{HJJ~@&O z<9PVgAJSjY=}&BT&-R(OP-d__eDE=>g|ymdwbIGYE}?KJ6#5q){KV(}00{dnvjmsC zsEl1EJ>uk)XESc3dAZEp&CGgS-=#t_?ye?Z843J}>uJwXo}jBP^^_n^T;K5u4zqrv zwLCwf?rI^iP)rqeVnDo3=#?A;?KF3bthB)#I%yHtW;Ri@rHQ?Arsz4&h9G5H<>II{ zlqUrkdw6bagF7~?_bGPfi6~JOOv`x%N!2zOk zm}{s$Vpp4Za;g99EZu>1N_D}_3=`B+TreufE4CscM~ScwcZfQaF>(yE9By98yETixZm%ZKg4CM{tWu z$;BJ+o+(%p9J%HcYG*xHu`+E=xoD{oB{}6unx#c5s0*ex1TTZp4`AtmX!ZJG(FU|Z zO$&tvK@Nn&VGVvkh6er`%GIQzWjLO&zm~!SXZ%84Dwt(#L9pH@_x7$)fj458I3C?0 zOuU~DRC7u&w-ndQ(&EBlh4wpk^H*$XiKML5Vsd5S6-_L!?8mS3|Z zt4*RXs?06h+9PO34BK(EDZfQeXw2U#)WQ6q4nYI35>R{{>8jM{PL>y6n870TX0(A7 zpV^hb>GS(zqN`{Roi`h6Y0qjVN^3*{2}GZ!!2!4X4z$>!k2wRFpSq73a9d2UJVB5F z`}ki2{>L8T3+lr@0oXsoJ;TiqMGO=%UK0`lO|!>3OF)zyB3^0A-P~96FHf6CFM{Zq(^u$kmzeKw^%2UBxk z>K$`!UOmIYkUpAiCf3mYu0y~HQ~Unrz@YsDXd5?iGhnV}4ATTGacgrRA{$UT4r9vT z=MiV)8pa&rQf~~C3VdRiSYYV2mmsF<=__m5r`nG&I#K_XxeBY7Sk~Nxd*D=yL;rL= ze|4d@cB=gZz==72#wF+-~HS4|Nh_8zfFTW{Ql^Fx40s5 diff --git a/Log/obj/Debug/Log.csproj.FileListAbsolute.txt b/Log/obj/Debug/Log.csproj.FileListAbsolute.txt deleted file mode 100644 index 9308bdc..0000000 --- a/Log/obj/Debug/Log.csproj.FileListAbsolute.txt +++ /dev/null @@ -1,9 +0,0 @@ -C:\VS\fssecurity\NTFSSecurity\Log\bin\Debug\Log.dll -C:\VS\fssecurity\NTFSSecurity\Log\bin\Debug\Log.pdb -C:\VS\fssecurity\NTFSSecurity\Log\obj\Debug\Log.csprojResolveAssemblyReference.cache -C:\VS\fssecurity\NTFSSecurity\Log\obj\Debug\Log.dll -C:\VS\fssecurity\NTFSSecurity\Log\obj\Debug\Log.pdb -C:\Users\Administrator\Desktop\NTFSSecurity\Log\bin\Debug\Log.dll -C:\Users\Administrator\Desktop\NTFSSecurity\Log\bin\Debug\Log.pdb -C:\Users\Administrator\Desktop\NTFSSecurity\Log\obj\Debug\Log.dll -C:\Users\Administrator\Desktop\NTFSSecurity\Log\obj\Debug\Log.pdb diff --git a/Log/obj/Debug/Log.dll b/Log/obj/Debug/Log.dll deleted file mode 100644 index f82ad68baf2f1fe984741ce77c70f53c9fdb076d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9216 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 Vf09omG=KNzA3y$l{r`)={{o_fo~Hl+ diff --git a/Log/obj/Debug/Log.pdb b/Log/obj/Debug/Log.pdb deleted file mode 100644 index b9d31abf826869738ef561e54c97ab52747a0927..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17920 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 diff --git a/NTFSSecurity.sln b/NTFSSecurity.sln deleted file mode 100644 index a562711..0000000 --- a/NTFSSecurity.sln +++ /dev/null @@ -1,122 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 14 -VisualStudioVersion = 14.0.25420.1 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NTFSSecurity", "NTFSSecurity\NTFSSecurity.csproj", "{17768E1A-1422-4BD2-A9A5-42BA9FEB82B8}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Security2", "Security2\Security2.csproj", "{B437C364-5BC7-42E4-93F7-0F459A5DF0D0}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TestClient", "TestClient\TestClient.csproj", "{DE60760F-53BD-4C54-9469-BD96DF0C2B20}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PrivilegeControl", "PrivilegeControl\PrivilegeControl.csproj", "{01EAB41B-B2CE-49FE-AB5A-0F0FF0A9A7EE}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ProcessPrivileges", "ProcessPrivileges\ProcessPrivileges.csproj", "{410CAEE5-D287-4A18-9B38-BB87397D218D}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Log", "Log\Log.csproj", "{66624E57-402E-44F4-A072-9DB1827A5E20}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AlphaFS", "AlphaFS\AlphaFS.csproj", "{F0F9AF1E-D5B5-4D72-804A-5380622FBDEA}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NTFSSecurityTest", "NTFSSecurityTest\NTFSSecurityTest.csproj", "{675D40FA-F56C-4ACC-B863-18B4A14F93E0}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Debug|Mixed Platforms = Debug|Mixed Platforms - Debug|x86 = Debug|x86 - Release|Any CPU = Release|Any CPU - Release|Mixed Platforms = Release|Mixed Platforms - Release|x86 = Release|x86 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {17768E1A-1422-4BD2-A9A5-42BA9FEB82B8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {17768E1A-1422-4BD2-A9A5-42BA9FEB82B8}.Debug|Any CPU.Build.0 = Debug|Any CPU - {17768E1A-1422-4BD2-A9A5-42BA9FEB82B8}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU - {17768E1A-1422-4BD2-A9A5-42BA9FEB82B8}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU - {17768E1A-1422-4BD2-A9A5-42BA9FEB82B8}.Debug|x86.ActiveCfg = Debug|Any CPU - {17768E1A-1422-4BD2-A9A5-42BA9FEB82B8}.Release|Any CPU.ActiveCfg = Release|Any CPU - {17768E1A-1422-4BD2-A9A5-42BA9FEB82B8}.Release|Any CPU.Build.0 = Release|Any CPU - {17768E1A-1422-4BD2-A9A5-42BA9FEB82B8}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU - {17768E1A-1422-4BD2-A9A5-42BA9FEB82B8}.Release|Mixed Platforms.Build.0 = Release|Any CPU - {17768E1A-1422-4BD2-A9A5-42BA9FEB82B8}.Release|x86.ActiveCfg = Release|Any CPU - {B437C364-5BC7-42E4-93F7-0F459A5DF0D0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {B437C364-5BC7-42E4-93F7-0F459A5DF0D0}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B437C364-5BC7-42E4-93F7-0F459A5DF0D0}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU - {B437C364-5BC7-42E4-93F7-0F459A5DF0D0}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU - {B437C364-5BC7-42E4-93F7-0F459A5DF0D0}.Debug|x86.ActiveCfg = Debug|Any CPU - {B437C364-5BC7-42E4-93F7-0F459A5DF0D0}.Release|Any CPU.ActiveCfg = Release|Any CPU - {B437C364-5BC7-42E4-93F7-0F459A5DF0D0}.Release|Any CPU.Build.0 = Release|Any CPU - {B437C364-5BC7-42E4-93F7-0F459A5DF0D0}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU - {B437C364-5BC7-42E4-93F7-0F459A5DF0D0}.Release|Mixed Platforms.Build.0 = Release|Any CPU - {B437C364-5BC7-42E4-93F7-0F459A5DF0D0}.Release|x86.ActiveCfg = Release|Any CPU - {DE60760F-53BD-4C54-9469-BD96DF0C2B20}.Debug|Any CPU.ActiveCfg = Debug|x86 - {DE60760F-53BD-4C54-9469-BD96DF0C2B20}.Debug|Any CPU.Build.0 = Debug|x86 - {DE60760F-53BD-4C54-9469-BD96DF0C2B20}.Debug|Mixed Platforms.ActiveCfg = Debug|x86 - {DE60760F-53BD-4C54-9469-BD96DF0C2B20}.Debug|Mixed Platforms.Build.0 = Debug|x86 - {DE60760F-53BD-4C54-9469-BD96DF0C2B20}.Debug|x86.ActiveCfg = Debug|x86 - {DE60760F-53BD-4C54-9469-BD96DF0C2B20}.Debug|x86.Build.0 = Debug|x86 - {DE60760F-53BD-4C54-9469-BD96DF0C2B20}.Release|Any CPU.ActiveCfg = Release|x86 - {DE60760F-53BD-4C54-9469-BD96DF0C2B20}.Release|Any CPU.Build.0 = Release|x86 - {DE60760F-53BD-4C54-9469-BD96DF0C2B20}.Release|Mixed Platforms.ActiveCfg = Release|x86 - {DE60760F-53BD-4C54-9469-BD96DF0C2B20}.Release|Mixed Platforms.Build.0 = Release|x86 - {DE60760F-53BD-4C54-9469-BD96DF0C2B20}.Release|x86.ActiveCfg = Release|x86 - {DE60760F-53BD-4C54-9469-BD96DF0C2B20}.Release|x86.Build.0 = Release|x86 - {01EAB41B-B2CE-49FE-AB5A-0F0FF0A9A7EE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {01EAB41B-B2CE-49FE-AB5A-0F0FF0A9A7EE}.Debug|Any CPU.Build.0 = Debug|Any CPU - {01EAB41B-B2CE-49FE-AB5A-0F0FF0A9A7EE}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU - {01EAB41B-B2CE-49FE-AB5A-0F0FF0A9A7EE}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU - {01EAB41B-B2CE-49FE-AB5A-0F0FF0A9A7EE}.Debug|x86.ActiveCfg = Debug|Any CPU - {01EAB41B-B2CE-49FE-AB5A-0F0FF0A9A7EE}.Release|Any CPU.ActiveCfg = Release|Any CPU - {01EAB41B-B2CE-49FE-AB5A-0F0FF0A9A7EE}.Release|Any CPU.Build.0 = Release|Any CPU - {01EAB41B-B2CE-49FE-AB5A-0F0FF0A9A7EE}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU - {01EAB41B-B2CE-49FE-AB5A-0F0FF0A9A7EE}.Release|Mixed Platforms.Build.0 = Release|Any CPU - {01EAB41B-B2CE-49FE-AB5A-0F0FF0A9A7EE}.Release|x86.ActiveCfg = Release|Any CPU - {410CAEE5-D287-4A18-9B38-BB87397D218D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {410CAEE5-D287-4A18-9B38-BB87397D218D}.Debug|Any CPU.Build.0 = Debug|Any CPU - {410CAEE5-D287-4A18-9B38-BB87397D218D}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU - {410CAEE5-D287-4A18-9B38-BB87397D218D}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU - {410CAEE5-D287-4A18-9B38-BB87397D218D}.Debug|x86.ActiveCfg = Debug|Any CPU - {410CAEE5-D287-4A18-9B38-BB87397D218D}.Release|Any CPU.ActiveCfg = Release|Any CPU - {410CAEE5-D287-4A18-9B38-BB87397D218D}.Release|Any CPU.Build.0 = Release|Any CPU - {410CAEE5-D287-4A18-9B38-BB87397D218D}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU - {410CAEE5-D287-4A18-9B38-BB87397D218D}.Release|Mixed Platforms.Build.0 = Release|Any CPU - {410CAEE5-D287-4A18-9B38-BB87397D218D}.Release|x86.ActiveCfg = Release|Any CPU - {66624E57-402E-44F4-A072-9DB1827A5E20}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {66624E57-402E-44F4-A072-9DB1827A5E20}.Debug|Any CPU.Build.0 = Debug|Any CPU - {66624E57-402E-44F4-A072-9DB1827A5E20}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU - {66624E57-402E-44F4-A072-9DB1827A5E20}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU - {66624E57-402E-44F4-A072-9DB1827A5E20}.Debug|x86.ActiveCfg = Debug|Any CPU - {66624E57-402E-44F4-A072-9DB1827A5E20}.Release|Any CPU.ActiveCfg = Release|Any CPU - {66624E57-402E-44F4-A072-9DB1827A5E20}.Release|Any CPU.Build.0 = Release|Any CPU - {66624E57-402E-44F4-A072-9DB1827A5E20}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU - {66624E57-402E-44F4-A072-9DB1827A5E20}.Release|Mixed Platforms.Build.0 = Release|Any CPU - {66624E57-402E-44F4-A072-9DB1827A5E20}.Release|x86.ActiveCfg = Release|Any CPU - {F0F9AF1E-D5B5-4D72-804A-5380622FBDEA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F0F9AF1E-D5B5-4D72-804A-5380622FBDEA}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F0F9AF1E-D5B5-4D72-804A-5380622FBDEA}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU - {F0F9AF1E-D5B5-4D72-804A-5380622FBDEA}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU - {F0F9AF1E-D5B5-4D72-804A-5380622FBDEA}.Debug|x86.ActiveCfg = Debug|Any CPU - {F0F9AF1E-D5B5-4D72-804A-5380622FBDEA}.Debug|x86.Build.0 = Debug|Any CPU - {F0F9AF1E-D5B5-4D72-804A-5380622FBDEA}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F0F9AF1E-D5B5-4D72-804A-5380622FBDEA}.Release|Any CPU.Build.0 = Release|Any CPU - {F0F9AF1E-D5B5-4D72-804A-5380622FBDEA}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU - {F0F9AF1E-D5B5-4D72-804A-5380622FBDEA}.Release|Mixed Platforms.Build.0 = Release|Any CPU - {F0F9AF1E-D5B5-4D72-804A-5380622FBDEA}.Release|x86.ActiveCfg = Release|Any CPU - {F0F9AF1E-D5B5-4D72-804A-5380622FBDEA}.Release|x86.Build.0 = Release|Any CPU - {675D40FA-F56C-4ACC-B863-18B4A14F93E0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {675D40FA-F56C-4ACC-B863-18B4A14F93E0}.Debug|Any CPU.Build.0 = Debug|Any CPU - {675D40FA-F56C-4ACC-B863-18B4A14F93E0}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU - {675D40FA-F56C-4ACC-B863-18B4A14F93E0}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU - {675D40FA-F56C-4ACC-B863-18B4A14F93E0}.Debug|x86.ActiveCfg = Debug|Any CPU - {675D40FA-F56C-4ACC-B863-18B4A14F93E0}.Debug|x86.Build.0 = Debug|Any CPU - {675D40FA-F56C-4ACC-B863-18B4A14F93E0}.Release|Any CPU.ActiveCfg = Release|Any CPU - {675D40FA-F56C-4ACC-B863-18B4A14F93E0}.Release|Any CPU.Build.0 = Release|Any CPU - {675D40FA-F56C-4ACC-B863-18B4A14F93E0}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU - {675D40FA-F56C-4ACC-B863-18B4A14F93E0}.Release|Mixed Platforms.Build.0 = Release|Any CPU - {675D40FA-F56C-4ACC-B863-18B4A14F93E0}.Release|x86.ActiveCfg = Release|Any CPU - {675D40FA-F56C-4ACC-B863-18B4A14F93E0}.Release|x86.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/NTFSSecurity.vssscc b/NTFSSecurity.vssscc deleted file mode 100644 index 6cb031b..0000000 --- a/NTFSSecurity.vssscc +++ /dev/null @@ -1,10 +0,0 @@ -"" -{ -"FILE_VERSION" = "9237" -"ENLISTMENT_CHOICE" = "NEVER" -"PROJECT_FILE_RELATIVE_PATH" = "" -"NUMBER_OF_EXCLUDED_FILES" = "0" -"ORIGINAL_PROJECT_FILE_PATH" = "" -"NUMBER_OF_NESTED_PROJECTS" = "0" -"SOURCE_CONTROL_SETTINGS_PROVIDER" = "PROJECT" -} diff --git a/NTFSSecurity/AccessCmdlets/AddAccess.cs b/NTFSSecurity/AccessCmdlets/AddAccess.cs deleted file mode 100644 index b48f7f8..0000000 --- a/NTFSSecurity/AccessCmdlets/AddAccess.cs +++ /dev/null @@ -1,184 +0,0 @@ -using Alphaleonis.Win32.Filesystem; -using Security2; -using System; -using System.Linq; -using System.Management.Automation; -using System.Security.AccessControl; - -namespace NTFSSecurity -{ - [Cmdlet(VerbsCommon.Add, "NTFSAccess", DefaultParameterSetName = "PathComplex")] - [OutputType(typeof(FileSystemAccessRule2))] - public class AddAccess : BaseCmdletWithPrivControl - { - private IdentityReference2[] account; - private FileSystemRights2 accessRights; - private AccessControlType accessType = AccessControlType.Allow; - private InheritanceFlags inheritanceFlags = InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit; - private PropagationFlags propagationFlags = PropagationFlags.None; - private ApplyTo appliesTo = ApplyTo.ThisFolderSubfoldersAndFiles; - private bool passThru; - - [Parameter(Mandatory = true, Position = 1, ValueFromPipeline = true, ValueFromPipelineByPropertyName = true, ParameterSetName = "PathSimple")] - [Parameter(Mandatory = true, Position = 1, ValueFromPipeline = true, ValueFromPipelineByPropertyName = true, ParameterSetName = "PathComplex")] - [ValidateNotNullOrEmpty] - [Alias("FullName")] - public string[] Path - { - get { return paths.ToArray(); } - set - { - paths.Clear(); - paths.AddRange(value); - } - } - - [Parameter(Mandatory = true, Position = 1, ValueFromPipeline = true, ValueFromPipelineByPropertyName = true, ParameterSetName = "SDSimple")] - [Parameter(Mandatory = true, Position = 1, ValueFromPipeline = true, ValueFromPipelineByPropertyName = true, ParameterSetName = "SDComplex")] - [ValidateNotNullOrEmpty] - public FileSystemSecurity2[] SecurityDescriptor - { - get { return securityDescriptors.ToArray(); } - set - { - securityDescriptors.Clear(); - securityDescriptors.AddRange(value); - } - } - - [Parameter(Mandatory = true, Position = 2, ValueFromPipelineByPropertyName = true)] - [Alias("IdentityReference, ID")] - public IdentityReference2[] Account - { - get { return account; } - set { account = value; } - } - - [Parameter(Mandatory = true, Position = 3, ValueFromPipelineByPropertyName = true)] - [Alias("FileSystemRights")] - public FileSystemRights2 AccessRights - { - get { return accessRights; } - set { accessRights = value; } - } - - [Parameter(ValueFromPipelineByPropertyName = true)] - [Alias("AccessControlType")] - public AccessControlType AccessType - { - get { return accessType; } - set { accessType = value; } - } - - [Parameter(ValueFromPipelineByPropertyName = true, ParameterSetName = "PathComplex")] - [Parameter(ValueFromPipelineByPropertyName = true, ParameterSetName = "SDComplex")] - public InheritanceFlags InheritanceFlags - { - get { return inheritanceFlags; } - set { inheritanceFlags = value; } - } - - [Parameter(ValueFromPipelineByPropertyName = true, ParameterSetName = "PathComplex")] - [Parameter(ValueFromPipelineByPropertyName = true, ParameterSetName = "SDComplex")] - public PropagationFlags PropagationFlags - { - get { return propagationFlags; } - set { propagationFlags = value; } - } - - [Parameter(ValueFromPipelineByPropertyName = true, ParameterSetName = "PathSimple")] - [Parameter(ValueFromPipelineByPropertyName = true, ParameterSetName = "SDSimple")] - public ApplyTo AppliesTo - { - get { return appliesTo; } - set { appliesTo = value; } - } - - [Parameter] - public SwitchParameter PassThru - { - get { return passThru; } - set { passThru = value; } - } - - protected override void BeginProcessing() - { - base.BeginProcessing(); - } - - protected override void ProcessRecord() - { - if (ParameterSetName.EndsWith("Simple")) - { - FileSystemSecurity2.ConvertToFileSystemFlags(appliesTo, out inheritanceFlags, out propagationFlags); - } - - if (ParameterSetName.StartsWith("Path")) - { - FileSystemInfo item = null; - - foreach (var path in paths) - { - try - { - item = GetFileSystemInfo2(path); - } - catch (Exception ex) - { - WriteError(new ErrorRecord(ex, "ReadFileError", ErrorCategory.OpenError, path)); - continue; - } - - try - { - FileSystemAccessRule2.AddFileSystemAccessRule(item, account.ToList(), accessRights, accessType, inheritanceFlags, propagationFlags); - } - catch (UnauthorizedAccessException) - { - try - { - var ownerInfo = FileSystemOwner.GetOwner(item); - var previousOwner = ownerInfo.Owner; - - FileSystemOwner.SetOwner(item, System.Security.Principal.WindowsIdentity.GetCurrent().User); - - FileSystemAccessRule2.AddFileSystemAccessRule(item, account.ToList(), accessRights, accessType, inheritanceFlags, propagationFlags); - - FileSystemOwner.SetOwner(item, previousOwner); - } - catch (Exception ex2) - { - WriteError(new ErrorRecord(ex2, "AddAceError", ErrorCategory.WriteError, path)); - } - } - catch (Exception ex) - { - WriteError(new ErrorRecord(ex, "AddAceError", ErrorCategory.WriteError, path)); - } - - if (passThru == true) - { - FileSystemAccessRule2.GetFileSystemAccessRules(item, true, true).ForEach(ace => WriteObject(ace)); - } - } - } - else - { - foreach (var sd in securityDescriptors) - { - FileSystemAccessRule2.AddFileSystemAccessRule(sd, account.ToList(), accessRights, accessType, inheritanceFlags, propagationFlags); - - if (passThru == true) - { - FileSystemAccessRule2.GetFileSystemAccessRules(sd, true, true).ForEach(ace => WriteObject(ace)); - } - } - } - - } - protected override void EndProcessing() - { - base.EndProcessing(); - } - } -} diff --git a/NTFSSecurity/AccessCmdlets/ClearAccess.cs b/NTFSSecurity/AccessCmdlets/ClearAccess.cs deleted file mode 100644 index 20b1943..0000000 --- a/NTFSSecurity/AccessCmdlets/ClearAccess.cs +++ /dev/null @@ -1,118 +0,0 @@ -using Alphaleonis.Win32.Filesystem; -using Security2; -using System; -using System.Management.Automation; - -namespace NTFSSecurity -{ - [Cmdlet(VerbsCommon.Clear, "NTFSAccess", DefaultParameterSetName = "Path")] - public class ClearAccess : BaseCmdletWithPrivControl - { - private SwitchParameter disableInheritance; - - [Parameter(Mandatory = true, Position = 1, ValueFromPipeline = true, ValueFromPipelineByPropertyName = true, ParameterSetName = "Path")] - [ValidateNotNullOrEmpty] - [Alias("FullName")] - public string[] Path - { - get { return paths.ToArray(); } - set - { - paths.Clear(); - paths.AddRange(value); - } - } - - [Parameter(Mandatory = true, Position = 1, ValueFromPipeline = true, ValueFromPipelineByPropertyName = true, ParameterSetName = "SD")] - [ValidateNotNullOrEmpty] - public FileSystemSecurity2[] SecurityDescriptor - { - get { return securityDescriptors.ToArray(); } - set - { - securityDescriptors.Clear(); - securityDescriptors.AddRange(value); - } - } - - [Parameter] - public SwitchParameter DisableInheritance - { - get { return disableInheritance; } - set { disableInheritance = value; } - } - - protected override void BeginProcessing() - { - base.BeginProcessing(); - } - - protected override void ProcessRecord() - { - - if (ParameterSetName == "Path") - { - FileSystemInfo item = null; - - foreach (var path in paths) - { - try - { - item = GetFileSystemInfo2(path); - } - catch (Exception ex) - { - WriteError(new ErrorRecord(ex, "ReadFileError", ErrorCategory.OpenError, path)); - continue; - } - - try - { - FileSystemAccessRule2.RemoveFileSystemAccessRuleAll(item); - if (disableInheritance) - FileSystemInheritanceInfo.DisableAccessInheritance(item, true); - } - catch (UnauthorizedAccessException) - { - try - { - var ownerInfo = FileSystemOwner.GetOwner(item); - var previousOwner = ownerInfo.Owner; - - FileSystemOwner.SetOwner(item, System.Security.Principal.WindowsIdentity.GetCurrent().User); - - FileSystemAccessRule2.RemoveFileSystemAccessRuleAll(item); - if (disableInheritance) - FileSystemInheritanceInfo.DisableAccessInheritance(item, true); - - FileSystemOwner.SetOwner(item, previousOwner); - } - catch (Exception ex2) - { - WriteError(new ErrorRecord(ex2, "ClearAclError", ErrorCategory.WriteError, path)); - } - } - catch (Exception ex) - { - WriteError(new ErrorRecord(ex, "ClearAclError", ErrorCategory.WriteError, path)); - } - } - } - else - { - foreach (var sd in securityDescriptors) - { - FileSystemAccessRule2.RemoveFileSystemAccessRuleAll(sd); - if (disableInheritance) - FileSystemInheritanceInfo.DisableAccessInheritance(sd, true); - } - } - - } - - protected override void EndProcessing() - { - base.EndProcessing(); - } - } -} diff --git a/NTFSSecurity/AccessCmdlets/GetAccess.cs b/NTFSSecurity/AccessCmdlets/GetAccess.cs deleted file mode 100644 index 0f091b4..0000000 --- a/NTFSSecurity/AccessCmdlets/GetAccess.cs +++ /dev/null @@ -1,155 +0,0 @@ -using Alphaleonis.Win32.Filesystem; -using Security2; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Management.Automation; - -namespace NTFSSecurity -{ - [Cmdlet(VerbsCommon.Get, "NTFSAccess", DefaultParameterSetName = "Path")] - [OutputType(typeof(FileSystemAccessRule2))] - public class GetAccess : BaseCmdletWithPrivControl - { - private bool excludeInherited; - private bool excludeExplicit; - private IdentityReference2 account; - - protected bool getInheritedFrom = false; - - [Parameter(Position = 1, ValueFromPipeline = true, ValueFromPipelineByPropertyName = true, ParameterSetName = "Path")] - [ValidateNotNullOrEmpty] - [Alias("FullName")] - public string[] Path - { - get { return paths.ToArray(); } - set - { - paths.Clear(); - paths.AddRange(value); - } - } - - [Parameter(Mandatory = true, Position = 1, ValueFromPipeline = true, ValueFromPipelineByPropertyName = true, ParameterSetName = "SD")] - [ValidateNotNullOrEmpty] - public FileSystemSecurity2[] SecurityDescriptor - { - get { return securityDescriptors.ToArray(); } - set - { - securityDescriptors.Clear(); - securityDescriptors.AddRange(value); - } - } - - [Parameter(ValueFromRemainingArguments = true)] - [Alias("IdentityReference, ID")] - [ValidateNotNullOrEmpty] - public IdentityReference2 Account - { - get { return account; } - set { account = value; } - } - - [Parameter] - public SwitchParameter ExcludeExplicit - { - get { return excludeExplicit; } - set { excludeExplicit = value; } - } - - [Parameter] - public SwitchParameter ExcludeInherited - { - get { return excludeInherited; } - set { excludeInherited = value; } - } - - protected override void BeginProcessing() - { - base.BeginProcessing(); - - getInheritedFrom = (bool)((System.Collections.Hashtable)MyInvocation.MyCommand.Module.PrivateData)["GetInheritedFrom"]; - - if (paths.Count == 0) - { - paths = new List() { GetVariableValue("PWD").ToString() }; - } - } - - protected override void ProcessRecord() - { - IEnumerable acl = null; - FileSystemInfo item = null; - - if (ParameterSetName == "Path") - { - foreach (var path in paths) - { - try - { - item = GetFileSystemInfo2(path); - } - catch (Exception ex) - { - WriteError(new ErrorRecord(ex, "ReadFileError", ErrorCategory.OpenError, path)); - continue; - } - - try - { - acl = FileSystemAccessRule2.GetFileSystemAccessRules(item, !excludeExplicit, !excludeInherited, getInheritedFrom); - } - catch (UnauthorizedAccessException) - { - try - { - var ownerInfo = FileSystemOwner.GetOwner(item); - var previousOwner = ownerInfo.Owner; - - FileSystemOwner.SetOwner(item, System.Security.Principal.WindowsIdentity.GetCurrent().User); - acl = FileSystemAccessRule2.GetFileSystemAccessRules(item, !excludeExplicit, !excludeInherited, getInheritedFrom); - FileSystemOwner.SetOwner(item, previousOwner); - } - catch (Exception ex2) - { - WriteError(new ErrorRecord(ex2, "ReadSecurityError", ErrorCategory.WriteError, path)); - continue; - } - } - catch (Exception ex) - { - WriteError(new ErrorRecord(ex, "ReadSecurityError", ErrorCategory.OpenError, path)); - continue; - } - finally - { - if (acl != null) - { - if (account != null) - { - acl = acl.Where(ace => ace.Account == account); - } - - acl.ForEach(ace => WriteObject(ace)); - } - } - } - } - else - { - foreach (var sd in securityDescriptors) - { - acl = FileSystemAccessRule2.GetFileSystemAccessRules(sd, !excludeExplicit, !excludeInherited, getInheritedFrom); - - if (account != null) - { - acl = acl.Where(ace => ace.Account == account); - } - - acl.ForEach(ace => WriteObject(ace)); - } - } - } - } -} diff --git a/NTFSSecurity/AccessCmdlets/GetEffectiveAccess.cs b/NTFSSecurity/AccessCmdlets/GetEffectiveAccess.cs deleted file mode 100644 index d91a873..0000000 --- a/NTFSSecurity/AccessCmdlets/GetEffectiveAccess.cs +++ /dev/null @@ -1,194 +0,0 @@ -using Alphaleonis.Win32.Filesystem; -using ProcessPrivileges; -using Security2; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Management.Automation; - -namespace NTFSSecurity -{ - [Cmdlet(VerbsCommon.Get, "NTFSEffectiveAccess", DefaultParameterSetName = "Path")] - [OutputType(typeof(FileSystemAccessRule2))] - public class GetEffectiveAccess : BaseCmdletWithPrivControl - { - private IdentityReference2 account = System.Security.Principal.WindowsIdentity.GetCurrent().User.Value; - private SwitchParameter excludeNoneAccessEntries; - private string serverName = "localhost"; - private IEnumerable securityPrivilege; - - [Parameter(Position = 1, ValueFromPipeline = true, ValueFromPipelineByPropertyName = true, ParameterSetName = "Path")] - [ValidateNotNullOrEmpty] - [Alias("FullName")] - public string[] Path - { - get { return paths.ToArray(); } - set - { - paths.Clear(); - paths.AddRange(value); - } - } - - [Parameter(Mandatory = true, Position = 1, ValueFromPipeline = true, ValueFromPipelineByPropertyName = true, ParameterSetName = "SecurityDescriptor")] - [ValidateNotNullOrEmpty] - public FileSystemSecurity2[] SecurityDescriptor - { - get { return securityDescriptors.ToArray(); } - set - { - securityDescriptors.Clear(); - securityDescriptors.AddRange(value); - } - } - - [Parameter(Position = 2, ValueFromPipelineByPropertyName = true)] - [Alias("NTAccount", "IdentityReference")] - [ValidateNotNullOrEmpty] - public IdentityReference2 Account - { - get { return account; } - set { account = value; } - } - - [Parameter] - public string ServerName - { - get { return serverName; } - set { serverName = value; } - } - - [Parameter()] - public SwitchParameter ExcludeNoneAccessEntries - { - get { return excludeNoneAccessEntries; } - set { excludeNoneAccessEntries = value; } - } - - protected override void BeginProcessing() - { - base.BeginProcessing(); - - if (paths == null) - { - paths = new List() { GetVariableValue("PWD").ToString() }; - } - - var securityPrivilege = privControl.GetPrivileges().Where(priv => priv.Privilege == ProcessPrivileges.Privilege.Security); - if (securityPrivilege.Count() == 0) - { - this.WriteWarning("The user does not hold the Security Privliege and might not be able to read the effective permissions"); - } - else - { - if (securityPrivilege.FirstOrDefault().PrivilegeState == PrivilegeState.Disabled) - { - this.WriteWarning("The user does hold the Security Privilege but it is disabled. Hence getting effective permissions might not be possible. Use 'Enable-Privileges' to enable it"); - } - } - } - - protected override void ProcessRecord() - { - FileSystemInfo item = null; - - foreach (var path in paths) - { - EffectiveAccessInfo result = null; - - try - { - item = this.GetFileSystemInfo2(path); - } - catch (Exception ex) - { - this.WriteError(new ErrorRecord(ex, "ReadFileError", ErrorCategory.OpenError, path)); - continue; - } - - try - { - result = EffectiveAccess.GetEffectiveAccess(item, account, serverName); - - if (!result.FromRemote) - { - WriteWarning("The effective rights can only be computed based on group membership on this" + - " computer. For more accurate results, calculate effective access rights on " + - "the target computer"); - } - if (result.OperationFailed && securityPrivilege == null) - { - var ex = new Exception(string.Format("Could not get effective permissions from machine '{0}' maybe because the 'Security' privilege is not enabled which might be required. Enable the priviliges using 'Enable-Privileges'. The error was '{1}'", serverName, result.AuthzException.Message), result.AuthzException); - WriteError(new ErrorRecord(ex, "GetEffectiveAccessError", ErrorCategory.ReadError, item)); - continue; - } - else if (result.OperationFailed) - { - var ex = new Exception(string.Format("Could not get effective permissions from machine '{0}'. The error is '{1}'", serverName, result.AuthzException.Message), result.AuthzException); - WriteError(new ErrorRecord(ex, "GetEffectiveAccessError", ErrorCategory.ReadError, item)); - continue; - } - - if (excludeNoneAccessEntries && result.Ace.AccessRights == FileSystemRights2.None) - continue; - } - //not sure if the following catch block willb be invoked, testing needed. - catch (UnauthorizedAccessException) - { - try - { - var ownerInfo = FileSystemOwner.GetOwner(item); - var previousOwner = ownerInfo.Owner; - - FileSystemOwner.SetOwner(item, System.Security.Principal.WindowsIdentity.GetCurrent().User); - - //-------------------- - - result = EffectiveAccess.GetEffectiveAccess(item, account, serverName); - - if (!result.FromRemote) - { - WriteWarning("The effective rights can only be computed based on group membership on this" + - " computer. For more accurate results, calculate effective access rights on " + - "the target computer"); - } - if (result.OperationFailed && securityPrivilege == null) - { - var ex = new Exception(string.Format("Could not get effective permissions from machine '{0}' maybe because the 'Security' privilege is not enabled which might be required. Enable the priviliges using 'Enable-Privileges'. The error was '{1}'", serverName, result.AuthzException.Message), result.AuthzException); - WriteError(new ErrorRecord(ex, "GetEffectiveAccessError", ErrorCategory.ReadError, item)); - continue; - } - else if (result.OperationFailed) - { - var ex = new Exception(string.Format("Could not get effective permissions from machine '{0}'. The error is '{1}'", serverName, result.AuthzException.Message), result.AuthzException); - WriteError(new ErrorRecord(ex, "GetEffectiveAccessError", ErrorCategory.ReadError, item)); - continue; - } - - if (excludeNoneAccessEntries && result.Ace.AccessRights == FileSystemRights2.None) - continue; - - //-------------------- - - FileSystemOwner.SetOwner(item, previousOwner); - } - catch (Exception ex2) - { - this.WriteError(new ErrorRecord(ex2, "ReadSecurityError", ErrorCategory.WriteError, path)); - } - } - catch (Exception ex) - { - WriteError(new ErrorRecord(ex, "ReadEffectivePermissionError", ErrorCategory.ReadError, path)); - } - finally - { - if (result != null) - { - WriteObject(result.Ace); - } - } - } - } - } -} \ No newline at end of file diff --git a/NTFSSecurity/AccessCmdlets/GetOrphanedAccess.cs b/NTFSSecurity/AccessCmdlets/GetOrphanedAccess.cs deleted file mode 100644 index 3e7ba2d..0000000 --- a/NTFSSecurity/AccessCmdlets/GetOrphanedAccess.cs +++ /dev/null @@ -1,80 +0,0 @@ -using Alphaleonis.Win32.Filesystem; -using Security2; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Management.Automation; - -namespace NTFSSecurity -{ - [Cmdlet(VerbsCommon.Get, "NTFSOrphanedAccess")] - [OutputType(typeof(FileSystemAccessRule2))] - public class GetOrphanedAccess : GetAccess - { - int orphanedSidCount = 0; - - protected override void ProcessRecord() - { - IEnumerable acl = null; - FileSystemInfo item = null; - - foreach (var path in paths) - { - try - { - item = this.GetFileSystemInfo2(path); - } - catch (Exception ex) - { - this.WriteError(new ErrorRecord(ex, "ReadFileError", ErrorCategory.OpenError, path)); - continue; - } - - try - { - acl = FileSystemAccessRule2.GetFileSystemAccessRules(item, !ExcludeExplicit, !ExcludeInherited, getInheritedFrom); - } - catch (UnauthorizedAccessException) - { - try - { - var ownerInfo = FileSystemOwner.GetOwner(item); - var previousOwner = ownerInfo.Owner; - - FileSystemOwner.SetOwner(item, System.Security.Principal.WindowsIdentity.GetCurrent().User); - - acl = FileSystemAccessRule2.GetFileSystemAccessRules(item, !ExcludeExplicit, !ExcludeInherited, getInheritedFrom); - - FileSystemOwner.SetOwner(item, previousOwner); - } - catch (Exception ex2) - { - this.WriteError(new ErrorRecord(ex2, "AddAceError", ErrorCategory.WriteError, path)); - } - } - catch (Exception ex) - { - this.WriteWarning(string.Format("Could not read item {0}. The error was: {1}", path, ex.Message)); - } - finally - { - if (acl != null) - { - var orphanedAces = acl.Where(ace => string.IsNullOrEmpty(ace.Account.AccountName)); - orphanedSidCount += orphanedAces.Count(); - - WriteVerbose(string.Format("Item {0} knows about {1} orphaned SIDs in its ACL", path, orphanedAces.Count())); - - orphanedAces.ForEach(ace => WriteObject(ace)); - } - } - } - } - - protected override void EndProcessing() - { - WriteVerbose(string.Format("Total orphaned Access Control Enties: {0}", orphanedSidCount)); - base.EndProcessing(); - } - } -} diff --git a/NTFSSecurity/AccessCmdlets/RemoveAccess.cs b/NTFSSecurity/AccessCmdlets/RemoveAccess.cs deleted file mode 100644 index d7770a8..0000000 --- a/NTFSSecurity/AccessCmdlets/RemoveAccess.cs +++ /dev/null @@ -1,189 +0,0 @@ -using Alphaleonis.Win32.Filesystem; -using Security2; -using System; -using System.Linq; -using System.Management.Automation; -using System.Security.AccessControl; - -namespace NTFSSecurity -{ - [Cmdlet(VerbsCommon.Remove, "NTFSAccess", DefaultParameterSetName = "PathComplex")] - [OutputType(typeof(FileSystemAccessRule2))] - public class RemoveAccess : BaseCmdletWithPrivControl - { - private IdentityReference2[] account; - private FileSystemRights2 accessRights; - private AccessControlType accessType = AccessControlType.Allow; - private InheritanceFlags inheritanceFlags = InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit; - private PropagationFlags propagationFlags = PropagationFlags.None; - private ApplyTo appliesTo; - private bool removeSpecific; - private bool passThru; - - [Parameter(Mandatory = true, Position = 1, ValueFromPipeline = true, ValueFromPipelineByPropertyName = true, ParameterSetName = "PathSimple")] - [Parameter(Mandatory = true, Position = 1, ValueFromPipeline = true, ValueFromPipelineByPropertyName = true, ParameterSetName = "PathComplex")] - [ValidateNotNullOrEmpty] - [Alias("FullName")] - public string[] Path - { - get { return paths.ToArray(); } - set - { - paths.Clear(); - paths.AddRange(value); - } - } - - [Parameter(Mandatory = true, Position = 1, ValueFromPipeline = true, ValueFromPipelineByPropertyName = true, ParameterSetName = "SDSimple")] - [Parameter(Mandatory = true, Position = 1, ValueFromPipeline = true, ValueFromPipelineByPropertyName = true, ParameterSetName = "SDComplex")] - [ValidateNotNullOrEmpty] - public FileSystemSecurity2[] SecurityDescriptor - { - get { return securityDescriptors.ToArray(); } - set - { - securityDescriptors.Clear(); - securityDescriptors.AddRange(value); - } - } - - [Parameter(Mandatory = true, Position = 2, ValueFromPipelineByPropertyName = true)] - [Alias("IdentityReference, ID")] - public IdentityReference2[] Account - { - get { return account; } - set { account = value; } - } - - [Parameter(Mandatory = true, Position = 3, ValueFromPipelineByPropertyName = true)] - [Alias("FileSystemRights")] - public FileSystemRights2 AccessRights - { - get { return accessRights; } - set { accessRights = value; } - } - - [Parameter(ValueFromPipelineByPropertyName = true)] - [Alias("AccessControlType")] - public AccessControlType AccessType - { - get { return accessType; } - set { accessType = value; } - } - - [Parameter(ValueFromPipelineByPropertyName = true, ParameterSetName = "PathComplex")] - [Parameter(ValueFromPipelineByPropertyName = true, ParameterSetName = "SDComplex")] - public InheritanceFlags InheritanceFlags - { - get { return inheritanceFlags; } - set { inheritanceFlags = value; } - } - - [Parameter(ValueFromPipelineByPropertyName = true, ParameterSetName = "PathComplex")] - [Parameter(ValueFromPipelineByPropertyName = true, ParameterSetName = "SDComplex")] - public PropagationFlags PropagationFlags - { - get { return propagationFlags; } - set { propagationFlags = value; } - } - - [Parameter(ValueFromPipelineByPropertyName = true, ParameterSetName = "PathSimple")] - [Parameter(ValueFromPipelineByPropertyName = true, ParameterSetName = "SDSimple")] - public ApplyTo AppliesTo - { - get { return appliesTo; } - set { appliesTo = value; } - } - - [Parameter] - public SwitchParameter PassThru - { - get { return passThru; } - set { passThru = value; } - } - - protected override void BeginProcessing() - { - base.BeginProcessing(); - } - - protected override void ProcessRecord() - { - if (ParameterSetName.EndsWith("Simple")) - { - FileSystemSecurity2.ConvertToFileSystemFlags(appliesTo, out inheritanceFlags, out propagationFlags); - } - - if (ParameterSetName.StartsWith("Path")) - { - foreach (var path in paths) - { - FileSystemInfo item = null; - - try - { - item = GetFileSystemInfo2(path); - } - catch (Exception ex) - { - WriteError(new ErrorRecord(ex, "ReadFileError", ErrorCategory.OpenError, path)); - } - - if (ParameterSetName == "PathSimple") - { - FileSystemSecurity2.ConvertToFileSystemFlags(appliesTo, out inheritanceFlags, out propagationFlags); - } - - try - { - FileSystemAccessRule2.RemoveFileSystemAccessRule(item, account.ToList(), accessRights, accessType, inheritanceFlags, propagationFlags); - } - catch (UnauthorizedAccessException) - { - try - { - var ownerInfo = FileSystemOwner.GetOwner(item); - var previousOwner = ownerInfo.Owner; - - FileSystemOwner.SetOwner(item, System.Security.Principal.WindowsIdentity.GetCurrent().User); - - FileSystemAccessRule2.RemoveFileSystemAccessRule(item, account.ToList(), accessRights, accessType, inheritanceFlags, propagationFlags); - - FileSystemOwner.SetOwner(item, previousOwner); - } - catch (Exception ex2) - { - WriteError(new ErrorRecord(ex2, "RemoveAceError", ErrorCategory.WriteError, path)); - } - } - catch (Exception ex) - { - WriteError(new ErrorRecord(ex, "RemoveAceError", ErrorCategory.WriteError, path)); - } - - if (passThru == true) - { - FileSystemAccessRule2.GetFileSystemAccessRules(item, true, true).ForEach(ace => WriteObject(ace)); - } - } - } - else - { - foreach (var sd in securityDescriptors) - { - FileSystemAccessRule2.RemoveFileSystemAccessRule(sd, account.ToList(), accessRights, accessType, inheritanceFlags, propagationFlags); - - if (passThru == true) - { - FileSystemAccessRule2.GetFileSystemAccessRules(sd, true, true).ForEach(ace => WriteObject(ace)); - } - } - } - } - - protected override void EndProcessing() - { - base.EndProcessing(); - } - } -} \ No newline at end of file diff --git a/NTFSSecurity/AuditCmdlets/AddAudit.cs b/NTFSSecurity/AuditCmdlets/AddAudit.cs deleted file mode 100644 index 2d2d140..0000000 --- a/NTFSSecurity/AuditCmdlets/AddAudit.cs +++ /dev/null @@ -1,183 +0,0 @@ -using Alphaleonis.Win32.Filesystem; -using Security2; -using System; -using System.Linq; -using System.Management.Automation; -using System.Security.AccessControl; - -namespace NTFSSecurity -{ - [Cmdlet(VerbsCommon.Add, "NTFSAudit", DefaultParameterSetName = "PathComplex")] - [OutputType(typeof(FileSystemAccessRule2))] - public class AddAudit : BaseCmdletWithPrivControl - { - private IdentityReference2[] account; - private FileSystemRights2 accessRights; - private AuditFlags auditFlags = AuditFlags.Failure | AuditFlags.Success; - private InheritanceFlags inheritanceFlags = InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit; - private PropagationFlags propagationFlags = PropagationFlags.None; - private ApplyTo appliesTo = ApplyTo.ThisFolderSubfoldersAndFiles; - private bool passThru; - - [Parameter(Mandatory = true, Position = 1, ValueFromPipeline = true, ValueFromPipelineByPropertyName = true, ParameterSetName = "PathSimple")] - [Parameter(Mandatory = true, Position = 1, ValueFromPipeline = true, ValueFromPipelineByPropertyName = true, ParameterSetName = "PathComplex")] - [ValidateNotNullOrEmpty] - [Alias("FullName")] - public string[] Path - { - get { return paths.ToArray(); } - set - { - paths.Clear(); - paths.AddRange(value); - } - } - - [Parameter(Mandatory = true, Position = 1, ValueFromPipeline = true, ValueFromPipelineByPropertyName = true, ParameterSetName = "SDSimple")] - [Parameter(Mandatory = true, Position = 1, ValueFromPipeline = true, ValueFromPipelineByPropertyName = true, ParameterSetName = "SDComplex")] - [ValidateNotNullOrEmpty] - public FileSystemSecurity2[] SecurityDescriptor - { - get { return securityDescriptors.ToArray(); } - set - { - securityDescriptors.Clear(); - securityDescriptors.AddRange(value); - } - } - - [Parameter(Mandatory = true, Position = 2, ValueFromPipelineByPropertyName = true)] - [Alias("IdentityReference, ID")] - public IdentityReference2[] Account - { - get { return account; } - set { account = value; } - } - - [Parameter(Mandatory = true, Position = 2, ValueFromPipelineByPropertyName = true)] - [Alias("FileSystemRights")] - public FileSystemRights2 AccessRights - { - get { return accessRights; } - set { accessRights = value; } - } - - [Parameter(ValueFromPipelineByPropertyName = true)] - public AuditFlags AuditFlags - { - get { return auditFlags; } - set { auditFlags = value; } - } - - [Parameter(ValueFromPipelineByPropertyName = true, ParameterSetName = "PathComplex")] - [Parameter(ValueFromPipelineByPropertyName = true, ParameterSetName = "SDComplex")] - public InheritanceFlags InheritanceFlags - { - get { return inheritanceFlags; } - set { inheritanceFlags = value; } - } - - [Parameter(ValueFromPipelineByPropertyName = true, ParameterSetName = "PathComplex")] - [Parameter(ValueFromPipelineByPropertyName = true, ParameterSetName = "SDComplex")] - public PropagationFlags PropagationFlags - { - get { return propagationFlags; } - set { propagationFlags = value; } - } - - [Parameter(ValueFromPipelineByPropertyName = true, ParameterSetName = "PathSimple")] - [Parameter(ValueFromPipelineByPropertyName = true, ParameterSetName = "SDSimple")] - public ApplyTo AppliesTo - { - get { return appliesTo; } - set { appliesTo = value; } - } - - [Parameter] - public SwitchParameter PassThru - { - get { return passThru; } - set { passThru = value; } - } - - protected override void BeginProcessing() - { - base.BeginProcessing(); - } - - protected override void ProcessRecord() - { - if (ParameterSetName.EndsWith("Simple")) - { - FileSystemSecurity2.ConvertToFileSystemFlags(appliesTo, out inheritanceFlags, out propagationFlags); - } - - if (ParameterSetName.StartsWith("Path")) - { - FileSystemInfo item = null; - - foreach (var path in paths) - { - try - { - item = GetFileSystemInfo2(path); - } - catch (Exception ex) - { - WriteError(new ErrorRecord(ex, "ReadFileError", ErrorCategory.OpenError, path)); - continue; - } - - try - { - FileSystemAuditRule2.AddFileSystemAuditRule(item, account.ToList(), accessRights, auditFlags, inheritanceFlags, propagationFlags); - } - catch (UnauthorizedAccessException) - { - try - { - var ownerInfo = FileSystemOwner.GetOwner(item); - var previousOwner = ownerInfo.Owner; - - FileSystemOwner.SetOwner(item, System.Security.Principal.WindowsIdentity.GetCurrent().User); - - FileSystemAuditRule2.AddFileSystemAuditRule(item, account.ToList(), accessRights, auditFlags, inheritanceFlags, propagationFlags); - - FileSystemOwner.SetOwner(item, previousOwner); - } - catch (Exception ex2) - { - WriteError(new ErrorRecord(ex2, "AddAceError", ErrorCategory.WriteError, path)); - } - } - catch (Exception ex) - { - WriteError(new ErrorRecord(ex, "AddAceError", ErrorCategory.WriteError, path)); - } - - if (passThru == true) - { - FileSystemAuditRule2.GetFileSystemAuditRules(item, true, true).ForEach(ace => WriteObject(ace)); - } - } - } - else - { - foreach (var sd in securityDescriptors) - { - FileSystemAuditRule2.AddFileSystemAuditRule(sd, account.ToList(), accessRights, auditFlags, inheritanceFlags, propagationFlags); - - if (passThru == true) - { - FileSystemAccessRule2.GetFileSystemAccessRules(sd, true, true).ForEach(ace => WriteObject(ace)); - } - } - } - - } - protected override void EndProcessing() - { - base.EndProcessing(); - } - } -} \ No newline at end of file diff --git a/NTFSSecurity/AuditCmdlets/ClearAudit.cs b/NTFSSecurity/AuditCmdlets/ClearAudit.cs deleted file mode 100644 index c34bb29..0000000 --- a/NTFSSecurity/AuditCmdlets/ClearAudit.cs +++ /dev/null @@ -1,118 +0,0 @@ -using Alphaleonis.Win32.Filesystem; -using Security2; -using System; -using System.Management.Automation; - -namespace NTFSSecurity -{ - [Cmdlet(VerbsCommon.Clear, "NTFSAudit", DefaultParameterSetName = "Path")] - public class ClearAudit : BaseCmdletWithPrivControl - { - private SwitchParameter disableInheritance; - - [Parameter(Mandatory = true, Position = 1, ValueFromPipeline = true, ValueFromPipelineByPropertyName = true, ParameterSetName = "Path")] - [ValidateNotNullOrEmpty] - [Alias("FullName")] - public string[] Path - { - get { return paths.ToArray(); } - set - { - paths.Clear(); - paths.AddRange(value); - } - } - - [Parameter(Mandatory = true, Position = 1, ValueFromPipeline = true, ValueFromPipelineByPropertyName = true, ParameterSetName = "SD")] - [ValidateNotNullOrEmpty] - public FileSystemSecurity2[] SecurityDescriptor - { - get { return securityDescriptors.ToArray(); } - set - { - securityDescriptors.Clear(); - securityDescriptors.AddRange(value); - } - } - - [Parameter] - public SwitchParameter DisableInheritance - { - get { return disableInheritance; } - set { disableInheritance = value; } - } - - protected override void BeginProcessing() - { - base.BeginProcessing(); - } - - protected override void ProcessRecord() - { - - if (ParameterSetName == "Path") - { - FileSystemInfo item = null; - - foreach (var path in paths) - { - try - { - item = GetFileSystemInfo2(path); - } - catch (Exception ex) - { - WriteError(new ErrorRecord(ex, "ReadFileError", ErrorCategory.OpenError, path)); - continue; - } - - try - { - FileSystemAuditRule2.RemoveFileSystemAuditRuleAll(item); - if (disableInheritance) - FileSystemInheritanceInfo.DisableAuditInheritance(item, true); - } - catch (UnauthorizedAccessException) - { - try - { - var ownerInfo = FileSystemOwner.GetOwner(item); - var previousOwner = ownerInfo.Owner; - - FileSystemOwner.SetOwner(item, System.Security.Principal.WindowsIdentity.GetCurrent().User); - - FileSystemAuditRule2.RemoveFileSystemAuditRuleAll(item); - if (disableInheritance) - FileSystemInheritanceInfo.DisableAuditInheritance(item, true); - - FileSystemOwner.SetOwner(item, previousOwner); - } - catch (Exception ex2) - { - WriteError(new ErrorRecord(ex2, "ClearAclError", ErrorCategory.WriteError, path)); - } - } - catch (Exception ex) - { - WriteError(new ErrorRecord(ex, "ClearAclError", ErrorCategory.WriteError, path)); - } - } - } - else - { - foreach (var sd in securityDescriptors) - { - FileSystemAuditRule2.RemoveFileSystemAuditRuleAll(sd); - if (disableInheritance) - FileSystemInheritanceInfo.DisableAuditInheritance(sd, true); - } - } - - } - - protected override void EndProcessing() - { - base.EndProcessing(); - } - } -} diff --git a/NTFSSecurity/AuditCmdlets/Get-OrphanedAudit.cs b/NTFSSecurity/AuditCmdlets/Get-OrphanedAudit.cs deleted file mode 100644 index 91ce03f..0000000 --- a/NTFSSecurity/AuditCmdlets/Get-OrphanedAudit.cs +++ /dev/null @@ -1,56 +0,0 @@ -using Alphaleonis.Win32.Filesystem; -using Security2; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Management.Automation; - -namespace NTFSSecurity.AuditCmdlets -{ - [Cmdlet(VerbsCommon.Get, "NTFSOrphanedAudit")] - [OutputType(typeof(FileSystemAuditRule2))] - public class GetOrphanedAudit : GetAudit - { - int orphanedSidCount = 0; - - protected override void ProcessRecord() - { - IEnumerable acl; - FileSystemInfo item = null; - - foreach (var p in paths) - { - try - { - item = this.GetFileSystemInfo2(p); - } - catch (Exception ex) - { - this.WriteError(new ErrorRecord(ex, "ReadError", ErrorCategory.OpenError, p)); - continue; - } - - try - { - acl = FileSystemAuditRule2.GetFileSystemAuditRules(item, !ExcludeExplicit, !ExcludeInherited, getInheritedFrom); - - var orphanedAces = acl.Where(ace => string.IsNullOrEmpty(ace.Account.AccountName)); - orphanedSidCount += orphanedAces.Count(); - - this.WriteVerbose(string.Format("Item {0} knows about {1} orphaned SIDs in its ACL", p, orphanedAces.Count())); - this.WriteObject(orphanedAces); - } - catch (Exception ex) - { - this.WriteWarning(string.Format("Could not read item {0}. The error was: {1}", p, ex.Message)); - } - } - } - - protected override void EndProcessing() - { - WriteVerbose(string.Format("Total orphaned Access Control Enties: {0}", orphanedSidCount)); - base.EndProcessing(); - } - } -} diff --git a/NTFSSecurity/AuditCmdlets/GetAudit.cs b/NTFSSecurity/AuditCmdlets/GetAudit.cs deleted file mode 100644 index 1f8cd61..0000000 --- a/NTFSSecurity/AuditCmdlets/GetAudit.cs +++ /dev/null @@ -1,155 +0,0 @@ -using Alphaleonis.Win32.Filesystem; -using Security2; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Management.Automation; - -namespace NTFSSecurity -{ - [Cmdlet(VerbsCommon.Get, "NTFSAudit")] - [OutputType(typeof(FileSystemAuditRule2))] - public class GetAudit : BaseCmdletWithPrivControl - { - private bool excludeInherited; - private bool excludeExplicit; - private IdentityReference2 account; - - protected bool getInheritedFrom = false; - - [Parameter(Position = 1, ValueFromPipeline = true, ValueFromPipelineByPropertyName = true, ParameterSetName = "Path")] - [ValidateNotNullOrEmpty] - [Alias("FullName")] - public string[] Path - { - get { return paths.ToArray(); } - set - { - paths.Clear(); - paths.AddRange(value); - } - } - - [Parameter(Mandatory = true, Position = 1, ValueFromPipeline = true, ValueFromPipelineByPropertyName = true, ParameterSetName = "SD")] - [ValidateNotNullOrEmpty] - public FileSystemSecurity2[] SecurityDescriptor - { - get { return securityDescriptors.ToArray(); } - set - { - securityDescriptors.Clear(); - securityDescriptors.AddRange(value); - } - } - - [Parameter(ValueFromRemainingArguments = true)] - [Alias("IdentityReference, ID")] - [ValidateNotNullOrEmpty] - public IdentityReference2 Account - { - get { return account; } - set { account = value; } - } - - [Parameter] - public SwitchParameter ExcludeExplicit - { - get { return excludeExplicit; } - set { excludeExplicit = value; } - } - - [Parameter] - public SwitchParameter ExcludeInherited - { - get { return excludeInherited; } - set { excludeInherited = value; } - } - - protected override void BeginProcessing() - { - base.BeginProcessing(); - - getInheritedFrom = (bool)((System.Collections.Hashtable)MyInvocation.MyCommand.Module.PrivateData)["GetInheritedFrom"]; - - if (paths.Count == 0) - { - paths = new List() { GetVariableValue("PWD").ToString() }; - } - } - - protected override void ProcessRecord() - { - IEnumerable acl = null; - FileSystemInfo item = null; - - if (ParameterSetName == "Path") - { - foreach (var path in paths) - { - try - { - item = GetFileSystemInfo2(path); - } - catch (Exception ex) - { - WriteError(new ErrorRecord(ex, "ReadFileError", ErrorCategory.OpenError, path)); - continue; - } - - try - { - acl = FileSystemAuditRule2.GetFileSystemAuditRules(item, !excludeExplicit, !excludeInherited, getInheritedFrom); - } - catch (UnauthorizedAccessException) - { - try - { - var ownerInfo = FileSystemOwner.GetOwner(item); - var previousOwner = ownerInfo.Owner; - - FileSystemOwner.SetOwner(item, System.Security.Principal.WindowsIdentity.GetCurrent().User); - acl = FileSystemAuditRule2.GetFileSystemAuditRules(item, !excludeExplicit, !excludeInherited, getInheritedFrom); - FileSystemOwner.SetOwner(item, previousOwner); - } - catch (Exception ex2) - { - WriteError(new ErrorRecord(ex2, "ReadSecurityError", ErrorCategory.WriteError, path)); - continue; - } - } - catch (Exception ex) - { - WriteError(new ErrorRecord(ex, "ReadSecurityError", ErrorCategory.OpenError, path)); - continue; - } - finally - { - if (acl != null) - { - if (account != null) - { - acl = acl.Where(ace => ace.Account == account); - } - - acl.ForEach(ace => WriteObject(ace)); - } - } - } - } - else - { - foreach (var sd in securityDescriptors) - { - acl = FileSystemAuditRule2.GetFileSystemAuditRules(sd, !excludeExplicit, !excludeInherited, getInheritedFrom); - - if (account != null) - { - acl = acl.Where(ace => ace.Account == account); - } - - acl.ForEach(ace => WriteObject(ace)); - } - } - } - } -} \ No newline at end of file diff --git a/NTFSSecurity/AuditCmdlets/RemoveAudit.cs b/NTFSSecurity/AuditCmdlets/RemoveAudit.cs deleted file mode 100644 index dcff030..0000000 --- a/NTFSSecurity/AuditCmdlets/RemoveAudit.cs +++ /dev/null @@ -1,188 +0,0 @@ -using Alphaleonis.Win32.Filesystem; -using Security2; -using System; -using System.Linq; -using System.Management.Automation; -using System.Security.AccessControl; - -namespace NTFSSecurity -{ - [Cmdlet(VerbsCommon.Remove, "NTFSAudit", DefaultParameterSetName = "PathComplex")] - [OutputType(typeof(FileSystemAccessRule2))] - public class RemoveAudit : BaseCmdletWithPrivControl - { - private IdentityReference2[] account; - private FileSystemRights2 accessRights; - private AuditFlags auditFlags = AuditFlags.Failure | AuditFlags.Success; - private InheritanceFlags inheritanceFlags = InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit; - private PropagationFlags propagationFlags = PropagationFlags.None; - private ApplyTo appliesTo; - private bool removeSpecific; - private bool passThru; - - [Parameter(Mandatory = true, Position = 1, ValueFromPipeline = true, ValueFromPipelineByPropertyName = true, ParameterSetName = "PathSimple")] - [Parameter(Mandatory = true, Position = 1, ValueFromPipeline = true, ValueFromPipelineByPropertyName = true, ParameterSetName = "PathComplex")] - [ValidateNotNullOrEmpty] - [Alias("FullName")] - public string[] Path - { - get { return paths.ToArray(); } - set - { - paths.Clear(); - paths.AddRange(value); - } - } - - [Parameter(Mandatory = true, Position = 1, ValueFromPipeline = true, ValueFromPipelineByPropertyName = true, ParameterSetName = "SDSimple")] - [Parameter(Mandatory = true, Position = 1, ValueFromPipeline = true, ValueFromPipelineByPropertyName = true, ParameterSetName = "SDComplex")] - [ValidateNotNullOrEmpty] - public FileSystemSecurity2[] SecurityDescriptor - { - get { return securityDescriptors.ToArray(); } - set - { - securityDescriptors.Clear(); - securityDescriptors.AddRange(value); - } - } - - [Parameter(Mandatory = true, Position = 2, ValueFromPipelineByPropertyName = true)] - [Alias("IdentityReference, ID")] - public IdentityReference2[] Account - { - get { return account; } - set { account = value; } - } - - [Parameter(Mandatory = true, Position = 3, ValueFromPipelineByPropertyName = true)] - [Alias("FileSystemRights")] - public FileSystemRights2 AccessRights - { - get { return accessRights; } - set { accessRights = value; } - } - - [Parameter(ValueFromPipelineByPropertyName = true)] - public AuditFlags AuditFlags - { - get { return auditFlags; } - set { auditFlags = value; } - } - - [Parameter(ValueFromPipelineByPropertyName = true, ParameterSetName = "PathComplex")] - [Parameter(ValueFromPipelineByPropertyName = true, ParameterSetName = "SDComplex")] - public InheritanceFlags InheritanceFlags - { - get { return inheritanceFlags; } - set { inheritanceFlags = value; } - } - - [Parameter(ValueFromPipelineByPropertyName = true, ParameterSetName = "PathComplex")] - [Parameter(ValueFromPipelineByPropertyName = true, ParameterSetName = "SDComplex")] - public PropagationFlags PropagationFlags - { - get { return propagationFlags; } - set { propagationFlags = value; } - } - - [Parameter(ValueFromPipelineByPropertyName = true, ParameterSetName = "PathSimple")] - [Parameter(ValueFromPipelineByPropertyName = true, ParameterSetName = "SDSimple")] - public ApplyTo AppliesTo - { - get { return appliesTo; } - set { appliesTo = value; } - } - - [Parameter] - public SwitchParameter PassThru - { - get { return passThru; } - set { passThru = value; } - } - - protected override void BeginProcessing() - { - base.BeginProcessing(); - } - - protected override void ProcessRecord() - { - if (ParameterSetName.EndsWith("Simple")) - { - FileSystemSecurity2.ConvertToFileSystemFlags(appliesTo, out inheritanceFlags, out propagationFlags); - } - - if (ParameterSetName.StartsWith("Path")) - { - foreach (var path in paths) - { - FileSystemInfo item = null; - - try - { - item = GetFileSystemInfo2(path); - } - catch (Exception ex) - { - WriteError(new ErrorRecord(ex, "ReadFileError", ErrorCategory.OpenError, path)); - } - - if (ParameterSetName == "PathSimple") - { - FileSystemSecurity2.ConvertToFileSystemFlags(appliesTo, out inheritanceFlags, out propagationFlags); - } - - try - { - FileSystemAuditRule2.RemoveFileSystemAuditRule(item, account.ToList(), accessRights, auditFlags, inheritanceFlags, propagationFlags); - } - catch (UnauthorizedAccessException) - { - try - { - var ownerInfo = FileSystemOwner.GetOwner(item); - var previousOwner = ownerInfo.Owner; - - FileSystemOwner.SetOwner(item, System.Security.Principal.WindowsIdentity.GetCurrent().User); - - FileSystemAuditRule2.RemoveFileSystemAuditRule(item, account.ToList(), accessRights, auditFlags, inheritanceFlags, propagationFlags); - - FileSystemOwner.SetOwner(item, previousOwner); - } - catch (Exception ex2) - { - WriteError(new ErrorRecord(ex2, "RemoveAceError", ErrorCategory.WriteError, path)); - } - } - catch (Exception ex) - { - WriteError(new ErrorRecord(ex, "RemoveAceError", ErrorCategory.WriteError, path)); - } - - if (passThru == true) - { - FileSystemAccessRule2.GetFileSystemAccessRules(item, true, true).ForEach(ace => WriteObject(ace)); - } - } - } - else - { - foreach (var sd in securityDescriptors) - { - FileSystemAuditRule2.RemoveFileSystemAuditRule(sd, account.ToList(), accessRights, auditFlags, inheritanceFlags, propagationFlags); - - if (passThru == true) - { - FileSystemAuditRule2.GetFileSystemAuditRules(sd, true, true).ForEach(ace => WriteObject(ace)); - } - } - } - } - - protected override void EndProcessing() - { - base.EndProcessing(); - } - } -} \ No newline at end of file diff --git a/NTFSSecurity/BaseCmdlets.cs b/NTFSSecurity/BaseCmdlets.cs deleted file mode 100644 index 7480a2a..0000000 --- a/NTFSSecurity/BaseCmdlets.cs +++ /dev/null @@ -1,321 +0,0 @@ -using System.Management.Automation; -using Security2; -using ProcessPrivileges; -using System.Linq; -using System.Collections.Generic; -using System; -using System.Collections; - -namespace NTFSSecurity -{ - public class BaseCmdlet : PSCmdlet - { - protected List paths = new List(); - protected List securityDescriptors = new List(); - - protected override void BeginProcessing() - { - base.BeginProcessing(); - } - - protected override void ProcessRecord() - { - base.ProcessRecord(); - } - - #region GetFileSystemInfo - protected System.IO.FileSystemInfo GetFileSystemInfo(string path) - { - string currentLocation = GetVariableValue("PWD").ToString(); - - if (path == ".") - { - path = currentLocation; - } - if (path.StartsWith("..")) - { - path = System.IO.Path.Combine( - string.Join("\\", currentLocation.Split('\\').Take(currentLocation.Split('\\').Count() - path.Split('\\').Count(s => s == "..")).ToArray()), - string.Join("\\", path.Split('\\').Where(e => e != "..").ToArray())); - } - else if (path.StartsWith(".")) - { - //combine . and .\path\subpath - path = System.IO.Path.Combine(currentLocation, path.Substring(2)); - } - else if (path.StartsWith("\\")) - { - //do nothing - } - else - { - ////combine . and \path\subpath or path\subpath - path = System.IO.Path.Combine(currentLocation, path.Substring(0)); - } - - if (System.IO.File.Exists(path)) - { - return new System.IO.FileInfo(path); - } - else if (System.IO.Directory.Exists(path)) - { - return new System.IO.DirectoryInfo(path); - } - else - { - throw new System.IO.FileNotFoundException(); - } - } - #endregion - - #region GetFileSystemInfo2 - protected Alphaleonis.Win32.Filesystem.FileSystemInfo GetFileSystemInfo2(string path) - { - path = GetRelativePath(path); - - if (Alphaleonis.Win32.Filesystem.File.Exists(path)) - { - return new Alphaleonis.Win32.Filesystem.FileInfo(path); - } - else if (Alphaleonis.Win32.Filesystem.Directory.Exists(path)) - { - return new Alphaleonis.Win32.Filesystem.DirectoryInfo(path); - } - else - { - throw new System.IO.FileNotFoundException(); - } - } - #endregion - - #region TryGetFileSystemInfo2 - protected bool TryGetFileSystemInfo2(string path, out Alphaleonis.Win32.Filesystem.FileSystemInfo item) - { - path = GetRelativePath(path); - item = null; - - if (Alphaleonis.Win32.Filesystem.File.Exists(path)) - { - item = new Alphaleonis.Win32.Filesystem.FileInfo(path); - } - else if (Alphaleonis.Win32.Filesystem.Directory.Exists(path)) - { - item = new Alphaleonis.Win32.Filesystem.DirectoryInfo(path); - } - else - { - return false; - } - - return true; - } - #endregion - - #region GetRelativePath - protected string GetRelativePath(string path) - { - string currentLocation = GetVariableValue("PWD").ToString(); - - if (string.IsNullOrEmpty(path)) - { - path = currentLocation; - } - else if (path == ".") - { - path = currentLocation; - } - else if (path.StartsWith("..")) - { - path = System.IO.Path.Combine( - string.Join("\\", currentLocation.Split('\\').Take(currentLocation.Split('\\').Count() - path.Split('\\').Count(s => s == "..")).ToArray()), - string.Join("\\", path.Split('\\').Where(e => e != "..").ToArray())); - } - else if (path.StartsWith(".")) - { - //combine . and .\path\subpath - path = System.IO.Path.Combine(currentLocation, path.Substring(2)); - } - else if (path.StartsWith("\\")) - { - //do nothing - } - else - { - ////combine . and \path\subpath or path\subpath - path = System.IO.Path.Combine(currentLocation, path); - } - - return path; - } - #endregion - } - - public class BaseCmdletWithPrivControl : BaseCmdlet - { - protected PrivilegeAndAttributesCollection privileges = null; - protected PrivilegeControl privControl = new PrivilegeControl(); - private List enabledPrivileges = new List(); - Hashtable privateData = null; - - protected override void BeginProcessing() - { - privateData = (Hashtable)MyInvocation.MyCommand.Module.PrivateData; - - if ((bool)privateData["EnablePrivileges"]) - { - WriteVerbose("EnablePrivileges enabled in PrivateDate"); - EnableFileSystemPrivileges(true); - } - } - - protected override void EndProcessing() - { - if ((bool)privateData["EnablePrivileges"]) - { - WriteVerbose("EnablePrivileges enabled in PrivateDate"); - - //disable all privileges that have been enabled by this cmdlet - WriteVerbose(string.Format("Disabeling all {0} enabled privileges...", enabledPrivileges.Count)); - foreach (var privilege in enabledPrivileges) - { - DisablePrivilege((Privilege)Enum.Parse(typeof(Privilege), privilege)); - WriteVerbose(string.Format("\t{0} disabled", privilege)); - } - WriteVerbose(string.Format("...finished")); - } - } - - protected void EnablePrivilege(Privilege privilege) - { - //throw an exception if the specified prililege is not held by the client - if (!privileges.Any(p => p.Privilege == privilege)) - throw new System.Security.AccessControl.PrivilegeNotHeldException(privilege.ToString()); - - //if the privilege is disabled - if (privileges.Single(p => p.Privilege == privilege).PrivilegeState == PrivilegeState.Disabled) - { - WriteDebug(string.Format("The privilege {0} is disabled...", privilege)); - //activate it - privControl.EnablePrivilege(privilege); - WriteDebug(string.Format("..enabled")); - //remember the privilege so that we can automatically disable it after the cmdlet finished processing - enabledPrivileges.Add(privilege.ToString()); - - privileges = privControl.GetPrivileges(); - } - } - - public void DisablePrivilege(Privilege privilege) - { - //if the privilege is enabled - if (privileges.Single(p => p.Privilege == privilege).PrivilegeState == PrivilegeState.Enabled) - privControl.DisablePrivilege(privilege); - } - - protected bool TryEnablePrivilege(Privilege privilege) - { - try - { - EnablePrivilege(privilege); - return true; - } - catch(Exception ex) - { - WriteDebug(string.Format("Could not enable privilege {0}. The error was: {1}", privilege, ex.Message)); - return false; - } - } - - protected bool TryDisablePrivilege(Privilege privilege) - { - try - { - DisablePrivilege(privilege); - return true; - } - catch - { - WriteDebug(string.Format("Could not disable privilege {0}.", privilege)); - return false; - } - } - - protected void EnableFileSystemPrivileges(bool quite = true) - { - privileges = (new PrivilegeControl()).GetPrivileges(); - - if (!TryEnablePrivilege(Privilege.TakeOwnership)) - WriteDebug("The privilige 'TakeOwnership' could not be enabled. Make sure your user account does have this privilige"); - - if (!TryEnablePrivilege(Privilege.Restore)) - WriteDebug("The privilige 'Restore' could not be enabled. Make sure your user account does have this privilige"); - - if (!TryEnablePrivilege(Privilege.Backup)) - WriteDebug("The privilige 'Backup' could not be enabled. Make sure your user account does have this privilige"); - - if (!TryEnablePrivilege(Privilege.Security)) - WriteDebug("The privilige 'Security' could not be enabled. Make sure your user account does have this privilige"); - - if (!quite) - { - if (privControl.GetPrivileges() - .Where(p => p.PrivilegeState == PrivilegeState.Enabled) - .Where(p => - (p.Privilege == Privilege.TakeOwnership) | - (p.Privilege == Privilege.Restore) | - (p.Privilege == Privilege.Backup) | - (p.Privilege == Privilege.Security)).Count() == 4) - { - WriteVerbose("The privileges 'Backup', 'Restore', 'TakeOwnership' and 'Security' are now enabled giving you access to all files and folders. Use Disable-Privileges to disable them and Get-Privileges for an overview."); - } - else - { - WriteError(new ErrorRecord(new AdjustPriviledgeException("Could not enable requested privileges. Cmdlets of NTFSSecurity will only work on resources you have access to."), "Enable Privilege Error", ErrorCategory.SecurityError, null)); - return; - } - } - } - - protected void DisableFileSystemPrivileges() - { - var privileges = privControl.GetPrivileges(); - - if (privileges.Where(p => p.Privilege == Privilege.TakeOwnership) != null) - if (!TryDisablePrivilege(Privilege.TakeOwnership)) - WriteWarning("The privilige 'TakeOwnership' could not be disabled."); - else - WriteDebug("The privilige 'TakeOwnership' was disabled."); - - if (privileges.Where(p => p.Privilege == Privilege.Restore) != null) - if (!TryDisablePrivilege(Privilege.Restore)) - WriteWarning("The privilige 'Restore' could not be disabled."); - else - WriteDebug("The privilige 'Restore' was disabled."); - - if (privileges.Where(p => p.Privilege == Privilege.Backup) != null) - if (!TryDisablePrivilege(Privilege.Backup)) - WriteWarning("The privilige 'Backup' could not be disabled."); - else - WriteDebug("The privilige 'Backup' was disabled."); - - if (!TryDisablePrivilege(Privilege.Security)) - WriteWarning("The privilige 'Security' could not be disabled."); - else - WriteDebug("The privilige 'Security' was disabled."); - } - - protected void WriteWarning(string text, params string[] args) - { - base.WriteWarning(string.Format(text, args)); - } - protected void WriteVerbose(string text, params string[] args) - { - base.WriteVerbose(string.Format(text, args)); - } - - protected void WriteDebug(string text, params string[] args) - { - base.WriteDebug(string.Format(text, args)); - } - } -} \ No newline at end of file diff --git a/NTFSSecurity/CodeMembers.cs b/NTFSSecurity/CodeMembers.cs deleted file mode 100644 index ee5b634..0000000 --- a/NTFSSecurity/CodeMembers.cs +++ /dev/null @@ -1,64 +0,0 @@ -using Alphaleonis.Win32.Filesystem; -using System.Management.Automation; - -namespace NTFSSecurity -{ - public class FileSystemCodeMembers - { - public static string Mode(PSObject obj) - { - if (obj == null) - { - return string.Empty; - } - FileSystemInfo item = (FileSystemInfo)obj.BaseObject; - if (item == null) - { - return string.Empty; - } - - string text = ""; - if ((item.Attributes & System.IO.FileAttributes.Directory) == System.IO.FileAttributes.Directory) - { - text += "d"; - } - else - { - text += "-"; - } - if ((item.Attributes & System.IO.FileAttributes.Archive) == System.IO.FileAttributes.Archive) - { - text += "a"; - } - else - { - text += "-"; - } - if ((item.Attributes & System.IO.FileAttributes.ReadOnly) == System.IO.FileAttributes.ReadOnly) - { - text += "r"; - } - else - { - text += "-"; - } - if ((item.Attributes & System.IO.FileAttributes.Hidden) == System.IO.FileAttributes.Hidden) - { - text += "h"; - } - else - { - text += "-"; - } - if ((item.Attributes & System.IO.FileAttributes.System) == System.IO.FileAttributes.System) - { - text += "s"; - } - else - { - text += "-"; - } - return text; - } - } -} diff --git a/NTFSSecurity/Extensions.cs b/NTFSSecurity/Extensions.cs deleted file mode 100644 index 5ae4956..0000000 --- a/NTFSSecurity/Extensions.cs +++ /dev/null @@ -1,56 +0,0 @@ -using System; -using System.Collections.Generic; -using Alphaleonis.Win32.Filesystem; - -namespace NTFSSecurity -{ - public static class Extensions - { - public static void ForEach(this IEnumerable source, Action action) - { - if (source == null) { throw new ArgumentException(); } - if (action == null) { throw new ArgumentException(); } - - foreach (T element in source) - { - action(element); - } - } - - public static FileSystemInfo GetParent(this FileSystemInfo item) - { - var parentPath = System.IO.Path.GetDirectoryName(item.FullName); - - if (File.Exists(parentPath)) - { - return new FileInfo(parentPath); - } - else if (Directory.Exists(parentPath)) - { - return new DirectoryInfo(parentPath); - } - else - { - throw new System.IO.FileNotFoundException(); - } - } - - public static System.IO.FileSystemInfo GetParent(this System.IO.FileSystemInfo item) - { - var parentPath = System.IO.Path.GetDirectoryName(item.FullName); - - if (File.Exists(parentPath)) - { - return new System.IO.FileInfo(parentPath); - } - else if (Directory.Exists(parentPath)) - { - return new System.IO.DirectoryInfo(parentPath); - } - else - { - throw new System.IO.FileNotFoundException(); - } - } - } -} \ No newline at end of file diff --git a/NTFSSecurity/Help/NTFSSecurity.Help.pshproj b/NTFSSecurity/Help/NTFSSecurity.Help.pshproj deleted file mode 100644 index e811fa7..0000000 --- a/NTFSSecurity/Help/NTFSSecurity.Help.pshproj +++ /dev/null @@ -1,2786 +0,0 @@ - - - NTFSSecurity - 3.2.3 - Windows PowerShell Module for managing file and folder security on NTFS volumes - true - false - - - - Add-NTFSAccess - - - - - - - - - - - - - - - - - - - Add-NTFSAccess [-Path] <String[]> [-Account] <IdentityReference2[]> [-AccessRights] <FileSystemRights2> [-AccessType <AccessControlType>] [-InheritanceFlags <InheritanceFlags>] [-PropagationFlags <PropagationFlags>] [-PassThru] [-InformationAction <ActionPreference>] [-InformationVariable <String>] - Add-NTFSAccess [-Path] <String[]> [-Account] <IdentityReference2[]> [-AccessRights] <FileSystemRights2> [-AccessType <AccessControlType>] [-AppliesTo <ApplyTo>] [-PassThru] [-InformationAction <ActionPreference>] [-InformationVariable <String>] - Add-NTFSAccess [-SecurityDescriptor] <FileSystemSecurity2[]> [-Account] <IdentityReference2[]> [-AccessRights] <FileSystemRights2> [-AccessType <AccessControlType>] [-AppliesTo <ApplyTo>] [-PassThru] [-InformationAction <ActionPreference>] [-InformationVariable <String>] - Add-NTFSAccess [-SecurityDescriptor] <FileSystemSecurity2[]> [-Account] <IdentityReference2[]> [-AccessRights] <FileSystemRights2> [-AccessType <AccessControlType>] [-InheritanceFlags <InheritanceFlags>] [-PropagationFlags <PropagationFlags>] [-PassThru] [-InformationAction <ActionPreference>] [-InformationVariable <String>] - - - - Path - - System.Management.Automation.ParameterAttribute - System.Management.Automation.ParameterAttribute - System.Management.Automation.ValidateNotNullOrEmptyAttribute - System.Management.Automation.AliasAttribute - - - FullName - - - - - - Account - - System.Management.Automation.ParameterAttribute - System.Management.Automation.AliasAttribute - - - IdentityReference, ID - - - - - - AccessRights - - System.Management.Automation.ParameterAttribute - System.Management.Automation.AliasAttribute - - - FileSystemRights - - - - - - AccessType - - System.Management.Automation.ParameterAttribute - System.Management.Automation.AliasAttribute - - - AccessControlType - - - - - - InheritanceFlags - - System.Management.Automation.ParameterAttribute - System.Management.Automation.ParameterAttribute - - - - - - - PropagationFlags - - System.Management.Automation.ParameterAttribute - System.Management.Automation.ParameterAttribute - - - - - - - PassThru - - System.Management.Automation.ParameterAttribute - - - - - - - InformationAction - - System.Management.Automation.AliasAttribute - System.Management.Automation.ParameterAttribute - - - infa - - - - - - InformationVariable - - System.Management.Automation.ParameterAttribute - System.Management.Automation.Internal.CommonParameters+ValidateVariableName - System.Management.Automation.AliasAttribute - - - iv - - - - - - AppliesTo - - System.Management.Automation.ParameterAttribute - System.Management.Automation.ParameterAttribute - - - - - - - SecurityDescriptor - - System.Management.Automation.ParameterAttribute - System.Management.Automation.ParameterAttribute - System.Management.Automation.ValidateNotNullOrEmptyAttribute - - - - - - - - - - false - - - Add-NTFSAudit - - - - - - - - - - - - - - - - - Add-NTFSAudit [-Account] <IdentityReference2> [-AccessRights] <FileSystemRights> [-Type <AuditFlags>] [-InheritanceFlags <InheritanceFlags>] [-PropagationFlags <PropagationFlags>] [-PassThru] [-InformationAction <ActionPreference>] [-InformationVariable <String>] - Add-NTFSAudit [-Account] <IdentityReference2> [-AccessRights] <FileSystemRights> [-Type <AuditFlags>] [-AppliesTo <ApplyTo>] [-PassThru] [-InformationAction <ActionPreference>] [-InformationVariable <String>] - - - - Account - - System.Management.Automation.ParameterAttribute - System.Management.Automation.AliasAttribute - - - IdentityReference, ID - - - - - - AccessRights - - System.Management.Automation.ParameterAttribute - System.Management.Automation.AliasAttribute - - - FileSystemRights - - - - - - Type - - System.Management.Automation.ParameterAttribute - - - - - - - InheritanceFlags - - System.Management.Automation.ParameterAttribute - - - - - - - PropagationFlags - - System.Management.Automation.ParameterAttribute - - - - - - - PassThru - - System.Management.Automation.ParameterAttribute - - - - - - - InformationAction - - System.Management.Automation.AliasAttribute - System.Management.Automation.ParameterAttribute - - - infa - - - - - - InformationVariable - - System.Management.Automation.ParameterAttribute - System.Management.Automation.Internal.CommonParameters+ValidateVariableName - System.Management.Automation.AliasAttribute - - - iv - - - - - - AppliesTo - - System.Management.Automation.ParameterAttribute - - - - - - - - - - false - - - Copy-NTFSAccess - - - - - - - - - - - - - - - - Copy-NTFSAccess [-Path] <String> [-DestinationPath] <String> [-Account <IdentityReference2[]>] [-PassThru] [-InformationAction <ActionPreference>] [-InformationVariable <String>] - - - - Path - - System.Management.Automation.ParameterAttribute - System.Management.Automation.ValidateNotNullOrEmptyAttribute - System.Management.Automation.AliasAttribute - - - FullName - - - - - - DestinationPath - - System.Management.Automation.ParameterAttribute - System.Management.Automation.ValidateNotNullOrEmptyAttribute - - - - - - - Account - - System.Management.Automation.ParameterAttribute - System.Management.Automation.AliasAttribute - - - IdentityReference, ID - - - - - - PassThru - - System.Management.Automation.ParameterAttribute - - - - - - - InformationAction - - System.Management.Automation.AliasAttribute - System.Management.Automation.ParameterAttribute - - - infa - - - - - - InformationVariable - - System.Management.Automation.ParameterAttribute - System.Management.Automation.Internal.CommonParameters+ValidateVariableName - System.Management.Automation.AliasAttribute - - - iv - - - - - - - - - false - - - Disable-NTFSAccessInheritance - - - - - - - - - - - - - - - - - Disable-NTFSAccessInheritance [[-Path] <String[]>] [-RemoveInheritedAccessRules] [-PassThru] [-InformationAction <ActionPreference>] [-InformationVariable <String>] - Disable-NTFSAccessInheritance [-SecurityDescriptor] <FileSystemSecurity2[]> [-RemoveInheritedAccessRules] [-PassThru] [-InformationAction <ActionPreference>] [-InformationVariable <String>] - - - - Path - - System.Management.Automation.ParameterAttribute - System.Management.Automation.ValidateNotNullOrEmptyAttribute - System.Management.Automation.AliasAttribute - - - FullName - - - - - - RemoveInheritedAccessRules - - System.Management.Automation.ParameterAttribute - - - - - - - PassThru - - System.Management.Automation.ParameterAttribute - - - - - - - InformationAction - - System.Management.Automation.AliasAttribute - System.Management.Automation.ParameterAttribute - - - infa - - - - - - InformationVariable - - System.Management.Automation.ParameterAttribute - System.Management.Automation.Internal.CommonParameters+ValidateVariableName - System.Management.Automation.AliasAttribute - - - iv - - - - - - SecurityDescriptor - - System.Management.Automation.ParameterAttribute - System.Management.Automation.ValidateNotNullOrEmptyAttribute - - - - - - - - - - false - - - Disable-NTFSAuditInheritance - - - - - - - - - - - - - - - - - Disable-NTFSAuditInheritance [[-Path] <String[]>] [-RemoveInheritedAccessRules] [-PassThru] [-InformationAction <ActionPreference>] [-InformationVariable <String>] - Disable-NTFSAuditInheritance [-SecurityDescriptor] <FileSystemSecurity2[]> [-RemoveInheritedAccessRules] [-PassThru] [-InformationAction <ActionPreference>] [-InformationVariable <String>] - - - - Path - - System.Management.Automation.ParameterAttribute - System.Management.Automation.ValidateNotNullOrEmptyAttribute - System.Management.Automation.AliasAttribute - - - FullName - - - - - - RemoveInheritedAccessRules - - System.Management.Automation.ParameterAttribute - - - - - - - PassThru - - System.Management.Automation.ParameterAttribute - - - - - - - InformationAction - - System.Management.Automation.AliasAttribute - System.Management.Automation.ParameterAttribute - - - infa - - - - - - InformationVariable - - System.Management.Automation.ParameterAttribute - System.Management.Automation.Internal.CommonParameters+ValidateVariableName - System.Management.Automation.AliasAttribute - - - iv - - - - - - SecurityDescriptor - - System.Management.Automation.ParameterAttribute - System.Management.Automation.ValidateNotNullOrEmptyAttribute - - - - - - - - - - false - - - Disable-Privileges - - - - - - - - - - - - - - - - Disable-Privileges [-PassThru] [-InformationAction <ActionPreference>] [-InformationVariable <String>] - - - - PassThru - - System.Management.Automation.ParameterAttribute - - - - - - - InformationAction - - System.Management.Automation.AliasAttribute - System.Management.Automation.ParameterAttribute - - - infa - - - - - - InformationVariable - - System.Management.Automation.ParameterAttribute - System.Management.Automation.Internal.CommonParameters+ValidateVariableName - System.Management.Automation.AliasAttribute - - - iv - - - - - - - - - false - - - Enable-NTFSAccessInheritance - - - - - - - - - - - - - - - - - Enable-NTFSAccessInheritance [[-Path] <String[]>] [-PassThru] [-RemoveExplicitAccessRules] [-InformationAction <ActionPreference>] [-InformationVariable <String>] - Enable-NTFSAccessInheritance [-SecurityDescriptor] <FileSystemSecurity2[]> [-PassThru] [-RemoveExplicitAccessRules] [-InformationAction <ActionPreference>] [-InformationVariable <String>] - - - - Path - - System.Management.Automation.ParameterAttribute - System.Management.Automation.ValidateNotNullOrEmptyAttribute - System.Management.Automation.AliasAttribute - - - FullName - - - - - - PassThru - - System.Management.Automation.ParameterAttribute - - - - - - - RemoveExplicitAccessRules - - System.Management.Automation.ParameterAttribute - - - - - - - InformationAction - - System.Management.Automation.AliasAttribute - System.Management.Automation.ParameterAttribute - - - infa - - - - - - InformationVariable - - System.Management.Automation.ParameterAttribute - System.Management.Automation.Internal.CommonParameters+ValidateVariableName - System.Management.Automation.AliasAttribute - - - iv - - - - - - SecurityDescriptor - - System.Management.Automation.ParameterAttribute - System.Management.Automation.ValidateNotNullOrEmptyAttribute - - - - - - - - - - false - - - Enable-NTFSAuditInheritance - - - - - - - - - - - - - - - - - Enable-NTFSAuditInheritance [[-Path] <String[]>] [-PassThru] [-RemoveExplicitAccessRules] [-InformationAction <ActionPreference>] [-InformationVariable <String>] - Enable-NTFSAuditInheritance [-SecurityDescriptor] <FileSystemSecurity2[]> [-PassThru] [-RemoveExplicitAccessRules] [-InformationAction <ActionPreference>] [-InformationVariable <String>] - - - - Path - - System.Management.Automation.ParameterAttribute - System.Management.Automation.ValidateNotNullOrEmptyAttribute - System.Management.Automation.AliasAttribute - - - FullName - - - - - - PassThru - - System.Management.Automation.ParameterAttribute - - - - - - - RemoveExplicitAccessRules - - System.Management.Automation.ParameterAttribute - - - - - - - InformationAction - - System.Management.Automation.AliasAttribute - System.Management.Automation.ParameterAttribute - - - infa - - - - - - InformationVariable - - System.Management.Automation.ParameterAttribute - System.Management.Automation.Internal.CommonParameters+ValidateVariableName - System.Management.Automation.AliasAttribute - - - iv - - - - - - SecurityDescriptor - - System.Management.Automation.ParameterAttribute - System.Management.Automation.ValidateNotNullOrEmptyAttribute - - - - - - - - - - false - - - Enable-Privileges - - - - - - - - - - - - - - - - Enable-Privileges [-PassThru] [-InformationAction <ActionPreference>] [-InformationVariable <String>] - - - - PassThru - - System.Management.Automation.ParameterAttribute - - - - - - - InformationAction - - System.Management.Automation.AliasAttribute - System.Management.Automation.ParameterAttribute - - - infa - - - - - - InformationVariable - - System.Management.Automation.ParameterAttribute - System.Management.Automation.Internal.CommonParameters+ValidateVariableName - System.Management.Automation.AliasAttribute - - - iv - - - - - - - - - false - - - Get-ChildItem2 - - Gets the items and child items in one or more specified locations. - The Get-ChildItem2 cmdlet gets the items in one or more specified locations. If the item is a container, it gets the items inside the container, known as child items. You can use the Recurse parameter to get items in all child containers. - -Get-ChildItem2 does not have a 248 character limit on the path. It does not use the FileSystem provider but AlphaFS (https://github.com/alphaleonis/AlphaFS/) which is faster. - -Get-ChildItem2 supports only locations on the file system. Get-ChildItem2 cmdlet gets the directories, subdirectories, and files. In a file system directory, it gets subdirectories and files. - -By default, Get-ChildItem2 gets non-hidden items, but you can use the Directory, File, Hidden, ReadOnly, and System parameters to get only items with these attributes. To create a complex attribute search, use the Attributes parameter. If you use these parameters, Get-ChildItem gets only the items that meet all search conditions, as though the parameters were connected by an AND operator. - You can also refer to Get-ChildItem2 by its built-in alias dir2. - -Get-ChildItem2 does not get hidden items by default. To get hidden items, use the Force parameter. - System.String[] - - You can pipe a file system path (in quotation marks) to Get-ChildItem2. - Alphaleonis.Win32.Filesystem.DirectoryInfo, Alphaleonis.Win32.Filesystem.FileInfo, System.String - - - - - - - - Get-ChildItem2 [[-Path] <String[]>] [[-Filter] <String>] [-Recurse] [-Directory] [-File] [-Attributes <FileAttributes>] [-Hidden] [-System] [-ReadOnly] [-Force] [-SkipMountPoints] [-SkipSymbolicLinks] [-Depth <Nullable`1[Int32]>] [-InformationAction <ActionPreference>] [-InformationVariable <String>] - - - - Path - - System.Management.Automation.ParameterAttribute - System.Management.Automation.ValidateNotNullOrEmptyAttribute - System.Management.Automation.AliasAttribute - - - FullName - - Specifies a path to one or more locations. Wildcards are NOT permitted. The default location is the current directory (.). - - - - Filter - - System.Management.Automation.ParameterAttribute - - - Specifies a wildcard filter. The value of this parameter qualifies the Path parameter. Filters are more efficient than other parameters, because the provider applies them when retrieving the objects, rather than having Windows PowerShell filter the objects after they are retrieved. - - - - Recurse - - System.Management.Automation.ParameterAttribute - - - Gets the items in the specified locations and in all child items of the locations. - - - - Directory - - System.Management.Automation.ParameterAttribute - - - Gets directories (folders). - -To get only directories, use the Directory parameter and omit the File parameter. To exclude directories, use the File parameter and omit the Directory parameter, or use the Attributes parameter. - - - - File - - System.Management.Automation.ParameterAttribute - - - Gets files. - -To get only files, use the File parameter and omit the Directory parameter. To exclude files, use the Directory parameter and omit the File parameter, or use the Attributes parameter. - - - - Attributes - - System.Management.Automation.ParameterAttribute - - - Gets files and folders with the specified attributes. This parameter supports all attributes and lets you specify complex combinations of attributes. - -To find files and folders with commonly used attributes, you can use the Attributes parameter, or the Directory, File, Hidden, ReadOnly, and System switch parameters. - -The Attributes parameter supports the following attributes: Archive, Compressed, Device, Directory, Encrypted, Hidden, Normal, NotContentIndexed, Offline, ReadOnly, ReparsePoint, SparseFile, System, and Temporary. For a description of these attributes, see the FileAttributes enumeration at http://go.microsoft.com/fwlink/?LinkId=201508. - - - - SkipMountPoints - - System.Management.Automation.ParameterAttribute - - - Skips mount points. - -Use this switch to not follow mount points when doing a recursive listing. - - - - SkipSymbolicLinks - - System.Management.Automation.ParameterAttribute - - - Skips symbolic links. - -Use this switch to not follow symbolic links when doing a recursive listing. - - - - Depth - - System.Management.Automation.ParameterAttribute - - - Limits the depth in a recursive listing. - -If you need only a certain level of subfolders, use this parameter. For example, if you only need the content of the current folder + the content of all subfolders, specify a depth of 1. - - - - InformationAction - - System.Management.Automation.AliasAttribute - System.Management.Automation.ParameterAttribute - - - infa - - - - - - InformationVariable - - System.Management.Automation.ParameterAttribute - System.Management.Automation.Internal.CommonParameters+ValidateVariableName - System.Management.Automation.AliasAttribute - - - iv - - - - - - Hidden - - System.Management.Automation.ParameterAttribute - - - Gets only hidden files and directories (folders). By default, Get-ChildItem gets only non-hidden items, but you can use the Force parameter to include hidden items in the results. - -To get only hidden items, use the Hidden parameter or the Hidden value of the Attributes parameter. To exclude hidden items, omit the Hidden parameter or use the Attributes parameter. - - - - System - - System.Management.Automation.ParameterAttribute - - - Gets only system files and directories (folders). - -To get only system files and folders, use the System parameter or the System value of the Attributes parameter. To exclude system files and folders, use the Attributes parameter. - - - - ReadOnly - - System.Management.Automation.ParameterAttribute - - - Gets only read-only files and directories (folders). - -To get only read-only items, use the ReadOnly parameter or the ReadOnly value of the Attributes parameter. To exclude read-only items, use the Attributes parameter. - - - - Force - - System.Management.Automation.ParameterAttribute - - - Gets hidden files and folders. By default, hidden files and folder are excluded. You can also get hidden files and folders by using the Hidden parameter or the Hidden value of the Attributes parameter. - - - - - - Example 1 - C:\PS> Get-ChildItem2 - This command gets the files and subdirectories in the current directory. If the current directory does not have child items, the command does not return any results. - - - - Example 2 - C:\PS> Get-Childitem -System -File -Recurse - This command gets system files in the current directory and its subdirectories. - - - - Example 3 - PS C:\> Get-ChildItem2 -Path D:\LabSources\ -Force -Depth 2 - Gets all items from the folder D:\LabSources up to a level of 2. The Force switch makes the command to return also hidden items. - - - - - - false - - - Get-DiskSpace - - Retrieves a statistic about a file system drive. - Get-DiskSpace retrieves a drive and usage statistic of a given drive. The information provided is AvailableFreeSpacePercent, AvailableFreeSpaceUnitSizeClusterSize, DriveName, TotalSizeUnitSize, UsedSpacePercent, UsedSpaceUnitSize, FreeBytesAvailable, TotalNumberOfBytes, TotalNumberOfFreeBytes, BytesPerSector, NumberOfFreeClusters, SectorsPerCluster, TotalNumberOfClusters. - - - System.String - - - Alphaleonis.Win32.Filesystem.DiskSpaceInfo - - - - - - - - Get-DiskSpace [[-DriveLetter] <String[]>] [-InformationAction <ActionPreference>] [-InformationVariable <String>] - - - - DriveLetter - - System.Management.Automation.ParameterAttribute - System.Management.Automation.ValidatePatternAttribute - - - The drive to get the statistic from. - - - - InformationAction - - System.Management.Automation.AliasAttribute - System.Management.Automation.ParameterAttribute - - - infa - - - - - - InformationVariable - - System.Management.Automation.ParameterAttribute - System.Management.Automation.Internal.CommonParameters+ValidateVariableName - System.Management.Automation.AliasAttribute - - - iv - - - - - - - - Example 1 - PS C:\> Get-DiskSpace -DriveLetter d: - Get the drive statistic of drive D:. - AvailableFreeSpacePercent : 75.73% -AvailableFreeSpaceUnitSize : 361.07 GB -ClusterSize : 4096 -DriveName : d:\ -TotalSizeUnitSize : 476.81 GB -UsedSpacePercent : 24.27% -UsedSpaceUnitSize : 115.74 GB -FreeBytesAvailable : 387699257344 -TotalNumberOfBytes : 511974567936 -TotalNumberOfFreeBytes : 387699257344 -BytesPerSector : 512 -NumberOfFreeClusters : 94653139 -SectorsPerCluster : 8 -TotalNumberOfClusters : 124993791 - - - - - false - - - Get-Item2 - - Gets files and folders. - The Get-Item2 cmdlet gets the item at the specified location. It does not get the contents of the item at the location. - -Get-ChildItem2 does not have a 248 character limit on the path. It does not use the FileSystem provider but AlphaFS (https://github.com/alphaleonis/AlphaFS/) which is faster. - -The Get-Item cmdlet works only on the file system and gets files and folders. - - You can also refer to Get-Item2 by its built-in alias gi2. - System.String[] - - You can pipe a file system path (in quotation marks) to Get-ChildItem2. - Alphaleonis.Win32.Filesystem.DirectoryInfo, Alphaleonis.Win32.Filesystem.FileInfo, System.String - - - - - - - - Get-Item2 [[-Path] <String[]>] [-InformationAction <ActionPreference>] [-InformationVariable <String>] - - - - Path - - System.Management.Automation.ParameterAttribute - System.Management.Automation.ValidateNotNullOrEmptyAttribute - System.Management.Automation.AliasAttribute - - - FullName - - Specifies a path to one or more locations. Wildcards are NOT permitted. The default location is the current directory (.). - - - - InformationAction - - System.Management.Automation.AliasAttribute - System.Management.Automation.ParameterAttribute - - - infa - - - - - - InformationVariable - - System.Management.Automation.ParameterAttribute - System.Management.Automation.Internal.CommonParameters+ValidateVariableName - System.Management.Automation.AliasAttribute - - - iv - - - - - - - - Example 1 - PS C:\> Get-Item2 - Gets the current folder. - Directory: - - -Mode Inherits LastWriteTime Size(M) Name ----- -------- ------------- ------- ---- -d--hs True 8/4/2015 11:00 PM <DIR> C:\ - - - Example 2 - PS C:\> Get-Item2 -Path C:\Windows - Gets the Windows folder. - Directory: C:\ - - -Mode Inherits LastWriteTime Size(M) Name ----- -------- ------------- ------- ---- -d---- True 8/4/2015 10:18 PM <DIR> Windows - - - - - false - - - Get-NTFSAccess - - - - - - - - - - - - - - - - - Get-NTFSAccess [[-Path] <String[]>] [-Account <IdentityReference2>] [-ExcludeExplicit] [-ExcludeInherited] [-InformationAction <ActionPreference>] [-InformationVariable <String>] - Get-NTFSAccess [-SecurityDescriptor] <FileSystemSecurity2[]> [-Account <IdentityReference2>] [-ExcludeExplicit] [-ExcludeInherited] [-InformationAction <ActionPreference>] [-InformationVariable <String>] - - - - Path - - System.Management.Automation.ParameterAttribute - System.Management.Automation.ValidateNotNullOrEmptyAttribute - System.Management.Automation.AliasAttribute - - - FullName - - - - - - Account - - System.Management.Automation.ParameterAttribute - System.Management.Automation.AliasAttribute - System.Management.Automation.ValidateNotNullOrEmptyAttribute - - - IdentityReference, ID - - - - - - ExcludeExplicit - - System.Management.Automation.ParameterAttribute - - - - - - - ExcludeInherited - - System.Management.Automation.ParameterAttribute - - - - - - - InformationAction - - System.Management.Automation.AliasAttribute - System.Management.Automation.ParameterAttribute - - - infa - - - - - - InformationVariable - - System.Management.Automation.ParameterAttribute - System.Management.Automation.Internal.CommonParameters+ValidateVariableName - System.Management.Automation.AliasAttribute - - - iv - - - - - - SecurityDescriptor - - System.Management.Automation.ParameterAttribute - System.Management.Automation.ValidateNotNullOrEmptyAttribute - - - - - - - - - - false - - - Get-NTFSAudit - - - - - - - - - - - - - - - - Get-NTFSAudit [-Account <IdentityReference2>] [-ExcludeExplicit] [-ExcludeInherited] [-InformationAction <ActionPreference>] [-InformationVariable <String>] - - - - Account - - System.Management.Automation.ParameterAttribute - System.Management.Automation.AliasAttribute - System.Management.Automation.ValidateNotNullOrEmptyAttribute - - - IdentityReference, ID - - - - - - ExcludeExplicit - - System.Management.Automation.ParameterAttribute - - - - - - - ExcludeInherited - - System.Management.Automation.ParameterAttribute - - - - - - - InformationAction - - System.Management.Automation.AliasAttribute - System.Management.Automation.ParameterAttribute - - - infa - - - - - - InformationVariable - - System.Management.Automation.ParameterAttribute - System.Management.Automation.Internal.CommonParameters+ValidateVariableName - System.Management.Automation.AliasAttribute - - - iv - - - - - - - - - false - - - Get-NTFSEffectiveAccess - - - - - - - - - - - - - - - - - Get-NTFSEffectiveAccess [[-Path] <String[]>] [[-Account] <IdentityReference2>] [-ServerName <String>] [-ExcludeNoneAccessEntries] [-InformationAction <ActionPreference>] [-InformationVariable <String>] - Get-NTFSEffectiveAccess [-SecurityDescriptor] <FileSystemSecurity2[]> [[-Account] <IdentityReference2>] [-ServerName <String>] [-ExcludeNoneAccessEntries] [-InformationAction <ActionPreference>] [-InformationVariable <String>] - - - - Path - - System.Management.Automation.ParameterAttribute - System.Management.Automation.ValidateNotNullOrEmptyAttribute - System.Management.Automation.AliasAttribute - - - FullName - - - - - - Account - - System.Management.Automation.ParameterAttribute - System.Management.Automation.AliasAttribute - System.Management.Automation.ValidateNotNullOrEmptyAttribute - - - NTAccount - IdentityReference - - - - - - ServerName - - System.Management.Automation.ParameterAttribute - - - - - - - ExcludeNoneAccessEntries - - System.Management.Automation.ParameterAttribute - - - - - - - InformationAction - - System.Management.Automation.AliasAttribute - System.Management.Automation.ParameterAttribute - - - infa - - - - - - InformationVariable - - System.Management.Automation.ParameterAttribute - System.Management.Automation.Internal.CommonParameters+ValidateVariableName - System.Management.Automation.AliasAttribute - - - iv - - - - - - SecurityDescriptor - - System.Management.Automation.ParameterAttribute - System.Management.Automation.ValidateNotNullOrEmptyAttribute - - - - - - - - - - false - - - Get-NTFSInheritance - - - - - - - - - - - - - - - - - Get-NTFSInheritance [[-Path] <String[]>] [-InformationAction <ActionPreference>] [-InformationVariable <String>] - Get-NTFSInheritance [-SecurityDescriptor] <FileSystemSecurity2[]> [-InformationAction <ActionPreference>] [-InformationVariable <String>] - - - - Path - - System.Management.Automation.ParameterAttribute - System.Management.Automation.ValidateNotNullOrEmptyAttribute - System.Management.Automation.AliasAttribute - - - FullName - - - - - - InformationAction - - System.Management.Automation.AliasAttribute - System.Management.Automation.ParameterAttribute - - - infa - - - - - - InformationVariable - - System.Management.Automation.ParameterAttribute - System.Management.Automation.Internal.CommonParameters+ValidateVariableName - System.Management.Automation.AliasAttribute - - - iv - - - - - - SecurityDescriptor - - System.Management.Automation.ParameterAttribute - System.Management.Automation.ValidateNotNullOrEmptyAttribute - - - - - - - - - - false - - - Get-NTFSOrphanedAccess - - - - - - - - - - - - - - - - - Get-NTFSOrphanedAccess [[-Path] <String[]>] [-Account <IdentityReference2>] [-ExcludeExplicit] [-ExcludeInherited] [-InformationAction <ActionPreference>] [-InformationVariable <String>] - Get-NTFSOrphanedAccess [-SecurityDescriptor] <FileSystemSecurity2[]> [-Account <IdentityReference2>] [-ExcludeExplicit] [-ExcludeInherited] [-InformationAction <ActionPreference>] [-InformationVariable <String>] - - - - Path - - System.Management.Automation.ParameterAttribute - System.Management.Automation.ValidateNotNullOrEmptyAttribute - System.Management.Automation.AliasAttribute - - - FullName - - - - - - Account - - System.Management.Automation.ParameterAttribute - System.Management.Automation.AliasAttribute - System.Management.Automation.ValidateNotNullOrEmptyAttribute - - - IdentityReference, ID - - - - - - ExcludeExplicit - - System.Management.Automation.ParameterAttribute - - - - - - - ExcludeInherited - - System.Management.Automation.ParameterAttribute - - - - - - - InformationAction - - System.Management.Automation.AliasAttribute - System.Management.Automation.ParameterAttribute - - - infa - - - - - - InformationVariable - - System.Management.Automation.ParameterAttribute - System.Management.Automation.Internal.CommonParameters+ValidateVariableName - System.Management.Automation.AliasAttribute - - - iv - - - - - - SecurityDescriptor - - System.Management.Automation.ParameterAttribute - System.Management.Automation.ValidateNotNullOrEmptyAttribute - - - - - - - - - - false - - - Get-NTFSOrphanedAudit - - - - - - - - - - - - - - - - Get-NTFSOrphanedAudit [-Account <IdentityReference2>] [-ExcludeExplicit] [-ExcludeInherited] [-InformationAction <ActionPreference>] [-InformationVariable <String>] - - - - Account - - System.Management.Automation.ParameterAttribute - System.Management.Automation.AliasAttribute - System.Management.Automation.ValidateNotNullOrEmptyAttribute - - - IdentityReference, ID - - - - - - ExcludeExplicit - - System.Management.Automation.ParameterAttribute - - - - - - - ExcludeInherited - - System.Management.Automation.ParameterAttribute - - - - - - - InformationAction - - System.Management.Automation.AliasAttribute - System.Management.Automation.ParameterAttribute - - - infa - - - - - - InformationVariable - - System.Management.Automation.ParameterAttribute - System.Management.Automation.Internal.CommonParameters+ValidateVariableName - System.Management.Automation.AliasAttribute - - - iv - - - - - - - - - false - - - Get-NTFSOwner - - - - - - - - - - - - - - - - - Get-NTFSOwner [[-Path] <String[]>] [-InformationAction <ActionPreference>] [-InformationVariable <String>] - Get-NTFSOwner [-SecurityDescriptor] <FileSystemSecurity2[]> [-InformationAction <ActionPreference>] [-InformationVariable <String>] - - - - Path - - System.Management.Automation.ParameterAttribute - System.Management.Automation.ValidateNotNullOrEmptyAttribute - System.Management.Automation.AliasAttribute - - - FullName - - - - - - InformationAction - - System.Management.Automation.AliasAttribute - System.Management.Automation.ParameterAttribute - - - infa - - - - - - InformationVariable - - System.Management.Automation.ParameterAttribute - System.Management.Automation.Internal.CommonParameters+ValidateVariableName - System.Management.Automation.AliasAttribute - - - iv - - - - - - SecurityDescriptor - - System.Management.Automation.ParameterAttribute - System.Management.Automation.ValidateNotNullOrEmptyAttribute - - - - - - - - - - false - - - Get-NTFSSecurityDescriptor - - - - - - - - - - - - - - - - Get-NTFSSecurityDescriptor [[-Path] <String[]>] [-InformationAction <ActionPreference>] [-InformationVariable <String>] - - - - Path - - System.Management.Automation.ParameterAttribute - System.Management.Automation.ValidateNotNullOrEmptyAttribute - System.Management.Automation.AliasAttribute - - - FullName - - - - - - InformationAction - - System.Management.Automation.AliasAttribute - System.Management.Automation.ParameterAttribute - - - infa - - - - - - InformationVariable - - System.Management.Automation.ParameterAttribute - System.Management.Automation.Internal.CommonParameters+ValidateVariableName - System.Management.Automation.AliasAttribute - - - iv - - - - - - - - - false - - - Get-Privileges - - - - - - - - - - - - - - - - Get-Privileges [-InformationAction <ActionPreference>] [-InformationVariable <String>] - - - - InformationAction - - System.Management.Automation.AliasAttribute - System.Management.Automation.ParameterAttribute - - - infa - - - - - - InformationVariable - - System.Management.Automation.ParameterAttribute - System.Management.Automation.Internal.CommonParameters+ValidateVariableName - System.Management.Automation.AliasAttribute - - - iv - - - - - - - - - false - - - Get-SimpleAccess - - - - - - - - - - - - - - - - - Get-SimpleAccess [-IncludeRootFolder] [[-Path] <String[]>] [-Account <IdentityReference2>] [-ExcludeExplicit] [-ExcludeInherited] [-InformationAction <ActionPreference>] [-InformationVariable <String>] - Get-SimpleAccess [-IncludeRootFolder] [-SecurityDescriptor] <FileSystemSecurity2[]> [-Account <IdentityReference2>] [-ExcludeExplicit] [-ExcludeInherited] [-InformationAction <ActionPreference>] [-InformationVariable <String>] - - - - IncludeRootFolder - - System.Management.Automation.ParameterAttribute - - - - - - - Path - - System.Management.Automation.ParameterAttribute - System.Management.Automation.ValidateNotNullOrEmptyAttribute - System.Management.Automation.AliasAttribute - - - FullName - - - - - - Account - - System.Management.Automation.ParameterAttribute - System.Management.Automation.AliasAttribute - System.Management.Automation.ValidateNotNullOrEmptyAttribute - - - IdentityReference, ID - - - - - - ExcludeExplicit - - System.Management.Automation.ParameterAttribute - - - - - - - ExcludeInherited - - System.Management.Automation.ParameterAttribute - - - - - - - InformationAction - - System.Management.Automation.AliasAttribute - System.Management.Automation.ParameterAttribute - - - infa - - - - - - InformationVariable - - System.Management.Automation.ParameterAttribute - System.Management.Automation.Internal.CommonParameters+ValidateVariableName - System.Management.Automation.AliasAttribute - - - iv - - - - - - SecurityDescriptor - - System.Management.Automation.ParameterAttribute - System.Management.Automation.ValidateNotNullOrEmptyAttribute - - - - - - - - - - false - - - Remove-Item2 - - - - - - - - - - - - - - - - Remove-Item2 [[-Path] <String[]>] [-Force] [-Recurse] [-InformationAction <ActionPreference>] [-InformationVariable <String>] - - - - Path - - System.Management.Automation.ParameterAttribute - System.Management.Automation.ValidateNotNullOrEmptyAttribute - System.Management.Automation.AliasAttribute - - - FullName - - - - - - Force - - System.Management.Automation.ParameterAttribute - - - - - - - Recurse - - System.Management.Automation.ParameterAttribute - - - - - - - InformationAction - - System.Management.Automation.AliasAttribute - System.Management.Automation.ParameterAttribute - - - infa - - - - - - InformationVariable - - System.Management.Automation.ParameterAttribute - System.Management.Automation.Internal.CommonParameters+ValidateVariableName - System.Management.Automation.AliasAttribute - - - iv - - - - - - - - - false - - - Remove-NTFSAccess - - - - - - - - - - - - - - - - - - - Remove-NTFSAccess [-Path] <String[]> [-Account] <IdentityReference2[]> [-AccessRights] <FileSystemRights2> [-AccessType <AccessControlType>] [-InheritanceFlags <InheritanceFlags>] [-PropagationFlags <PropagationFlags>] [-PassThru] [-InformationAction <ActionPreference>] [-InformationVariable <String>] - Remove-NTFSAccess [-Path] <String[]> [-Account] <IdentityReference2[]> [-AccessRights] <FileSystemRights2> [-AccessType <AccessControlType>] [-AppliesTo <ApplyTo>] [-PassThru] [-InformationAction <ActionPreference>] [-InformationVariable <String>] - Remove-NTFSAccess [-SecurityDescriptor] <FileSystemSecurity2[]> [-Account] <IdentityReference2[]> [-AccessRights] <FileSystemRights2> [-AccessType <AccessControlType>] [-AppliesTo <ApplyTo>] [-PassThru] [-InformationAction <ActionPreference>] [-InformationVariable <String>] - Remove-NTFSAccess [-SecurityDescriptor] <FileSystemSecurity2[]> [-Account] <IdentityReference2[]> [-AccessRights] <FileSystemRights2> [-AccessType <AccessControlType>] [-InheritanceFlags <InheritanceFlags>] [-PropagationFlags <PropagationFlags>] [-PassThru] [-InformationAction <ActionPreference>] [-InformationVariable <String>] - - - - Path - - System.Management.Automation.ParameterAttribute - System.Management.Automation.ParameterAttribute - System.Management.Automation.ValidateNotNullOrEmptyAttribute - System.Management.Automation.AliasAttribute - - - FullName - - - - - - Account - - System.Management.Automation.ParameterAttribute - System.Management.Automation.AliasAttribute - - - IdentityReference, ID - - - - - - AccessRights - - System.Management.Automation.ParameterAttribute - System.Management.Automation.AliasAttribute - - - FileSystemRights - - - - - - AccessType - - System.Management.Automation.ParameterAttribute - System.Management.Automation.AliasAttribute - - - AccessControlType - - - - - - InheritanceFlags - - System.Management.Automation.ParameterAttribute - System.Management.Automation.ParameterAttribute - - - - - - - PropagationFlags - - System.Management.Automation.ParameterAttribute - System.Management.Automation.ParameterAttribute - - - - - - - PassThru - - System.Management.Automation.ParameterAttribute - - - - - - - InformationAction - - System.Management.Automation.AliasAttribute - System.Management.Automation.ParameterAttribute - - - infa - - - - - - InformationVariable - - System.Management.Automation.ParameterAttribute - System.Management.Automation.Internal.CommonParameters+ValidateVariableName - System.Management.Automation.AliasAttribute - - - iv - - - - - - AppliesTo - - System.Management.Automation.ParameterAttribute - System.Management.Automation.ParameterAttribute - - - - - - - SecurityDescriptor - - System.Management.Automation.ParameterAttribute - System.Management.Automation.ParameterAttribute - System.Management.Automation.ValidateNotNullOrEmptyAttribute - - - - - - - - - - false - - - Remove-NTFSAudit - - - - - - - - - - - - - - - - - Remove-NTFSAudit [-Account] <IdentityReference2> [-AccessRights] <FileSystemRights2> [-Type <AuditFlags>] [-InheritanceFlags <InheritanceFlags>] [-PropagationFlags <PropagationFlags>] [-PassThru] [-InformationAction <ActionPreference>] [-InformationVariable <String>] - Remove-NTFSAudit [-Account] <IdentityReference2> [-AccessRights] <FileSystemRights2> [-Type <AuditFlags>] [-AppliesTo <ApplyTo>] [-PassThru] [-InformationAction <ActionPreference>] [-InformationVariable <String>] - - - - Account - - System.Management.Automation.ParameterAttribute - System.Management.Automation.AliasAttribute - - - IdentityReference, ID - - - - - - AccessRights - - System.Management.Automation.ParameterAttribute - System.Management.Automation.AliasAttribute - - - FileSystemRights - - - - - - Type - - System.Management.Automation.ParameterAttribute - System.Management.Automation.AliasAttribute - - - AuditFlags - - - - - - InheritanceFlags - - System.Management.Automation.ParameterAttribute - - - - - - - PropagationFlags - - System.Management.Automation.ParameterAttribute - - - - - - - PassThru - - System.Management.Automation.ParameterAttribute - - - - - - - InformationAction - - System.Management.Automation.AliasAttribute - System.Management.Automation.ParameterAttribute - - - infa - - - - - - InformationVariable - - System.Management.Automation.ParameterAttribute - System.Management.Automation.Internal.CommonParameters+ValidateVariableName - System.Management.Automation.AliasAttribute - - - iv - - - - - - AppliesTo - - System.Management.Automation.ParameterAttribute - - - - - - - - - - false - - - Set-NTFSOwner - - - - - - - - - - - - - - - - - Set-NTFSOwner [[-Path] <String[]>] [-Account] <IdentityReference2> [-PassThru] [-InformationAction <ActionPreference>] [-InformationVariable <String>] - Set-NTFSOwner [-SecurityDescriptor] <FileSystemSecurity2[]> [-Account] <IdentityReference2> [-PassThru] [-InformationAction <ActionPreference>] [-InformationVariable <String>] - - - - Path - - System.Management.Automation.ParameterAttribute - System.Management.Automation.ValidateNotNullOrEmptyAttribute - System.Management.Automation.AliasAttribute - - - FullName - - - - - - Account - - System.Management.Automation.ParameterAttribute - - - - - - - PassThru - - System.Management.Automation.ParameterAttribute - - - - - - - InformationAction - - System.Management.Automation.AliasAttribute - System.Management.Automation.ParameterAttribute - - - infa - - - - - - InformationVariable - - System.Management.Automation.ParameterAttribute - System.Management.Automation.Internal.CommonParameters+ValidateVariableName - System.Management.Automation.AliasAttribute - - - iv - - - - - - SecurityDescriptor - - System.Management.Automation.ParameterAttribute - System.Management.Automation.ValidateNotNullOrEmptyAttribute - - - - - - - - - - false - - - Set-NTFSSecurityDescriptor - - - - - - - - - - - - - - - - Set-NTFSSecurityDescriptor [-SecurityDescriptor] <FileSystemSecurity2[]> [-PassThru] [-InformationAction <ActionPreference>] [-InformationVariable <String>] - - - - SecurityDescriptor - - System.Management.Automation.ParameterAttribute - - - - - - - PassThru - - System.Management.Automation.ParameterAttribute - - - - - - - InformationAction - - System.Management.Automation.AliasAttribute - System.Management.Automation.ParameterAttribute - - - infa - - - - - - InformationVariable - - System.Management.Automation.ParameterAttribute - System.Management.Automation.Internal.CommonParameters+ValidateVariableName - System.Management.Automation.AliasAttribute - - - iv - - - - - - - - - false - - - Show-SimpleAccess - - - - - - - - - - - - - - - - - Show-SimpleAccess [-IncludeRootFolder] [[-Path] <String[]>] [-Account <IdentityReference2>] [-ExcludeExplicit] [-ExcludeInherited] [-InformationAction <ActionPreference>] [-InformationVariable <String>] - Show-SimpleAccess [-IncludeRootFolder] [-SecurityDescriptor] <FileSystemSecurity2[]> [-Account <IdentityReference2>] [-ExcludeExplicit] [-ExcludeInherited] [-InformationAction <ActionPreference>] [-InformationVariable <String>] - - - - IncludeRootFolder - - System.Management.Automation.ParameterAttribute - - - - - - - Path - - System.Management.Automation.ParameterAttribute - System.Management.Automation.ValidateNotNullOrEmptyAttribute - System.Management.Automation.AliasAttribute - - - FullName - - - - - - Account - - System.Management.Automation.ParameterAttribute - System.Management.Automation.AliasAttribute - System.Management.Automation.ValidateNotNullOrEmptyAttribute - - - IdentityReference, ID - - - - - - ExcludeExplicit - - System.Management.Automation.ParameterAttribute - - - - - - - ExcludeInherited - - System.Management.Automation.ParameterAttribute - - - - - - - InformationAction - - System.Management.Automation.AliasAttribute - System.Management.Automation.ParameterAttribute - - - infa - - - - - - InformationVariable - - System.Management.Automation.ParameterAttribute - System.Management.Automation.Internal.CommonParameters+ValidateVariableName - System.Management.Automation.AliasAttribute - - - iv - - - - - - SecurityDescriptor - - System.Management.Automation.ParameterAttribute - System.Management.Automation.ValidateNotNullOrEmptyAttribute - - - - - - - - - - false - - - \ No newline at end of file diff --git a/NTFSSecurity/InheritanceCmdlets/DisableAccessInheritance.cs b/NTFSSecurity/InheritanceCmdlets/DisableAccessInheritance.cs deleted file mode 100644 index a849da2..0000000 --- a/NTFSSecurity/InheritanceCmdlets/DisableAccessInheritance.cs +++ /dev/null @@ -1,128 +0,0 @@ -using Alphaleonis.Win32.Filesystem; -using Security2; -using System; -using System.Management.Automation; - -namespace NTFSSecurity -{ - [Cmdlet(VerbsLifecycle.Disable, "NTFSAccessInheritance", DefaultParameterSetName = "Path")] - public class DisableAccessInheritance : BaseCmdletWithPrivControl - { - private bool removeInheritedAccessRules; - private bool passThru; - - [Parameter(Position = 1, ValueFromPipeline = true, ValueFromPipelineByPropertyName = true, ParameterSetName = "Path")] - [ValidateNotNullOrEmpty] - [Alias("FullName")] - public string[] Path - { - get { return paths.ToArray(); } - set - { - paths.Clear(); - paths.AddRange(value); - } - } - - [Parameter(Mandatory = true, Position = 1, ValueFromPipeline = true, ValueFromPipelineByPropertyName = true, ParameterSetName = "SecurityDescriptor")] - [ValidateNotNullOrEmpty] - public FileSystemSecurity2[] SecurityDescriptor - { - get { return securityDescriptors.ToArray(); } - set - { - securityDescriptors.Clear(); - securityDescriptors.AddRange(value); - } - } - - [Parameter] - public SwitchParameter RemoveInheritedAccessRules - { - get { return removeInheritedAccessRules; } - set { removeInheritedAccessRules = value; } - } - - [Parameter] - public SwitchParameter PassThru - { - get { return passThru; } - set { passThru = value; } - } - - protected override void BeginProcessing() - { - base.BeginProcessing(); - EnableFileSystemPrivileges(true); - } - - protected override void ProcessRecord() - { - if (ParameterSetName == "Path") - { - foreach (var path in paths) - { - FileSystemInfo item = null; - - try - { - item = GetFileSystemInfo2(path); - } - catch (Exception ex) - { - WriteError(new ErrorRecord(ex, "ReadFileError", ErrorCategory.OpenError, path)); - continue; - } - - try - { - FileSystemInheritanceInfo.DisableAccessInheritance(item, removeInheritedAccessRules); - } - catch (UnauthorizedAccessException) - { - try - { - var ownerInfo = FileSystemOwner.GetOwner(item); - var previousOwner = ownerInfo.Owner; - - FileSystemOwner.SetOwner(item, System.Security.Principal.WindowsIdentity.GetCurrent().User); - - FileSystemInheritanceInfo.DisableAccessInheritance(item, removeInheritedAccessRules); - - FileSystemOwner.SetOwner(item, previousOwner); - } - catch (Exception ex2) - { - WriteError(new ErrorRecord(ex2, "ModifySdError", ErrorCategory.WriteError, path)); - continue; - } - } - catch (Exception ex) - { - WriteError(new ErrorRecord(ex, "ModifySdError", ErrorCategory.WriteError, path)); - continue; - } - finally - { - if (passThru) - { - FileSystemInheritanceInfo.GetFileSystemInheritanceInfo(item); - } - } - } - } - else - { - foreach (var sd in securityDescriptors) - { - FileSystemInheritanceInfo.DisableAccessInheritance(sd, removeInheritedAccessRules); - - if (passThru) - { - FileSystemInheritanceInfo.GetFileSystemInheritanceInfo(sd); - } - } - } - } - } -} \ No newline at end of file diff --git a/NTFSSecurity/InheritanceCmdlets/DisableAuditInheritance.cs b/NTFSSecurity/InheritanceCmdlets/DisableAuditInheritance.cs deleted file mode 100644 index 00f7ca1..0000000 --- a/NTFSSecurity/InheritanceCmdlets/DisableAuditInheritance.cs +++ /dev/null @@ -1,129 +0,0 @@ -using Alphaleonis.Win32.Filesystem; -using Security2; -using System; -using System.Management.Automation; - -namespace NTFSSecurity -{ - - [Cmdlet(VerbsLifecycle.Disable, "NTFSAuditInheritance", DefaultParameterSetName = "Path")] - public class DisableAuditInheritance : BaseCmdletWithPrivControl - { - private bool removeInheritedAccessRules; - private bool passThru; - - [Parameter(Position = 1, ValueFromPipeline = true, ValueFromPipelineByPropertyName = true, ParameterSetName = "Path")] - [ValidateNotNullOrEmpty] - [Alias("FullName")] - public string[] Path - { - get { return paths.ToArray(); } - set - { - paths.Clear(); - paths.AddRange(value); - } - } - - [Parameter(Mandatory = true, Position = 1, ValueFromPipeline = true, ValueFromPipelineByPropertyName = true, ParameterSetName = "SecurityDescriptor")] - [ValidateNotNullOrEmpty] - public FileSystemSecurity2[] SecurityDescriptor - { - get { return securityDescriptors.ToArray(); } - set - { - securityDescriptors.Clear(); - securityDescriptors.AddRange(value); - } - } - - [Parameter] - public SwitchParameter RemoveInheritedAccessRules - { - get { return removeInheritedAccessRules; } - set { removeInheritedAccessRules = value; } - } - - [Parameter] - public SwitchParameter PassThru - { - get { return passThru; } - set { passThru = value; } - } - - protected override void BeginProcessing() - { - base.BeginProcessing(); - EnableFileSystemPrivileges(true); - } - - protected override void ProcessRecord() - { - if (ParameterSetName == "Path") - { - foreach (var path in paths) - { - FileSystemInfo item = null; - - try - { - item = GetFileSystemInfo2(path); - } - catch (Exception ex) - { - WriteError(new ErrorRecord(ex, "ReadFileError", ErrorCategory.OpenError, path)); - continue; - } - - try - { - FileSystemInheritanceInfo.DisableAuditInheritance(item, removeInheritedAccessRules); - } - catch (UnauthorizedAccessException) - { - try - { - var ownerInfo = FileSystemOwner.GetOwner(item); - var previousOwner = ownerInfo.Owner; - - FileSystemOwner.SetOwner(item, System.Security.Principal.WindowsIdentity.GetCurrent().User); - - FileSystemInheritanceInfo.DisableAuditInheritance(item, removeInheritedAccessRules); - - FileSystemOwner.SetOwner(item, previousOwner); - } - catch (Exception ex2) - { - WriteError(new ErrorRecord(ex2, "ModifySdError", ErrorCategory.WriteError, path)); - continue; - } - } - catch (Exception ex) - { - WriteError(new ErrorRecord(ex, "ModifySdError", ErrorCategory.WriteError, path)); - continue; - } - finally - { - if (passThru) - { - FileSystemInheritanceInfo.GetFileSystemInheritanceInfo(item); - } - } - } - } - else - { - foreach (var sd in securityDescriptors) - { - FileSystemInheritanceInfo.DisableAuditInheritance(sd, removeInheritedAccessRules); - - if (passThru) - { - FileSystemInheritanceInfo.GetFileSystemInheritanceInfo(sd); - } - } - } - } - } -} \ No newline at end of file diff --git a/NTFSSecurity/InheritanceCmdlets/EnableAccessInheritance.cs b/NTFSSecurity/InheritanceCmdlets/EnableAccessInheritance.cs deleted file mode 100644 index fd5a5bb..0000000 --- a/NTFSSecurity/InheritanceCmdlets/EnableAccessInheritance.cs +++ /dev/null @@ -1,128 +0,0 @@ -using Alphaleonis.Win32.Filesystem; -using Security2; -using System; -using System.Management.Automation; - -namespace NTFSSecurity -{ - [Cmdlet(VerbsLifecycle.Enable, "NTFSAccessInheritance", DefaultParameterSetName = "Path")] - public class EnableAccessInheritance : BaseCmdletWithPrivControl - { - private bool removeExplicitAccessRules; - private bool passThru; - - [Parameter(Position = 1, ValueFromPipeline = true, ValueFromPipelineByPropertyName = true, ParameterSetName = "Path")] - [ValidateNotNullOrEmpty] - [Alias("FullName")] - public string[] Path - { - get { return paths.ToArray(); } - set - { - paths.Clear(); - paths.AddRange(value); - } - } - - [Parameter(Mandatory = true, Position = 1, ValueFromPipeline = true, ValueFromPipelineByPropertyName = true, ParameterSetName = "SecurityDescriptor")] - [ValidateNotNullOrEmpty] - public FileSystemSecurity2[] SecurityDescriptor - { - get { return securityDescriptors.ToArray(); } - set - { - securityDescriptors.Clear(); - securityDescriptors.AddRange(value); - } - } - - [Parameter] - public SwitchParameter PassThru - { - get { return passThru; } - set { passThru = value; } - } - - [Parameter] - public SwitchParameter RemoveExplicitAccessRules - { - get { return removeExplicitAccessRules; } - set { removeExplicitAccessRules = value; } - } - - protected override void BeginProcessing() - { - base.BeginProcessing(); - EnableFileSystemPrivileges(true); - } - - protected override void ProcessRecord() - { - if (ParameterSetName == "Path") - { - foreach (var path in paths) - { - FileSystemInfo item = null; - - try - { - item = GetFileSystemInfo2(path); - } - catch (Exception ex) - { - WriteError(new ErrorRecord(ex, "ReadFileError", ErrorCategory.OpenError, path)); - continue; - } - - try - { - FileSystemInheritanceInfo.EnableAccessInheritance(item, removeExplicitAccessRules); - } - catch (UnauthorizedAccessException) - { - try - { - var ownerInfo = FileSystemOwner.GetOwner(item); - var previousOwner = ownerInfo.Owner; - - FileSystemOwner.SetOwner(item, System.Security.Principal.WindowsIdentity.GetCurrent().User); - - FileSystemInheritanceInfo.EnableAccessInheritance(item, removeExplicitAccessRules); - - FileSystemOwner.SetOwner(item, previousOwner); - } - catch (Exception ex2) - { - WriteError(new ErrorRecord(ex2, "ModifySdError", ErrorCategory.WriteError, path)); - continue; - } - } - catch (Exception ex) - { - WriteError(new ErrorRecord(ex, "ModifySdError", ErrorCategory.WriteError, path)); - continue; - } - finally - { - if (passThru) - { - FileSystemInheritanceInfo.GetFileSystemInheritanceInfo(item); - } - } - } - } - else - { - foreach (var sd in securityDescriptors) - { - FileSystemInheritanceInfo.EnableAccessInheritance(sd, removeExplicitAccessRules); - - if (passThru) - { - FileSystemInheritanceInfo.GetFileSystemInheritanceInfo(sd); - } - } - } - } - } -} \ No newline at end of file diff --git a/NTFSSecurity/InheritanceCmdlets/EnableAuditInheritance.cs b/NTFSSecurity/InheritanceCmdlets/EnableAuditInheritance.cs deleted file mode 100644 index 98ab691..0000000 --- a/NTFSSecurity/InheritanceCmdlets/EnableAuditInheritance.cs +++ /dev/null @@ -1,128 +0,0 @@ -using Alphaleonis.Win32.Filesystem; -using Security2; -using System; -using System.Management.Automation; - -namespace NTFSSecurity -{ - [Cmdlet(VerbsLifecycle.Enable, "NTFSAuditInheritance", DefaultParameterSetName = "Path")] - public class EnableAuditInheritance : BaseCmdletWithPrivControl - { - private bool removeExplicitAccessRules; - private bool passThru; - - [Parameter(Position = 1, ValueFromPipeline = true, ValueFromPipelineByPropertyName = true, ParameterSetName = "Path")] - [ValidateNotNullOrEmpty] - [Alias("FullName")] - public string[] Path - { - get { return paths.ToArray(); } - set - { - paths.Clear(); - paths.AddRange(value); - } - } - - [Parameter(Mandatory = true, Position = 1, ValueFromPipeline = true, ValueFromPipelineByPropertyName = true, ParameterSetName = "SecurityDescriptor")] - [ValidateNotNullOrEmpty] - public FileSystemSecurity2[] SecurityDescriptor - { - get { return securityDescriptors.ToArray(); } - set - { - securityDescriptors.Clear(); - securityDescriptors.AddRange(value); - } - } - - [Parameter] - public SwitchParameter PassThru - { - get { return passThru; } - set { passThru = value; } - } - - [Parameter] - public SwitchParameter RemoveExplicitAccessRules - { - get { return removeExplicitAccessRules; } - set { removeExplicitAccessRules = value; } - } - - protected override void BeginProcessing() - { - base.BeginProcessing(); - EnableFileSystemPrivileges(true); - } - - protected override void ProcessRecord() - { - if (ParameterSetName == "Path") - { - foreach (var path in paths) - { - FileSystemInfo item = null; - - try - { - item = GetFileSystemInfo2(path); - } - catch (Exception ex) - { - WriteError(new ErrorRecord(ex, "ReadFileError", ErrorCategory.OpenError, path)); - continue; - } - - try - { - FileSystemInheritanceInfo.EnableAuditInheritance(item, removeExplicitAccessRules); - } - catch (UnauthorizedAccessException) - { - try - { - var ownerInfo = FileSystemOwner.GetOwner(item); - var previousOwner = ownerInfo.Owner; - - FileSystemOwner.SetOwner(item, System.Security.Principal.WindowsIdentity.GetCurrent().User); - - FileSystemInheritanceInfo.EnableAuditInheritance(item, removeExplicitAccessRules); - - FileSystemOwner.SetOwner(item, previousOwner); - } - catch (Exception ex2) - { - WriteError(new ErrorRecord(ex2, "ModifySdError", ErrorCategory.WriteError, path)); - continue; - } - } - catch (Exception ex) - { - WriteError(new ErrorRecord(ex, "ModifySdError", ErrorCategory.WriteError, path)); - continue; - } - finally - { - if (passThru) - { - FileSystemInheritanceInfo.GetFileSystemInheritanceInfo(item); - } - } - } - } - else - { - foreach (var sd in securityDescriptors) - { - FileSystemInheritanceInfo.EnableAuditInheritance(sd, removeExplicitAccessRules); - - if (passThru) - { - FileSystemInheritanceInfo.GetFileSystemInheritanceInfo(sd); - } - } - } - } - } -} \ No newline at end of file diff --git a/NTFSSecurity/InheritanceCmdlets/GetInheritance.cs b/NTFSSecurity/InheritanceCmdlets/GetInheritance.cs deleted file mode 100644 index 895bf79..0000000 --- a/NTFSSecurity/InheritanceCmdlets/GetInheritance.cs +++ /dev/null @@ -1,119 +0,0 @@ -using Alphaleonis.Win32.Filesystem; -using Security2; -using System; -using System.Collections.Generic; -using System.Management.Automation; - -namespace NTFSSecurity -{ - [Cmdlet(VerbsCommon.Get, "NTFSInheritance", DefaultParameterSetName = "Path")] - [OutputType(typeof(FileSystemInheritanceInfo))] - public class GetInheritance : BaseCmdletWithPrivControl - { - [Parameter(Position = 1, ValueFromPipeline = true, ValueFromPipelineByPropertyName = true, ParameterSetName = "Path")] - [ValidateNotNullOrEmpty] - [Alias("FullName")] - public string[] Path - { - get { return paths.ToArray(); } - set - { - paths.Clear(); - paths.AddRange(value); - } - } - - [Parameter(Mandatory = true, Position = 1, ValueFromPipeline = true, ValueFromPipelineByPropertyName = true, ParameterSetName = "SecurityDescriptor")] - [ValidateNotNullOrEmpty] - public FileSystemSecurity2[] SecurityDescriptor - { - get { return securityDescriptors.ToArray(); } - set - { - securityDescriptors.Clear(); - securityDescriptors.AddRange(value); - } - } - - protected override void BeginProcessing() - { - base.BeginProcessing(); - EnableFileSystemPrivileges(true); - - if (paths.Count == 0) - { - paths = new List() { GetVariableValue("PWD").ToString() }; - } - } - - protected override void ProcessRecord() - { - if (ParameterSetName == "Path") - { - foreach (var path in paths) - { - FileSystemInfo item = null; - FileSystemInheritanceInfo inheritanceInfo = null; - - try - { - item = GetFileSystemInfo2(path); - } - catch (Exception ex) - { - WriteError(new ErrorRecord(ex, "ReadFileError", ErrorCategory.OpenError, path)); - continue; - } - - try - { - inheritanceInfo = FileSystemInheritanceInfo.GetFileSystemInheritanceInfo(item); - } - catch (UnauthorizedAccessException) - { - try - { - var ownerInfo = FileSystemOwner.GetOwner(item); - var previousOwner = ownerInfo.Owner; - - FileSystemOwner.SetOwner(item, System.Security.Principal.WindowsIdentity.GetCurrent().User); - - inheritanceInfo = FileSystemInheritanceInfo.GetFileSystemInheritanceInfo(item); - - FileSystemOwner.SetOwner(item, previousOwner); - } - catch (Exception ex2) - { - WriteError(new ErrorRecord(ex2, "ReadSecurityError", ErrorCategory.WriteError, path)); - continue; - } - } - catch (Exception ex) - { - WriteError(new ErrorRecord(ex, "ReadSecurityError", ErrorCategory.OpenError, path)); - continue; - } - finally - { - if (inheritanceInfo != null) - { - WriteObject(inheritanceInfo); - } - } - } - } - else - { - foreach (var sd in securityDescriptors) - { - var inheritanceInfo = FileSystemInheritanceInfo.GetFileSystemInheritanceInfo(sd); - - if (inheritanceInfo != null) - { - WriteObject(inheritanceInfo); - } - } - } - } - } -} \ No newline at end of file diff --git a/NTFSSecurity/InheritanceCmdlets/SetInheritance.cs b/NTFSSecurity/InheritanceCmdlets/SetInheritance.cs deleted file mode 100644 index 109a2e2..0000000 --- a/NTFSSecurity/InheritanceCmdlets/SetInheritance.cs +++ /dev/null @@ -1,238 +0,0 @@ -using Alphaleonis.Win32.Filesystem; -using Security2; -using System; -using System.Management.Automation; - -namespace NTFSSecurity -{ - [Cmdlet(VerbsCommon.Set, "NTFSInheritance", DefaultParameterSetName = "Path")] - public class SetInheritance : BaseCmdletWithPrivControl - { - private bool? accessInheritanceEnabled; - private bool? auditInheritanceEnabled; - private bool passThru; - - [Parameter(Position = 1, ValueFromPipeline = true, ValueFromPipelineByPropertyName = true, ParameterSetName = "Path")] - [ValidateNotNullOrEmpty] - [Alias("FullName")] - public string[] Path - { - get { return paths.ToArray(); } - set - { - paths.Clear(); - paths.AddRange(value); - } - } - - [Parameter(Mandatory = true, Position = 1, ValueFromPipeline = true, ValueFromPipelineByPropertyName = true, ParameterSetName = "SecurityDescriptor")] - [ValidateNotNullOrEmpty] - public FileSystemSecurity2[] SecurityDescriptor - { - get { return securityDescriptors.ToArray(); } - set - { - securityDescriptors.Clear(); - securityDescriptors.AddRange(value); - } - } - - [Parameter(ValueFromPipelineByPropertyName = true)] - public bool? AccessInheritanceEnabled - { - get { return accessInheritanceEnabled; } - set { accessInheritanceEnabled = value; } - } - - [Parameter(ValueFromPipelineByPropertyName = true)] - public bool? AuditInheritanceEnabled - { - get { return auditInheritanceEnabled; } - set { auditInheritanceEnabled = value; } - } - - [Parameter] - public SwitchParameter PassThru - { - get { return passThru; } - set { passThru = value; } - } - - protected override void BeginProcessing() - { - base.BeginProcessing(); - EnableFileSystemPrivileges(true); - } - - protected override void ProcessRecord() - { - if (ParameterSetName == "Path") - { - foreach (var path in paths) - { - FileSystemInfo item = null; - - try - { - item = GetFileSystemInfo2(path); - } - catch (Exception ex) - { - WriteError(new ErrorRecord(ex, "ReadFileError", ErrorCategory.OpenError, path)); - continue; - } - - try - { - var currentState = FileSystemInheritanceInfo.GetFileSystemInheritanceInfo(item); - - if (currentState.AccessInheritanceEnabled != accessInheritanceEnabled) - { - WriteVerbose("AccessInheritanceEnabled not equal"); - if (accessInheritanceEnabled.Value) - { - WriteVerbose("Calling EnableAccessInheritance"); - FileSystemInheritanceInfo.EnableAccessInheritance(item, false); - } - else - { - WriteVerbose("Calling DisableAccessInheritance"); - FileSystemInheritanceInfo.DisableAccessInheritance(item, true); - } - } - else - WriteVerbose("AccessInheritanceEnabled is equal - no change was done"); - - if (currentState.AuditInheritanceEnabled != auditInheritanceEnabled) - { - WriteVerbose("AuditInheritanceEnabled not equal"); - if (auditInheritanceEnabled.Value) - { - WriteVerbose("Calling EnableAuditInheritance"); - FileSystemInheritanceInfo.EnableAuditInheritance(item, true); - } - else - { - WriteVerbose("Calling DisableAuditInheritance"); - FileSystemInheritanceInfo.DisableAuditInheritance(item, false); - } - } - else - WriteVerbose("AuditInheritanceEnabled is equal - no change was done"); - } - catch (UnauthorizedAccessException) - { - try - { - var ownerInfo = FileSystemOwner.GetOwner(item); - var previousOwner = ownerInfo.Owner; - - FileSystemOwner.SetOwner(item, System.Security.Principal.WindowsIdentity.GetCurrent().User); - - var currentState = FileSystemInheritanceInfo.GetFileSystemInheritanceInfo(item); - - if (currentState.AccessInheritanceEnabled != accessInheritanceEnabled) - { - WriteVerbose("AccessInheritanceEnabled not equal"); - if (accessInheritanceEnabled.Value) - { - WriteVerbose("Calling EnableAccessInheritance"); - FileSystemInheritanceInfo.EnableAccessInheritance(item, false); - } - else - { - WriteVerbose("Calling DisableAccessInheritance"); - FileSystemInheritanceInfo.DisableAccessInheritance(item, true); - } - } - else - WriteVerbose("AccessInheritanceEnabled is equal - no change was done"); - - if (currentState.AuditInheritanceEnabled != auditInheritanceEnabled) - { - WriteVerbose("AuditInheritanceEnabled not equal"); - if (auditInheritanceEnabled.Value) - { - WriteVerbose("Calling EnableAuditInheritance"); - FileSystemInheritanceInfo.EnableAuditInheritance(item, true); - } - else - { - WriteVerbose("Calling DisableAuditInheritance"); - FileSystemInheritanceInfo.DisableAuditInheritance(item, false); - } - } - else - WriteVerbose("AuditInheritanceEnabled is equal - no change was done"); - - FileSystemOwner.SetOwner(item, previousOwner); - } - catch (Exception ex2) - { - WriteError(new ErrorRecord(ex2, "ModifySdError", ErrorCategory.WriteError, path)); - continue; - } - } - catch (Exception ex) - { - WriteError(new ErrorRecord(ex, "ModifySdError", ErrorCategory.WriteError, path)); - continue; - } - finally - { - if (passThru) - { - WriteObject(FileSystemInheritanceInfo.GetFileSystemInheritanceInfo(item)); - } - } - } - } - else - { - foreach (var sd in securityDescriptors) - { - var currentState = FileSystemInheritanceInfo.GetFileSystemInheritanceInfo(sd); - - if (currentState.AccessInheritanceEnabled != accessInheritanceEnabled) - { - WriteVerbose("AccessInheritanceEnabled not equal"); - if (accessInheritanceEnabled.Value) - { - WriteVerbose("Calling EnableAccessInheritance"); - FileSystemInheritanceInfo.EnableAccessInheritance(sd, false); - } - else - { - WriteVerbose("Calling DisableAccessInheritance"); - FileSystemInheritanceInfo.DisableAccessInheritance(sd, true); - } - } - else - WriteVerbose("AccessInheritanceEnabled is equal - no change was done"); - - if (currentState.AuditInheritanceEnabled != auditInheritanceEnabled) - { - WriteVerbose("AuditInheritanceEnabled not equal"); - if (auditInheritanceEnabled.Value) - { - WriteVerbose("Calling EnableAuditInheritance"); - FileSystemInheritanceInfo.EnableAuditInheritance(sd, true); - } - else - { - WriteVerbose("Calling DisableAuditInheritance"); - FileSystemInheritanceInfo.DisableAuditInheritance(sd, false); - } - } - else - WriteVerbose("AuditInheritanceEnabled is equal - no change was done"); - - if (passThru) - { - WriteObject(FileSystemInheritanceInfo.GetFileSystemInheritanceInfo(sd)); - } - } - } - } - } -} \ No newline at end of file diff --git a/NTFSSecurity/ItemCmdlets/CopyItem2.cs b/NTFSSecurity/ItemCmdlets/CopyItem2.cs deleted file mode 100644 index 9f6bfe6..0000000 --- a/NTFSSecurity/ItemCmdlets/CopyItem2.cs +++ /dev/null @@ -1,132 +0,0 @@ -using Alphaleonis.Win32.Filesystem; -using System; -using System.Management.Automation; - -namespace NTFSSecurity -{ - [Cmdlet(VerbsCommon.Copy, "Item2", SupportsShouldProcess = true)] - public class CopyItem2 : BaseCmdlet - { - private string destination; - private SwitchParameter force; - private bool passThru; - - [Parameter(Position = 1, Mandatory = true, ValueFromPipeline = true, ValueFromPipelineByPropertyName = true)] - [ValidateNotNullOrEmpty] - [Alias("FullName")] - public string[] Path - { - get { return paths.ToArray(); } - set - { - paths.Clear(); - paths.AddRange(value); - } - } - - [Parameter(Position = 2, Mandatory = true, ValueFromPipelineByPropertyName = true)] - public string Destination - { - get { return destination; } - set { destination = value; } - } - - [Parameter] - public SwitchParameter Force - { - get { return force; } - set { force = value; } - } - - [Parameter] - public bool PassThru - { - get { return passThru; } - set { passThru = value; } - } - - protected override void BeginProcessing() - { - base.BeginProcessing(); - - destination = GetRelativePath(destination); - WriteVerbose(string.Format("Destination path is '{0}'", destination)); - } - - protected override void ProcessRecord() - { - foreach (var path in paths) - { - WriteVerbose(string.Format("Copying item '{0}'", path)); - - FileSystemInfo item = null; - var actualDestination = string.Empty; - - var resolvedPath = GetRelativePath(path); - - try - { - item = GetFileSystemInfo2(resolvedPath); - } - catch (System.IO.FileNotFoundException ex) - { - WriteError(new ErrorRecord(ex, "FileNotFound", ErrorCategory.ObjectNotFound, resolvedPath)); - return; - } - - //destination is a directory - if (Directory.Exists(destination)) - { - //hence adding the file name to the destination path - actualDestination = System.IO.Path.Combine(destination, System.IO.Path.GetFileName(resolvedPath)); - } - else - { - actualDestination = destination; - } - - if (File.Exists(actualDestination)) - { - WriteError(new ErrorRecord(new AlreadyExistsException(), "DestinationFileAlreadyExists", ErrorCategory.ResourceExists, actualDestination)); - return; - } - - try - { - if (item is FileInfo) - { - if (ShouldProcess(resolvedPath, "Copy File")) - { - ((FileInfo)item).CopyTo(actualDestination, force ? CopyOptions.None : CopyOptions.FailIfExists, PathFormat.RelativePath); - WriteVerbose(string.Format("File '{0}' copied to '{0}'", resolvedPath, destination)); - } - } - else - { - if (ShouldProcess(resolvedPath, "Copy Directory")) - { - ((DirectoryInfo)item).CopyTo(actualDestination, force ? CopyOptions.None : CopyOptions.FailIfExists, PathFormat.RelativePath); - WriteVerbose(string.Format("Directory '{0}' copied to '{0}'", resolvedPath, destination)); - } - } - - if (passThru) - WriteObject(item); - } - catch (System.IO.IOException ex) - { - WriteError(new ErrorRecord(ex, "CopyError", ErrorCategory.InvalidData, resolvedPath)); - } - catch (Exception ex) - { - WriteError(new ErrorRecord(ex, "CopyError", ErrorCategory.NotSpecified, resolvedPath)); - } - } - } - - protected override void EndProcessing() - { - base.EndProcessing(); - } - } -} \ No newline at end of file diff --git a/NTFSSecurity/ItemCmdlets/GetChildItem2.cs b/NTFSSecurity/ItemCmdlets/GetChildItem2.cs deleted file mode 100644 index 788c035..0000000 --- a/NTFSSecurity/ItemCmdlets/GetChildItem2.cs +++ /dev/null @@ -1,331 +0,0 @@ -using Alphaleonis.Win32.Filesystem; -using System; -using System.Collections; -using System.Collections.Generic; -using System.Management.Automation; -using System.Linq; - -namespace NTFSSecurity -{ - [Cmdlet(VerbsCommon.Get, "ChildItem2")] - [OutputType(typeof(FileInfo), typeof(DirectoryInfo))] - public class GetChildItem2 : BaseCmdlet - { - private string filter = "*"; - private SwitchParameter recurse; - private SwitchParameter directory; - private SwitchParameter file; - private System.IO.FileAttributes attributes; - private SwitchParameter hidden; - private SwitchParameter system; - private SwitchParameter readOnly; - private SwitchParameter force; - private SwitchParameter skipMountPoints; - private SwitchParameter skipSymbolicLinks; - private bool getFileSystemModeProperty = false; - private bool identifyHardLinks = false; - private int? depth; - - WildcardPattern wildcard = null; - - System.Reflection.MethodInfo modeMethodInfo = null; - - [Parameter(Position = 1, ValueFromPipeline = true, ValueFromPipelineByPropertyName = true)] - [ValidateNotNullOrEmpty] - [Alias("FullName")] - public string[] Path - { - get { return paths.ToArray(); } - set - { - paths.Clear(); - paths.AddRange(value); - } - } - - [Parameter(Position = 2)] - public string Filter - { - get { return filter; } - set { filter = value; } - } - - [Parameter] - public SwitchParameter Recurse - { - get { return recurse; } - set { recurse = value; } - } - - [Parameter] - public SwitchParameter Directory - { - get { return directory; } - set { directory = value; } - } - - [Parameter] - public SwitchParameter File - { - get { return file; } - set { file = value; } - } - - [Parameter] - public System.IO.FileAttributes Attributes - { - get { return attributes; } - set { attributes = value; ; } - } - - [Parameter()] - public SwitchParameter Hidden - { - get { return hidden; } - set { hidden = value; } - } - - [Parameter] - public SwitchParameter System - { - get { return system; } - set { system = value; } - } - - [Parameter] - public SwitchParameter ReadOnly - { - get { return readOnly; } - set { readOnly = value; } - } - - [Parameter] - public SwitchParameter Force - { - get { return force; } - set { force = value; } - } - - [Parameter] - public SwitchParameter SkipMountPoints - { - get { return skipMountPoints; } - set { skipMountPoints = value; } - } - - [Parameter] - public SwitchParameter SkipSymbolicLinks - { - get { return skipSymbolicLinks; } - set { skipSymbolicLinks = value; } - } - - [Parameter] - public int? Depth - { - get { return depth; } - set { depth = value; } - } - - protected override void BeginProcessing() - { - base.BeginProcessing(); - - if (paths.Count == 0) - { - paths = new List() { GetVariableValue("PWD").ToString() }; - } - - wildcard = new WildcardPattern(filter, WildcardOptions.Compiled | WildcardOptions.IgnoreCase); - - modeMethodInfo = typeof(FileSystemCodeMembers).GetMethod("Mode"); - - getFileSystemModeProperty = (bool)((Hashtable)MyInvocation.MyCommand.Module.PrivateData)["GetFileSystemModeProperty"]; - identifyHardLinks = (bool)((Hashtable)MyInvocation.MyCommand.Module.PrivateData)["IdentifyHardLinks"]; - } - - protected override void ProcessRecord() - { - foreach (var path in paths) - { - DirectoryInfo di = null; - - try - { - di = (DirectoryInfo)GetFileSystemInfo2(path); - - } - catch (System.IO.FileNotFoundException ex) - { - WriteError(new ErrorRecord(ex, "FileNotFound", ErrorCategory.ObjectNotFound, path)); - continue; - } - - try - { - WriteFileSystem(di, 0); - } - catch (PipelineStoppedException ex) - { - throw ex; - } - } - } - - private void WriteFileSystem(FileSystemInfo fsi, int currentDepth) - { - var di = fsi as DirectoryInfo; - try - { - if (di != null) - { - if (directory) - { - var files = di.EnumerateDirectories(filter, global::System.IO.SearchOption.TopDirectoryOnly); - WriteFileSystemInfoCollection(files.GetEnumerator()); - } - else if (file) - { - var files = di.EnumerateFiles(filter, global::System.IO.SearchOption.TopDirectoryOnly); - WriteFileSystemInfoCollection(files.GetEnumerator()); - } - else - { - var files = di.EnumerateFileSystemInfos(filter, global::System.IO.SearchOption.TopDirectoryOnly); - WriteFileSystemInfoCollection(files.GetEnumerator()); - } - } - - if (recurse) - { - try - { - var subDis = di.EnumerateDirectories("*", global::System.IO.SearchOption.TopDirectoryOnly); - var subDisEnumerator = subDis.GetEnumerator(); - - foreach (var subDi in subDis) - { - //if ((subDi.Attributes & global::System.IO.FileAttributes.Hidden) == global::System.IO.FileAttributes.Hidden & !hidden) - // continue; - - subDi.RefreshEntryInfo(); - if (subDi.EntryInfo.IsMountPoint && skipMountPoints) { continue; } - if (subDi.EntryInfo.IsSymbolicLink && skipSymbolicLinks) { continue; } - - if (depth.HasValue) - { - if (currentDepth < depth) - WriteFileSystem(subDi, currentDepth + 1); - } - else - WriteFileSystem(subDi, 0); - } - } - catch (PipelineStoppedException ex) - { - throw ex; - } - catch (Exception) - { - WriteVerbose(string.Format("Cannot access folder '{0}' for recursive operation", di)); - } - } - } - catch (UnauthorizedAccessException ex) - { - WriteError(new ErrorRecord(ex, "DirUnauthorizedAccessError", ErrorCategory.PermissionDenied, di.FullName)); - } - catch (PipelineStoppedException ex) - { - throw ex; - } - catch (Exception ex) - { - //System.Management.Automation.BreakException or System.Management.Automation.ContinueException cannot be caught due to its protection level in PowerShell v2 - if (ex.GetType().FullName == "System.Management.Automation.BreakException" | ex.GetType().FullName == "System.Management.Automation.ContinueException") - { - throw ex; - } - WriteError(new ErrorRecord(ex, "DirUnspecifiedError", ErrorCategory.NotSpecified, di.FullName)); - } - } - - protected void WriteFileSystemInfoCollection(IEnumerator fileSystemInfos) - { - while (fileSystemInfos.MoveNext()) - { - FileSystemInfo current = (FileSystemInfo)fileSystemInfos.Current; - if (!wildcard.IsMatch(current.Name)) - { - continue; - } - - var writeItem = force.ToBool(); - - if (MyInvocation.BoundParameters.ContainsKey("Attributes")) - { - if ((current.Attributes & attributes) != attributes) - continue; - - writeItem = true; - } - else - { - if (hidden) - force = true; - - if ((current.Attributes & global::System.IO.FileAttributes.Hidden) != global::System.IO.FileAttributes.Hidden) - writeItem = true; - - if (hidden) - if ((current.Attributes & global::System.IO.FileAttributes.Hidden) != global::System.IO.FileAttributes.Hidden) - writeItem = false; - - if (system) - if ((current.Attributes & global::System.IO.FileAttributes.System) != global::System.IO.FileAttributes.System) - writeItem = false; - - if (readOnly) - if ((current.Attributes & global::System.IO.FileAttributes.ReadOnly) != global::System.IO.FileAttributes.ReadOnly) - writeItem = false; - } - - if (writeItem) - { - PSObject item; - if (current is FileInfo) - { - item = new PSObject((FileInfo)current); - } - else - { - item = new PSObject((DirectoryInfo)current); - } - - //can be disabled for a better performance in the PSD1 file, PrivateData section, GetFileSystemModeProperty = $true / $false - if (getFileSystemModeProperty) - item.Properties.Add(new PSCodeProperty("Mode", modeMethodInfo)); - - if (identifyHardLinks == true && current is FileInfo) - { - try - { - item.Properties.Add(new PSNoteProperty("HardLinkCount", Alphaleonis.Win32.Filesystem.File.EnumerateHardlinks(current.FullName).Count())); - } - catch - { - WriteDebug(string.Format("Could not read hard links for '{0}'", current.FullName)); - } - } - - WriteObject(item); - } - } - } - - protected override void EndProcessing() - { - base.EndProcessing(); - } - } -} diff --git a/NTFSSecurity/ItemCmdlets/GetDiskSpace.cs b/NTFSSecurity/ItemCmdlets/GetDiskSpace.cs deleted file mode 100644 index c5af08d..0000000 --- a/NTFSSecurity/ItemCmdlets/GetDiskSpace.cs +++ /dev/null @@ -1,58 +0,0 @@ -using Alphaleonis.Win32.Filesystem; -using System.Linq; -using System.Management.Automation; - -namespace NTFSSecurity -{ - [Cmdlet(VerbsCommon.Get, "DiskSpace")] - [OutputType(typeof(DiskSpaceInfo))] - public class GetDiskSpace : PSCmdlet - { - private string[] driveLetter; - - [Parameter(Position = 1)] - [ValidatePattern("^[A-Za-z]:$")] - public string[] DriveLetter - { - get { return driveLetter; } - set { driveLetter = value; } - } - - protected override void BeginProcessing() - { - base.BeginProcessing(); - } - - protected override void ProcessRecord() - { - var volumes = Alphaleonis.Win32.Filesystem.Volume.EnumerateVolumes(); - - if (driveLetter == null) - { - driveLetter = volumes.ToArray(); - } - - foreach (var letter in driveLetter) - { - var diskSpaceInfo = new DiskSpaceInfo(letter); - try - { - diskSpaceInfo.Refresh(); - if (diskSpaceInfo.TotalNumberOfBytes > 0) - { - this.WriteObject(diskSpaceInfo); - } - } - catch - { - this.WriteWarning(string.Format("Could not get drive details for '{0}'", letter)); - } - } - } - - protected override void EndProcessing() - { - base.EndProcessing(); - } - } -} diff --git a/NTFSSecurity/ItemCmdlets/GetItem2.cs b/NTFSSecurity/ItemCmdlets/GetItem2.cs deleted file mode 100644 index f45d82c..0000000 --- a/NTFSSecurity/ItemCmdlets/GetItem2.cs +++ /dev/null @@ -1,61 +0,0 @@ -using Alphaleonis.Win32.Filesystem; -using System.Collections.Generic; -using System.Management.Automation; - -namespace NTFSSecurity -{ - [Cmdlet(VerbsCommon.Get, "Item2")] - [OutputType(typeof(FileInfo), typeof(DirectoryInfo))] - public class GetItem2 : BaseCmdlet - { - System.Reflection.MethodInfo modeMethodInfo = null; - - [Parameter(Position = 1, ValueFromPipeline = true, ValueFromPipelineByPropertyName = true)] - [ValidateNotNullOrEmpty] - [Alias("FullName")] - public string[] Path - { - get { return paths.ToArray(); } - set - { - paths.Clear(); - paths.AddRange(value); - } - } - - protected override void BeginProcessing() - { - base.BeginProcessing(); - - if (paths.Count == 0) - { - paths = new List() { GetVariableValue("PWD").ToString() }; - } - - modeMethodInfo = typeof(FileSystemCodeMembers).GetMethod("Mode"); - } - - protected override void ProcessRecord() - { - foreach (var path in paths) - { - try - { - var item = new PSObject(GetFileSystemInfo2(path)); - item.Properties.Add(new PSCodeProperty("Mode", modeMethodInfo)); - - WriteObject(item); - } - catch (System.IO.FileNotFoundException ex) - { - WriteError(new ErrorRecord(ex, "FileNotFound", ErrorCategory.ObjectNotFound, path)); - } - } - } - - protected override void EndProcessing() - { - base.EndProcessing(); - } - } -} diff --git a/NTFSSecurity/ItemCmdlets/MoveItem2.cs b/NTFSSecurity/ItemCmdlets/MoveItem2.cs deleted file mode 100644 index aa582e3..0000000 --- a/NTFSSecurity/ItemCmdlets/MoveItem2.cs +++ /dev/null @@ -1,132 +0,0 @@ -using Alphaleonis.Win32.Filesystem; -using System; -using System.Management.Automation; - -namespace NTFSSecurity -{ - [Cmdlet(VerbsCommon.Move, "Item2", SupportsShouldProcess = true)] - public class MoveItem2 : BaseCmdlet - { - private string destination; - private SwitchParameter force; - private bool passThru; - - [Parameter(Position = 1, Mandatory = true, ValueFromPipeline = true, ValueFromPipelineByPropertyName = true)] - [ValidateNotNullOrEmpty] - [Alias("FullName")] - public string[] Path - { - get { return paths.ToArray(); } - set - { - paths.Clear(); - paths.AddRange(value); - } - } - - [Parameter(Position = 2, Mandatory = true, ValueFromPipelineByPropertyName = true)] - public string Destination - { - get { return destination; } - set { destination = value; } - } - - [Parameter] - public SwitchParameter Force - { - get { return force; } - set { force = value; } - } - - [Parameter] - public bool PassThru - { - get { return passThru; } - set { passThru = value; } - } - - protected override void BeginProcessing() - { - base.BeginProcessing(); - - destination = GetRelativePath(destination); - WriteVerbose(string.Format("Destination path is '{0}'", destination)); - } - - protected override void ProcessRecord() - { - foreach (var path in paths) - { - WriteVerbose(string.Format("Moving item '{0}'", path)); - - FileSystemInfo item = null; - var actualDestination = string.Empty; - - var resolvedPath = GetRelativePath(path); - - try - { - item = GetFileSystemInfo2(resolvedPath); - } - catch (System.IO.FileNotFoundException ex) - { - WriteError(new ErrorRecord(ex, "FileNotFound", ErrorCategory.ObjectNotFound, resolvedPath)); - return; - } - - //destination is a directory - if (Directory.Exists(destination)) - { - //hence adding the file name to the destination path - actualDestination = System.IO.Path.Combine(destination, System.IO.Path.GetFileName(resolvedPath)); - } - else - { - actualDestination = destination; - } - - if (File.Exists(actualDestination)) - { - WriteError(new ErrorRecord(new AlreadyExistsException(), "DestinationFileAlreadyExists", ErrorCategory.ResourceExists, actualDestination)); - return; - } - - try - { - if (item is FileInfo) - { - if (ShouldProcess(resolvedPath, "Move File")) - { - ((FileInfo)item).MoveTo(actualDestination, MoveOptions.CopyAllowed, PathFormat.RelativePath); - WriteVerbose(string.Format("File '{0}' moved to '{0}'", resolvedPath, destination)); - } - } - else - { - if (ShouldProcess(resolvedPath, "Move Directory")) - { - ((DirectoryInfo)item).MoveTo(actualDestination, MoveOptions.CopyAllowed, PathFormat.RelativePath); - WriteVerbose(string.Format("Directory '{0}' moved to '{0}'", resolvedPath, destination)); - } - } - - if (passThru) - WriteObject(item); - } - catch (System.IO.IOException ex) - { - WriteError(new ErrorRecord(ex, "MoveError", ErrorCategory.InvalidData, resolvedPath)); - } - catch (Exception ex) - { - WriteError(new ErrorRecord(ex, "MoveError", ErrorCategory.NotSpecified, resolvedPath)); - } - } - } - - protected override void EndProcessing() - { - base.EndProcessing(); - } - } -} diff --git a/NTFSSecurity/ItemCmdlets/RemoveItem2.cs b/NTFSSecurity/ItemCmdlets/RemoveItem2.cs deleted file mode 100644 index 3cc85c2..0000000 --- a/NTFSSecurity/ItemCmdlets/RemoveItem2.cs +++ /dev/null @@ -1,108 +0,0 @@ -using Alphaleonis.Win32.Filesystem; -using System; -using System.Management.Automation; - -namespace NTFSSecurity -{ - [Cmdlet(VerbsCommon.Remove, "Item2", SupportsShouldProcess = true)] - public class RemoveItem2 : BaseCmdlet - { - private SwitchParameter force; - private SwitchParameter recurse; - private string filter; - private bool passThru; - - [Parameter(Position = 1, ValueFromPipeline = true, ValueFromPipelineByPropertyName = true)] - [ValidateNotNullOrEmpty] - [Alias("FullName")] - public string[] Path - { - get { return paths.ToArray(); } - set - { - paths.Clear(); - paths.AddRange(value); - } - } - - [Parameter] - public SwitchParameter Force - { - get { return force; } - set { force = value; } - } - - [Parameter] - public SwitchParameter Recurse - { - get { return recurse; } - set { recurse = value; } - } - - [Parameter] - public SwitchParameter PassThur - { - get { return passThru; } - set { passThru = value; } - } - - protected override void BeginProcessing() - { - base.BeginProcessing(); - } - - protected override void ProcessRecord() - { - foreach (var path in paths) - { - FileSystemInfo item = null; - - try - { - item = GetFileSystemInfo2(path); - } - catch (System.IO.FileNotFoundException ex) - { - WriteError(new ErrorRecord(ex, "FileNotFound", ErrorCategory.ObjectNotFound, path)); - return; - } - - try - { - if (item is FileInfo) - { - if (ShouldProcess(item.ToString(), "Remove File")) - { - ((FileInfo)item).Delete(force); - WriteVerbose(string.Format("File '{0}' was removed", item.ToString())); - } - } - else - { - if (ShouldProcess(item.ToString(), "Remove Directory")) - { - ((DirectoryInfo)item).Delete(recurse, force); - WriteVerbose(string.Format("Directory '{0}' was removed", item.ToString())); - } - } - - if (passThru) - WriteObject(item); - } - catch (System.IO.IOException ex) - { - WriteError(new ErrorRecord(ex, "DeleteError", ErrorCategory.InvalidData, path)); - } - catch (Exception ex) - { - WriteError(new ErrorRecord(ex, "DeleteError", ErrorCategory.NotSpecified, path)); - } - } - } - - protected override void EndProcessing() - { - base.EndProcessing(); - } - } -} diff --git a/NTFSSecurity/LinkCmdlets/GetHardLink.cs b/NTFSSecurity/LinkCmdlets/GetHardLink.cs deleted file mode 100644 index fab966e..0000000 --- a/NTFSSecurity/LinkCmdlets/GetHardLink.cs +++ /dev/null @@ -1,74 +0,0 @@ -using Alphaleonis.Win32.Filesystem; -using System; -using System.Collections.Generic; -using System.Management.Automation; - -namespace NTFSSecurity -{ - [Cmdlet(VerbsCommon.Get, "NTFSHardLink")] - [OutputType(typeof(FileInfo), typeof(DirectoryInfo))] - public class GetHardLink : BaseCmdlet - { - System.Reflection.MethodInfo modeMethodInfo = null; - - [Parameter(Position = 1, ValueFromPipeline = true, ValueFromPipelineByPropertyName = true)] - [ValidateNotNullOrEmpty] - [Alias("FullName")] - public string[] Path - { - get { return paths.ToArray(); } - set - { - paths.Clear(); - paths.AddRange(value); - } - } - - protected override void BeginProcessing() - { - base.BeginProcessing(); - - if (paths.Count == 0) - { - paths = new List() { GetVariableValue("PWD").ToString() }; - } - - modeMethodInfo = typeof(FileSystemCodeMembers).GetMethod("Mode"); - } - - protected override void ProcessRecord() - { - foreach (var path in paths) - { - try - { - var root = System.IO.Path.GetPathRoot(GetRelativePath(path)); - - //access the path to make sure it exists and is a file - var item = GetFileSystemInfo2(path); - - if (item is DirectoryInfo) - throw new ArgumentException("The item must be a file"); - - var links = File.EnumerateHardlinks(item.FullName); - - foreach (var link in links) - { - var target = new PSObject(GetFileSystemInfo2(System.IO.Path.Combine(root, link.Substring(1)))); - target.Properties.Add(new PSCodeProperty("Mode", modeMethodInfo)); - WriteObject(target); - } - } - catch (System.IO.FileNotFoundException ex) - { - WriteError(new ErrorRecord(ex, "FileNotFound", ErrorCategory.ObjectNotFound, path)); - } - } - } - - protected override void EndProcessing() - { - base.EndProcessing(); - } - } -} diff --git a/NTFSSecurity/LinkCmdlets/NewHardLink.cs b/NTFSSecurity/LinkCmdlets/NewHardLink.cs deleted file mode 100644 index 7f9f47d..0000000 --- a/NTFSSecurity/LinkCmdlets/NewHardLink.cs +++ /dev/null @@ -1,96 +0,0 @@ -using Alphaleonis.Win32.Filesystem; -using System; -using System.Management.Automation; - -namespace NTFSSecurity -{ - [Cmdlet(VerbsCommon.New, "NTFSHardLink")] - [OutputType(typeof(FileInfo), typeof(DirectoryInfo))] - public class NewHardLink : BaseCmdlet - { - string target; - private bool passThru; - System.Reflection.MethodInfo modeMethodInfo = null; - - [Parameter(Position = 1, ValueFromPipeline = true, ValueFromPipelineByPropertyName = true)] - [ValidateNotNullOrEmpty] - [Alias("FullName")] - public string Path - { - get { return paths[0]; } - set - { - paths.Clear(); - paths.Add(value); - } - } - - [Parameter(Position = 2, ValueFromPipeline = true, ValueFromPipelineByPropertyName = true)] - [ValidateNotNullOrEmpty] - public string Target - { - get { return target; } - set { target = value; } - } - - [Parameter] - public SwitchParameter PassThru - { - get { return passThru; } - set { passThru = value; } - } - - protected override void BeginProcessing() - { - base.BeginProcessing(); - - modeMethodInfo = typeof(FileSystemCodeMembers).GetMethod("Mode"); - } - - protected override void ProcessRecord() - { - var path = paths[0]; - - path = GetRelativePath(path); - target = GetRelativePath(target); - var root = System.IO.Path.GetPathRoot(path); - - try - { - FileSystemInfo temp = null; - - if (TryGetFileSystemInfo2(path, out temp)) - throw new ArgumentException(string.Format("The file '{0}' does already exist, cannot create the link", path)); - - if (!TryGetFileSystemInfo2(target, out temp)) - throw new ArgumentException("The target path exist, cannot create the link"); - else - if (temp is DirectoryInfo) - throw new ArgumentException("The target is not a file, cannot create the link"); - - File.CreateHardlink(path, target); - - if (passThru) - { - var links = File.EnumerateHardlinks(path); - - foreach (var link in links) - { - var target = new PSObject(GetFileSystemInfo2(System.IO.Path.Combine(root, link.Substring(1)))); - target.Properties.Add(new PSCodeProperty("Mode", modeMethodInfo)); - WriteObject(target); - } - } - } - catch (System.IO.FileNotFoundException ex) - { - WriteError(new ErrorRecord(ex, "CreateHardLinkError", ErrorCategory.WriteError, path)); - } - } - - protected override void EndProcessing() - { - base.EndProcessing(); - } - } -} diff --git a/NTFSSecurity/LinkCmdlets/NewSymbolicLink.cs b/NTFSSecurity/LinkCmdlets/NewSymbolicLink.cs deleted file mode 100644 index 81d85ca..0000000 --- a/NTFSSecurity/LinkCmdlets/NewSymbolicLink.cs +++ /dev/null @@ -1,87 +0,0 @@ -using Alphaleonis.Win32.Filesystem; -using System; -using System.Management.Automation; - -namespace NTFSSecurity -{ - [Cmdlet(VerbsCommon.New, "NTFSSymbolicLink")] - [OutputType(typeof(FileInfo), typeof(DirectoryInfo))] - public class NewSymbolicLink : BaseCmdlet - { - string target; - private bool passThru; - System.Reflection.MethodInfo modeMethodInfo = null; - - [Parameter(Position = 1, ValueFromPipeline = true, ValueFromPipelineByPropertyName = true)] - [ValidateNotNullOrEmpty] - [Alias("FullName")] - public string Path - { - get { return paths[0]; } - set - { - paths.Clear(); - paths.Add(value); - } - } - - [Parameter(Position = 2, ValueFromPipeline = true, ValueFromPipelineByPropertyName = true)] - [ValidateNotNullOrEmpty] - public string Target - { - get { return target; } - set { target = value; } - } - - [Parameter] - public SwitchParameter PassThru - { - get { return passThru; } - set { passThru = value; } - } - - protected override void BeginProcessing() - { - base.BeginProcessing(); - - modeMethodInfo = typeof(FileSystemCodeMembers).GetMethod("Mode"); - } - - protected override void ProcessRecord() - { - var path = paths[0]; - - path = GetRelativePath(path); - target = GetRelativePath(target); - FileSystemInfo targetItem = null; - var root = System.IO.Path.GetPathRoot(path); - - try - { - targetItem = GetFileSystemInfo2(target); - - FileSystemInfo temp; - if (TryGetFileSystemInfo2(path, out temp)) - { - throw new ArgumentException("The path does already exist, cannot create link"); - } - - File.CreateSymbolicLink(path, target, targetItem is FileInfo ? SymbolicLinkTarget.File : SymbolicLinkTarget.Directory); - - if (passThru) - { - WriteObject(new FileInfo(path)); - } - } - catch (System.IO.FileNotFoundException ex) - { - WriteError(new ErrorRecord(ex, "CreateSymbolicLinkError", ErrorCategory.ObjectNotFound, path)); - } - } - - protected override void EndProcessing() - { - base.EndProcessing(); - } - } -} \ No newline at end of file diff --git a/NTFSSecurity/MiscCmdlets/GetFileHash2.cs b/NTFSSecurity/MiscCmdlets/GetFileHash2.cs deleted file mode 100644 index 1555a4c..0000000 --- a/NTFSSecurity/MiscCmdlets/GetFileHash2.cs +++ /dev/null @@ -1,99 +0,0 @@ -using Alphaleonis.Win32.Filesystem; -using Security2; -using System; -using System.Management.Automation; -using Security2.FileSystem.FileInfo; - -namespace NTFSSecurity -{ - [Cmdlet(VerbsCommon.Get, "FileHash2")] - [OutputType(typeof(FileSystemAccessRule2))] - public class GetFileHash2 : BaseCmdlet - { - private HashAlgorithms algorithm = HashAlgorithms.SHA256; - - [Parameter(Mandatory = true, Position = 1, ValueFromPipeline = true, ValueFromPipelineByPropertyName = true)] - [ValidateNotNullOrEmpty] - [Alias("FullName")] - public string[] Path - { - get { return paths.ToArray(); } - set - { - paths.Clear(); - paths.AddRange(value); - } - } - - [Parameter(Position = 2, ValueFromPipelineByPropertyName = true)] - public HashAlgorithms Algorithm - { - get { return algorithm; } - set { algorithm = value; } - } - - protected override void BeginProcessing() - { - base.BeginProcessing(); - } - - protected override void ProcessRecord() - { - string hash = string.Empty; - FileSystemInfo item = null; - - foreach (var path in paths) - { - try - { - item = GetFileSystemInfo2(path) as FileInfo; - if (item == null) - return; - } - catch (Exception ex) - { - WriteError(new ErrorRecord(ex, "ReadFileError", ErrorCategory.OpenError, path)); - continue; - } - - try - { - hash = ((FileInfo)item).GetHash(algorithm); - } - catch (UnauthorizedAccessException) - { - try - { - var ownerInfo = FileSystemOwner.GetOwner(item); - var previousOwner = ownerInfo.Owner; - - FileSystemOwner.SetOwner(item, System.Security.Principal.WindowsIdentity.GetCurrent().User); - - hash = ((FileInfo)item).GetHash(algorithm); - - FileSystemOwner.SetOwner(item, previousOwner); - } - catch (Exception ex2) - { - WriteError(new ErrorRecord(ex2, "GetHashError", ErrorCategory.WriteError, path)); - } - } - catch (Exception ex) - { - WriteError(new ErrorRecord(ex, "GetHashError", ErrorCategory.WriteError, path)); - } - - var result = new PSObject(item); - result.Properties.Add(new PSNoteProperty("Hash", hash)); - result.Properties.Add(new PSNoteProperty("Algorithm", algorithm.ToString())); - result.TypeNames.Insert(0, "Alphaleonis.Win32.Filesystem.FileInfo+Hash"); - WriteObject(result); - } - } - - protected override void EndProcessing() - { - base.EndProcessing(); - } - } -} \ No newline at end of file diff --git a/NTFSSecurity/NTFSSecurity-Help.xml b/NTFSSecurity/NTFSSecurity-Help.xml deleted file mode 100644 index 176b9bd..0000000 --- a/NTFSSecurity/NTFSSecurity-Help.xml +++ /dev/null @@ -1,2331 +0,0 @@ - - - - - - - - Add-Access - - Add permission to the ACL of a file or folder. - - - - - - Add - Access - - - - - - The function adds an ACE to the item's ACL. The cmdlet needs to have the following information for that: - - Path - - Account (SamAccountName or SID) - - AccessRights (Read, Change, FullControl, etc., ...) - - AccessType (Allow or Deny) - - ApplyTo (This folder only, Only files, etc.) - -All the options are explained in the parameter section. - -The function needs to know the file or folder path. The path can be an argument or be piped into the function as string or FileSystemInfo object (result of Get-ChildItem or Get-Item). - - - Add-Access - - Account - - Takes the account that is will be granted permission. This can either be a SID (well known, domain or local) or a account name. The account name must be specified in the syntax 'Domain\UserName'. Well known accounts are not part of the domain or local machine. Use for example 'NT Authority\System' or 'Builtin\Administrators'. - - IdentityReference2 - - - AccessRights - - The right the account shall get. This parameter is of the type System.Security.AccessControl.FileSystemRights so the following values are valid: ListDirectory, ReadData, WriteData, CreateFiles, CreateDirectories, AppendData, ReadExtendedAttributes, WriteExtendedAttributes, Traverse, ExecuteFile,DeleteSubdirectoriesAndFiles, ReadAttributes, WriteAttributes, Write, Delete, ReadPermissions, Read, ReadAndExecute, Modify, ChangePermissions, TakeOwnership, Synchronize, FullControl - - FileSystemRights - - - AccessType - - The type of access you want to give, either Allow or Deny (System.Security.AccessControl.AccessControlType). - - AccessControlType - - - InheritanceFlags - - Defines what child items are going to inherit in terms of permissions. If not defined, permissions will be inherited by files and folders (ContainerInherit | ObjectInherit) - -There are three options: -- None: The permission will not be inherited by any child item -- ContainerInherit: The permission will be inherited only by directories -- ObjectInherit: The permission will be inherited only by files - - InheritanceFlags - - - PropagationFlags - - Specifies how Access Control Entries (ACEs) are propagated to child objects. - -There are three options: -- None: Specifies that no propagation flags are set. -- NoPropagateInherit: Specifies that the ACE is not propagated to child objects. -- InheritOnly: Specifies that the ACE is propagated only to child objects. This includes both container and leaf child objects. - - PropagationFlags - - - PassThru - - Returns the item's access control list by using FileSystemAccessRule2. item's ACE. By default, this cmdlet does not generate any output. - - - - Path - - Specifies the path to a resource. Add-Access adds permissions to the items indicated by the path. Wildcards are not permitted. This parameter accepts input from the pipeline so combining Get-Access with Get-ChildItem or Get-Item is the easiest way if you want to process multiple files or folders. - - String[] - - - - Add-Access - - Account - - Takes the account that is will be granted permission. This can either be a SID (well known, domain or local) or a account name. The account name must be specified in the syntax 'Domain\UserName'. Well known accounts are not part of the domain or local machine. Use for example 'NT Authority\System' or 'Builtin\Administrators'. - - IdentityReference2 - - - AccessRights - - The right the account shall get. This parameter is of the type System.Security.AccessControl.FileSystemRights so the following values are valid: ListDirectory, ReadData, WriteData, CreateFiles, CreateDirectories, AppendData, ReadExtendedAttributes, WriteExtendedAttributes, Traverse, ExecuteFile,DeleteSubdirectoriesAndFiles, ReadAttributes, WriteAttributes, Write, Delete, ReadPermissions, Read, ReadAndExecute, Modify, ChangePermissions, TakeOwnership, Synchronize, FullControl - - FileSystemRights - - - AccessType - - The type of access you want to give, either Allow or Deny (System.Security.AccessControl.AccessControlType). - - AccessControlType - - - AppliesTo - - This parameter controls inheritance and propagation like the "Apply To" drop-down box in the Windows Explorer dialog. The allowed options are: -- ThisFolderOnly -- ThisFolderSubfolderAndFiles -- ThisFolderAndSubfolders -- ThisFolderAndFiles -- SubfolderAndFilesOnly -- SubfolersOnly -- FilesOnly - - ApplyTo - - - PassThru - - Returns the item's access control list by using FileSystemAccessRule2. item's ACE. By default, this cmdlet does not generate any output. - - - - Path - - Specifies the path to a resource. Add-Access adds permissions to the items indicated by the path. Wildcards are not permitted. This parameter accepts input from the pipeline so combining Get-Access with Get-ChildItem or Get-Item is the easiest way if you want to process multiple files or folders. - - String[] - - - - - - Account - - Takes the account that is will be granted permission. This can either be a SID (well known, domain or local) or a account name. The account name must be specified in the syntax 'Domain\UserName'. Well known accounts are not part of the domain or local machine. Use for example 'NT Authority\System' or 'Builtin\Administrators'. - - IdentityReference2 - - IdentityReference2 - - - - - - AccessRights - - The right the account shall get. This parameter is of the type System.Security.AccessControl.FileSystemRights so the following values are valid: ListDirectory, ReadData, WriteData, CreateFiles, CreateDirectories, AppendData, ReadExtendedAttributes, WriteExtendedAttributes, Traverse, ExecuteFile,DeleteSubdirectoriesAndFiles, ReadAttributes, WriteAttributes, Write, Delete, ReadPermissions, Read, ReadAndExecute, Modify, ChangePermissions, TakeOwnership, Synchronize, FullControl - - FileSystemRights - - FileSystemRights - - - - - - AccessType - - The type of access you want to give, either Allow or Deny (System.Security.AccessControl.AccessControlType). - - AccessControlType - - AccessControlType - - - - - - InheritanceFlags - - Defines what child items are going to inherit in terms of permissions. If not defined, permissions will be inherited by files and folders (ContainerInherit | ObjectInherit) - -There are three options: -- None: The permission will not be inherited by any child item -- ContainerInherit: The permission will be inherited only by directories -- ObjectInherit: The permission will be inherited only by files - - InheritanceFlags - - InheritanceFlags - - - - - - PropagationFlags - - Specifies how Access Control Entries (ACEs) are propagated to child objects. - -There are three options: -- None: Specifies that no propagation flags are set. -- NoPropagateInherit: Specifies that the ACE is not propagated to child objects. -- InheritOnly: Specifies that the ACE is propagated only to child objects. This includes both container and leaf child objects. - - PropagationFlags - - PropagationFlags - - - - - - PassThru - - Returns the item's access control list by using FileSystemAccessRule2. item's ACE. By default, this cmdlet does not generate any output. - - - SwitchParameter - - - - - - Path - - Specifies the path to a resource. Add-Access adds permissions to the items indicated by the path. Wildcards are not permitted. This parameter accepts input from the pipeline so combining Get-Access with Get-ChildItem or Get-Item is the easiest way if you want to process multiple files or folders. - - String[] - - String[] - - - - - - AppliesTo - - This parameter controls inheritance and propagation like the "Apply To" drop-down box in the Windows Explorer dialog. The allowed options are: -- ThisFolderOnly -- ThisFolderSubfolderAndFiles -- ThisFolderAndSubfolders -- ThisFolderAndFiles -- SubfolderAndFilesOnly -- SubfolersOnly -- FilesOnly - - ApplyTo - - ApplyTo - - - - - - - - - FileSystemInfo or Strings - - - All parameters accept pipeline input. - - - - - - - - - Null, unless the parameter PassThru is used. - - - Security2.FileSystemAccessRule2 for each ACE on the object, if PassThru is used. - - - - - - - - - - - - - - - - - - --------------- EXAMPLE 1 -------------- - - C:\PS> -C:\PS> - PS C:\> dir | Add-Ace -Account forest3\test -AccessRights Read -PassThru - - Add read permissions to the test user account. Per default the inheritance is set to files and folders. - - - Path: C:\data\Test (Inheritance enabled) - - Identity Rights Inheritance Type IsInherited - -------- ------ ----------- ---- ----------- - raandree1\Test (S-1-5-21-30... FullControl ContainerInherit,... Allow False - - - - - - - - - - - - --------------- EXAMPLE 2 -------------- - - C:\PS> -C:\PS> - PS C:\data> dir | Add-Ace -Account raandree1\test -AccessRights Read -AppliesTo ThisFolderOnly -PassThru - - Adds read access to the test account to all items the 'dir' command returns without inheriting the access to files or folder below. - - - Path: C:\data\Test (Inheritance enabled) - - Identity Rights Inheritance Type IsInherited - -------- ------ ----------- ---- ----------- - raandree1\Test (S-1-5-21-30... Read, Synchronize None Allow False - - Path: C:\data\File1.txt (Inheritance enabled) - - Identity Rights Inheritance Type IsInherited - -------- ------ ----------- ---- ----------- - raandree1\Test (S-1-5-21-30... Read, Synchronize None Allow False - - - - - - - - - - - - - - http://gallery.technet.microsoft.com/scriptcenter/1abd77a5-9c0b-4a2b-acef-90dbb2b84e85 - - - - - - - - Copy-Access - - - - - - - - Copy - Access - - - - - - - - - Copy-Access - - Path - - - - String - - - DestinationPath - - - - String - - - Account - - - - IdentityReference2 - - - AccessType - - - - AccessControlType - - - PassThru - - - - - - - - - Path - - - - String - - String - - - - - - DestinationPath - - - - String - - String - - - - - - Account - - - - IdentityReference2 - - IdentityReference2 - - - - - - AccessType - - - - AccessControlType - - AccessControlType - - - - - - PassThru - - - - - SwitchParameter - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Disable-Inheritance - - - - - - - - Disable - Inheritance - - - - - - - - - Disable-Inheritance - - PassThru - - - - - - PreserveInheritedAccessRules - - - - - - Path - - - - String[] - - - - - - PassThru - - - - - SwitchParameter - - - - - - PreserveInheritedAccessRules - - - - - SwitchParameter - - - - - - Path - - - - String[] - - String[] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Enable-Inheritance - - - - - - - - Enable - Inheritance - - - - - - - - - Enable-Inheritance - - PassThru - - - - - - RemoveInheritedAccessRules - - - - - - Path - - - - String[] - - - - - - PassThru - - - - - SwitchParameter - - - - - - RemoveInheritedAccessRules - - - - - SwitchParameter - - - - - - Path - - - - String[] - - String[] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Get-Access - - Gets all Access Control Entries in the item's Discretionary Access Control List. - - - - - - Get - Access - - - - - - The function returns all ACEs defined on the item. You can filter the ACEs using the switches ExcludeExplicit and ExcludeInherited. - -Whether the item inherits the permissions from its parent is indicated in the output as well. - -The function needs to know the file or folder path. The path can be an argument or be piped into the function as string or FileSystemInfo object (result of Get-ChildItem or Get-Item). - - - Get-Access - - Account - - Takes the account that is used to filter the output. Only ACEs are shown that match the given user account. - -This can either be a SID (well known, domain or local) or a account name. The account name must be specified in the syntax 'Domain\UserName'. Well known accounts are not part of the domain or local machine. Use for example 'NT Authority\System' or 'Builtin\Administrators'. - - IdentityReference2 - - - ExcludeExplicit - - If set, only inherited ACEs are returned. - - - - ExcludeInherited - - If set, only explicitly non-inherited ACEs are returned. - - - - Path - - Specifies the path to the resource. Get-Access gets the permissions of the items indicated by the path. Wildcards are not permitted. This parameter also accepts input from the pipeline so combining Get-Access with Get-ChildItem or Get-Item is the easiest way if you want to get the access rights of multiple files and folders. - - String[] - - - - - - Account - - Takes the account that is used to filter the output. Only ACEs are shown that match the given user account. - -This can either be a SID (well known, domain or local) or a account name. The account name must be specified in the syntax 'Domain\UserName'. Well known accounts are not part of the domain or local machine. Use for example 'NT Authority\System' or 'Builtin\Administrators'. - - IdentityReference2 - - IdentityReference2 - - - - - - ExcludeExplicit - - If set, only inherited ACEs are returned. - - - SwitchParameter - - - - - - ExcludeInherited - - If set, only explicitly non-inherited ACEs are returned. - - - SwitchParameter - - - - - - Path - - Specifies the path to the resource. Get-Access gets the permissions of the items indicated by the path. Wildcards are not permitted. This parameter also accepts input from the pipeline so combining Get-Access with Get-ChildItem or Get-Item is the easiest way if you want to get the access rights of multiple files and folders. - - String[] - - String[] - - - - - - - - - System.String - - - You can pipe a string that contains a path. - - - - - - - - - Security2.FileSystemAccessRule2 - - - Get-Ace returns objects that represent the item's Access Control Entries. - - - - - - - - - - - - - - - - - - --------------- EXAMPLE 1 -------------- - - C:\PS> -C:\PS> - Get-Item c:\ | Get-Access - - Get all ACEs defined on the root of drive C: - - - Path: C:\ (Inheritance disabled) - - Identity Rights Inheritance Type IsInherited - -------- ------ ----------- ---- ----------- - NT AUTHORITY\Authenticated ... AppendData None Allow False - NT AUTHORITY\Authenticated ... -536805376 ContainerIn... Allow False - NT AUTHORITY\SYSTEM (S-1-5-18) FullControl None Allow False - NT AUTHORITY\SYSTEM (S-1-5-18) 268435456 ContainerIn... Allow False - BUILTIN\Administrators (S-1... 268435456 ContainerIn... Allow False - BUILTIN\Administrators (S-1... FullControl None Allow False - BUILTIN\Users (S-1-5-32-545) ReadAndExec... ContainerIn... Allow False - - - - - - - - - - - - --------------- EXAMPLE 2 -------------- - - C:\PS> -C:\PS> - PS C:\> dir | Where-Object { $_.PSIsContainer } | Get-Ace -ExcludeInherited - - This command returns only explicitly set ACEs on all folders. - - - - - - - - - - - - - - - --------------- EXMAPLE 3 -------------- - - C:\PS> -C:\PS> - PS C:\> dir | Get-Access -Account Builtin\Users - - This command returns all Access Control Entries whose account match 'Builtin\Users'. - - - Path: C:\Users\raandree\Desktop\ADRAP.docx (Inheritance disabled) - - -Account Access Rights Applies to Type IsInherited -------- ------------- ---------- ---- ----------- -BUILTIN\Users (S-1-5-32-545) Modify, Synch... ThisFolderOnly Allow False - - - - - - - - - - - - - - http://gallery.technet.microsoft.com/scriptcenter/1abd77a5-9c0b-4a2b-acef-90dbb2b84e85 - - - - - - - - Get-EffectiveAccess - - - - - - - - Get - EffectiveAccess - - - - - - - - - Get-EffectiveAccess - - Account - - - - IdentityReference2 - - - Path - - - - String[] - - - - - - Account - - - - IdentityReference2 - - IdentityReference2 - - - - - - Path - - - - String[] - - String[] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Get-Inheritance - - - - - - - - Get - Inheritance - - - - - - - - - Get-Inheritance - - Path - - - - String[] - - - - - - Path - - - - String[] - - String[] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Get-OrphanedAccess - - - - - - - - Get - OrphanedAccess - - - - - - - - - Get-OrphanedAccess - - Account - - - - IdentityReference2 - - - ExcludeExplicit - - - - - - ExcludeInherited - - - - - - Path - - - - String[] - - - - - - Account - - - - IdentityReference2 - - IdentityReference2 - - - - - - ExcludeExplicit - - - - - SwitchParameter - - - - - - ExcludeInherited - - - - - SwitchParameter - - - - - - Path - - - - String[] - - String[] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Get-Owner - - - - - - - - Get - Owner - - - - - - - - - Get-Owner - - Path - - - - String[] - - - - - - Path - - - - String[] - - String[] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Get-SimpleAccess - - - - - - - - Get - SimpleAccess - - - - - - - - - Get-SimpleAccess - - IncludeRootFolder - - - - - - Account - - - - IdentityReference2 - - - ExcludeExplicit - - - - - - ExcludeInherited - - - - - - Path - - - - String[] - - - - - - IncludeRootFolder - - - - - SwitchParameter - - - - - - Account - - - - IdentityReference2 - - IdentityReference2 - - - - - - ExcludeExplicit - - - - - SwitchParameter - - - - - - ExcludeInherited - - - - - SwitchParameter - - - - - - Path - - - - String[] - - String[] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Get-SimpleEffectiveAccess - - - - - - - - Get - SimpleEffectiveAccess - - - - - - - - - Get-SimpleEffectiveAccess - - IncludeRootFolder - - - - - - Account - - - - IdentityReference2 - - - Path - - - - String[] - - - - - - IncludeRootFolder - - - - - SwitchParameter - - - - - - Account - - - - IdentityReference2 - - IdentityReference2 - - - - - - Path - - - - String[] - - String[] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Remove-Access - - - - - - - - Remove - Access - - - - - - - - - Remove-Access - - Account - - - - IdentityReference2 - - - AccessRights - - - - FileSystemRights - - - AccessType - - - - AccessControlType - - - InheritanceFlags - - - - InheritanceFlags - - - PropagationFlags - - - - PropagationFlags - - - PassThru - - - - - - Path - - - - String[] - - - - Remove-Access - - Account - - - - IdentityReference2 - - - AccessRights - - - - FileSystemRights - - - AccessType - - - - AccessControlType - - - AppliesTo - - - - ApplyTo - - - PassThru - - - - - - Path - - - - String[] - - - - - - Account - - - - IdentityReference2 - - IdentityReference2 - - - - - - AccessRights - - - - FileSystemRights - - FileSystemRights - - - - - - AccessType - - - - AccessControlType - - AccessControlType - - - - - - InheritanceFlags - - - - InheritanceFlags - - InheritanceFlags - - - - - - PropagationFlags - - - - PropagationFlags - - PropagationFlags - - - - - - PassThru - - - - - SwitchParameter - - - - - - Path - - - - String[] - - String[] - - - - - - AppliesTo - - - - ApplyTo - - ApplyTo - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Set-Owner - - - - - - - - Set - Owner - - - - - - - - - Set-Owner - - Account - - - - IdentityReference2 - - - PassThru - - - - - - Recurse - - - - - - Path - - - - String[] - - - - - - Account - - - - IdentityReference2 - - IdentityReference2 - - - - - - PassThru - - - - - SwitchParameter - - - - - - Recurse - - - - - SwitchParameter - - - - - - Path - - - - String[] - - String[] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Show-SimpleAccess - - - - - - - - Show - SimpleAccess - - - - - - - - - Show-SimpleAccess - - IncludeRootFolder - - - - - - Account - - - - IdentityReference2 - - - ExcludeExplicit - - - - - - ExcludeInherited - - - - - - Path - - - - String[] - - - - - - IncludeRootFolder - - - - - SwitchParameter - - - - - - Account - - - - IdentityReference2 - - IdentityReference2 - - - - - - ExcludeExplicit - - - - - SwitchParameter - - - - - - ExcludeInherited - - - - - SwitchParameter - - - - - - Path - - - - String[] - - String[] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Show-SimpleEffectiveAccess - - - - - - - - Show - SimpleEffectiveAccess - - - - - - - - - Show-SimpleEffectiveAccess - - IncludeRootFolder - - - - - - Account - - - - IdentityReference2 - - - Path - - - - String[] - - - - - - IncludeRootFolder - - - - - SwitchParameter - - - - - - Account - - - - IdentityReference2 - - IdentityReference2 - - - - - - Path - - - - String[] - - String[] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/NTFSSecurity/NTFSSecurity.Init.ps1 b/NTFSSecurity/NTFSSecurity.Init.ps1 deleted file mode 100644 index e841d8f..0000000 --- a/NTFSSecurity/NTFSSecurity.Init.ps1 +++ /dev/null @@ -1,81 +0,0 @@ -#region Internals -#region C# Code -$type_NTFS1 = @' - using System; - using System.IO; - using System.Collections; - using System.Runtime.InteropServices; - using Microsoft.Win32.SafeHandles; - - namespace NTFS - { - public class DriveInfoExt - { - [DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Auto)] - static extern bool GetDiskFreeSpace(string lpRootPathName, - out uint lpSectorsPerCluster, - out uint lpBytesPerSector, - out uint lpNumberOfFreeClusters, - out uint lpTotalNumberOfClusters); - - DriveInfo _drive = null; - uint _sectorsPerCluster = 0; - uint _bytesPerSector = 0; - uint _numberOfFreeClusters = 0; - uint _totalNumberOfClusters = 0; - - public uint SectorsPerCluster { get { return _sectorsPerCluster; } } - public uint BytesPerSector { get { return _bytesPerSector; } } - public uint NumberOfFreeClusters { get { return _numberOfFreeClusters; } } - public uint TotalNumberOfClusters { get { return _totalNumberOfClusters; } } - public DriveInfo Drive { get { return _drive; } } - public string DriveName { get { return _drive.Name; } } - public string VolumeName { get { return _drive.VolumeLabel; } } - - public DriveInfoExt(string DriveName) - { - _drive = new DriveInfo(DriveName); - - GetDiskFreeSpace(_drive.Name, - out _sectorsPerCluster, - out _bytesPerSector, - out _numberOfFreeClusters, - out _totalNumberOfClusters); - } - } - - public class FileInfoExt - { - [DllImport("kernel32.dll", SetLastError = true, EntryPoint = "GetCompressedFileSize")] - static extern uint GetCompressedFileSize(string lpFileName, out uint lpFileSizeHigh); - - public static ulong GetCompressedFileSize(string filename) - { - uint high; - uint low; - low = GetCompressedFileSize(filename, out high); - int error = Marshal.GetLastWin32Error(); - - if (high == 0 && low == 0xFFFFFFFF && error != 0) - { - throw new System.ComponentModel.Win32Exception(error); - } - else - { - return ((ulong)high << 32) + low; - } - } - } - } -'@ -#endregion -#endregion - -Add-Type -TypeDefinition $type_NTFS1 -Add-Type -Path $PSScriptRoot\Security2.dll -Add-Type -Path $PSScriptRoot\PrivilegeControl.dll -ReferencedAssemblies $PSScriptRoot\ProcessPrivileges.dll -Add-Type -Path $PSScriptRoot\ProcessPrivileges.dll - -#using Update-FormatData and not FormatsToProcess in the PSD1 as FormatsToProcess does not offer -#putting format data in front of the default data. This is required to make the new formatter the default ones. -Update-FormatData -PrependPath $PSScriptRoot\NTFSSecurity.format.ps1xml \ No newline at end of file diff --git a/NTFSSecurity/NTFSSecurity.csproj b/NTFSSecurity/NTFSSecurity.csproj deleted file mode 100644 index be01302..0000000 --- a/NTFSSecurity/NTFSSecurity.csproj +++ /dev/null @@ -1,178 +0,0 @@ - - - - Debug - AnyCPU - 8.0.30703 - 2.0 - {17768E1A-1422-4BD2-A9A5-42BA9FEB82B8} - Library - Properties - NTFSSecurity - NTFSSecurity - v3.5 - 512 - Client - SAK - SAK - SAK - SAK - - - true - full - false - ..\..\..\..\..\Program Files\WindowsPowerShell\Modules\NTFSSecurity\ - TRACE;DEBUG - prompt - 4 - false - false - - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - false - bin\Release\NTFSSecurity.XML - - - - - - - - ..\..\..\..\..\..\Program Files (x86)\Reference Assemblies\Microsoft\WindowsPowerShell\v1.0\System.Management.Automation.dll - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Form - - - ShowSimpleEffectiveAccess.cs - - - - - True - True - Resources.resx - - - Form - - - ShowSimpleAccess.cs - - - - - {f0f9af1e-d5b5-4d72-804a-5380622fbdea} - AlphaFS - - - {01EAB41B-B2CE-49FE-AB5A-0F0FF0A9A7EE} - PrivilegeControl - - - {410CAEE5-D287-4A18-9B38-BB87397D218D} - ProcessPrivileges - - - {B437C364-5BC7-42E4-93F7-0F459A5DF0D0} - Security2 - - - - - - PreserveNewest - Designer - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - - - - ShowSimpleEffectiveAccess.cs - - - PublicResXFileCodeGenerator - Resources.Designer.cs - - - ShowSimpleAccess.cs - - - - - PreserveNewest - - - - - - - - \ No newline at end of file diff --git a/NTFSSecurity/NTFSSecurity.csproj.user b/NTFSSecurity/NTFSSecurity.csproj.user deleted file mode 100644 index 5283ef1..0000000 --- a/NTFSSecurity/NTFSSecurity.csproj.user +++ /dev/null @@ -1,6 +0,0 @@ - - - - ShowAllFiles - - \ No newline at end of file diff --git a/NTFSSecurity/NTFSSecurity.csproj.vspscc b/NTFSSecurity/NTFSSecurity.csproj.vspscc deleted file mode 100644 index b6d3289..0000000 --- a/NTFSSecurity/NTFSSecurity.csproj.vspscc +++ /dev/null @@ -1,10 +0,0 @@ -"" -{ -"FILE_VERSION" = "9237" -"ENLISTMENT_CHOICE" = "NEVER" -"PROJECT_FILE_RELATIVE_PATH" = "" -"NUMBER_OF_EXCLUDED_FILES" = "0" -"ORIGINAL_PROJECT_FILE_PATH" = "" -"NUMBER_OF_NESTED_PROJECTS" = "0" -"SOURCE_CONTROL_SETTINGS_PROVIDER" = "PROVIDER" -} diff --git a/NTFSSecurity/NTFSSecurity.format.ps1xml b/NTFSSecurity/NTFSSecurity.format.ps1xml deleted file mode 100644 index c82769d..0000000 --- a/NTFSSecurity/NTFSSecurity.format.ps1xml +++ /dev/null @@ -1,500 +0,0 @@ - - - - - - FileSystemTypes2 - - Alphaleonis.Win32.Filesystem.DirectoryInfo - Alphaleonis.Win32.Filesystem.FileInfo - - - - - - - SimpleFileSystemGrouping - - - - - - 4 - - - - if ($global:tempFullName -ne $_.FullName) - { - "Path: $($_.FullName) (Inheritance $(if ($_.InheritanceEnabled) { "enabled" } else { "disabled" }))" - $global:FullName = $_.FullName - } - - - - - - - - - - - - - SimpleFileSystemAccessRule2Grouping - - - - - - 4 - - - - if ($global:tempFullName -ne $_.FullName) - { - "Path: $($_.FullName)" - $global:FullName = $_.FullName - } - - - - - - - - - - - - - FileSystemTypes2-GroupingFormat - - - - - - 4 - - - - - Split-Path -Path $_.FullName -Parent - - - - - - - - - - - - - - - - - Security2.FileSystemAccessRule2 - - Security2.FileSystemAccessRule2 - - - FullName - SimpleFileSystemGrouping - - - - - 35 - - - - - - - 25 - - - - - - - - - - - - - - - - - - if ((Get-Module NTFSSecurity).PrivateData.ShowAccountSid) - { - '{0} ({1})' -f $_.Account.AccountName, $_.Account.Sid - } - else - { - $_.Account.ToString() - } - - - - AccessRights - - - - [Security2.FileSystemSecurity2]::ConvertToApplyTo($_.InheritanceFlags, $_.PropagationFlags) - - - - AccessControlType - - - IsInherited - - - InheritedFrom - - - - - - - - - Security2.FileSystemAuditRule2 - - Security2.FileSystemAuditRule2 - - - FullName - SimpleFileSystemGrouping - - - - - 35 - - - - - - - 25 - - - - - - - - - - - - - - - - - - if ((Get-Module NTFSSecurity).PrivateData.ShowAccountSid) - { - '{0} ({1})' -f $_.Account.AccountName, $_.Account.Sid - } - else - { - $_.Account.ToString() - } - - - - AccessRights - - - - [Security2.FileSystemSecurity2]::ConvertToApplyTo($_.InheritanceFlags, $_.PropagationFlags) - - - - AuditFlags - - - IsInherited - - - InheritedFrom - - - - - - - - - Security2.SimpleFileSystemAuditRule2 - - Security2.SimpleFileSystemAuditRule2 - - - FullName - SimpleFileSystemGrouping - - - - - 35 - - - - - - - 25 - - - - - - - - - - - - - - - - if ((Get-Module NTFSSecurity).PrivateData.ShowAccountSid) - { - '{0} ({1})' -f $_.Account.AccountName, $_.Account.Sid - } - else - { - $_.Account.ToString() - } - - - - AccessRights - - - - [Security2.FileSystemSecurity2]::ConvertToApplyTo($_.InheritanceFlags, $_.PropagationFlags) - - - - AuditFlags - - - IsInherited - - - - - - - - - Security2.FileSystemEffectivePermissionEntry - - Security2.FileSystemEffectivePermissionEntry - - - - - - - - - - - - - - - - - - - - - - Name - - - AccessAsString - - - AccessMask - - - - if ((Get-Module NTFSSecurity).PrivateData.ShowAccountSid) - { - '{0} ({1})' -f $_.Account.AccountName, $_.Account.Sid - } - else - { - $_.Account.ToString() - } - - - - - - - - - - Security2.FileSystemInheritanceInfo - - Security2.FileSystemInheritanceInfo - - - - - - - - - - - - - - - - - - - Name - - - AccessInheritanceEnabled - - - AuditInheritanceEnabled - - - - - - - - - Children2 - - FileSystemTypes2 - - - if ($_.DirectoryName) { $_.DirectoryName } else { $_.Parent.FullName } - FileSystemTypes2-GroupingFormat - - - - - - 7 - Left - - - - 8 - Right - - - - 25 - Right - - - - 15 - Right - - - - - - - - - - - Mode - - - - !$_.IsInheritanceBlocked - - - - - [String]::Format("{0,10} {1,8}", $_.LastWriteTime.ToString("d"), $_.LastWriteTime.ToString("t")) - - - - - if ($_ -is [Alphaleonis.Win32.Filesystem.FileInfo]) - { - [Math]::Round($_.Length / 1MB, 2).ToString() - } - else - { - " {0,-13}" -f "<DIR>" - } - - - - Name - - - - - - - - - Alphaleonis.Win32.Filesystem.FileInfo+Hash - - Alphaleonis.Win32.Filesystem.FileInfo+Hash - - - - - - - - - - - - - - - - - - - - Algorithm - - - Hash - - - FullName - - - - - - - - - \ No newline at end of file diff --git a/NTFSSecurity/NTFSSecurity.psd1 b/NTFSSecurity/NTFSSecurity.psd1 deleted file mode 100644 index a9c80f7..0000000 --- a/NTFSSecurity/NTFSSecurity.psd1 +++ /dev/null @@ -1,98 +0,0 @@ -@{ - ModuleToProcess = 'NTFSSecurity.psm1' - - ModuleVersion = '4.2.3' - - GUID = 'cd303a6c-f405-4dcb-b1ce-fbc2c52264e9' - - Author = 'Raimund Andree' - - CompanyName = 'Raimund Andree' - - Copyright = '2015' - - Description = 'Windows PowerShell Module for managing file and folder security on NTFS volumes' - - PowerShellVersion = '2.0' - - DotNetFrameworkVersion = '3.5' - - ScriptsToProcess = @('NTFSSecurity.Init.ps1') - - TypesToProcess = @('NTFSSecurity.types.ps1xml') - - FormatsToProcess = @() - - NestedModules = @('NTFSSecurity.dll') - - AliasesToExport = '*' - - CmdletsToExport = 'Add-NTFSAccess', - 'Clear-NTFSAccess', - 'Disable-NTFSAccessInheritance', - 'Enable-NTFSAccessInheritance', - 'Get-NTFSAccess', - 'Get-NTFSEffectiveAccess', - 'Get-NTFSOrphanedAccess', - 'Get-NTFSSimpleAccess', - 'Remove-NTFSAccess', - 'Show-NTFSSimpleAccess', - #---------------------------------------------- - 'Add-NTFSAudit', - 'Clear-NTFSAudit', - 'Disable-NTFSAuditInheritance', - 'Enable-NTFSAuditInheritance', - 'Get-NTFSAudit', - 'Get-NTFSOrphanedAudit', - 'Remove-NTFSAudit', - #---------------------------------------------- - 'Disable-NTFSAccessInheritance', - 'Disable-NTFSAuditInheritance', - 'Enable-NTFSAccessInheritance', - 'Enable-NTFSAuditInheritance', - 'Get-NTFSInheritance', - 'Set-NTFSInheritance', - #---------------------------------------------- - 'Get-NTFSOwner', - 'Set-NTFSOwner', - #---------------------------------------------- - 'Get-NTFSSecurityDescriptor', - 'Set-NTFSSecurityDescriptor', - #---------------------------------------------- - 'Disable-Privileges', - 'Enable-Privileges', - 'Get-Privileges', - #---------------------------------------------- - 'Copy-Item2', - 'Get-ChildItem2', - 'Get-Item2', - 'Move-Item2', - 'Remove-Item2', - #---------------------------------------------- - 'Test-Path2', - #---------------------------------------------- - 'Get-NTFSHardLink', - 'New-NTFSHardLink', - 'New-NTFSSymbolicLink', - #---------------------------------------------- - 'Get-DiskSpace', - 'Get-FileHash2' - - ModuleList = @('NTFSSecurity.dll') - - FileList = @('NTFSSecurity.dll', 'NTFSSecurity.types.ps1xml', 'NTFSSecurity.format.ps1xml', 'NTFSSecurity.Init.ps1', 'NTFSSecurity.psm1') - - PrivateData = @{ - EnablePrivileges = $true - GetInheritedFrom = $true - GetFileSystemModeProperty = $true - ShowAccountSid = $false - IdentifyHardLinks = $true - - PSData = @{ - Tags = @('AccessControl', 'ACL', 'DirectorySecurity', 'FileSecurity', 'FileSystem', 'FileSystemSecurity', 'NTFS', 'Module', 'AccessRights') - LicenseUri = 'https://ntfssecurity.codeplex.com/license' - ProjectUri = 'https://ntfssecurity.codeplex.com' - } - } -} \ No newline at end of file diff --git a/NTFSSecurity/NTFSSecurity.psm1 b/NTFSSecurity/NTFSSecurity.psm1 deleted file mode 100644 index acb0828..0000000 --- a/NTFSSecurity/NTFSSecurity.psm1 +++ /dev/null @@ -1,52 +0,0 @@ -<# -#Access cmdlets -New-Alias -Name Get-Ace -Value Get-NTFSAccess -ErrorAction SilentlyContinue -New-Alias -Name Get-Access -Value Get-NTFSAccess -ErrorAction SilentlyContinue - -New-Alias -Name Get-EffectiveAccess -Value Get-NTFSEffectiveAccess -ErrorAction SilentlyContinue - -New-Alias -Name Add-Ace -Value Add-NTFSAccess -ErrorAction SilentlyContinue -New-Alias -Name Add-Access -Value Add-NTFSAccess -ErrorAction SilentlyContinue - -New-Alias -Name Remove-Ace -Value Remove-NTFSAccess -ErrorAction SilentlyContinue -New-Alias -Name Remove-Access -Value Remove-NTFSAccess -ErrorAction SilentlyContinue - -New-Alias -Name Get-OrphanedAccess -Value Get-NTFSOrphanedAccess -ErrorAction SilentlyContinue -New-Alias -Name Get-OrphanedAce -Value Get-NTFSOrphanedAccess -ErrorAction SilentlyContinue - -New-Alias -Name Get-AccessInheritance -Value Get-NTFSAccessInheritance -ErrorAction SilentlyContinue - -New-Alias -Name Enable-Inheritance -Value Enable-NTFSAccessInheritance -ErrorAction SilentlyContinue -New-Alias -Name Enable-AccessInheritance -Value Enable-NTFSAccessInheritance -ErrorAction SilentlyContinue - -New-Alias -Name Disable-Inheritance -Value Disable-NTFSAccessInheritance -ErrorAction SilentlyContinue -New-Alias -Name Disable-AccessInheritance -Value Disable-NTFSAccessInheritance -ErrorAction SilentlyContinue - -#Audit cmdlets -New-Alias -Name Get-Audit -Value Get-NTFSAudit -ErrorAction SilentlyContinue - -New-Alias -Name Add-Audit -Value Add-NTFSAudit -ErrorAction SilentlyContinue - -New-Alias -Name Remove-Audit -Value Remove-NTFSAudit -ErrorAction SilentlyContinue - -New-Alias -Name Get-OrphanedAudit -Value Get-NTFSOrphanedAudit -ErrorAction SilentlyContinue - -New-Alias -Name Get-AuditInheritance -Value Get-NTFSAuditInheritance -ErrorAction SilentlyContinue - -New-Alias -Name Enable-AuditInheritance -Value Enable-NTFSAuditInheritance -ErrorAction SilentlyContinue - -New-Alias -Name Disable-AuditInheritance -Value Disable-NTFSAuditInheritance -ErrorAction SilentlyContinue - -#Owner cmdlets -New-Alias -Name Get-Owner -Value Get-NTFSOwner -ErrorAction SilentlyContinue - -New-Alias -Name Set-Owner -Value Set-NTFSOwner -ErrorAction SilentlyContinue -#> - -#Item cmdlets -New-Alias -Name dir2 -Value Get-ChildItem2 -ErrorAction SilentlyContinue -New-Alias -Name gi2 -Value Get-Item2 -ErrorAction SilentlyContinue -New-Alias -Name rm2 -Value Remove-Item2 -ErrorAction SilentlyContinue -New-Alias -Name del2 -Value Remove-Item2 -ErrorAction SilentlyContinue - -Export-ModuleMember -Alias * -Function * -Cmdlet * \ No newline at end of file diff --git a/NTFSSecurity/NTFSSecurity.types.ps1xml b/NTFSSecurity/NTFSSecurity.types.ps1xml deleted file mode 100644 index 4944423..0000000 --- a/NTFSSecurity/NTFSSecurity.types.ps1xml +++ /dev/null @@ -1,155 +0,0 @@ - - - - - System.IO.FileInfo - - - Owner - - [Security2.IdentityReference2]$this.GetAccessControl().GetOwner([System.Security.Principal.SecurityIdentifier]) - - - - IsInheritanceBlocked - - $this.GetAccessControl([System.Security.AccessControl.AccessControlSections]::Access).AreAccessRulesProtected - - - - LengthOnDisk - - $driveInfo = New-Object NTFS.DriveInfoExt($this.PSDrive.Name + ":") - [Math]::Ceiling($this.Length / ($driveInfo.BytesPerSector * $driveInfo.SectorsPerCluster)) * ($driveInfo.BytesPerSector * $driveInfo.SectorsPerCluster) - - - - Size - LengthOnDisk - - - EnableInheritance - - - - DisableInheritance - - - - GetHash - - - - - - System.IO.DirectoryInfo - - - Owner - - [Security2.IdentityReference2]$this.GetAccessControl().GetOwner([System.Security.Principal.SecurityIdentifier]) - - - - IsInheritanceBlocked - - $this.GetAccessControl([System.Security.AccessControl.AccessControlSections]::Access).AreAccessRulesProtected - - - - EnableInheritance - - - - DisableInheritance - - - - - - - Security2.FileSystemAccessRule2 - - - AccountType - - if (-not [System.Security.Principal.WindowsIdentity]::GetCurrent().Name.ToLower().Contains([System.Environment]::MachineName.ToLower())) - { - try - { - ([ADSI]"LDAP://<SID=$($this.Account.Sid)>").ObjectClass[-1] - } - catch - { - [string]::Empty - } - } - - - - - \ No newline at end of file diff --git a/NTFSSecurity/OtherCmdlets.cs b/NTFSSecurity/OtherCmdlets.cs deleted file mode 100644 index 83edb5d..0000000 --- a/NTFSSecurity/OtherCmdlets.cs +++ /dev/null @@ -1,138 +0,0 @@ -using System.Management.Automation; -using Security2; -using System.IO; -using System.Linq; -using System; -using System.Security.AccessControl; - -namespace NTFSSecurity -{ - #region Enable-Privileges - [Cmdlet(VerbsLifecycle.Enable, "Privileges")] - [OutputType(typeof(ProcessPrivileges.PrivilegeAndAttributes))] - public class EnablePrivileges : BaseCmdletWithPrivControl - { - private bool enablePrivileges = false; - private SwitchParameter passThru; - public string[] Path { get; set; } - - [Parameter] - public SwitchParameter PassThru - { - get { return passThru; } - set { passThru = value; } - } - - protected override void BeginProcessing() - { - base.BeginProcessing(); - } - - protected override void ProcessRecord() - { - var privateData = (System.Collections.Hashtable)this.MyInvocation.MyCommand.Module.PrivateData; - var psCallStack = (CallStackFrame)this.InvokeCommand.InvokeScript("Get-PSCallStack")[1].BaseObject; - - try - { - enablePrivileges = (bool)privateData["EnablePrivileges"]; - } - catch (Exception ex) - { - throw new ParseException("Could not parse the module's PrivateData field in the module's psd1 file. Please refer to the documentation for further details", ex); - } - - //if the command is called from NTFSSecurity.Init.ps1 and EnablePrivileges is set to true in the NTFSSecurity.psd1 or if the cmdlet is called from somewhere else - if ((psCallStack.InvocationInfo.MyCommand.Name == "NTFSSecurity.Init.ps1" && enablePrivileges == true)) - { - this.EnableFileSystemPrivileges(false); - } - else if (psCallStack.InvocationInfo.MyCommand.Name != "NTFSSecurity.Init.ps1") - { - this.EnableFileSystemPrivileges(false); - } - - if (passThru) - { - this.WriteObject(this.privControl.GetPrivileges()); - } - } - - protected override void EndProcessing() - { - //nothing as we want to keep the privileges enabled - } - } - #endregion Enable-Privileges - - #region Disable-Privileges - [Cmdlet(VerbsLifecycle.Disable, "Privileges")] - [OutputType(typeof(ProcessPrivileges.PrivilegeAndAttributes))] - public class DisablePrivileges : BaseCmdletWithPrivControl - { - private SwitchParameter passThru; - public string[] Path { get; set; } - - [Parameter] - public SwitchParameter PassThru - { - get { return passThru; } - set { passThru = value; } - } - - protected override void BeginProcessing() - { - base.BeginProcessing(); - } - - protected override void ProcessRecord() - { - if (this.privControl.GetPrivileges() - .Where(p => p.PrivilegeState == ProcessPrivileges.PrivilegeState.Enabled) - .Where(p => ( - p.Privilege == ProcessPrivileges.Privilege.TakeOwnership) | - (p.Privilege == ProcessPrivileges.Privilege.Restore) | - (p.Privilege == ProcessPrivileges.Privilege.Backup)) - .Count() == 0) - { - this.WriteError(new ErrorRecord(new AdjustPriviledgeException("Privileges are not enabled"), "Disable Privilege Error", ErrorCategory.SecurityError, null)); - return; - } - - this.DisableFileSystemPrivileges(); - this.WriteVerbose("The privileges 'TakeOwnership', 'Restore' and 'Backup' are now enabled."); - - if (passThru) - { - this.WriteObject(this.privControl.GetPrivileges()); - } - } - - protected override void EndProcessing() - { - //nothing as priviliges should already been cleaned up - } - } - #endregion Enable-Privileges - - #region Get-Privileges - [Cmdlet(VerbsCommon.Get, "Privileges")] - [OutputType(typeof(ProcessPrivileges.PrivilegeAndAttributes))] - public class GetPrivileges : BaseCmdlet - { - public string[] Path { get; set; } - - protected override void BeginProcessing() - { - base.BeginProcessing(); - } - - protected override void ProcessRecord() - { - var privControl = new PrivilegeControl(); - - this.WriteObject(privControl.GetPrivileges(), true); - } - } - #endregion Get-Privileges -} \ No newline at end of file diff --git a/NTFSSecurity/OwnerCmdlets/GetOwner.cs b/NTFSSecurity/OwnerCmdlets/GetOwner.cs deleted file mode 100644 index b19e259..0000000 --- a/NTFSSecurity/OwnerCmdlets/GetOwner.cs +++ /dev/null @@ -1,99 +0,0 @@ -using Alphaleonis.Win32.Filesystem; -using Security2; -using System; -using System.Management.Automation; - -namespace NTFSSecurity.OwnerCmdlets -{ - [Cmdlet(VerbsCommon.Get, "NTFSOwner", DefaultParameterSetName = "Path")] - [OutputType(typeof(FileSystemOwner))] - public class GetOwner : BaseCmdletWithPrivControl - { - [Parameter(Position = 1, ValueFromPipeline = true, ValueFromPipelineByPropertyName = true, ParameterSetName = "Path")] - [ValidateNotNullOrEmpty] - [Alias("FullName")] - public string[] Path - { - get { return paths.ToArray(); } - set - { - paths.Clear(); - paths.AddRange(value); - } - } - - [Parameter(Mandatory = true, Position = 1, ValueFromPipeline = true, ValueFromPipelineByPropertyName = true, ParameterSetName = "SecurityDescriptor")] - [ValidateNotNullOrEmpty] - public FileSystemSecurity2[] SecurityDescriptor - { - get { return securityDescriptors.ToArray(); } - set - { - securityDescriptors.Clear(); - securityDescriptors.AddRange(value); - } - } - - protected override void BeginProcessing() - { - base.BeginProcessing(); - } - - protected override void ProcessRecord() - { - if (ParameterSetName == "Path") - { - FileSystemInfo item = null; - - foreach (var path in paths) - { - try - { - item = GetFileSystemInfo2(path); - } - catch (Exception ex) - { - WriteError(new ErrorRecord(ex, "ReadFileError", ErrorCategory.OpenError, path)); - continue; - } - - try - { - WriteObject(FileSystemOwner.GetOwner(item)); - } - catch (UnauthorizedAccessException) - { - try - { - var ownerInfo = FileSystemOwner.GetOwner(item); - var previousOwner = ownerInfo.Owner; - - FileSystemOwner.SetOwner(item, System.Security.Principal.WindowsIdentity.GetCurrent().User); - - WriteObject(FileSystemOwner.GetOwner(item)); - - FileSystemOwner.SetOwner(item, previousOwner); - } - catch (Exception ex2) - { - WriteError(new ErrorRecord(ex2, "ReadSecurityError", ErrorCategory.WriteError, path)); - continue; - } - } - catch (Exception ex) - { - WriteError(new ErrorRecord(ex, "ReadSecurityError", ErrorCategory.OpenError, path)); - continue; - } - } - } - else - { - foreach (var sd in securityDescriptors) - { - WriteObject(FileSystemOwner.GetOwner(sd)); - } - } - } - } -} diff --git a/NTFSSecurity/OwnerCmdlets/SetOwner.cs b/NTFSSecurity/OwnerCmdlets/SetOwner.cs deleted file mode 100644 index 360b6c5..0000000 --- a/NTFSSecurity/OwnerCmdlets/SetOwner.cs +++ /dev/null @@ -1,108 +0,0 @@ -using Alphaleonis.Win32.Filesystem; -using Security2; -using System; -using System.Management.Automation; - -namespace NTFSSecurity -{ - [Cmdlet(VerbsCommon.Set, "NTFSOwner", DefaultParameterSetName = "Path")] - [OutputType(typeof(FileSystemOwner))] - public class SetOwner : BaseCmdletWithPrivControl - { - private SwitchParameter passThru; - private IdentityReference2 account; - - [Parameter(Position = 1, ValueFromPipeline = true, ValueFromPipelineByPropertyName = true, ParameterSetName = "Path")] - [ValidateNotNullOrEmpty] - [Alias("FullName")] - public string[] Path - { - get { return paths.ToArray(); } - set - { - paths.Clear(); - paths.AddRange(value); - } - } - - [Parameter(Mandatory = true, Position = 1, ValueFromPipeline = true, ValueFromPipelineByPropertyName = true, ParameterSetName = "SecurityDescriptor")] - [ValidateNotNullOrEmpty] - public FileSystemSecurity2[] SecurityDescriptor - { - get { return securityDescriptors.ToArray(); } - set - { - securityDescriptors.Clear(); - securityDescriptors.AddRange(value); - } - } - - [Parameter(Mandatory = true, Position = 2, ValueFromPipelineByPropertyName = true)] - public IdentityReference2 Account - { - get { return account; } - set { account = value; } - } - - [Parameter] - public SwitchParameter PassThru - { - get { return passThru; } - set { passThru = value; } - } - - protected override void BeginProcessing() - { - base.BeginProcessing(); - } - - protected override void ProcessRecord() - { - if (ParameterSetName == "Path") - { - foreach (var path in paths) - { - FileSystemInfo item = null; - - try - { - item = GetFileSystemInfo2(path); - } - catch (Exception ex) - { - WriteError(new ErrorRecord(ex, "ReadFileError", ErrorCategory.OpenError, path)); - continue; - } - - try - { - FileSystemOwner.SetOwner(item, account); - WriteDebug("Owner set on item {0}", item.FullName); - - if (passThru) - { - WriteObject(FileSystemOwner.GetOwner(item)); - } - } - catch (Exception ex) - { - WriteError(new ErrorRecord(ex, "SetOwnerError", ErrorCategory.WriteError, path)); - continue; - } - } - } - else - { - foreach (var sd in securityDescriptors) - { - FileSystemOwner.SetOwner(sd, account); - - if (passThru) - { - WriteObject(FileSystemOwner.GetOwner(sd)); - } - } - } - } - } -} \ No newline at end of file diff --git a/NTFSSecurity/PathCmdlets/TestPath2.cs b/NTFSSecurity/PathCmdlets/TestPath2.cs deleted file mode 100644 index 220f7da..0000000 --- a/NTFSSecurity/PathCmdlets/TestPath2.cs +++ /dev/null @@ -1,85 +0,0 @@ -using Alphaleonis.Win32.Filesystem; -using System.Collections.Generic; -using System.Management.Automation; - -namespace NTFSSecurity -{ - [Cmdlet(VerbsDiagnostic.Test, "Path2")] - [OutputType(typeof(FileInfo), typeof(DirectoryInfo))] - public class TestPath2 : BaseCmdlet - { - private TestPathType pathType = TestPathType.Any; - - [Parameter(Position = 1, Mandatory = true, ValueFromPipeline = true, ValueFromPipelineByPropertyName = true)] - [ValidateNotNullOrEmpty] - [Alias("FullName")] - public string[] Path - { - get { return paths.ToArray(); } - set - { - paths.Clear(); - paths.AddRange(value); - } - } - - [Parameter(ValueFromPipelineByPropertyName = true)] - public TestPathType PathType - { - get { return pathType; } - set { pathType = value; } - } - - protected override void BeginProcessing() - { - base.BeginProcessing(); - - if (paths.Count == 0) - { - paths = new List() { GetVariableValue("PWD").ToString() }; - } - } - - protected override void ProcessRecord() - { - foreach (var path in paths) - { - try - { - FileSystemInfo item; - TryGetFileSystemInfo2(path, out item); - - if (item == null) - WriteObject(false); - else - { - if (PathType == TestPathType.Any) - WriteObject(true); - else if (PathType == TestPathType.Container & item is DirectoryInfo) - WriteObject(true); - else if (PathType == TestPathType.Leaf & item is FileInfo) - WriteObject(true); - else - WriteObject(false); - } - } - catch (System.IO.FileNotFoundException ex) - { - WriteError(new ErrorRecord(ex, "PathNotFound", ErrorCategory.ObjectNotFound, path)); - } - } - } - - protected override void EndProcessing() - { - base.EndProcessing(); - } - } - - public enum TestPathType - { - Any, - Container, - Leaf - } -} \ No newline at end of file diff --git a/NTFSSecurity/Properties/AssemblyInfo.cs b/NTFSSecurity/Properties/AssemblyInfo.cs deleted file mode 100644 index 104c43d..0000000 --- a/NTFSSecurity/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,36 +0,0 @@ -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("NTFSSecurity")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("Microsoft")] -[assembly: AssemblyProduct("NTFSSecurity")] -[assembly: AssemblyCopyright("Copyright © Microsoft 2012")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("8f2c77c5-b143-4194-9e6f-840dfe19e5c4")] - -// 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("4.2.1.0")] -[assembly: AssemblyFileVersion("4.2.1.0")] diff --git a/NTFSSecurity/Properties/Resources.Designer.cs b/NTFSSecurity/Properties/Resources.Designer.cs deleted file mode 100644 index b2c9fb2..0000000 --- a/NTFSSecurity/Properties/Resources.Designer.cs +++ /dev/null @@ -1,82 +0,0 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// Runtime Version:4.0.30319.18033 -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ - -namespace NTFSSecurity.Properties { - using System; - - - ///

- /// A strongly-typed resource class, for looking up localized strings, etc. - /// - // This class was auto-generated by the StronglyTypedResourceBuilder - // class via a tool like ResGen or Visual Studio. - // To add or remove a member, edit your .ResX file then rerun ResGen - // with the /str option, or rebuild your VS project. - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - public class Resources { - - private static global::System.Resources.ResourceManager resourceMan; - - private static global::System.Globalization.CultureInfo resourceCulture; - - [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - internal Resources() { - } - - /// - /// Returns the cached ResourceManager instance used by this class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - public static global::System.Resources.ResourceManager ResourceManager { - get { - if (object.ReferenceEquals(resourceMan, null)) { - global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("NTFSSecurity.Properties.Resources", typeof(Resources).Assembly); - resourceMan = temp; - } - return resourceMan; - } - } - - /// - /// Overrides the current thread's CurrentUICulture property for all - /// resource lookups using this strongly typed resource class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - public static global::System.Globalization.CultureInfo Culture { - get { - return resourceCulture; - } - set { - resourceCulture = value; - } - } - - /// - /// Looks up a localized string similar to . - /// - public static string ContainerIcon { - get { - return ResourceManager.GetString("ContainerIcon", resourceCulture); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - public static System.Drawing.Bitmap IconContainer { - get { - object obj = ResourceManager.GetObject("IconContainer", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - } -} diff --git a/NTFSSecurity/Properties/Resources.resx b/NTFSSecurity/Properties/Resources.resx deleted file mode 100644 index 75e4105..0000000 --- a/NTFSSecurity/Properties/Resources.resx +++ /dev/null @@ -1,127 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - - - - - ..\Resources\IconContainer.bmp;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - \ No newline at end of file diff --git a/NTFSSecurity/Resources/IconContainer.bmp b/NTFSSecurity/Resources/IconContainer.bmp deleted file mode 100644 index 55516c7aaa3591604865d4cd18379f8f650c3104..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3382 zcmeIwA#&YN425B3CLjUbgJ57$uqM1+gO+lZkut%6E<(#F6wORPc)-i=r?4!c_Vwp; zZ3Fx2>gm_x54#?Zw`LE_etx;JyM1xL@%<_@PLnpcGPUluKQDjn-|L&12NJySLSxLr z;9wF7q0kt!G&lm>q)=$g*LR%^B!og^%$Qm^0tune7=F^=2qc6;W6U^h9D#&TXpDvN zo8~x1LMSw5m*!3e5<;OdyXkPr%u*^;D_frLmI06Zw(3st}a59h(3XRzqWFR3F8nf*xCj$wg(3oxIax#z*3XRz|Zzlr@q3r$RV$Z*g8j2NO iuBTlt#|(_)(Q$tsX9dm*oE11La8}@~z*&L+tOB3FDm>c& diff --git a/NTFSSecurity/Resources/User.jpg b/NTFSSecurity/Resources/User.jpg deleted file mode 100644 index 3007e5b28a66bd5fda30f8a3dbbe6b873ca5c579..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13928 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 P_b(3LINVjGP~Q4KPNWya diff --git a/NTFSSecurity/Resources/container.jpg b/NTFSSecurity/Resources/container.jpg deleted file mode 100644 index 5af2b00da41ab59ece7c629dbee14b775f72db4e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9248 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 diff --git a/NTFSSecurity/SecurityDescriptorCmdlets/GetSecurityDescriptor.cs b/NTFSSecurity/SecurityDescriptorCmdlets/GetSecurityDescriptor.cs deleted file mode 100644 index 0b9dc93..0000000 --- a/NTFSSecurity/SecurityDescriptorCmdlets/GetSecurityDescriptor.cs +++ /dev/null @@ -1,81 +0,0 @@ -using Alphaleonis.Win32.Filesystem; -using Security2; -using System; -using System.Management.Automation; - -namespace NTFSSecurity -{ - [Cmdlet(VerbsCommon.Get, "NTFSSecurityDescriptor")] - [OutputType(typeof(FileSystemSecurity2))] - public class GetSecurityDescriptor : BaseCmdletWithPrivControl - { - [Parameter(Position = 1, ValueFromPipeline = true, ValueFromPipelineByPropertyName = true)] - [ValidateNotNullOrEmpty] - [Alias("FullName")] - public string[] Path - { - get { return paths.ToArray(); } - set - { - paths.Clear(); - paths.AddRange(value); - } - } - - protected override void BeginProcessing() - { - base.BeginProcessing(); - - if (paths.Count == 0) - { - paths.Add(GetVariableValue("PWD").ToString()); - } - } - - protected override void ProcessRecord() - { - FileSystemInfo item = null; - - foreach (var path in paths) - { - try - { - item = GetFileSystemInfo2(path); - } - catch (Exception ex) - { - WriteError(new ErrorRecord(ex, "ReadFileError", ErrorCategory.OpenError, path)); - continue; - } - - try - { - WriteObject(new FileSystemSecurity2(item)); - } - catch (UnauthorizedAccessException) - { - try - { - var ownerInfo = FileSystemOwner.GetOwner(item); - var previousOwner = ownerInfo.Owner; - - FileSystemOwner.SetOwner(item, System.Security.Principal.WindowsIdentity.GetCurrent().User); - - WriteObject(new FileSystemSecurity2(item)); - - FileSystemOwner.SetOwner(item, previousOwner); - } - catch (Exception ex2) - { - WriteError(new ErrorRecord(ex2, "ReadSecurityError", ErrorCategory.WriteError, path)); - continue; - } - } - catch (Exception ex) - { - WriteError(new ErrorRecord(ex, "ReadSecurityError", ErrorCategory.OpenError, path)); - } - } - } - } -} diff --git a/NTFSSecurity/SecurityDescriptorCmdlets/SetSecurityDescriptor.cs b/NTFSSecurity/SecurityDescriptorCmdlets/SetSecurityDescriptor.cs deleted file mode 100644 index 8d14e60..0000000 --- a/NTFSSecurity/SecurityDescriptorCmdlets/SetSecurityDescriptor.cs +++ /dev/null @@ -1,75 +0,0 @@ -using Security2; -using System; -using System.Management.Automation; - -namespace NTFSSecurity -{ - [Cmdlet(VerbsCommon.Set, "NTFSSecurityDescriptor")] - [OutputType(typeof(FileSystemSecurity2))] - public class SetSecurityDescriptor : BaseCmdletWithPrivControl - { - private SwitchParameter passThru; - - [Parameter(Mandatory = true, Position = 2, ValueFromPipeline = true, ValueFromPipelineByPropertyName = true)] - public FileSystemSecurity2[] SecurityDescriptor - { - get { return securityDescriptors.ToArray(); } - set - { - securityDescriptors.Clear(); - securityDescriptors.AddRange(value); - } - } - - [Parameter()] - public SwitchParameter PassThru - { - get { return passThru; } - set { passThru = value; } - } - - protected override void BeginProcessing() - { - base.BeginProcessing(); - } - - protected override void ProcessRecord() - { - foreach (var sd in securityDescriptors) - { - try - { - sd.Write(); - - if (passThru) - { - WriteObject(new FileSystemSecurity2(sd.Item)); - } - } - catch (UnauthorizedAccessException) - { - try - { - var ownerInfo = FileSystemOwner.GetOwner(sd.Item); - var previousOwner = ownerInfo.Owner; - - FileSystemOwner.SetOwner(sd.Item, System.Security.Principal.WindowsIdentity.GetCurrent().User); - - sd.Write(); - - FileSystemOwner.SetOwner(sd.Item, previousOwner); - } - catch (Exception ex2) - { - WriteError(new ErrorRecord(ex2, "WriteSdError", ErrorCategory.WriteError, sd.Item)); - continue; - } - } - catch (Exception ex) - { - WriteError(new ErrorRecord(ex, "WriteSdError", ErrorCategory.WriteError, sd.Item)); - } - } - } - } -} diff --git a/NTFSSecurity/ShowSimpleAccess.Designer.cs b/NTFSSecurity/ShowSimpleAccess.Designer.cs deleted file mode 100644 index b189990..0000000 --- a/NTFSSecurity/ShowSimpleAccess.Designer.cs +++ /dev/null @@ -1,309 +0,0 @@ -namespace NTFSSecurity -{ - partial class ShowSimpleAccessForm - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Windows Form Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - this.components = new System.ComponentModel.Container(); - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ShowSimpleAccessForm)); - this.trvDirectories = new System.Windows.Forms.TreeView(); - this.imlIcons = new System.Windows.Forms.ImageList(this.components); - this.lstPermissions = new System.Windows.Forms.ListView(); - this.chdIdentity = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); - this.chdRights = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); - this.chdAccessControlType = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); - this.chkRemoveFoldersWithoutAccess = new System.Windows.Forms.CheckBox(); - this.grpFilter = new System.Windows.Forms.GroupBox(); - this.grpSearchForIdentity = new System.Windows.Forms.GroupBox(); - this.btnSearchForIdentityNext = new System.Windows.Forms.Button(); - this.btnSearchForIdentityPrev = new System.Windows.Forms.Button(); - this.txtSearchForIdentity = new System.Windows.Forms.TextBox(); - this.btnSearchForIdentity = new System.Windows.Forms.Button(); - this.grpSearchForFolder = new System.Windows.Forms.GroupBox(); - this.btnSearchForFolderPrev = new System.Windows.Forms.Button(); - this.btnSearchForFolderNext = new System.Windows.Forms.Button(); - this.btnSearchForFolder = new System.Windows.Forms.Button(); - this.txtSearchForFolder = new System.Windows.Forms.TextBox(); - this.labDirectoryTreeView = new System.Windows.Forms.Label(); - this.labAccessView = new System.Windows.Forms.Label(); - this.ttSearchForFolder = new System.Windows.Forms.ToolTip(this.components); - this.grpFilter.SuspendLayout(); - this.grpSearchForIdentity.SuspendLayout(); - this.grpSearchForFolder.SuspendLayout(); - this.SuspendLayout(); - // - // trvDirectories - // - this.trvDirectories.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Left))); - this.trvDirectories.ImageIndex = 0; - this.trvDirectories.ImageList = this.imlIcons; - this.trvDirectories.Location = new System.Drawing.Point(12, 29); - this.trvDirectories.Name = "trvDirectories"; - this.trvDirectories.SelectedImageIndex = 0; - this.trvDirectories.Size = new System.Drawing.Size(320, 574); - this.trvDirectories.TabIndex = 0; - this.trvDirectories.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.trvDirectories_AfterSelect); - // - // imlIcons - // - this.imlIcons.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("imlIcons.ImageStream"))); - this.imlIcons.TransparentColor = System.Drawing.Color.Transparent; - this.imlIcons.Images.SetKeyName(0, "container.jpg"); - // - // lstPermissions - // - this.lstPermissions.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.lstPermissions.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { - this.chdIdentity, - this.chdRights, - this.chdAccessControlType}); - this.lstPermissions.Location = new System.Drawing.Point(338, 29); - this.lstPermissions.Name = "lstPermissions"; - this.lstPermissions.Size = new System.Drawing.Size(480, 342); - this.lstPermissions.SmallImageList = this.imlIcons; - this.lstPermissions.TabIndex = 1; - this.lstPermissions.UseCompatibleStateImageBehavior = false; - this.lstPermissions.View = System.Windows.Forms.View.Details; - // - // chdIdentity - // - this.chdIdentity.Text = "Identity"; - // - // chdRights - // - this.chdRights.Text = "Rights"; - // - // chdAccessControlType - // - this.chdAccessControlType.Text = "AccessControlType"; - // - // chkRemoveFoldersWithoutAccess - // - this.chkRemoveFoldersWithoutAccess.AutoSize = true; - this.chkRemoveFoldersWithoutAccess.Location = new System.Drawing.Point(6, 19); - this.chkRemoveFoldersWithoutAccess.Name = "chkRemoveFoldersWithoutAccess"; - this.chkRemoveFoldersWithoutAccess.Size = new System.Drawing.Size(347, 17); - this.chkRemoveFoldersWithoutAccess.TabIndex = 2; - this.chkRemoveFoldersWithoutAccess.Text = "Remove Folders that do not have different access than their parents"; - this.chkRemoveFoldersWithoutAccess.UseVisualStyleBackColor = true; - this.chkRemoveFoldersWithoutAccess.CheckedChanged += new System.EventHandler(this.chkRemoveFoldersWithoutAccess_CheckedChanged); - // - // grpFilter - // - this.grpFilter.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.grpFilter.Controls.Add(this.grpSearchForIdentity); - this.grpFilter.Controls.Add(this.grpSearchForFolder); - this.grpFilter.Controls.Add(this.chkRemoveFoldersWithoutAccess); - this.grpFilter.Location = new System.Drawing.Point(338, 377); - this.grpFilter.Name = "grpFilter"; - this.grpFilter.Size = new System.Drawing.Size(480, 226); - this.grpFilter.TabIndex = 3; - this.grpFilter.TabStop = false; - this.grpFilter.Text = "Filter"; - // - // grpSearchForIdentity - // - this.grpSearchForIdentity.Controls.Add(this.btnSearchForIdentityNext); - this.grpSearchForIdentity.Controls.Add(this.btnSearchForIdentityPrev); - this.grpSearchForIdentity.Controls.Add(this.txtSearchForIdentity); - this.grpSearchForIdentity.Controls.Add(this.btnSearchForIdentity); - this.grpSearchForIdentity.Location = new System.Drawing.Point(9, 125); - this.grpSearchForIdentity.Name = "grpSearchForIdentity"; - this.grpSearchForIdentity.Size = new System.Drawing.Size(384, 95); - this.grpSearchForIdentity.TabIndex = 4; - this.grpSearchForIdentity.TabStop = false; - this.grpSearchForIdentity.Text = "Search for Identity"; - // - // btnSearchForIdentityNext - // - this.btnSearchForIdentityNext.Enabled = false; - this.btnSearchForIdentityNext.Location = new System.Drawing.Point(222, 45); - this.btnSearchForIdentityNext.Name = "btnSearchForIdentityNext"; - this.btnSearchForIdentityNext.Size = new System.Drawing.Size(75, 23); - this.btnSearchForIdentityNext.TabIndex = 7; - this.btnSearchForIdentityNext.Text = "Prev"; - this.btnSearchForIdentityNext.UseVisualStyleBackColor = true; - this.btnSearchForIdentityNext.Click += new System.EventHandler(this.btnSearchForIdentityNext_Click); - // - // btnSearchForIdentityPrev - // - this.btnSearchForIdentityPrev.Enabled = false; - this.btnSearchForIdentityPrev.Location = new System.Drawing.Point(303, 45); - this.btnSearchForIdentityPrev.Name = "btnSearchForIdentityPrev"; - this.btnSearchForIdentityPrev.Size = new System.Drawing.Size(75, 23); - this.btnSearchForIdentityPrev.TabIndex = 6; - this.btnSearchForIdentityPrev.Text = "Next"; - this.btnSearchForIdentityPrev.UseVisualStyleBackColor = true; - this.btnSearchForIdentityPrev.Click += new System.EventHandler(this.btnSearchForIdentityPrev_Click); - // - // txtSearchForIdentity - // - this.txtSearchForIdentity.Location = new System.Drawing.Point(3, 19); - this.txtSearchForIdentity.Name = "txtSearchForIdentity"; - this.txtSearchForIdentity.Size = new System.Drawing.Size(341, 20); - this.txtSearchForIdentity.TabIndex = 4; - // - // btnSearchForIdentity - // - this.btnSearchForIdentity.Location = new System.Drawing.Point(350, 17); - this.btnSearchForIdentity.Name = "btnSearchForIdentity"; - this.btnSearchForIdentity.Size = new System.Drawing.Size(28, 23); - this.btnSearchForIdentity.TabIndex = 5; - this.btnSearchForIdentity.Text = "Go"; - this.btnSearchForIdentity.UseVisualStyleBackColor = true; - this.btnSearchForIdentity.Click += new System.EventHandler(this.btnSearchForIdentity_Click); - // - // grpSearchForFolder - // - this.grpSearchForFolder.Controls.Add(this.btnSearchForFolderPrev); - this.grpSearchForFolder.Controls.Add(this.btnSearchForFolderNext); - this.grpSearchForFolder.Controls.Add(this.btnSearchForFolder); - this.grpSearchForFolder.Controls.Add(this.txtSearchForFolder); - this.grpSearchForFolder.Location = new System.Drawing.Point(6, 42); - this.grpSearchForFolder.Name = "grpSearchForFolder"; - this.grpSearchForFolder.Size = new System.Drawing.Size(387, 77); - this.grpSearchForFolder.TabIndex = 3; - this.grpSearchForFolder.TabStop = false; - this.grpSearchForFolder.Text = "Search for Folder"; - this.ttSearchForFolder.SetToolTip(this.grpSearchForFolder, "\"Search for folder\" lets you search in the tree view for the"); - // - // btnSearchForFolderPrev - // - this.btnSearchForFolderPrev.Enabled = false; - this.btnSearchForFolderPrev.Location = new System.Drawing.Point(225, 45); - this.btnSearchForFolderPrev.Name = "btnSearchForFolderPrev"; - this.btnSearchForFolderPrev.Size = new System.Drawing.Size(75, 23); - this.btnSearchForFolderPrev.TabIndex = 3; - this.btnSearchForFolderPrev.Text = "Prev"; - this.btnSearchForFolderPrev.UseVisualStyleBackColor = true; - this.btnSearchForFolderPrev.Click += new System.EventHandler(this.btnSearchForFolderPrev_Click); - // - // btnSearchForFolderNext - // - this.btnSearchForFolderNext.Enabled = false; - this.btnSearchForFolderNext.Location = new System.Drawing.Point(306, 45); - this.btnSearchForFolderNext.Name = "btnSearchForFolderNext"; - this.btnSearchForFolderNext.Size = new System.Drawing.Size(75, 23); - this.btnSearchForFolderNext.TabIndex = 2; - this.btnSearchForFolderNext.Text = "Next"; - this.btnSearchForFolderNext.UseVisualStyleBackColor = true; - this.btnSearchForFolderNext.Click += new System.EventHandler(this.btnSearchForFolderNext_Click); - // - // btnSearchForFolder - // - this.btnSearchForFolder.Location = new System.Drawing.Point(353, 17); - this.btnSearchForFolder.Name = "btnSearchForFolder"; - this.btnSearchForFolder.Size = new System.Drawing.Size(28, 23); - this.btnSearchForFolder.TabIndex = 1; - this.btnSearchForFolder.Text = "Go"; - this.btnSearchForFolder.UseVisualStyleBackColor = true; - this.btnSearchForFolder.Click += new System.EventHandler(this.btnSearchForFolder_Click); - // - // txtSearchForFolder - // - this.txtSearchForFolder.Location = new System.Drawing.Point(6, 19); - this.txtSearchForFolder.Name = "txtSearchForFolder"; - this.txtSearchForFolder.Size = new System.Drawing.Size(341, 20); - this.txtSearchForFolder.TabIndex = 0; - this.ttSearchForFolder.SetToolTip(this.txtSearchForFolder, "\"Search for folder\" lets you search in the tree view for the"); - // - // labDirectoryTreeView - // - this.labDirectoryTreeView.AutoSize = true; - this.labDirectoryTreeView.Location = new System.Drawing.Point(13, 13); - this.labDirectoryTreeView.Name = "labDirectoryTreeView"; - this.labDirectoryTreeView.Size = new System.Drawing.Size(57, 13); - this.labDirectoryTreeView.TabIndex = 4; - this.labDirectoryTreeView.Text = "Directories"; - // - // labAccessView - // - this.labAccessView.AutoSize = true; - this.labAccessView.Location = new System.Drawing.Point(344, 12); - this.labAccessView.Name = "labAccessView"; - this.labAccessView.Size = new System.Drawing.Size(202, 13); - this.labAccessView.TabIndex = 5; - this.labAccessView.Text = "Permissions given on the seletcted object"; - // - // ttSearchForFolder - // - this.ttSearchForFolder.IsBalloon = true; - this.ttSearchForFolder.ToolTipIcon = System.Windows.Forms.ToolTipIcon.Info; - // - // ShowSimpleAccessForm - // - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(830, 615); - this.Controls.Add(this.labAccessView); - this.Controls.Add(this.labDirectoryTreeView); - this.Controls.Add(this.grpFilter); - this.Controls.Add(this.lstPermissions); - this.Controls.Add(this.trvDirectories); - this.Name = "ShowSimpleAccessForm"; - this.Text = "ShowAccess"; - this.grpFilter.ResumeLayout(false); - this.grpFilter.PerformLayout(); - this.grpSearchForIdentity.ResumeLayout(false); - this.grpSearchForIdentity.PerformLayout(); - this.grpSearchForFolder.ResumeLayout(false); - this.grpSearchForFolder.PerformLayout(); - this.ResumeLayout(false); - this.PerformLayout(); - - } - - #endregion - - private System.Windows.Forms.TreeView trvDirectories; - private System.Windows.Forms.ListView lstPermissions; - private System.Windows.Forms.ColumnHeader chdIdentity; - private System.Windows.Forms.ColumnHeader chdRights; - private System.Windows.Forms.ColumnHeader chdAccessControlType; - private System.Windows.Forms.ImageList imlIcons; - private System.Windows.Forms.CheckBox chkRemoveFoldersWithoutAccess; - private System.Windows.Forms.GroupBox grpFilter; - private System.Windows.Forms.Label labDirectoryTreeView; - private System.Windows.Forms.Label labAccessView; - private System.Windows.Forms.GroupBox grpSearchForFolder; - private System.Windows.Forms.Button btnSearchForFolder; - private System.Windows.Forms.TextBox txtSearchForFolder; - private System.Windows.Forms.Button btnSearchForFolderNext; - private System.Windows.Forms.Button btnSearchForFolderPrev; - private System.Windows.Forms.GroupBox grpSearchForIdentity; - private System.Windows.Forms.Button btnSearchForIdentityNext; - private System.Windows.Forms.Button btnSearchForIdentityPrev; - private System.Windows.Forms.TextBox txtSearchForIdentity; - private System.Windows.Forms.Button btnSearchForIdentity; - private System.Windows.Forms.ToolTip ttSearchForFolder; - - } -} \ No newline at end of file diff --git a/NTFSSecurity/ShowSimpleAccess.cs b/NTFSSecurity/ShowSimpleAccess.cs deleted file mode 100644 index 5dcf43d..0000000 --- a/NTFSSecurity/ShowSimpleAccess.cs +++ /dev/null @@ -1,271 +0,0 @@ -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Data; -using System.Drawing; -using System.Linq; -using System.Text; -using System.Windows.Forms; -using Alphaleonis.Win32.Filesystem; -using Security2; - -namespace NTFSSecurity -{ - public partial class ShowSimpleAccessForm : Form - { - private IEnumerable directoryList; - private IQueryable aceList; - private IEnumerable searchResultByFolder; - private int searchResultByFolderIndex; - - public IEnumerable DirectoryList - { - get { return directoryList; } - } - - public IEnumerable AceList - { - get { return aceList; } - } - - public ShowSimpleAccessForm() - { - InitializeComponent(); - } - - public void BuildDirectoryTreeNodes() - { - string previousPath = string.Empty; - DirectoryTreeNode previousNode; - DirectoryTreeNode rootNode; - - var rootDirectory = directoryList.First(); - - rootNode = new DirectoryTreeNode(rootDirectory.FullName, rootDirectory.Name, aceList.Where(ace => ace.FullName == rootDirectory.Name)); - previousNode = rootNode; - trvDirectories.Nodes.Add(rootNode); - - foreach (var directory in directoryList.Skip(1)) - { - if (previousNode.Name == directory.GetParent().FullName) - { - var node = new DirectoryTreeNode(directory.FullName, directory.Name, aceList.Where(ace => ace.FullName == directory.FullName)); - previousNode.Nodes.Add(node); - } - else - { - previousNode = (DirectoryTreeNode)trvDirectories.Nodes.Find(directory.GetParent().FullName, true).FirstOrDefault(); - if (previousNode != null) - { - var node = new DirectoryTreeNode(directory.FullName, directory.Name, aceList.Where(ace => ace.FullName == directory.FullName)); - previousNode.Nodes.Add(node); - } - else - { - var node = new DirectoryTreeNode(directory.FullName, directory.Name, aceList.Where(ace => ace.FullName == directory.FullName)); - previousNode.Nodes.Add(node); - } - } - } - } - - public void BuildDirectoryTreeNodes(IEnumerable directoryList, IQueryable aceList) - { - this.directoryList = directoryList; - this.aceList = aceList; - - this.BuildDirectoryTreeNodes(); - } - - private void trvDirectories_AfterSelect(object sender, TreeViewEventArgs e) - { - lstPermissions.Items.Clear(); - - foreach (var ace in aceList.Where(ace => ace.FullName == e.Node.Name)) - { - ListViewItem listItem = new ListViewItem(); - listItem.Name = e.Node.Name; - listItem.Text = ace.Identity.AccountName; - listItem.SubItems.AddRange(new string[] { ace.AccessRights.ToString(), ace.AccessControlType.ToString(), e.Node.FullPath }); - listItem.ImageIndex = 1; - - lstPermissions.Items.Add(listItem); - } - - if (lstPermissions.Items.Count > 0) - { - foreach (ColumnHeader column in lstPermissions.Columns) - { - column.AutoResize(ColumnHeaderAutoResizeStyle.ColumnContent); - } - } - } - - private void chkRemoveFoldersWithoutAccess_CheckedChanged(object sender, EventArgs e) - { - if (chkRemoveFoldersWithoutAccess.Checked) - { - RemoveFoldersWithoutAccess((DirectoryTreeNode)trvDirectories.Nodes[0]); - } - else - { - trvDirectories.Nodes.Clear(); - BuildDirectoryTreeNodes(); - } - } - - public void RemoveFoldersWithoutAccess(DirectoryTreeNode node) - { - for (int i = 0; i < node.Nodes.Count; i++) - { - if (node.Nodes[i].GetNodeCount(false) > 0) - RemoveFoldersWithoutAccess((DirectoryTreeNode)node.Nodes[i]); - - if (node.Nodes[i].Nodes.Count == 0 & ((DirectoryTreeNode)node.Nodes[i]).Acl.Count() == 0) - { - node.Nodes.Remove(node.Nodes[i]); - i--; - } - } - } - - private void btnSearchForFolder_Click(object sender, EventArgs e) - { - searchResultByFolder = null; - searchResultByFolderIndex = 0; - trvDirectories.HideSelection = false; - - searchResultByFolder = FindNodeByFolder((DirectoryTreeNode)trvDirectories.Nodes[0], txtSearchForFolder.Text); - if (searchResultByFolder.Count() > 0) - { - btnSearchForFolderNext.Enabled = true; - btnSearchForFolderPrev.Enabled = true; - - trvDirectories.SelectedNode = searchResultByFolder.First(); - searchResultByFolderIndex = 0; - } - else - { - btnSearchForFolderNext.Enabled = false; - btnSearchForFolderPrev.Enabled = false; - } - } - - private IEnumerable FindNodeByFolder(DirectoryTreeNode node, string search) - { - if (node.Text.ToLower().Contains(search.ToLower())) - { - yield return node; - } - - foreach (DirectoryTreeNode childNode in node.Nodes) - { - foreach (DirectoryTreeNode match in this.FindNodeByFolder(childNode, search)) - { - yield return match; - } - } - } - - private IEnumerable FindNodeByIdentity(DirectoryTreeNode node, string search) - { - if (node.Acl.Where(ace => ace.Identity.AccountName.ToLower().Contains(search.ToLower())).Count() > 0) - { - yield return node; - } - - foreach (DirectoryTreeNode childNode in node.Nodes) - { - foreach (DirectoryTreeNode match in this.FindNodeByIdentity(childNode, search)) - { - yield return match; - } - } - } - - private void btnSearchForFolderNext_Click(object sender, EventArgs e) - { - if (searchResultByFolder.Count() > searchResultByFolderIndex + 1) - { - searchResultByFolderIndex++; - trvDirectories.SelectedNode = searchResultByFolder.ElementAt(searchResultByFolderIndex); - } - } - - private void btnSearchForFolderPrev_Click(object sender, EventArgs e) - { - if (searchResultByFolderIndex - 1 > -1) - { - searchResultByFolderIndex--; - trvDirectories.SelectedNode = searchResultByFolder.ElementAt(searchResultByFolderIndex); - } - } - - private void btnSearchForIdentity_Click(object sender, EventArgs e) - { - trvDirectories.HideSelection = false; - searchResultByFolder = null; - searchResultByFolderIndex = 0; - - searchResultByFolder = FindNodeByIdentity((DirectoryTreeNode)trvDirectories.Nodes[0], txtSearchForIdentity.Text); - if (searchResultByFolder.Count() > 0) - { - btnSearchForIdentityNext.Enabled = true; - btnSearchForIdentityPrev.Enabled = true; - - trvDirectories.SelectedNode = searchResultByFolder.First(); - searchResultByFolderIndex = 0; - } - else - { - btnSearchForIdentityNext.Enabled = false; - btnSearchForIdentityPrev.Enabled = false; - } - } - - private void btnSearchForIdentityPrev_Click(object sender, EventArgs e) - { - if (searchResultByFolder.Count() > searchResultByFolderIndex + 1) - { - searchResultByFolderIndex++; - trvDirectories.SelectedNode = searchResultByFolder.ElementAt(searchResultByFolderIndex); - } - } - - private void btnSearchForIdentityNext_Click(object sender, EventArgs e) - { - if (searchResultByFolderIndex - 1 > -1) - { - searchResultByFolderIndex--; - trvDirectories.SelectedNode = searchResultByFolder.ElementAt(searchResultByFolderIndex); - } - } - } - - public class DirectoryTreeNode : TreeNode - { - private IList acl; - - public IList Acl - { - get { return acl; } - } - - public DirectoryTreeNode(string key, string text) - : base(text) - { - this.Name = key; - } - - public DirectoryTreeNode(string key, string text, IQueryable acl) - : this(key, text) - { - this.acl = acl.ToList(); - - if (acl.Count() == 0) - { - this.ForeColor = Color.Gray; - } - } - } -} \ No newline at end of file diff --git a/NTFSSecurity/ShowSimpleAccess.resx b/NTFSSecurity/ShowSimpleAccess.resx deleted file mode 100644 index d30058d..0000000 --- a/NTFSSecurity/ShowSimpleAccess.resx +++ /dev/null @@ -1,168 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 17, 17 - - - - AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w - LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 - ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAAs - CAAAAk1TRnQBSQFMAwEBAAGIAQABiAEAARABAAEQAQAE/wEJAQAI/wFCAU0BNgEEBgABNgEEAgABKAMA - AUADAAEQAwABAQEAAQgGAAEEGAABgAIAAYADAAKAAQABgAMAAYABAAGAAQACgAIAA8ABAAHAAdwBwAEA - AfABygGmAQABMwUAATMBAAEzAQABMwEAAjMCAAMWAQADHAEAAyIBAAMpAQADVQEAA00BAANCAQADOQEA - AYABfAH/AQACUAH/AQABkwEAAdYBAAH/AewBzAEAAcYB1gHvAQAB1gLnAQABkAGpAa0CAAH/ATMDAAFm - AwABmQMAAcwCAAEzAwACMwIAATMBZgIAATMBmQIAATMBzAIAATMB/wIAAWYDAAFmATMCAAJmAgABZgGZ - AgABZgHMAgABZgH/AgABmQMAAZkBMwIAAZkBZgIAApkCAAGZAcwCAAGZAf8CAAHMAwABzAEzAgABzAFm - AgABzAGZAgACzAIAAcwB/wIAAf8BZgIAAf8BmQIAAf8BzAEAATMB/wIAAf8BAAEzAQABMwEAAWYBAAEz - AQABmQEAATMBAAHMAQABMwEAAf8BAAH/ATMCAAMzAQACMwFmAQACMwGZAQACMwHMAQACMwH/AQABMwFm - AgABMwFmATMBAAEzAmYBAAEzAWYBmQEAATMBZgHMAQABMwFmAf8BAAEzAZkCAAEzAZkBMwEAATMBmQFm - AQABMwKZAQABMwGZAcwBAAEzAZkB/wEAATMBzAIAATMBzAEzAQABMwHMAWYBAAEzAcwBmQEAATMCzAEA - ATMBzAH/AQABMwH/ATMBAAEzAf8BZgEAATMB/wGZAQABMwH/AcwBAAEzAv8BAAFmAwABZgEAATMBAAFm - AQABZgEAAWYBAAGZAQABZgEAAcwBAAFmAQAB/wEAAWYBMwIAAWYCMwEAAWYBMwFmAQABZgEzAZkBAAFm - ATMBzAEAAWYBMwH/AQACZgIAAmYBMwEAA2YBAAJmAZkBAAJmAcwBAAFmAZkCAAFmAZkBMwEAAWYBmQFm - AQABZgKZAQABZgGZAcwBAAFmAZkB/wEAAWYBzAIAAWYBzAEzAQABZgHMAZkBAAFmAswBAAFmAcwB/wEA - AWYB/wIAAWYB/wEzAQABZgH/AZkBAAFmAf8BzAEAAcwBAAH/AQAB/wEAAcwBAAKZAgABmQEzAZkBAAGZ - AQABmQEAAZkBAAHMAQABmQMAAZkCMwEAAZkBAAFmAQABmQEzAcwBAAGZAQAB/wEAAZkBZgIAAZkBZgEz - AQABmQEzAWYBAAGZAWYBmQEAAZkBZgHMAQABmQEzAf8BAAKZATMBAAKZAWYBAAOZAQACmQHMAQACmQH/ - AQABmQHMAgABmQHMATMBAAFmAcwBZgEAAZkBzAGZAQABmQLMAQABmQHMAf8BAAGZAf8CAAGZAf8BMwEA - AZkBzAFmAQABmQH/AZkBAAGZAf8BzAEAAZkC/wEAAcwDAAGZAQABMwEAAcwBAAFmAQABzAEAAZkBAAHM - AQABzAEAAZkBMwIAAcwCMwEAAcwBMwFmAQABzAEzAZkBAAHMATMBzAEAAcwBMwH/AQABzAFmAgABzAFm - ATMBAAGZAmYBAAHMAWYBmQEAAcwBZgHMAQABmQFmAf8BAAHMAZkCAAHMAZkBMwEAAcwBmQFmAQABzAKZ - AQABzAGZAcwBAAHMAZkB/wEAAswCAALMATMBAALMAWYBAALMAZkBAAPMAQACzAH/AQABzAH/AgABzAH/ - ATMBAAGZAf8BZgEAAcwB/wGZAQABzAH/AcwBAAHMAv8BAAHMAQABMwEAAf8BAAFmAQAB/wEAAZkBAAHM - ATMCAAH/AjMBAAH/ATMBZgEAAf8BMwGZAQAB/wEzAcwBAAH/ATMB/wEAAf8BZgIAAf8BZgEzAQABzAJm - AQAB/wFmAZkBAAH/AWYBzAEAAcwBZgH/AQAB/wGZAgAB/wGZATMBAAH/AZkBZgEAAf8CmQEAAf8BmQHM - AQAB/wGZAf8BAAH/AcwCAAH/AcwBMwEAAf8BzAFmAQAB/wHMAZkBAAH/AswBAAH/AcwB/wEAAv8BMwEA - AcwB/wFmAQAC/wGZAQAC/wHMAQACZgH/AQABZgH/AWYBAAFmAv8BAAH/AmYBAAH/AWYB/wEAAv8BZgEA - ASEBAAGlAQADXwEAA3cBAAOGAQADlgEAA8sBAAOyAQAD1wEAA90BAAPjAQAD6gEAA/EBAAP4AQAB8AH7 - Af8BAAGkAqABAAOAAwAB/wIAAf8DAAL/AQAB/wMAAf8BAAH/AQAC/wIAA/8BABD/MAAQ/zAAAf8B9AGS - BPcDkgL3AZIB9wHyAf8wAAH/Ae8LFAEPAQcB/zAAAf8B7AGZAnkBHAF5ARwBWAEcAXkBHAFzAUMBBwH/ - MAAB/wHtAfQEeQFeAZkBXgJ5ARwBQwEHAf8wAAH/Ae0BwwN5AV4BmQFeAZkBXgF5AVgBQwEHAf8wAAH/ - Ae0B9AJ5AV0BmQFeAbwBXgGZAV4B9wFDAQcB/zAAAf8B7QHDAXoCeQFeAZkBXgGZAV4BeQFYAUMBBwH/ - MAAB/wHtAfQEeQFeAZkBXgJ5ARwBQwEHAf8wAAH/Ae0BwwOgAeUBGgHlARoB5QEaAXkBQwEHAf8wAAH/ - Ae0BGwGgAcMBGgGgARsEBwH3AewB8QH/MAAB/wG8ARwEeQH3AvABvALwAfMC/zAAAv8BvAHtAnMB7QHw - CP8wAAP/BPQJ/zAAEP8wAAFCAU0BPgcAAT4DAAEoAwABQAMAARADAAEBAQABAQUAAYAXAAP/gQAL - - - - 114, 17 - - \ No newline at end of file diff --git a/NTFSSecurity/ShowSimpleEffectiveAccess.Designer.cs b/NTFSSecurity/ShowSimpleEffectiveAccess.Designer.cs deleted file mode 100644 index 05076e9..0000000 --- a/NTFSSecurity/ShowSimpleEffectiveAccess.Designer.cs +++ /dev/null @@ -1,234 +0,0 @@ -namespace NTFSSecurity -{ - partial class ShowSimpleEffectiveAccessForm - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Windows Form Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - this.components = new System.ComponentModel.Container(); - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ShowSimpleEffectiveAccessForm)); - this.trvDirectories = new System.Windows.Forms.TreeView(); - this.imlIcons = new System.Windows.Forms.ImageList(this.components); - this.lstPermissions = new System.Windows.Forms.ListView(); - this.chdIdentity = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); - this.chdRights = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); - this.chdAccessControlType = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); - this.chkRemoveFoldersWithoutAccess = new System.Windows.Forms.CheckBox(); - this.grpFilter = new System.Windows.Forms.GroupBox(); - this.grpSearchForFolder = new System.Windows.Forms.GroupBox(); - this.btnSearchForFolderPrev = new System.Windows.Forms.Button(); - this.btnSearchForFolderNext = new System.Windows.Forms.Button(); - this.btnSearchForFolder = new System.Windows.Forms.Button(); - this.txtSearchForFolder = new System.Windows.Forms.TextBox(); - this.labDirectoryTreeView = new System.Windows.Forms.Label(); - this.labAccessView = new System.Windows.Forms.Label(); - this.grpFilter.SuspendLayout(); - this.grpSearchForFolder.SuspendLayout(); - this.SuspendLayout(); - // - // trvDirectories - // - this.trvDirectories.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Left))); - this.trvDirectories.ImageIndex = 0; - this.trvDirectories.ImageList = this.imlIcons; - this.trvDirectories.Location = new System.Drawing.Point(12, 29); - this.trvDirectories.Name = "trvDirectories"; - this.trvDirectories.SelectedImageIndex = 0; - this.trvDirectories.Size = new System.Drawing.Size(320, 353); - this.trvDirectories.TabIndex = 0; - this.trvDirectories.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.trvDirectories_AfterSelect); - // - // imlIcons - // - this.imlIcons.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("imlIcons.ImageStream"))); - this.imlIcons.TransparentColor = System.Drawing.Color.Transparent; - this.imlIcons.Images.SetKeyName(0, "container.jpg"); - // - // lstPermissions - // - this.lstPermissions.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.lstPermissions.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { - this.chdIdentity, - this.chdRights, - this.chdAccessControlType}); - this.lstPermissions.Location = new System.Drawing.Point(338, 29); - this.lstPermissions.Name = "lstPermissions"; - this.lstPermissions.Size = new System.Drawing.Size(480, 226); - this.lstPermissions.SmallImageList = this.imlIcons; - this.lstPermissions.TabIndex = 1; - this.lstPermissions.UseCompatibleStateImageBehavior = false; - this.lstPermissions.View = System.Windows.Forms.View.Details; - // - // chdIdentity - // - this.chdIdentity.Text = "Identity"; - // - // chdRights - // - this.chdRights.Text = "Rights"; - // - // chdAccessControlType - // - this.chdAccessControlType.Text = "AccessControlType"; - // - // chkRemoveFoldersWithoutAccess - // - this.chkRemoveFoldersWithoutAccess.AutoSize = true; - this.chkRemoveFoldersWithoutAccess.Location = new System.Drawing.Point(6, 19); - this.chkRemoveFoldersWithoutAccess.Name = "chkRemoveFoldersWithoutAccess"; - this.chkRemoveFoldersWithoutAccess.Size = new System.Drawing.Size(347, 17); - this.chkRemoveFoldersWithoutAccess.TabIndex = 2; - this.chkRemoveFoldersWithoutAccess.Text = "Remove Folders that do not have different access than their parents"; - this.chkRemoveFoldersWithoutAccess.UseVisualStyleBackColor = true; - this.chkRemoveFoldersWithoutAccess.CheckedChanged += new System.EventHandler(this.chkRemoveFoldersWithoutAccess_CheckedChanged); - // - // grpFilter - // - this.grpFilter.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.grpFilter.Controls.Add(this.grpSearchForFolder); - this.grpFilter.Controls.Add(this.chkRemoveFoldersWithoutAccess); - this.grpFilter.Location = new System.Drawing.Point(338, 258); - this.grpFilter.Name = "grpFilter"; - this.grpFilter.Size = new System.Drawing.Size(480, 124); - this.grpFilter.TabIndex = 3; - this.grpFilter.TabStop = false; - this.grpFilter.Text = "Filter"; - // - // grpSearchForFolder - // - this.grpSearchForFolder.Controls.Add(this.btnSearchForFolderPrev); - this.grpSearchForFolder.Controls.Add(this.btnSearchForFolderNext); - this.grpSearchForFolder.Controls.Add(this.btnSearchForFolder); - this.grpSearchForFolder.Controls.Add(this.txtSearchForFolder); - this.grpSearchForFolder.Location = new System.Drawing.Point(6, 42); - this.grpSearchForFolder.Name = "grpSearchForFolder"; - this.grpSearchForFolder.Size = new System.Drawing.Size(421, 77); - this.grpSearchForFolder.TabIndex = 3; - this.grpSearchForFolder.TabStop = false; - this.grpSearchForFolder.Text = "Search for Folder"; - // - // btnSearchForFolderPrev - // - this.btnSearchForFolderPrev.Enabled = false; - this.btnSearchForFolderPrev.Location = new System.Drawing.Point(240, 45); - this.btnSearchForFolderPrev.Name = "btnSearchForFolderPrev"; - this.btnSearchForFolderPrev.Size = new System.Drawing.Size(75, 23); - this.btnSearchForFolderPrev.TabIndex = 3; - this.btnSearchForFolderPrev.Text = "Prev"; - this.btnSearchForFolderPrev.UseVisualStyleBackColor = true; - this.btnSearchForFolderPrev.Click += new System.EventHandler(this.btnSearchForFolderPrev_Click); - // - // btnSearchForFolderNext - // - this.btnSearchForFolderNext.Enabled = false; - this.btnSearchForFolderNext.Location = new System.Drawing.Point(321, 45); - this.btnSearchForFolderNext.Name = "btnSearchForFolderNext"; - this.btnSearchForFolderNext.Size = new System.Drawing.Size(75, 23); - this.btnSearchForFolderNext.TabIndex = 2; - this.btnSearchForFolderNext.Text = "Next"; - this.btnSearchForFolderNext.UseVisualStyleBackColor = true; - this.btnSearchForFolderNext.Click += new System.EventHandler(this.btnSearchForFolderNext_Click); - // - // btnSearchForFolder - // - this.btnSearchForFolder.Location = new System.Drawing.Point(353, 17); - this.btnSearchForFolder.Name = "btnSearchForFolder"; - this.btnSearchForFolder.Size = new System.Drawing.Size(43, 23); - this.btnSearchForFolder.TabIndex = 1; - this.btnSearchForFolder.Text = "Go"; - this.btnSearchForFolder.UseVisualStyleBackColor = true; - this.btnSearchForFolder.Click += new System.EventHandler(this.btnSearchForFolder_Click); - // - // txtSearchForFolder - // - this.txtSearchForFolder.Location = new System.Drawing.Point(6, 19); - this.txtSearchForFolder.Name = "txtSearchForFolder"; - this.txtSearchForFolder.Size = new System.Drawing.Size(341, 20); - this.txtSearchForFolder.TabIndex = 0; - // - // labDirectoryTreeView - // - this.labDirectoryTreeView.AutoSize = true; - this.labDirectoryTreeView.Location = new System.Drawing.Point(13, 13); - this.labDirectoryTreeView.Name = "labDirectoryTreeView"; - this.labDirectoryTreeView.Size = new System.Drawing.Size(57, 13); - this.labDirectoryTreeView.TabIndex = 4; - this.labDirectoryTreeView.Text = "Directories"; - // - // labAccessView - // - this.labAccessView.AutoSize = true; - this.labAccessView.Location = new System.Drawing.Point(344, 12); - this.labAccessView.Name = "labAccessView"; - this.labAccessView.Size = new System.Drawing.Size(202, 13); - this.labAccessView.TabIndex = 5; - this.labAccessView.Text = "Permissions given on the seletcted object"; - // - // ShowSimpleEffectiveAccessForm - // - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(830, 389); - this.Controls.Add(this.labAccessView); - this.Controls.Add(this.labDirectoryTreeView); - this.Controls.Add(this.grpFilter); - this.Controls.Add(this.lstPermissions); - this.Controls.Add(this.trvDirectories); - this.Name = "ShowSimpleEffectiveAccessForm"; - this.Text = "ShowAccess"; - this.grpFilter.ResumeLayout(false); - this.grpFilter.PerformLayout(); - this.grpSearchForFolder.ResumeLayout(false); - this.grpSearchForFolder.PerformLayout(); - this.ResumeLayout(false); - this.PerformLayout(); - - } - - #endregion - - private System.Windows.Forms.TreeView trvDirectories; - private System.Windows.Forms.ListView lstPermissions; - private System.Windows.Forms.ColumnHeader chdIdentity; - private System.Windows.Forms.ColumnHeader chdRights; - private System.Windows.Forms.ColumnHeader chdAccessControlType; - private System.Windows.Forms.ImageList imlIcons; - private System.Windows.Forms.CheckBox chkRemoveFoldersWithoutAccess; - private System.Windows.Forms.GroupBox grpFilter; - private System.Windows.Forms.Label labDirectoryTreeView; - private System.Windows.Forms.Label labAccessView; - private System.Windows.Forms.GroupBox grpSearchForFolder; - private System.Windows.Forms.Button btnSearchForFolder; - private System.Windows.Forms.TextBox txtSearchForFolder; - private System.Windows.Forms.Button btnSearchForFolderNext; - private System.Windows.Forms.Button btnSearchForFolderPrev; - - } -} \ No newline at end of file diff --git a/NTFSSecurity/ShowSimpleEffectiveAccess.cs b/NTFSSecurity/ShowSimpleEffectiveAccess.cs deleted file mode 100644 index 751b34d..0000000 --- a/NTFSSecurity/ShowSimpleEffectiveAccess.cs +++ /dev/null @@ -1,222 +0,0 @@ -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Data; -using System.Drawing; -using System.Linq; -using System.Text; -using System.Windows.Forms; -using System.IO; -using Security2; - -namespace NTFSSecurity -{ - public partial class ShowSimpleEffectiveAccessForm : Form - { - private IEnumerable directoryList; - private IQueryable aceList; - private IEnumerable searchResultByFolder; - private int searchResultByFolderIndex; - - public IEnumerable DirectoryList - { - get { return directoryList; } - } - - public IEnumerable AceList - { - get { return aceList; } - } - - public ShowSimpleEffectiveAccessForm() - { - InitializeComponent(); - } - - public void BuildDirectoryTreeNodes() - { - string previousPath = string.Empty; - DirectoryTreeNode previousNode; - DirectoryTreeNode rootNode; - - var rootDirectory = directoryList.First(); - - rootNode = new DirectoryTreeNode(rootDirectory.FullName, rootDirectory.Name, aceList.Where(ace => ace.FullName == rootDirectory.Name)); - previousNode = rootNode; - trvDirectories.Nodes.Add(rootNode); - - foreach (var directory in directoryList.Skip(1)) - { - if (previousNode.Name == directory.GetParent().FullName) - { - var node = new DirectoryTreeNode(directory.FullName, directory.Name, aceList.Where(ace => ace.FullName == directory.FullName)); - previousNode.Nodes.Add(node); - } - else - { - previousNode = (DirectoryTreeNode)trvDirectories.Nodes.Find(directory.GetParent().FullName, true).FirstOrDefault(); - if (previousNode != null) - { - var node = new DirectoryTreeNode(directory.FullName, directory.Name, aceList.Where(ace => ace.FullName == directory.FullName)); - previousNode.Nodes.Add(node); - } - else - { - var node = new DirectoryTreeNode(directory.FullName, directory.Name, aceList.Where(ace => ace.FullName == directory.FullName)); - previousNode.Nodes.Add(node); - } - } - } - } - - public void BuildDirectoryTreeNodes(IEnumerable directoryList, IQueryable aceList) - { - this.directoryList = directoryList; - this.aceList = aceList; - - this.BuildDirectoryTreeNodes(); - } - - private void trvDirectories_AfterSelect(object sender, TreeViewEventArgs e) - { - lstPermissions.Items.Clear(); - - foreach (var ace in aceList.Where(ace => ace.FullName == e.Node.Name)) - { - ListViewItem listItem = new ListViewItem(); - listItem.Name = e.Node.Name; - listItem.Text = ace.Identity.AccountName; - listItem.SubItems.AddRange(new string[] { ace.AccessRights.ToString(), ace.AccessControlType.ToString(), e.Node.FullPath }); - listItem.ImageIndex = 1; - - lstPermissions.Items.Add(listItem); - } - - if (lstPermissions.Items.Count > 0) - { - foreach (ColumnHeader column in lstPermissions.Columns) - { - column.AutoResize(ColumnHeaderAutoResizeStyle.ColumnContent); - } - } - } - - private void chkRemoveFoldersWithoutAccess_CheckedChanged(object sender, EventArgs e) - { - if (chkRemoveFoldersWithoutAccess.Checked) - { - RemoveFoldersWithoutAccess((DirectoryTreeNode)trvDirectories.Nodes[0]); - } - else - { - trvDirectories.Nodes.Clear(); - BuildDirectoryTreeNodes(); - } - } - - public void RemoveFoldersWithoutAccess(DirectoryTreeNode node) - { - for (int i = 0; i < node.Nodes.Count; i++) - { - if (node.Nodes[i].GetNodeCount(false) > 0) - RemoveFoldersWithoutAccess((DirectoryTreeNode)node.Nodes[i]); - - if (node.Nodes[i].Nodes.Count == 0 & ((DirectoryTreeNode)node.Nodes[i]).Acl.Count() == 0) - { - node.Nodes.Remove(node.Nodes[i]); - i--; - } - } - } - - private void btnSearchForFolder_Click(object sender, EventArgs e) - { - searchResultByFolder = null; - searchResultByFolderIndex = 0; - trvDirectories.HideSelection = false; - - searchResultByFolder = FindNodeByFolder((DirectoryTreeNode)trvDirectories.Nodes[0], txtSearchForFolder.Text); - if (searchResultByFolder.Count() > 0) - { - btnSearchForFolderNext.Enabled = true; - btnSearchForFolderPrev.Enabled = true; - - trvDirectories.SelectedNode = searchResultByFolder.First(); - searchResultByFolderIndex = 0; - } - else - { - btnSearchForFolderNext.Enabled = false; - btnSearchForFolderPrev.Enabled = false; - } - } - - private IEnumerable FindNodeByFolder(DirectoryTreeNode node, string search) - { - if (node.Text.ToLower().Contains(search.ToLower())) - { - yield return node; - } - - foreach (DirectoryTreeNode childNode in node.Nodes) - { - foreach (DirectoryTreeNode match in this.FindNodeByFolder(childNode, search)) - { - yield return match; - } - } - } - - private IEnumerable FindNodeByIdentity(DirectoryTreeNode node, string search) - { - if (node.Acl.Where(ace => ace.Identity.AccountName.ToLower().Contains(search.ToLower())).Count() > 0) - { - yield return node; - } - - foreach (DirectoryTreeNode childNode in node.Nodes) - { - foreach (DirectoryTreeNode match in this.FindNodeByIdentity(childNode, search)) - { - yield return match; - } - } - } - - private void btnSearchForFolderNext_Click(object sender, EventArgs e) - { - if (searchResultByFolder.Count() > searchResultByFolderIndex + 1) - { - searchResultByFolderIndex++; - trvDirectories.SelectedNode = searchResultByFolder.ElementAt(searchResultByFolderIndex); - } - } - - private void btnSearchForFolderPrev_Click(object sender, EventArgs e) - { - if (searchResultByFolderIndex - 1 > -1) - { - searchResultByFolderIndex--; - trvDirectories.SelectedNode = searchResultByFolder.ElementAt(searchResultByFolderIndex); - } - } - - private void btnSearchForIdentityPrev_Click(object sender, EventArgs e) - { - if (searchResultByFolder.Count() > searchResultByFolderIndex + 1) - { - searchResultByFolderIndex++; - trvDirectories.SelectedNode = searchResultByFolder.ElementAt(searchResultByFolderIndex); - } - } - - private void btnSearchForIdentityNext_Click(object sender, EventArgs e) - { - if (searchResultByFolderIndex - 1 > -1) - { - searchResultByFolderIndex--; - trvDirectories.SelectedNode = searchResultByFolder.ElementAt(searchResultByFolderIndex); - } - } - } -} \ No newline at end of file diff --git a/NTFSSecurity/ShowSimpleEffectiveAccess.resx b/NTFSSecurity/ShowSimpleEffectiveAccess.resx deleted file mode 100644 index 1c12697..0000000 --- a/NTFSSecurity/ShowSimpleEffectiveAccess.resx +++ /dev/null @@ -1,165 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 17, 17 - - - - AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0yLjAuMC4w - LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 - ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAAs - CAAAAk1TRnQBSQFMAwEBAAGQAQABkAEAARABAAEQAQAE/wEJAQAI/wFCAU0BNgEEBgABNgEEAgABKAMA - AUADAAEQAwABAQEAAQgGAAEEGAABgAIAAYADAAKAAQABgAMAAYABAAGAAQACgAIAA8ABAAHAAdwBwAEA - AfABygGmAQABMwUAATMBAAEzAQABMwEAAjMCAAMWAQADHAEAAyIBAAMpAQADVQEAA00BAANCAQADOQEA - AYABfAH/AQACUAH/AQABkwEAAdYBAAH/AewBzAEAAcYB1gHvAQAB1gLnAQABkAGpAa0CAAH/ATMDAAFm - AwABmQMAAcwCAAEzAwACMwIAATMBZgIAATMBmQIAATMBzAIAATMB/wIAAWYDAAFmATMCAAJmAgABZgGZ - AgABZgHMAgABZgH/AgABmQMAAZkBMwIAAZkBZgIAApkCAAGZAcwCAAGZAf8CAAHMAwABzAEzAgABzAFm - AgABzAGZAgACzAIAAcwB/wIAAf8BZgIAAf8BmQIAAf8BzAEAATMB/wIAAf8BAAEzAQABMwEAAWYBAAEz - AQABmQEAATMBAAHMAQABMwEAAf8BAAH/ATMCAAMzAQACMwFmAQACMwGZAQACMwHMAQACMwH/AQABMwFm - AgABMwFmATMBAAEzAmYBAAEzAWYBmQEAATMBZgHMAQABMwFmAf8BAAEzAZkCAAEzAZkBMwEAATMBmQFm - AQABMwKZAQABMwGZAcwBAAEzAZkB/wEAATMBzAIAATMBzAEzAQABMwHMAWYBAAEzAcwBmQEAATMCzAEA - ATMBzAH/AQABMwH/ATMBAAEzAf8BZgEAATMB/wGZAQABMwH/AcwBAAEzAv8BAAFmAwABZgEAATMBAAFm - AQABZgEAAWYBAAGZAQABZgEAAcwBAAFmAQAB/wEAAWYBMwIAAWYCMwEAAWYBMwFmAQABZgEzAZkBAAFm - ATMBzAEAAWYBMwH/AQACZgIAAmYBMwEAA2YBAAJmAZkBAAJmAcwBAAFmAZkCAAFmAZkBMwEAAWYBmQFm - AQABZgKZAQABZgGZAcwBAAFmAZkB/wEAAWYBzAIAAWYBzAEzAQABZgHMAZkBAAFmAswBAAFmAcwB/wEA - AWYB/wIAAWYB/wEzAQABZgH/AZkBAAFmAf8BzAEAAcwBAAH/AQAB/wEAAcwBAAKZAgABmQEzAZkBAAGZ - AQABmQEAAZkBAAHMAQABmQMAAZkCMwEAAZkBAAFmAQABmQEzAcwBAAGZAQAB/wEAAZkBZgIAAZkBZgEz - AQABmQEzAWYBAAGZAWYBmQEAAZkBZgHMAQABmQEzAf8BAAKZATMBAAKZAWYBAAOZAQACmQHMAQACmQH/ - AQABmQHMAgABmQHMATMBAAFmAcwBZgEAAZkBzAGZAQABmQLMAQABmQHMAf8BAAGZAf8CAAGZAf8BMwEA - AZkBzAFmAQABmQH/AZkBAAGZAf8BzAEAAZkC/wEAAcwDAAGZAQABMwEAAcwBAAFmAQABzAEAAZkBAAHM - AQABzAEAAZkBMwIAAcwCMwEAAcwBMwFmAQABzAEzAZkBAAHMATMBzAEAAcwBMwH/AQABzAFmAgABzAFm - ATMBAAGZAmYBAAHMAWYBmQEAAcwBZgHMAQABmQFmAf8BAAHMAZkCAAHMAZkBMwEAAcwBmQFmAQABzAKZ - AQABzAGZAcwBAAHMAZkB/wEAAswCAALMATMBAALMAWYBAALMAZkBAAPMAQACzAH/AQABzAH/AgABzAH/ - ATMBAAGZAf8BZgEAAcwB/wGZAQABzAH/AcwBAAHMAv8BAAHMAQABMwEAAf8BAAFmAQAB/wEAAZkBAAHM - ATMCAAH/AjMBAAH/ATMBZgEAAf8BMwGZAQAB/wEzAcwBAAH/ATMB/wEAAf8BZgIAAf8BZgEzAQABzAJm - AQAB/wFmAZkBAAH/AWYBzAEAAcwBZgH/AQAB/wGZAgAB/wGZATMBAAH/AZkBZgEAAf8CmQEAAf8BmQHM - AQAB/wGZAf8BAAH/AcwCAAH/AcwBMwEAAf8BzAFmAQAB/wHMAZkBAAH/AswBAAH/AcwB/wEAAv8BMwEA - AcwB/wFmAQAC/wGZAQAC/wHMAQACZgH/AQABZgH/AWYBAAFmAv8BAAH/AmYBAAH/AWYB/wEAAv8BZgEA - ASEBAAGlAQADXwEAA3cBAAOGAQADlgEAA8sBAAOyAQAD1wEAA90BAAPjAQAD6gEAA/EBAAP4AQAB8AH7 - Af8BAAGkAqABAAOAAwAB/wIAAf8DAAL/AQAB/wMAAf8BAAH/AQAC/wIAA/8BABD/MAAQ/zAAAf8B9AGS - BPcDkgL3AZIB9wHyAf8wAAH/Ae8LFAEPAQcB/zAAAf8B7AGZAnkBHAF5ARwBWAEcAXkBHAFzAUMBBwH/ - MAAB/wHtAfQEeQFeAZkBXgJ5ARwBQwEHAf8wAAH/Ae0BwwN5AV4BmQFeAZkBXgF5AVgBQwEHAf8wAAH/ - Ae0B9AJ5AV0BmQFeAbwBXgGZAV4B9wFDAQcB/zAAAf8B7QHDAXoCeQFeAZkBXgGZAV4BeQFYAUMBBwH/ - MAAB/wHtAfQEeQFeAZkBXgJ5ARwBQwEHAf8wAAH/Ae0BwwOgAeUBGgHlARoB5QEaAXkBQwEHAf8wAAH/ - Ae0BGwGgAcMBGgGgARsEBwH3AewB8QH/MAAB/wG8ARwEeQH3AvABvALwAfMC/zAAAv8BvAHtAnMB7QHw - CP8wAAP/BPQJ/zAAEP8wAAFCAU0BPgcAAT4DAAEoAwABQAMAARADAAEBAQABAQUAAYAXAAP/gQAL - - - \ No newline at end of file diff --git a/NTFSSecurity/SimpleAccessCmdlets.cs b/NTFSSecurity/SimpleAccessCmdlets.cs deleted file mode 100644 index aa8ac65..0000000 --- a/NTFSSecurity/SimpleAccessCmdlets.cs +++ /dev/null @@ -1,298 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Diagnostics; -using System.Management.Automation; -using Security2; -using Alphaleonis.Win32.Filesystem; - -namespace NTFSSecurity -{ - #region Get-SimpleAccess - [Cmdlet(VerbsCommon.Get, "NTFSSimpleAccess")] - [OutputType(typeof(Security2.SimpleFileSystemAccessRule))] - public class GetSimpleAccess : GetAccess - { - private bool includeRootFolder = true; - protected List aceList = new List(); - protected List directoryList = new List(); - - [Parameter] - public SwitchParameter IncludeRootFolder - { - get { return includeRootFolder; } - set { includeRootFolder = value; } - } - - Dictionary> previousAcls = new Dictionary>(); - DirectoryInfo item; - FileSystemInfo previousItem; - bool isFirstFolder = true; - - protected override void ProcessRecord() - { - //as this cmdlet retreives also the current working folder to show the permissions. - if (includeRootFolder & isFirstFolder) - { - string rootPath = System.IO.Path.GetDirectoryName(paths[0]); - - if (!string.IsNullOrEmpty(rootPath)) - { - List l = new List(); - l.Add(rootPath); - l.AddRange(paths); - paths = l; - } - } - - foreach (var p in paths) - { - try - { - item = GetFileSystemInfo2(p) as DirectoryInfo; - - if (item != null) - { - WriteVerbose(string.Format("New folder: {0}", item.FullName)); - directoryList.Add(item); - - var acl = FileSystemAccessRule2.GetFileSystemAccessRules(item, true, true).Select(ace => ace.ToSimpleFileSystemAccessRule2()); - - try - { - previousItem = item.GetParent(); - } - catch { } - IEnumerable previousAcl = null; - - if (isFirstFolder) - { - previousAcls.Add(item.FullName, acl); - aceList.AddRange(acl); - acl.ForEach(ace => WriteObject(ace)); - - isFirstFolder = false; - } - else - { - if (previousAcls.ContainsKey(previousItem.FullName)) - { - previousAcl = previousAcls[previousItem.FullName]; - previousAcls.Add(item.FullName, acl); - - List diffAcl = new List(); - - foreach (var ace in acl) - { - var equalsUser = previousAcl.Where(prevAce => prevAce.Identity == ace.Identity); - var equalsUserAndAccessType = previousAcl.Where(prevAce => prevAce.Identity == ace.Identity & prevAce.AccessControlType == ace.AccessControlType); - var equalsRights = previousAcl.Where(prevAce => (prevAce.AccessRights & ace.AccessRights) == ace.AccessRights); - var totalEqual = previousAcl.Where(prevAce => prevAce.Identity == ace.Identity & prevAce.AccessControlType == ace.AccessControlType & (prevAce.AccessRights & ace.AccessRights) == ace.AccessRights); - - if (previousAcl.Where(prevAce => - prevAce.AccessControlType == ace.AccessControlType & - (prevAce.AccessRights & ace.AccessRights) == ace.AccessRights & - prevAce.Identity == ace.Identity).Count() == 0) - { - diffAcl.Add(ace); - } - } - - aceList.AddRange(diffAcl); - diffAcl.ForEach(ace => WriteObject(ace)); - } - } - } - - } - catch (Exception ex) - { - WriteError(new ErrorRecord(ex, "ReadError", ErrorCategory.OpenError, p)); - } - } - } - } - #endregion - - //#region Get-SimpleEffectiveAccess - //[Cmdlet(VerbsCommon.Get, "SimpleEffectiveAccess")] - //public class GetSimpleEffectiveAccess : GetEffectiveAccess - //{ - // private bool includeRootFolder = true; - // protected List aceList = new List(); - // protected List directoryList = new List(); - - // [Parameter] - // public SwitchParameter IncludeRootFolder - // { - // get { return includeRootFolder; } - // set { includeRootFolder = value; } - // } - - // Dictionary> previousAcls = new Dictionary>(); - // DirectoryInfo item; - // FileSystemInfo previousItem; - // bool isFirstFolder = true; - - // protected override void ProcessRecord() - // { - // //as this cmdlet retreives also the current working folder to show the permissions. - // if (includeRootFolder & isFirstFolder) - // { - // string rootPath = System.IO.Path.GetDirectoryName(path[0]); - - // if (!string.IsNullOrEmpty(rootPath)) - // { - // List l = new List(); - // l.Add(rootPath); - // l.AddRange(path); - // path = l.ToArray(); - // } - // } - - // foreach (var p in path) - // { - // try - // { - // item = this.GetFileSystemInfo(p) as DirectoryInfo; - - // if (item != null) - // { - // WriteVerbose(string.Format("New folder: {0}", item.FullName)); - // directoryList.Add(item); - - // //var acl = FileSystemAccessRule2.GetFileSystemAccessRules(item, true, true).Select(ace => ace.ToSimpleFileSystemAccessRule2()); - // var acl = (new List() { EffectivePermissions.GetEffectiveAccess(item, Account).ToSimpleFileSystemAccessRule2() }).AsQueryable(); - - // try - // { - // previousItem = item.GetParent(); - // } - // catch { } - // IQueryable previousAcl = null; - - // if (isFirstFolder) - // { - // previousAcls.Add(item.FullName, acl); - // aceList.AddRange(acl); - // acl.ForEach(ace => WriteObject(ace)); - - // isFirstFolder = false; - // } - // else - // { - // if (previousAcls.ContainsKey(previousItem.FullName)) - // { - // previousAcl = previousAcls[previousItem.FullName]; - // previousAcls.Add(item.FullName, acl); - - // List diffAcl = new List(); - - // foreach (var ace in acl) - // { - // var equalsUser = previousAcl.Where(prevAce => prevAce.Identity == ace.Identity); - // var equalsUserAndAccessType = previousAcl.Where(prevAce => prevAce.Identity == ace.Identity & prevAce.AccessControlType == ace.AccessControlType); - // var equalsRights = previousAcl.Where(prevAce => (prevAce.AccessRights & ace.AccessRights) == ace.AccessRights); - // var totalEqual = previousAcl.Where(prevAce => prevAce.Identity == ace.Identity & prevAce.AccessControlType == ace.AccessControlType & (prevAce.AccessRights & ace.AccessRights) == ace.AccessRights); - - // if (previousAcl.Where(prevAce => - // prevAce.AccessControlType == ace.AccessControlType & - // (prevAce.AccessRights & ace.AccessRights) == ace.AccessRights & - // prevAce.Identity == ace.Identity).Count() == 0) - // { - // diffAcl.Add(ace); - // } - // } - - // aceList.AddRange(diffAcl); - // diffAcl.ForEach(ace => WriteObject(ace)); - // } - // } - // } - - // } - // catch (Exception ex) - // { - // this.WriteError(new ErrorRecord(ex, "ReadError", ErrorCategory.OpenError, p)); - // } - // } - // } - //} - //#endregion - - #region Show-SimpleAccess - [Cmdlet(VerbsCommon.Show, "SimpleAccess")] - public class ShowSimpleAccess : GetSimpleAccess - { - Stopwatch stopwatch; - - protected override void BeginProcessing() - { - stopwatch = new Stopwatch(); - stopwatch.Start(); - - WriteDebug("Running Get-SimpleAccess"); - } - - protected override void ProcessRecord() - { - base.ProcessRecord(); - } - - protected override void EndProcessing() - { - stopwatch.Stop(); - WriteDebug(string.Format("Runtime of Get-SimpleAccess: {0}.", stopwatch.Elapsed.ToString())); - - stopwatch.Reset(); stopwatch.Start(); - WriteDebug("Creating TreeView"); - - ShowSimpleAccessForm form = new ShowSimpleAccessForm(); - form.BuildDirectoryTreeNodes(directoryList, aceList.AsQueryable()); - stopwatch.Stop(); - - WriteDebug(string.Format("Creating the Treeview took: {0}.", stopwatch.Elapsed.ToString())); - - form.ShowDialog(); - } - } - #endregion - - //#region Show-SimpleEffectiveAccess - //[Cmdlet(VerbsCommon.Show, "SimpleEffectiveAccess")] - //public class ShowSimpleEffectiveAccess : GetSimpleEffectiveAccess - //{ - // Stopwatch stopwatch; - - // protected override void BeginProcessing() - // { - // stopwatch = new Stopwatch(); - // stopwatch.Start(); - - // this.WriteDebug("Running Get-SimpleAccess"); - // } - // protected override void ProcessRecord() - // { - // base.ProcessRecord(); - // } - - // protected override void EndProcessing() - // { - // stopwatch.Stop(); - // this.WriteDebug(string.Format("Runtime of Get-SimpleAccess: {0}.", stopwatch.Elapsed.ToString())); - - // stopwatch.Reset(); stopwatch.Start(); - // this.WriteDebug("Creating TreeView"); - - // ShowSimpleEffectiveAccessForm form = new ShowSimpleEffectiveAccessForm(); - // form.BuildDirectoryTreeNodes(directoryList, aceList.AsQueryable()); - // stopwatch.Stop(); - - // this.WriteDebug(string.Format("Creating the Treeview took: {0}.", stopwatch.Elapsed.ToString())); - - // form.ShowDialog(); - // } - //} - //#endregion -} \ No newline at end of file diff --git a/NTFSSecurity/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache b/NTFSSecurity/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache deleted file mode 100644 index 24e984cd1c3a11cdbe9d9fd08158870554ecaf95..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8768 zcmeHNds7=X5Vr#;m^>P%X`W5%v}v29&eg^kNLtzwj1y0RGMI+WaFobC*(ltdE|Ly# z7-l-{2k9s1^dq*r=kpm8LNkNy$saz(>$4vFTdh{B)rwd=7K{B04}Rlw{tOUnkyoWq zqNa`KT=~>4Yv1C+m=lg8+)`maoqEos;=-NDP8b>dOQ+_1TltJSL45Dod{CYjp!U z-=MZFc9}J+6mu$eV}4IF7o}1cp!J+^YrJ0MHoID-uEi~?S*s8M-TuPCOMfQh=x>#mTjz-km!QF4_A`P$Mo89z9= zQIlP>={0^li`#FMAMTa1VVp`I5wpN0t7;)RQ8l3TzxlHn^u>i_?kzHRup$V*r=hXJu zGUf8cc+|A4C3oxTl%uLb+Pu4o?AA#j5FaGK z$Z;lAK@ytZ!RD!Gm?;=#s#%TlVrz04nhj%r@*%!CireH0yp8RQ!`ULAnHrx;d<4H^ zV@aG5{E(|ij9u~`_a4}UJk9-bj>!(F~!rjoHE-{_Uo3pmJMT_OYCEW!87XZN7 z)gjrC!h^F)-P@aB3p z3J3(j&>{`6cHib75g!7g?i*r3Qi!JNfr^a~d9Acm_<5~t(lEnnKAoN0Tr8Is%+O31 zsY~n3fpFKD^|gQ<7R=SmHgm$8o4IVImYdE`QY$w(!N4(|)Ga{%29RI(ZOm)jwZyJ6 ziVz&A06zoxUf=M4b?g8&3#fiyQ5U%T3ZaMbTr)V04^HD<%{zBHnH8M)HX+~dsF6*@ zU$fE8o#q7;)ci9X?U`@p;|Ixhyn1`hefG>O?Ve3Fu% zm*JXPmbaK~n~TEo;Q-i?2r-kGTnlviBfMZ@qJvHMPm9SQod#HEgBe3;e1`rW_|pIT OH->>PjjoqB&iw}o&5!8- diff --git a/NTFSSecurity/obj/Debug/NTFSSecurity.Properties.Resources.resources b/NTFSSecurity/obj/Debug/NTFSSecurity.Properties.Resources.resources deleted file mode 100644 index 645dcd03ef6274aa128dc0968525e9d735ebfa0c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3909 zcmeIyJ&YSw5Ww+C2m%C%0@0*l1Pz6C@^Rc9DNY)aqlgeFB#8R?oINo3Y~&B2bW_pO zLHA0KXlc>Z6x5WjMM8p}V)(DmK{};Fboi}*JNw=~y^q=T{_^u5KV1`%uQ7e_Xu0Yx z_U?Df`Fb(#mj7Jc??w;1#Xv8X0><_xtbr#j@ z7x?M6|LJ1%p5pXUe>!@RT;G1b4}CehA@T-sxOGjQ?VGQbez41} zq==`uz|%!Qq#hCZ?RP)qufP4CqJ{$cYDJ)>m_T7Da8v|ZN)adw1&)e9+s>;*L)olB zyb=Q~r3w^=0!KxlrG!9XC~#B+T1pcr3>;PZ7^=`Z?^*{c=Y03Q znfdPS_SfQ^`v7QEdTEw4OIMP#-R)G9bh5jW#5a;oalV;W+nq*ztvLT$(n;&>*3$E( z1^z3}U+6ZnZYNo4CEctOH;VJC-L*!&`f}2HrTu2oT3S1ECO%a?b^7FD`GsWR#l>eH zZq{vO^=2~eUP&^Kp*S4zPT*gyw{Em=rKL;lPBSenH{+Yh<$9V`vQ82=IpaaR|6tzL zmoD=E@RRQ!$26{vnNHMQ(>2_(tGc#pxzv@gZ@Spsbcw6D%ynR6MEG}3Rpj`i8vZ>> zc~}3ZaSyS}vj-J__|8ZzT#U1L%5$Wd2+I*J#cAjKO65`}%W^pqaq?ckEG$sSWkzPF zb2%?7a#{+HIIiBwiO9)0U>4xHX=Dn=ob-|FN6z;VgB7&`-@E8GVz=cdz{!r>mCs?z zhX7iGFN61lxM&V|8h8$P6<7hz1B>AGSnEwsy`|^c+ ziJ5XKW11Q;07i(wXE$`N={nF=Gm>LZZcV`O%-4kZnx3p_o^=MyV+F%AKhXR@^CR}r z{75^DSi!UYNb|WybFG`}?Wua{1y1Nly*y_<@g&(> zbuwyG={tkHaZDxemX!#y2<*eVQr0@GH3oV5Ua30mqFGZ#pB40d%XcDIBOmX00m~;@ws*qsBF*jO+CJJo)Z(7FK1HOw9&s zdwzCCs+9eWV|PNI99p|Geg@f*6$knz(_;@>t7mVre$EiFCrhi9^~ut+x|~-(jnK&Z zQ8idmF#-cS>r2htYhPHK(lj%!)l4&HA&ck8qP6*`GgqCgV>#1FpA~4yAAcv9&XMY5 zPu8Ke*-a;AU|r;_tLe;DC!&p9k=1vqc%%Z}z{pY}cT{9bY9y9DaEpLILl@C7uFMWsdt2{YDZ(rTx zGL$>W4&``Z3OzUFUeLNBbEvuJcVq*&?{Ocv#SPi=scgy4H2f$p?9PmDkiYL|r<|O{ SE&ubkUGN*-KMMZG?(hSQq*o6B diff --git a/NTFSSecurity/obj/Debug/NTFSSecurity.ShowSimpleEffectiveAccessForm.resources b/NTFSSecurity/obj/Debug/NTFSSecurity.ShowSimpleEffectiveAccessForm.resources deleted file mode 100644 index 038f10a472ab236c0f09b4546ea168463a27b66b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2639 zcmcIlO=w(I6u#%asY$5NEd0Y}5f!AuFhs|;W|30cQV2E>I%>PIWiowJ2ImLfdqWv1 zI4jpRf@M~ng$gd*xDHY%xTu5fbfYT~K@yVMKm-@h?>pztU~F)uX}^2!Ip@3QobSFj zGvD6d{z{y49|FxvFU{gs>0+FAx=AfgC%cPr^;(=1=UZv5lQbJ^#re16ByDusORtm` z_^&vBw%g3QNxamKyIE3g7Ux&HYt2UOjkxz_=iRuyw081j^?2?0iI*44uf_|nExzz* zvu-te1OHN^eXVmNEuHTqt+ceIN6c=@)>OT z5I}42W$>O77tI0B11|w@0V}{6U=h5&+!S20U*#$v0pA0;Y|04sYk1p?`CqZ#lF#J} z%#=$R)6{_hFhT@AyPjH*nzAnty^<-W1tTSL9D;S>nf#wIAAF+?- zN7`Y;3ZC^xn$IHUwNJ^yKB=%))-`R zPbRH$^-k;1$e3zZYh2Z@KDc~xPz`2;)7XK7)vDR^G`-AdPt{8=a6(7w&6+Cutf223SM5awoSnYaF@=nS z4Mms;D>xDI*y#kJ5|uGBR%Vq<;XoBKYh9@j@3wLoHLfXTT&LIP$#mp}eO=qq;8MV5q6D&SwPHS9MtG-r-TFYVvXd#E%FeyARu!4bUOq*u# z{_Dh(8SO09JqLV>d%OzV06qXd2EGBl1bzU10)7U510Dc>;LMKvsU1G?Lqz!N!Q0RA zJ*}PSgQb1&%?CT1FDMY(mG#12wC?w0UH0U6K?c$7!%xT&nF`(}ZmcJBLR=0um9vxl zmh2XKas`U7DDUr?dr`KKT5<^c~7C^6Uh?eRYq@ zQ0^f+l%s_y^xTvOLF=yH)PAFvL!py@T0u2J2SpP{=T1@a&ii{ S{LkNZ!Ebc`Y4C5m!+!w|lUE-A diff --git a/NTFSSecurity/obj/Debug/NTFSSecurity.csproj.FileListAbsolute.txt b/NTFSSecurity/obj/Debug/NTFSSecurity.csproj.FileListAbsolute.txt deleted file mode 100644 index f2f9bf7..0000000 --- a/NTFSSecurity/obj/Debug/NTFSSecurity.csproj.FileListAbsolute.txt +++ /dev/null @@ -1,38 +0,0 @@ -C:\VS\fssecurity\NTFSSecurity\NTFSSecurity\obj\Debug\NTFSSecurity.csprojResolveAssemblyReference.cache -C:\VS\fssecurity\NTFSSecurity\NTFSSecurity\obj\Debug\NTFSSecurity.ShowSimpleEffectiveAccessForm.resources -C:\VS\fssecurity\NTFSSecurity\NTFSSecurity\obj\Debug\NTFSSecurity.Properties.Resources.resources -C:\VS\fssecurity\NTFSSecurity\NTFSSecurity\obj\Debug\NTFSSecurity.ShowSimpleAccessForm.resources -C:\VS\fssecurity\NTFSSecurity\NTFSSecurity\obj\Debug\NTFSSecurity.csproj.GenerateResource.Cache -C:\Users\randr\Documents\WindowsPowerShell\Modules\NTFSSecurity\NTFSSecurity-Help.xml -C:\Users\randr\Documents\WindowsPowerShell\Modules\NTFSSecurity\NTFSSecurity.format.ps1xml -C:\Users\randr\Documents\WindowsPowerShell\Modules\NTFSSecurity\NTFSSecurity.Init.ps1 -C:\Users\randr\Documents\WindowsPowerShell\Modules\NTFSSecurity\NTFSSecurity.psd1 -C:\Users\randr\Documents\WindowsPowerShell\Modules\NTFSSecurity\NTFSSecurity.psm1 -C:\Users\randr\Documents\WindowsPowerShell\Modules\NTFSSecurity\NTFSSecurity.types.ps1xml -C:\Users\randr\Documents\WindowsPowerShell\Modules\NTFSSecurity\NTFSSecurity.dll -C:\Users\randr\Documents\WindowsPowerShell\Modules\NTFSSecurity\NTFSSecurity.pdb -C:\VS\fssecurity\NTFSSecurity\NTFSSecurity\obj\Debug\NTFSSecurity.dll -C:\VS\fssecurity\NTFSSecurity\NTFSSecurity\obj\Debug\NTFSSecurity.pdb -C:\Users\Administrator\Desktop\NTFSSecurity\NTFSSecurity\obj\Debug\NTFSSecurity.csprojResolveAssemblyReference.cache -C:\Users\Administrator\Desktop\NTFSSecurity\NTFSSecurity\obj\Debug\NTFSSecurity.ShowSimpleEffectiveAccessForm.resources -C:\Users\Administrator\Desktop\NTFSSecurity\NTFSSecurity\obj\Debug\NTFSSecurity.Properties.Resources.resources -C:\Users\Administrator\Desktop\NTFSSecurity\NTFSSecurity\obj\Debug\NTFSSecurity.ShowSimpleAccessForm.resources -C:\Users\Administrator\Desktop\NTFSSecurity\NTFSSecurity\obj\Debug\NTFSSecurity.csproj.GenerateResource.Cache -C:\Users\Administrator\Desktop\NTFSSecurity\NTFSSecurity\obj\Debug\NTFSSecurity.dll -C:\Users\Administrator\Desktop\NTFSSecurity\NTFSSecurity\obj\Debug\NTFSSecurity.pdb -C:\Users\Users\randr\Documents\WindowsPowerShell\Modules\NTFSSecurity\NTFSSecurity-Help.xml -C:\Users\Users\randr\Documents\WindowsPowerShell\Modules\NTFSSecurity\NTFSSecurity.format.ps1xml -C:\Users\Users\randr\Documents\WindowsPowerShell\Modules\NTFSSecurity\NTFSSecurity.Init.ps1 -C:\Users\Users\randr\Documents\WindowsPowerShell\Modules\NTFSSecurity\NTFSSecurity.psd1 -C:\Users\Users\randr\Documents\WindowsPowerShell\Modules\NTFSSecurity\NTFSSecurity.psm1 -C:\Users\Users\randr\Documents\WindowsPowerShell\Modules\NTFSSecurity\NTFSSecurity.types.ps1xml -C:\Users\Users\randr\Documents\WindowsPowerShell\Modules\NTFSSecurity\NTFSSecurity.dll -C:\Users\Users\randr\Documents\WindowsPowerShell\Modules\NTFSSecurity\NTFSSecurity.pdb -C:\Program Files\WindowsPowerShell\Modules\NTFSSecurity\NTFSSecurity-Help.xml -C:\Program Files\WindowsPowerShell\Modules\NTFSSecurity\NTFSSecurity.format.ps1xml -C:\Program Files\WindowsPowerShell\Modules\NTFSSecurity\NTFSSecurity.Init.ps1 -C:\Program Files\WindowsPowerShell\Modules\NTFSSecurity\NTFSSecurity.psd1 -C:\Program Files\WindowsPowerShell\Modules\NTFSSecurity\NTFSSecurity.psm1 -C:\Program Files\WindowsPowerShell\Modules\NTFSSecurity\NTFSSecurity.types.ps1xml -C:\Program Files\WindowsPowerShell\Modules\NTFSSecurity\NTFSSecurity.dll -C:\Program Files\WindowsPowerShell\Modules\NTFSSecurity\NTFSSecurity.pdb diff --git a/NTFSSecurity/obj/Debug/NTFSSecurity.csproj.GenerateResource.Cache b/NTFSSecurity/obj/Debug/NTFSSecurity.csproj.GenerateResource.Cache deleted file mode 100644 index 6542fd82654ce9d8e140573b2a68f9de647ee7fb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 983 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 diff --git a/NTFSSecurity/obj/Debug/NTFSSecurity.pdb b/NTFSSecurity/obj/Debug/NTFSSecurity.pdb deleted file mode 100644 index 4194beb0ceaad29006a92ba2a4732cda4b65ae01..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 282112 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�`Am`D78`@**=!n{gG`Of<|v2U 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 z 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 B@TmX* diff --git a/NTFSSecurityTest/IdentityReference2Tests.cs b/NTFSSecurityTest/IdentityReference2Tests.cs deleted file mode 100644 index ea923fd..0000000 --- a/NTFSSecurityTest/IdentityReference2Tests.cs +++ /dev/null @@ -1,190 +0,0 @@ -using Microsoft.VisualStudio.TestTools.UnitTesting; -using System.Security.Principal; - -namespace Security2.Tests -{ - [TestClass()] - public class IdentityReference2Tests - { - IdentityReference2 currentUser; - IdentityReference2 currentUser2; - IdentityReference2 systemAccount; - string invalidSid; - - [TestInitialize] - public void Init() - { - currentUser = WindowsIdentity.GetCurrent().User; - currentUser2 = WindowsIdentity.GetCurrent().User; - systemAccount = new IdentityReference2(@"NT AUTHORITY\SYSTEM"); - invalidSid = "S-1-5-2-123456789-2021496291-1752113662-1002"; - } - - [TestMethod()] - public void EqualsToNameStringTest() - { - var name = WindowsIdentity.GetCurrent().User.Translate(typeof(NTAccount)).Value; - Assert.IsTrue(currentUser.Equals(name)); - } - - [TestMethod()] - public void NotEqualsToNameStringTest() - { - var name = systemAccount.AccountName; - Assert.IsFalse(currentUser.Equals(name)); - } - - [TestMethod()] - public void EqualsToSidStringTest() - { - var sid = WindowsIdentity.GetCurrent().User.Value; - Assert.IsTrue(currentUser.Equals(sid)); - } - - [TestMethod()] - public void NotEqualsToSidStringTest() - { - var sid = systemAccount.Sid; - Assert.IsFalse(currentUser.Equals(sid)); - } - - [TestMethod()] - public void NotEqualsToStringTest() - { - Assert.IsFalse(currentUser.Equals(systemAccount.AccountName)); - } - - [TestMethod()] - public void EqualsToNTAccount() - { - var ntAccount = WindowsIdentity.GetCurrent().User.Translate(typeof(NTAccount)); - Assert.IsTrue(currentUser.Equals(ntAccount)); - } - - [TestMethod()] - public void NotEqualsToNTAccount() - { - var ntAccount = new NTAccount(systemAccount.AccountName); - Assert.IsFalse(currentUser.Equals(ntAccount)); - } - - [TestMethod()] - public void EqualsToSecurityIdentifier() - { - var sid = WindowsIdentity.GetCurrent().User; - Assert.IsTrue(currentUser.Equals(sid)); - } - - [TestMethod()] - public void NotEqualsToSecurityIdentifier() - { - var sid = new SecurityIdentifier(systemAccount.Sid); - Assert.IsFalse(currentUser.Equals(sid)); - } - - [TestMethod()] - public void EqualsToIdentityReference2() - { - Assert.IsTrue(currentUser.Equals(currentUser2)); - } - - [TestMethod()] - public void NotEqualsToIdentityReference2() - { - Assert.IsFalse(currentUser.Equals(systemAccount)); - } - - [TestMethod()] - [ExpectedException(typeof(System.NullReferenceException))] - public void EqualsToNullThrowsException() - { - IdentityReference2 ir2 = null; - ir2.Equals(null); - } - - [TestMethod()] - public void NotEqualsToNull() - { - Assert.IsFalse(currentUser.Equals(null)); - } - - [TestMethod()] - public void GetHashCodeWithCurrentUserTest() - { - var sid = new SecurityIdentifier(currentUser.GetBinaryForm(), 0); - - Assert.AreEqual(sid.GetHashCode(), currentUser.GetHashCode()); - } - - [TestMethod()] - public void GetBinaryFormWithCurrentUserTest() - { - var sid = new SecurityIdentifier(currentUser.GetBinaryForm(), 0); - - Assert.AreEqual(sid.Value, currentUser.Sid); - } - - [TestMethod()] - public void ToStringWithCurrentUserTest() - { - var sid = WindowsIdentity.GetCurrent().User; - var ntAccount = sid.Translate(typeof(NTAccount)); - - Assert.AreEqual(currentUser.ToString(), ntAccount.Value); - } - - [TestMethod()] - public void ToStringWithInvalidSidEqualsNull() - { - var ir2 = (IdentityReference2)invalidSid; - Assert.AreEqual(ir2.ToString(), invalidSid); - } - - [TestMethod()] - public void op_ReferenceEquals() - { - var temp = currentUser; - Assert.IsTrue(currentUser == temp); - } - - [TestMethod()] - public void op_EqualsToIdentityReference2() - { - Assert.IsTrue(currentUser == currentUser2); - } - - [TestMethod()] - public void op_NotEqualsToIdentityReference2() - { - Assert.IsTrue(currentUser != systemAccount); - } - - [TestMethod()] - public void op_EqualsToNTAccout() - { - var ntAccount = new NTAccount(currentUser.AccountName); - Assert.IsTrue(currentUser == ntAccount); - } - - [TestMethod()] - public void op_NotEqualsToNTAccount() - { - var ntAccount = new NTAccount(systemAccount.AccountName); - Assert.IsTrue(currentUser != ntAccount); - } - - [TestMethod()] - public void op_EqualsToSecurityIdentifier() - { - var sid = new SecurityIdentifier(currentUser.Sid); - Assert.IsTrue(currentUser == sid); - } - - [TestMethod()] - public void op_NotEqualsToSecurityIdentifier() - { - var sid = new SecurityIdentifier(systemAccount.Sid); - Assert.IsTrue(currentUser != sid); - } - } -} \ No newline at end of file diff --git a/NTFSSecurityTest/NTFSSecurityTest.csproj b/NTFSSecurityTest/NTFSSecurityTest.csproj deleted file mode 100644 index e772d03..0000000 --- a/NTFSSecurityTest/NTFSSecurityTest.csproj +++ /dev/null @@ -1,105 +0,0 @@ - - - - Debug - AnyCPU - {675D40FA-F56C-4ACC-B863-18B4A14F93E0} - Library - Properties - NTFSSecurityTest - NTFSSecurityTest - v4.5.2 - 512 - {3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} - 10.0 - $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion) - $(ProgramFiles)\Common Files\microsoft shared\VSTT\$(VisualStudioVersion)\UITestExtensionPackages - False - UnitTest - SAK - SAK - SAK - SAK - - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - - - - - - - - - - - - - - - - - - - - True - True - Settings.settings - - - - - - - SettingsSingleFileGenerator - Settings.Designer.cs - - - - - {B437C364-5BC7-42E4-93F7-0F459A5DF0D0} - Security2 - - - - - - - False - - - False - - - False - - - False - - - - - - - - \ No newline at end of file diff --git a/NTFSSecurityTest/NTFSSecurityTest.csproj.vspscc b/NTFSSecurityTest/NTFSSecurityTest.csproj.vspscc deleted file mode 100644 index b6d3289..0000000 --- a/NTFSSecurityTest/NTFSSecurityTest.csproj.vspscc +++ /dev/null @@ -1,10 +0,0 @@ -"" -{ -"FILE_VERSION" = "9237" -"ENLISTMENT_CHOICE" = "NEVER" -"PROJECT_FILE_RELATIVE_PATH" = "" -"NUMBER_OF_EXCLUDED_FILES" = "0" -"ORIGINAL_PROJECT_FILE_PATH" = "" -"NUMBER_OF_NESTED_PROJECTS" = "0" -"SOURCE_CONTROL_SETTINGS_PROVIDER" = "PROVIDER" -} diff --git a/NTFSSecurityTest/Properties/AssemblyInfo.cs b/NTFSSecurityTest/Properties/AssemblyInfo.cs deleted file mode 100644 index efd29fb..0000000 --- a/NTFSSecurityTest/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,36 +0,0 @@ -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("NTFSSecurityTest")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("NTFSSecurityTest")] -[assembly: AssemblyCopyright("Copyright © 2016")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("675d40fa-f56c-4acc-b863-18b4a14f93e0")] - -// 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")] diff --git a/NTFSSecurityTest/Properties/Settings.Designer.cs b/NTFSSecurityTest/Properties/Settings.Designer.cs deleted file mode 100644 index f15033b..0000000 --- a/NTFSSecurityTest/Properties/Settings.Designer.cs +++ /dev/null @@ -1,38 +0,0 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// Runtime Version:4.0.30319.42000 -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ - -namespace NTFSSecurityTest.Properties { - - - [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "14.0.0.0")] - internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { - - private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); - - public static Settings Default { - get { - return defaultInstance; - } - } - - [global::System.Configuration.UserScopedSettingAttribute()] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("d:\\UnitTest")] - public string path { - get { - return ((string)(this["path"])); - } - set { - this["path"] = value; - } - } - } -} diff --git a/NTFSSecurityTest/Properties/Settings.settings b/NTFSSecurityTest/Properties/Settings.settings deleted file mode 100644 index 21a3d4e..0000000 --- a/NTFSSecurityTest/Properties/Settings.settings +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - d:\UnitTest - - - \ No newline at end of file diff --git a/NTFSSecurityTest/UnitTest1.cs b/NTFSSecurityTest/UnitTest1.cs deleted file mode 100644 index 3a59fc1..0000000 --- a/NTFSSecurityTest/UnitTest1.cs +++ /dev/null @@ -1,30 +0,0 @@ -using System; -using Microsoft.VisualStudio.TestTools.UnitTesting; -using System.IO; -using NTFSSecurityTest.Properties; - -namespace NTFSSecurityTest -{ - [TestClass] - public class UnitTest1 - { - [TestMethod] - public void TestMethod1() - { - Assert.IsTrue(Directory.Exists(Settings.Default.path + "1")); - } - - [TestInitialize] - public void Init() - { - System.Threading.Thread.Sleep(3000); - Directory.CreateDirectory(Settings.Default.path); - } - - [TestCleanup] - public void Cleanup() - { - Directory.Delete(Settings.Default.path); - } - } -} diff --git a/NTFSSecurityTest/app.config b/NTFSSecurityTest/app.config deleted file mode 100644 index 7e50f8a..0000000 --- a/NTFSSecurityTest/app.config +++ /dev/null @@ -1,15 +0,0 @@ - - - - -
- - - - - - d:\UnitTest - - - - \ No newline at end of file diff --git a/NTFSSecurityTest/bin/Debug/AlphaFS.dll b/NTFSSecurityTest/bin/Debug/AlphaFS.dll deleted file mode 100644 index ec222ca91d42a63209ec0f2b8852a4020d4a84c9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 312320 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

b}QC#9^3)AZ*S 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
2F#_$7G*x6+c`7=B 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 (chIeEYYQFS*6|0uT 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%0D(cmDJQDtTkw>_)tXxQ7ejA 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 - - - AlphaFS - - - -

Information about an alternate data stream. - - - - Gets the name of the alternate data stream. - This value is an empty string for the default stream (:$DATA), and for any other data stream it contains the name of the stream. - The name of the stream. - - - Gets the size of the stream. - - - Gets the full path to the stream. - - This is a path in long path format that can be passed to to open the stream if - or - is specified. - - The full path to the stream in long path format. - - - Returns the hash code for this instance. - A 32-bit signed integer that is the hash code for this instance. - - - Indicates whether this instance and a specified object are equal. - The object to compare with the current instance. - - true if and this instance are the same type and represent the same value; otherwise, false. - - - - Equality operator. - The first operand. - The second operand. - The result of the operation. - - - Inequality operator. - The first operand. - The second operand. - The result of the operation. - - - The structure contains stream header data. - - - - Initializes a new instance of the class. - The stream ID. - The name. - - - Gets the size of the data in the substream, in bytes. - The size of the data in the substream, in bytes. - - - Gets a string that specifies the name of the alternative data stream. - A string that specifies the name of the alternative data stream. - - - Gets the type of the data in the stream. - The type of the data in the stream. - - - Gets the attributes of the data to facilitate cross-operating system transfer. - Attributes of the data to facilitate cross-operating system transfer. - - - Callback used by CopyFileXxx and MoveFileXxx to report progress about the copy/move operation. - - - Exposes static methods for creating, moving, and enumerating through directories and subdirectories. - This class cannot be inherited. - - - - [AlphaFS] Copies an existing directory to a new directory. Overwriting a directory of the same name is not allowed. - - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two directories have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - A class with details of the Copy action. - - - - - - - The source directory path. - The destination directory path. - - - [AlphaFS] Copies an existing directory to a new directory. Overwriting a directory of the same name is not allowed. - - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two directories have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - A class with details of the Copy action. - - - - - - - The source directory path. - The destination directory path. - Indicates the format of the path parameter(s). - - - [AlphaFS] Copies an existing directory to a new directory. Overwriting a directory of the same name is allowed. - - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two directories have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - A class with details of the Copy action. - - - - - - - The source directory path. - The destination directory path. - if the destination directory should ignoring the read-only and hidden attributes and overwrite; otherwise, . - - - [AlphaFS] Copies an existing directory to a new directory. Overwriting a directory of the same name is allowed. - - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two directories have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - A class with details of the Copy action. - - - - - - - The source directory path. - The destination directory path. - if the destination directory should ignoring the read-only and hidden attributes and overwrite; otherwise, . - Indicates the format of the path parameter(s). - - - [AlphaFS] Copies an existing directory to a new directory. Overwriting a directory of the same name is not allowed. - - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two directories have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - A class with details of the Copy action. - - - - - - - The transaction. - The source directory path. - The destination directory path. - - - [AlphaFS] Copies an existing directory to a new directory. Overwriting a directory of the same name is not allowed. - - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two directories have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - A class with details of the Copy action. - - - - - - - The transaction. - The source directory path. - The destination directory path. - Indicates the format of the path parameter(s). - - - [AlphaFS] Copies an existing directory to a new directory. Overwriting a directory of the same name is allowed. - - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two directories have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - A class with details of the Copy action. - - - - - - - The transaction. - The source directory path. - The destination directory path. - if the destination directory should ignoring the read-only and hidden attributes and overwrite; otherwise, . - - - [AlphaFS] Copies an existing directory to a new directory. Overwriting a directory of the same name is allowed. - - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two directories have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - A class with details of the Copy action. - - - - - - - The transaction. - The source directory path. - The destination directory path. - if the destination directory should ignoring the read-only and hidden attributes and overwrite; otherwise, . - Indicates the format of the path parameter(s). - - - [AlphaFS] Copies a directory and its contents to a new location, can be specified. - - Option is recommended for very large file transfers. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two directories have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - A class with details of the Copy action. - - - - - - - The source directory path. - The destination directory path. - that specify how the directory is to be copied. This parameter can be . - - - [AlphaFS] Copies a directory and its contents to a new location, can be specified. - - Option is recommended for very large file transfers. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two directories have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - A class with details of the Copy action. - - - - - - - The source directory path. - The destination directory path. - that specify how the directory is to be copied. This parameter can be . - Indicates the format of the path parameter(s). - - - [AlphaFS] Copies a directory and its contents to a new location, can be specified, - and the possibility of notifying the application of its progress through a callback function. - - Option is recommended for very large file transfers. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two directories have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - A class with details of the Copy action. - - - - - - - The source directory path. - The destination directory path. - that specify how the directory is to be copied. This parameter can be . - A callback function that is called each time another portion of the directory has been copied. This parameter can be . - The argument to be passed to the callback function. This parameter can be . - - - [AlphaFS] Copies a directory and its contents to a new location, can be specified, - and the possibility of notifying the application of its progress through a callback function. - - Option is recommended for very large file transfers. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two directories have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - A class with details of the Copy action. - - - - - - - The source directory path. - The destination directory path. - that specify how the directory is to be copied. This parameter can be . - A callback function that is called each time another portion of the directory has been copied. This parameter can be . - The argument to be passed to the callback function. This parameter can be . - Indicates the format of the path parameter(s). - - - [AlphaFS] Copies a directory and its contents to a new location, can be specified. - - Option is recommended for very large file transfers. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two directories have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - A class with details of the Copy action. - - - - - - - The transaction. - The source directory path. - The destination directory path. - that specify how the directory is to be copied. This parameter can be . - - - [AlphaFS] Copies a directory and its contents to a new location, can be specified. - - Option is recommended for very large file transfers. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two directories have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - A class with details of the Copy action. - - - - - - - The transaction. - The source directory path. - The destination directory path. - that specify how the directory is to be copied. This parameter can be . - Indicates the format of the path parameter(s). - - - [AlphaFS] Copies a directory and its contents to a new location, can be specified, - and the possibility of notifying the application of its progress through a callback function. - - Option is recommended for very large file transfers. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two directories have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - A class with details of the Copy action. - - - - - - - The transaction. - The source directory path. - The destination directory path. - that specify how the directory is to be copied. This parameter can be . - A callback function that is called each time another portion of the directory has been copied. This parameter can be . - The argument to be passed to the callback function. This parameter can be . - - - [AlphaFS] Copies a directory and its contents to a new location, can be specified, - and the possibility of notifying the application of its progress through a callback function. - - Option is recommended for very large file transfers. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two directories have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - A class with details of the Copy action. - - - - - - - The transaction. - The source directory path. - The destination directory path. - that specify how the directory is to be copied. This parameter can be . - A callback function that is called each time another portion of the directory has been copied. This parameter can be . - The argument to be passed to the callback function. This parameter can be . - Indicates the format of the path parameter(s). - - - Moves a file or a directory and its contents to a new location. - - This method does not work across disk volumes. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two directories have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - A class with details of the Move action. - - - - - - - The source directory path. - The destination directory path. - - - [AlphaFS] Moves a file or a directory and its contents to a new location. - - This method does not work across disk volumes. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two directories have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - A class with details of the Move action. - - - - - - - The source directory path. - The destination directory path. - Indicates the format of the path parameter(s). - - - [AlphaFS] Moves a file or a directory and its contents to a new location. - - This method does not work across disk volumes. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two directories have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - A class with details of the Move action. - - - - - - - The transaction. - The source directory path. - The destination directory path. - - - [AlphaFS] Moves a file or a directory and its contents to a new location. - - This method does not work across disk volumes. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two directories have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - A class with details of the Move action. - - - - - - - The transaction. - The source directory path. - The destination directory path. - Indicates the format of the path parameter(s). - - - [AlphaFS] Moves a file or a directory and its contents to a new location, can be specified. - - This method does not work across disk volumes unless contains . - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two directories have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - A class with details of the Move action. - - - - - - - The source directory path. - The destination directory path. - that specify how the directory is to be moved. This parameter can be . - - - [AlphaFS] Moves a file or a directory and its contents to a new location, can be specified. - - This method does not work across disk volumes unless contains . - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two directories have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - A class with details of the Move action. - - - - - - - The source directory path. - The destination directory path. - that specify how the directory is to be moved. This parameter can be . - Indicates the format of the path parameter(s). - - - [AlphaFS] Moves a file or a directory and its contents to a new location, can be specified, - and the possibility of notifying the application of its progress through a callback function. - - This method does not work across disk volumes unless contains . - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two directories have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - A class with details of the Move action. - - - - - - - The source directory path. - The destination directory path. - that specify how the directory is to be moved. This parameter can be . - A callback function that is called each time another portion of the directory has been moved. This parameter can be . - The argument to be passed to the callback function. This parameter can be . - - - [AlphaFS] Moves a file or a directory and its contents to a new location, can be specified, - and the possibility of notifying the application of its progress through a callback function. - - This method does not work across disk volumes unless contains . - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two directories have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - A class with details of the Move action. - - - - - - - The source directory path. - The destination directory path. - that specify how the directory is to be moved. This parameter can be . - A callback function that is called each time another portion of the directory has been moved. This parameter can be . - The argument to be passed to the callback function. This parameter can be . - Indicates the format of the path parameter(s). - - - [AlphaFS] Moves a file or a directory and its contents to a new location, can be specified. - - This method does not work across disk volumes unless contains . - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two directories have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - A class with details of the Move action. - - - - - - - The transaction. - The source directory path. - The destination directory path. - that specify how the directory is to be moved. This parameter can be . - - - [AlphaFS] Moves a file or a directory and its contents to a new location, can be specified. - - This method does not work across disk volumes unless contains . - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two directories have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - A class with details of the Move action. - - - - - - - The transaction. - The source directory path. - The destination directory path. - that specify how the directory is to be moved. This parameter can be . - Indicates the format of the path parameter(s). - - - [AlphaFS] Moves a file or a directory and its contents to a new location, can be specified, - and the possibility of notifying the application of its progress through a callback function. - - This method does not work across disk volumes unless contains . - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two directories have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - A class with details of the Move action. - - - - - - - The transaction. - The source directory path. - The destination directory path. - that specify how the directory is to be moved. This parameter can be . - A callback function that is called each time another portion of the directory has been moved. This parameter can be . - The argument to be passed to the callback function. This parameter can be . - - - [AlphaFS] Moves a file or a directory and its contents to a new location, can be specified, - and the possibility of notifying the application of its progress through a callback function. - A class with the status of the Move action. - - This method does not work across disk volumes unless contains . - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two directories have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - A class with details of the Move action. - - - - - - - The transaction. - The source directory path. - The destination directory path. - that specify how the directory is to be moved. This parameter can be . - A callback function that is called each time another portion of the directory has been moved. This parameter can be . - The argument to be passed to the callback function. This parameter can be . - Indicates the format of the path parameter(s). - - - Copy/move a Non-/Transacted file or directory including its children to a new location, - or can be specified, - and the possibility of notifying the application of its progress through a callback function. - - Option is recommended for very large file transfers. - You cannot use the Move method to overwrite an existing file, unless contains . - Note that if you attempt to replace a file by moving a file of the same name into that directory, you get an IOException. - - - A class with the status of the Copy or Move action. - - - - - - - The transaction. - The source directory path. - The destination directory path. - that specify how the directory is to be copied. This parameter can be . - that specify how the directory is to be moved. This parameter can be . - A callback function that is called each time another portion of the file has been copied/moved. This parameter can be . - The argument to be passed to the callback function. This parameter can be . - - Indicates the format of the path parameter(s). - - - [AlphaFS] Counts file system objects: files, folders or both) in a given directory. - The counted number of file system objects. - - - - - - - The directory path. - flags that specify how the directory is to be enumerated. - - - [AlphaFS] Counts file system objects: files, folders or both) in a given directory. - The counted number of file system objects. - - - - - - - The directory path. - flags that specify how the directory is to be enumerated. - Indicates the format of the path parameter(s). - - - [AlphaFS] Counts file system objects: files, folders or both) in a given directory. - The counted number of file system objects. - - - - - - - The directory path. - - The search string to match against the names of directories in . - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - flags that specify how the directory is to be enumerated. - - - [AlphaFS] Counts file system objects: files, folders or both) in a given directory. - The counted number of file system objects. - - - - - - - The directory path. - - The search string to match against the names of directories in . - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - flags that specify how the directory is to be enumerated. - Indicates the format of the path parameter(s). - - - [AlphaFS] Counts file system objects: files, folders or both) in a given directory. - The counted number of file system objects. - - - - - - - The transaction. - The directory path. - flags that specify how the directory is to be enumerated. - - - [AlphaFS] Counts file system objects: files, folders or both) in a given directory. - The counted number of file system objects. - - - - - - - The transaction. - The directory path. - flags that specify how the directory is to be enumerated. - Indicates the format of the path parameter(s). - - - [AlphaFS] Counts file system objects: files, folders or both) in a given directory. - The counted number of file system objects. - - - - - - - The transaction. - The directory path. - - The search string to match against the names of directories in . - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - flags that specify how the directory is to be enumerated. - - - [AlphaFS] Counts file system objects: files, folders or both) in a given directory. - The counted number of file system objects. - - - - - - - The transaction. - The directory path. - - The search string to match against the names of directories in . - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - flags that specify how the directory is to be enumerated. - Indicates the format of the path parameter(s). - - - [AlphaFS] Deletes empty subdirectories from the specified directory. - - - - The name of the directory to remove empty subdirectories from. - deletes empty subdirectories from this directory and its subdirectories. - - - [AlphaFS] Deletes empty subdirectories from the specified directory. - - - - The name of the directory to remove empty subdirectories from. - deletes empty subdirectories from this directory and its subdirectories. - Indicates the format of the path parameter(s). - - - [AlphaFS] Deletes empty subdirectories from the specified directory. - - - - The name of the directory to remove empty subdirectories from. - deletes empty subdirectories from this directory and its subdirectories. - overrides read only of empty directories. - - - [AlphaFS] Deletes empty subdirectories from the specified directory. - - - - The name of the directory to remove empty subdirectories from. - deletes empty subdirectories from this directory and its subdirectories. - overrides read only of empty directories. - Indicates the format of the path parameter(s). - - - [AlphaFS] Deletes empty subdirectories from the specified directory. - - - - The transaction. - The name of the directory to remove empty subdirectories from. - deletes empty subdirectories from this directory and its subdirectories. - - - [AlphaFS] Deletes empty subdirectories from the specified directory. - - - - The transaction. - The name of the directory to remove empty subdirectories from. - deletes empty subdirectories from this directory and its subdirectories. - Indicates the format of the path parameter(s). - - - [AlphaFS] Deletes empty subdirectories from the specified directory. - - - - The transaction. - The name of the directory to remove empty subdirectories from. - deletes empty subdirectories from this directory and its subdirectories. - overrides read only of empty directories. - - - [AlphaFS] Deletes empty subdirectories from the specified directory. - - - - The transaction. - The name of the directory to remove empty subdirectories from. - deletes empty subdirectories from this directory and its subdirectories. - overrides read only of empty directories. - Indicates the format of the path parameter(s). - - - Delete empty subdirectories from the specified directory. - - - - - - - A FileSystemEntryInfo instance. Use either or , not both. - The transaction. - The name of the directory to remove empty subdirectories from. Use either or , not both. - deletes empty subdirectories from this directory and its subdirectories. - overrides read only of empty directories. - When indicates the method is called externally. - Indicates the format of the path parameter(s). - - - Deletes an empty directory from a specified path. - - - - - - - - The name of the empty directory to remove. This directory must be writable and empty. - - - Deletes the specified directory and, if indicated, any subdirectories in the directory. - - - - - - - - The name of the directory to remove. - to remove directories, subdirectories, and files in . otherwise. - - - [AlphaFS] Deletes an empty directory from a specified path. - - - - - - - - The name of the empty directory to remove. This directory must be writable and empty. - Indicates the format of the path parameter(s). - - - [AlphaFS] Deletes the specified directory and, if indicated, any subdirectories in the directory. - - - - - - - - The name of the directory to remove. - to remove directories, subdirectories, and files in . otherwise. - Indicates the format of the path parameter(s). - - - [AlphaFS] Deletes the specified directory and, if indicated, any subdirectories in the directory. - - - - - - - - The name of the directory to remove. - to remove directories, subdirectories, and files in . otherwise. - overrides read only of files and directories. - - - [AlphaFS] Deletes the specified directory and, if indicated, any subdirectories in the directory. - - - - - - - - The name of the directory to remove. - to remove directories, subdirectories, and files in . otherwise. - overrides read only of files and directories. - Indicates the format of the path parameter(s). - - - [AlphaFS] Deletes an empty directory from a specified path. - - - - - - - - The transaction. - The name of the empty directory to remove. This directory must be writable and empty. - - - [AlphaFS] Deletes an empty directory from a specified path. - - - - - - - - The transaction. - The name of the empty directory to remove. This directory must be writable and empty. - Indicates the format of the path parameter(s). - - - [AlphaFS] Deletes the specified directory and, if indicated, any subdirectories in the directory. - - - - - - - - The transaction. - The name of the directory to remove. - to remove directories, subdirectories, and files in . otherwise. - - - [AlphaFS] Deletes the specified directory and, if indicated, any subdirectories in the directory. - - - - - - - - The transaction. - The name of the directory to remove. - to remove directories, subdirectories, and files in . otherwise. - Indicates the format of the path parameter(s). - - - [AlphaFS] Deletes the specified directory and, if indicated, any subdirectories in the directory. - - - - - - - - The transaction. - The name of the directory to remove. - to remove directories, subdirectories, and files in . otherwise. - overrides read only of files and directories. - - - [AlphaFS] Deletes the specified directory and, if indicated, any subdirectories in the directory. - - - - - - - - The transaction. - The name of the directory to remove. - to remove directories, subdirectories, and files in . otherwise. - overrides read only of files and directories. - Indicates the format of the path parameter(s). - - - Deletes the specified directory and, if indicated, any subdirectories in the directory. - The RemoveDirectory function marks a directory for deletion on close. Therefore, the directory is not removed until the last handle to the directory is closed. - - - - - - - - A FileSystemEntryInfo instance. Use either or , not both. - The transaction. - The name of the directory to remove. Use either or , not both. - to remove all files and subdirectories recursively; otherwise only the top level empty directory. - overrides read only attribute of files and directories. - requires the directory must be empty. - does not throw an Exception when the file system object does not exist. - Indicates the format of the path parameter(s). - - - Creates all directories and subdirectories in the specified path unless they already exist. - An object that represents the directory at the specified path. This object is returned regardless of whether a directory at the specified path already exists. - - - - - - - The directory to create. - - - [AlphaFS] Creates all the directories in the specified path, applying the specified Windows security. - An object that represents the directory at the specified path. This object is returned regardless of whether a directory at the specified path already exists. - - - - - - - The directory to create. - Indicates the format of the path parameter(s). - - - [AlphaFS] Creates all the directories in the specified path, applying the specified Windows security. - An object that represents the directory at the specified path. This object is returned regardless of whether a directory at the specified path already exists. - - - - - - - The directory to create. - When compresses the directory. - - - [AlphaFS] Creates all the directories in the specified path, applying the specified Windows security. - An object that represents the directory at the specified path. This object is returned regardless of whether a directory at the specified path already exists. - - - - - - - The directory to create. - When compresses the directory. - Indicates the format of the path parameter(s). - - - Creates all the directories in the specified path, unless the already exist, applying the specified Windows security. - An object that represents the directory at the specified path. This object is returned regardless of whether a directory at the specified path already exists. - - - - - - - The directory to create. - The access control to apply to the directory. - - - [AlphaFS] Creates all the directories in the specified path, applying the specified Windows security. - An object that represents the directory at the specified path. This object is returned regardless of whether a directory at the specified path already exists. - - - - - - - The directory to create. - The access control to apply to the directory. - Indicates the format of the path parameter(s). - - - [AlphaFS] Creates all the directories in the specified path, applying the specified Windows security. - An object that represents the directory at the specified path. This object is returned regardless of whether a directory at the specified path already exists. - - - - - - - The directory to create. - The access control to apply to the directory. - When compresses the directory. - - - [AlphaFS] Creates all the directories in the specified path, applying the specified Windows security. - An object that represents the directory at the specified path. This object is returned regardless of whether a directory at the specified path already exists. - - - - - - - The directory to create. - The access control to apply to the directory. - When compresses the directory. - Indicates the format of the path parameter(s). - - - [AlphaFS] Creates a new directory, with the attributes of a specified template directory. - An object that represents the directory at the specified path. This object is returned regardless of whether a directory at the specified path already exists. - - - - - - - The directory to create. - The path of the directory to use as a template when creating the new directory. - - - [AlphaFS] Creates a new directory, with the attributes of a specified template directory. - An object that represents the directory at the specified path. This object is returned regardless of whether a directory at the specified path already exists. - - - - - - - The directory to create. - The path of the directory to use as a template when creating the new directory. - Indicates the format of the path parameter(s). - - - [AlphaFS] Creates a new directory, with the attributes of a specified template directory. - An object that represents the directory at the specified path. This object is returned regardless of whether a directory at the specified path already exists. - - - - - - - The directory to create. - The path of the directory to use as a template when creating the new directory. - When compresses the directory. - - - [AlphaFS] Creates a new directory, with the attributes of a specified template directory. - An object that represents the directory at the specified path. This object is returned regardless of whether a directory at the specified path already exists. - - - - - - - The directory to create. - The path of the directory to use as a template when creating the new directory. - When compresses the directory. - Indicates the format of the path parameter(s). - - - [AlphaFS] Creates all the directories in the specified path of a specified template directory and applies the specified Windows security. - An object that represents the directory at the specified path. This object is returned regardless of whether a directory at the specified path already exists. - - - - - - - The directory to create. - The path of the directory to use as a template when creating the new directory. - The access control to apply to the directory. - - - [AlphaFS] Creates all the directories in the specified path of a specified template directory and applies the specified Windows security. - An object that represents the directory at the specified path. This object is returned regardless of whether a directory at the specified path already exists. - - - - - - - The directory to create. - The path of the directory to use as a template when creating the new directory. - The access control to apply to the directory. - Indicates the format of the path parameter(s). - - - [AlphaFS] Creates all the directories in the specified path of a specified template directory and applies the specified Windows security. - An object that represents the directory at the specified path. This object is returned regardless of whether a directory at the specified path already exists. - - - - - - - The directory to create. - The path of the directory to use as a template when creating the new directory. - The access control to apply to the directory. - When compresses the directory. - - - [AlphaFS] Creates all the directories in the specified path of a specified template directory and applies the specified Windows security. - An object that represents the directory at the specified path. This object is returned regardless of whether a directory at the specified path already exists. - - - - - - - The directory to create. - The path of the directory to use as a template when creating the new directory. - The access control to apply to the directory. - When compresses the directory. - Indicates the format of the path parameter(s). - - - Creates all directories and subdirectories in the specified path unless they already exist. - An object that represents the directory at the specified path. This object is returned regardless of whether a directory at the specified path already exists. - - - - - - - The transaction. - The directory to create. - - - [AlphaFS] Creates all the directories in the specified path, applying the specified Windows security. - An object that represents the directory at the specified path. This object is returned regardless of whether a directory at the specified path already exists. - - - - - - - The transaction. - The directory to create. - Indicates the format of the path parameter(s). - - - [AlphaFS] Creates all the directories in the specified path, applying the specified Windows security. - An object that represents the directory at the specified path. This object is returned regardless of whether a directory at the specified path already exists. - - - - - - - The transaction. - The directory to create. - When compresses the directory. - - - [AlphaFS] Creates all the directories in the specified path, applying the specified Windows security. - An object that represents the directory at the specified path. This object is returned regardless of whether a directory at the specified path already exists. - - - - - - - The transaction. - The directory to create. - When compresses the directory. - Indicates the format of the path parameter(s). - - - Creates all the directories in the specified path, unless the already exist, applying the specified Windows security. - An object that represents the directory at the specified path. This object is returned regardless of whether a directory at the specified path already exists. - - - - - - - The transaction. - The directory to create. - The access control to apply to the directory. - - - [AlphaFS] Creates all the directories in the specified path, applying the specified Windows security. - An object that represents the directory at the specified path. This object is returned regardless of whether a directory at the specified path already exists. - - - - - - - The transaction. - The directory to create. - The access control to apply to the directory. - Indicates the format of the path parameter(s). - - - [AlphaFS] Creates all the directories in the specified path, applying the specified Windows security. - An object that represents the directory at the specified path. This object is returned regardless of whether a directory at the specified path already exists. - - - - - - - The transaction. - The directory to create. - The access control to apply to the directory. - When compresses the directory. - - - [AlphaFS] Creates all the directories in the specified path, applying the specified Windows security. - An object that represents the directory at the specified path. This object is returned regardless of whether a directory at the specified path already exists. - - - - - - - The transaction. - The directory to create. - The access control to apply to the directory. - When compresses the directory. - Indicates the format of the path parameter(s). - - - [AlphaFS] Creates a new directory, with the attributes of a specified template directory. - An object that represents the directory at the specified path. This object is returned regardless of whether a directory at the specified path already exists. - - - - - - - The transaction. - The directory to create. - The path of the directory to use as a template when creating the new directory. - - - [AlphaFS] Creates a new directory, with the attributes of a specified template directory. - An object that represents the directory at the specified path. This object is returned regardless of whether a directory at the specified path already exists. - - - - - - - The transaction. - The directory to create. - The path of the directory to use as a template when creating the new directory. - Indicates the format of the path parameter(s). - - - [AlphaFS] Creates a new directory, with the attributes of a specified template directory. - An object that represents the directory at the specified path. This object is returned regardless of whether a directory at the specified path already exists. - - - - - - - The transaction. - The directory to create. - The path of the directory to use as a template when creating the new directory. - When compresses the directory. - - - [AlphaFS] Creates a new directory, with the attributes of a specified template directory. - An object that represents the directory at the specified path. This object is returned regardless of whether a directory at the specified path already exists. - - - - - - - The transaction. - The directory to create. - The path of the directory to use as a template when creating the new directory. - When compresses the directory. - Indicates the format of the path parameter(s). - - - [AlphaFS] Creates all the directories in the specified path of a specified template directory and applies the specified Windows security. - An object that represents the directory at the specified path. This object is returned regardless of whether a directory at the specified path already exists. - - - - - - - The transaction. - The directory to create. - The path of the directory to use as a template when creating the new directory. - The access control to apply to the directory. - - - [AlphaFS] Creates all the directories in the specified path of a specified template directory and applies the specified Windows security. - An object that represents the directory at the specified path. This object is returned regardless of whether a directory at the specified path already exists. - - - - - - - The transaction. - The directory to create. - The path of the directory to use as a template when creating the new directory. - The access control to apply to the directory. - Indicates the format of the path parameter(s). - - - [AlphaFS] Creates all the directories in the specified path of a specified template directory and applies the specified Windows security. - An object that represents the directory at the specified path. This object is returned regardless of whether a directory at the specified path already exists. - - - - - - - The transaction. - The directory to create. - The path of the directory to use as a template when creating the new directory. - The access control to apply to the directory. - When compresses the directory. - - - [AlphaFS] Creates all the directories in the specified path of a specified template directory and applies the specified Windows security. - An object that represents the directory at the specified path. This object is returned regardless of whether a directory at the specified path already exists. - - - - - - - The transaction. - The directory to create. - The path of the directory to use as a template when creating the new directory. - The access control to apply to the directory. - When compresses the directory. - Indicates the format of the path parameter(s). - - - Creates a new directory with the attributes of a specified template directory (if one is specified). - If the underlying file system supports security on files and directories, the function applies the specified security descriptor to the new directory. - The new directory retains the other attributes of the specified template directory. - - - Returns an object that represents the directory at the specified path. - This object is returned regardless of whether a directory at the specified path already exists. - - - - - - - - The transaction. - The directory to create. - The path of the directory to use as a template when creating the new directory. May be to indicate that no template should be used. - The access control to apply to the directory, may be null. - When compresses the directory. - Indicates the format of the path parameter(s). - - - Returns an enumerable collection of directory names in a specified . - An enumerable collection of the full names (including paths) for the directories in the directory specified by . - - - - - - - The directory to search. - - - Returns an enumerable collection of directory names that match a in a specified . - An enumerable collection of the full names (including paths) for the directories in the directory specified by and that match the specified . - - - - - - - The directory to search. - - The search string to match against the names of directories in . - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - - - Returns an enumerable collection of directory names that match a in a specified , and optionally searches subdirectories. - An enumerable collection of the full names (including paths) for the directories in the directory specified by and that match the specified and . - - - - - - - The directory to search. - - The search string to match against the names of directories in . - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - - One of the enumeration values that specifies whether the - should include only the current directory or should include all subdirectories. - - - - [AlphaFS] Returns an enumerable collection of directory names in a specified . - An enumerable collection of the full names (including paths) for the directories in the directory specified by . - - - - - - - The directory to search. - Indicates the format of the path parameter(s). - - - [AlphaFS] Returns an enumerable collection of directory names that match a in a specified . - An enumerable collection of the full names (including paths) for the directories in the directory specified by and that match the specified . - - - - - - - The directory to search. - - The search string to match against the names of directories in . - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - Indicates the format of the path parameter(s). - - - [AlphaFS] Returns an enumerable collection of directory names that match a in a specified , and optionally searches subdirectories. - An enumerable collection of the full names (including paths) for the directories in the directory specified by and that match the specified and . - - - - - - - The directory to search. - - The search string to match against the names of directories in . - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - - One of the enumeration values that specifies whether the - should include only the current directory or should include all subdirectories. - - Indicates the format of the path parameter(s). - - - [AlphaFS] Returns an enumerable collection of directory names in a specified . - An enumerable collection of the full names (including paths) for the directories in the directory specified by . - - - - - - - The directory to search. - flags that specify how the directory is to be enumerated. - - - [AlphaFS] Returns an enumerable collection of directory names in a specified . - An enumerable collection of the full names (including paths) for the directories in the directory specified by . - - - - - - - The directory to search. - flags that specify how the directory is to be enumerated. - Indicates the format of the path parameter(s). - - - [AlphaFS] Returns an enumerable collection of directory names in a specified . - An enumerable collection of the full names (including paths) for the directories in the directory specified by . - - - - - - - The directory to search. - - The search string to match against the names of directories in . - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - flags that specify how the directory is to be enumerated. - - - [AlphaFS] Returns an enumerable collection of directory names in a specified . - An enumerable collection of the full names (including paths) for the directories in the directory specified by . - - - - - - - The directory to search. - - The search string to match against the names of directories in . - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - flags that specify how the directory is to be enumerated. - Indicates the format of the path parameter(s). - - - [AlphaFS] Returns an enumerable collection of directory instances in a specified . - An enumerable collection of the full names (including paths) for the directories in the directory specified by . - - - - - - - The transaction. - The directory to search. - - - [AlphaFS] Returns an enumerable collection of directory instances that match a in a specified . - An enumerable collection of the full names (including paths) for the directories in the directory specified by and that match the specified . - - - - - - - The transaction. - The directory to search. - - The search string to match against the names of directories in . - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - - - [AlphaFS] Returns an enumerable collection of directory names that match a in a specified , and optionally searches subdirectories. - An enumerable collection of the full names (including paths) for the directories in the directory specified by and that match the specified and . - - - - - - - The transaction. - The directory to search. - - The search string to match against the names of directories in . - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - - One of the enumeration values that specifies whether the - should include only the current directory or should include all subdirectories. - - - - [AlphaFS] Returns an enumerable collection of directory instances in a specified . - An enumerable collection of the full names (including paths) for the directories in the directory specified by . - - - - - - - The transaction. - The directory to search. - Indicates the format of the path parameter(s). - - - [AlphaFS] Returns an enumerable collection of directory instances that match a in a specified . - An enumerable collection of the full names (including paths) for the directories in the directory specified by and that match the specified . - - - - - - - The transaction. - The directory to search. - - The search string to match against the names of directories in . - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - Indicates the format of the path parameter(s). - - - [AlphaFS] Returns an enumerable collection of directory names that match a in a specified , and optionally searches subdirectories. - An enumerable collection of the full names (including paths) for the directories in the directory specified by and that match the specified and . - - - - - - - The transaction. - The directory to search. - - The search string to match against the names of directories in . - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - - One of the enumeration values that specifies whether the - should include only the current directory or should include all subdirectories. - - Indicates the format of the path parameter(s). - - - [AlphaFS] Returns an enumerable collection of directory instances in a specified . - An enumerable collection of the full names (including paths) for the directories in the directory specified by . - - - - - - - The transaction. - The directory to search. - flags that specify how the directory is to be enumerated. - - - [AlphaFS] Returns an enumerable collection of directory instances in a specified . - An enumerable collection of the full names (including paths) for the directories in the directory specified by . - - - - - - - The transaction. - The directory to search. - flags that specify how the directory is to be enumerated. - Indicates the format of the path parameter(s). - - - [AlphaFS] Returns an enumerable collection of directory instances that match a in a specified . - An enumerable collection of the full names (including paths) for the directories in the directory specified by and that match the specified . - - - - - - - The transaction. - The directory to search. - - The search string to match against the names of directories in . - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - flags that specify how the directory is to be enumerated. - - - [AlphaFS] Returns an enumerable collection of directory instances that match a in a specified . - An enumerable collection of the full names (including paths) for the directories in the directory specified by and that match the specified . - - - - - - - The transaction. - The directory to search. - - The search string to match against the names of directories in . - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - flags that specify how the directory is to be enumerated. - Indicates the format of the path parameter(s). - - - Returns an enumerable collection of file names in a specified . - An enumerable collection of the full names (including paths) for the files in the directory specified by . - - - - - - - The directory to search. - - - Returns an enumerable collection of file names in a specified . - An enumerable collection of the full names (including paths) for the files in the directory specified by and that match the . - - - - - - - The directory to search. - - The search string to match against the names of directories in . - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - - - Returns an enumerable collection of file names that match a in a specified , and optionally searches subdirectories. - An enumerable collection of the full names (including paths) for the files in the directory specified by and that match the specified and . - - - - - - - The directory to search. - - The search string to match against the names of directories in . - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - - One of the enumeration values that specifies whether the - should include only the current directory or should include all subdirectories. - - - - [AlphaFS] Returns an enumerable collection of file names in a specified . - An enumerable collection of the full names (including paths) for the files in the directory specified by . - - - - - - - The directory to search. - Indicates the format of the path parameter(s). - - - [AlphaFS] Returns an enumerable collection of file names in a specified . - An enumerable collection of the full names (including paths) for the files in the directory specified by and that match the . - - - - - - - The directory to search. - - The search string to match against the names of directories in . - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - Indicates the format of the path parameter(s). - - - [AlphaFS] Returns an enumerable collection of file names that match a in a specified , and optionally searches subdirectories. - An enumerable collection of the full names (including paths) for the files in the directory specified by and that match the specified and . - - - - - - - The directory to search. - - The search string to match against the names of directories in . - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - - One of the enumeration values that specifies whether the - should include only the current directory or should include all subdirectories. - - Indicates the format of the path parameter(s). - - - [AlphaFS] Returns an enumerable collection of file names in a specified . - An enumerable collection of the full names (including paths) for the files in the directory specified by . - - - - - - - The directory to search. - flags that specify how the directory is to be enumerated. - - - [AlphaFS] Returns an enumerable collection of file names in a specified . - An enumerable collection of the full names (including paths) for the files in the directory specified by . - - - - - - - The directory to search. - flags that specify how the directory is to be enumerated. - Indicates the format of the path parameter(s). - - - [AlphaFS] Returns an enumerable collection of file names in a specified . - An enumerable collection of the full names (including paths) for the files in the directory specified by and that match the . - - - - - - - The directory to search. - - The search string to match against the names of directories in . - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - flags that specify how the directory is to be enumerated. - - - [AlphaFS] Returns an enumerable collection of file names in a specified . - An enumerable collection of the full names (including paths) for the files in the directory specified by and that match the . - - - - - - - The directory to search. - - The search string to match against the names of directories in . - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - flags that specify how the directory is to be enumerated. - Indicates the format of the path parameter(s). - - - [AlphaFS] Returns an enumerable collection of file names in a specified . - An enumerable collection of the full names (including paths) for the files in the directory specified by . - - - - - - - The transaction. - The directory to search. - - - [AlphaFS] Returns an enumerable collection of file instances that match a in a specified . - An enumerable collection of the full names (including paths) for the files in the directory specified by and that match the . - - - - - - - The transaction. - The directory to search. - - The search string to match against the names of directories in . - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - - - [AlphaFS] Returns an enumerable collection of file instances instances that match a in a specified , and optionally searches subdirectories. - An enumerable collection of the full names (including paths) for the files in the directory specified by and that match the specified and . - - - - - - - The transaction. - The directory to search. - - The search string to match against the names of directories in . - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - - One of the enumeration values that specifies whether the - should include only the current directory or should include all subdirectories. - - - - [AlphaFS] Returns an enumerable collection of file names in a specified . - An enumerable collection of the full names (including paths) for the files in the directory specified by . - - - - - - - The transaction. - The directory to search. - Indicates the format of the path parameter(s). - - - [AlphaFS] Returns an enumerable collection of file instances that match a in a specified . - An enumerable collection of the full names (including paths) for the files in the directory specified by and that match the . - - - - - - - The transaction. - The directory to search. - - The search string to match against the names of directories in . - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - Indicates the format of the path parameter(s). - - - [AlphaFS] Returns an enumerable collection of file instances instances that match a in a specified , and optionally searches subdirectories. - An enumerable collection of the full names (including paths) for the files in the directory specified by and that match the specified and . - - - - - - - The transaction. - The directory to search. - - The search string to match against the names of directories in . - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - - One of the enumeration values that specifies whether the - should include only the current directory or should include all subdirectories. - - Indicates the format of the path parameter(s). - - - [AlphaFS] Returns an enumerable collection of file names in a specified . - An enumerable collection of the full names (including paths) for the files in the directory specified by . - - - - - - - The transaction. - The directory to search. - flags that specify how the directory is to be enumerated. - - - [AlphaFS] Returns an enumerable collection of file names in a specified . - An enumerable collection of the full names (including paths) for the files in the directory specified by . - - - - - - - The transaction. - The directory to search. - flags that specify how the directory is to be enumerated. - Indicates the format of the path parameter(s). - - - [AlphaFS] Returns an enumerable collection of file instances that match a in a specified . - An enumerable collection of the full names (including paths) for the files in the directory specified by and that match the . - - - - - - - The transaction. - The directory to search. - - The search string to match against the names of directories in . - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - flags that specify how the directory is to be enumerated. - - - [AlphaFS] Returns an enumerable collection of file instances that match a in a specified . - An enumerable collection of the full names (including paths) for the files in the directory specified by and that match the . - - - - - - - The transaction. - The directory to search. - - The search string to match against the names of directories in . - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - flags that specify how the directory is to be enumerated. - Indicates the format of the path parameter(s). - - - [AlphaFS] Returns an enumerable collection of file system entries in a specified path. - The matching file system entries. The type of the items is determined by the type . - - - - - - - The type to return. This may be one of the following types: - - - - This method will return instances of instances. - - - - This method will return instances of and instances. - - - - This method will return the full path of each item. - - - - The directory to search. - - - [AlphaFS] Returns an enumerable collection of file system entries in a specified path. - The matching file system entries. The type of the items is determined by the type . - - - - - - - The type to return. This may be one of the following types: - - - - This method will return instances of instances. - - - - This method will return instances of and instances. - - - - This method will return the full path of each item. - - - - The directory to search. - Indicates the format of the path parameter(s). - - - [AlphaFS] Returns an enumerable collection of file system entries in a specified path. - The matching file system entries. The type of the items is determined by the type . - - - - - - - The type to return. This may be one of the following types: - - - - This method will return instances of instances. - - - - This method will return instances of and instances. - - - - This method will return the full path of each item. - - - - The directory to search. - flags that specify how the directory is to be enumerated. - - - [AlphaFS] Returns an enumerable collection of file system entries in a specified path. - The matching file system entries. The type of the items is determined by the type . - - - - - - - The type to return. This may be one of the following types: - - - - This method will return instances of instances. - - - - This method will return instances of and instances. - - - - This method will return the full path of each item. - - - - The directory to search. - flags that specify how the directory is to be enumerated. - Indicates the format of the path parameter(s). - - - [AlphaFS] Returns an enumerable collection of file system entries that match a in a specified path. - The matching file system entries. The type of the items is determined by the type . - - - - - - - The type to return. This may be one of the following types: - - - - This method will return instances of instances. - - - - This method will return instances of and instances. - - - - This method will return the full path of each item. - - - - The directory to search. - - The search string to match against the names of directories in . - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - - - [AlphaFS] Returns an enumerable collection of file system entries that match a in a specified path. - The matching file system entries. The type of the items is determined by the type . - - - - - - - The type to return. This may be one of the following types: - - - - This method will return instances of instances. - - - - This method will return instances of and instances. - - - - This method will return the full path of each item. - - - - The directory to search. - - The search string to match against the names of directories in . - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - Indicates the format of the path parameter(s). - - - [AlphaFS] Returns an enumerable collection of file system entries that match a in a specified path using . - The matching file system entries. The type of the items is determined by the type . - - - - - - - The type to return. This may be one of the following types: - - - - This method will return instances of instances. - - - - This method will return instances of and instances. - - - - This method will return the full path of each item. - - - - The directory to search. - - The search string to match against the names of directories in . - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - flags that specify how the directory is to be enumerated. - - - [AlphaFS] Returns an enumerable collection of file system entries that match a in a specified path using . - The matching file system entries. The type of the items is determined by the type . - - - - - - - The type to return. This may be one of the following types: - - - - This method will return instances of instances. - - - - This method will return instances of and instances. - - - - This method will return the full path of each item. - - - - The directory to search. - - The search string to match against the names of directories in . - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - flags that specify how the directory is to be enumerated. - Indicates the format of the path parameter(s). - - - [AlphaFS] Returns an enumerable collection of file system entries in a specified path. - The matching file system entries. The type of the items is determined by the type . - - - - - - - The type to return. This may be one of the following types: - - - - This method will return instances of instances. - - - - This method will return instances of and instances. - - - - This method will return the full path of each item. - - - - The transaction. - The directory to search. - - - [AlphaFS] Returns an enumerable collection of file system entries in a specified path. - The matching file system entries. The type of the items is determined by the type . - - - - - - - The type to return. This may be one of the following types: - - - - This method will return instances of instances. - - - - This method will return instances of and instances. - - - - This method will return the full path of each item. - - - - The transaction. - The directory to search. - Indicates the format of the path parameter(s). - - - [AlphaFS] Returns an enumerable collection of file system entries in a specified path. - The matching file system entries. The type of the items is determined by the type . - - - - - - - The type to return. This may be one of the following types: - - - - This method will return instances of instances. - - - - This method will return instances of and instances. - - - - This method will return the full path of each item. - - - - The transaction. - The directory to search. - flags that specify how the directory is to be enumerated. - - - [AlphaFS] Returns an enumerable collection of file system entries in a specified path. - The matching file system entries. The type of the items is determined by the type . - - - - - - - The type to return. This may be one of the following types: - - - - This method will return instances of instances. - - - - This method will return instances of and instances. - - - - This method will return the full path of each item. - - - - The transaction. - The directory to search. - flags that specify how the directory is to be enumerated. - Indicates the format of the path parameter(s). - - - [AlphaFS] Returns an enumerable collection of file system entries that match a in a specified path. - The matching file system entries. The type of the items is determined by the type . - - - - - - - The type to return. This may be one of the following types: - - - - This method will return instances of instances. - - - - This method will return instances of and instances. - - - - This method will return the full path of each item. - - - - The transaction. - The directory to search. - - The search string to match against the names of directories in . - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - - - [AlphaFS] Returns an enumerable collection of file system entries that match a in a specified path. - The matching file system entries. The type of the items is determined by the type . - - - - - - - The type to return. This may be one of the following types: - - - - This method will return instances of instances. - - - - This method will return instances of and instances. - - - - This method will return the full path of each item. - - - - The transaction. - The directory to search. - - The search string to match against the names of directories in . - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - Indicates the format of the path parameter(s). - - - [AlphaFS] Returns an enumerable collection of file system entries that match a in a specified path using . - The matching file system entries. The type of the items is determined by the type . - - - - - - - The type to return. This may be one of the following types: - - - - This method will return instances of instances. - - - - This method will return instances of and instances. - - - - This method will return the full path of each item. - - - - The transaction. - The directory to search. - - The search string to match against the names of directories in . - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - flags that specify how the directory is to be enumerated. - - - [AlphaFS] Returns an enumerable collection of file system entries that match a in a specified path using . - The matching file system entries. The type of the items is determined by the type . - - - - - - - The type to return. This may be one of the following types: - - - - This method will return instances of instances. - - - - This method will return instances of and instances. - - - - This method will return the full path of each item. - - - - The transaction. - The directory to search. - - The search string to match against the names of directories in . - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - flags that specify how the directory is to be enumerated. - Indicates the format of the path parameter(s). - - - Returns an enumerable collection of file system entries in a specified path using . - The matching file system entries. The type of the items is determined by the type . - - - - - - - The type to return. This may be one of the following types: - - - - This method will return instances of instances. - - - - This method will return instances of and instances. - - - - This method will return the full path of each item. - - - - The transaction. - The directory to search. - - The search string to match against the names of directories in . - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - flags that specify how the directory is to be enumerated. - Indicates the format of the path parameter(s). - - - Returns an enumerable collection of file names and directory names in a specified . - An enumerable collection of file system entries in the directory specified by . - - - - - - - The directory to search. - - - Returns an enumerable collection of file names and directory names that match a in a specified . - An enumerable collection of file system entries in the directory specified by and that match the specified . - - - - - - - The directory to search. - - The search string to match against the names of directories in . - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - - - Returns an enumerable collection of file names and directory names that match a in a specified , and optionally searches subdirectories. - An enumerable collection of file system entries in the directory specified by and that match the specified and . - - - - - - - The directory to search. - - The search string to match against the names of directories in . - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - - One of the enumeration values that specifies whether the - should include only the current directory or should include all subdirectories. - - - - [AlphaFS] Returns an enumerable collection of file names and directory names in a specified . - An enumerable collection of file system entries in the directory specified by . - - - - - - - The directory to search. - Indicates the format of the path parameter(s). - - - [AlphaFS] Returns an enumerable collection of file names and directory names that match a in a specified . - An enumerable collection of file system entries in the directory specified by and that match the specified . - - - - - - - The directory to search. - - The search string to match against the names of directories in . - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - Indicates the format of the path parameter(s). - - - [AlphaFS] Returns an enumerable collection of file names and directory names that match a in a specified , and optionally searches subdirectories. - An enumerable collection of file system entries in the directory specified by and that match the specified and . - - - - - - - The directory to search. - - The search string to match against the names of directories in . - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - - One of the enumeration values that specifies whether the - should include only the current directory or should include all subdirectories. - - Indicates the format of the path parameter(s). - - - [AlphaFS] Returns an enumerable collection of file names and directory names in a specified . - An enumerable collection of file system entries in the directory specified by . - - - - - - - The directory to search. - flags that specify how the directory is to be enumerated. - - - [AlphaFS] Returns an enumerable collection of file names and directory names in a specified . - An enumerable collection of file system entries in the directory specified by . - - - - - - - The directory to search. - flags that specify how the directory is to be enumerated. - Indicates the format of the path parameter(s). - - - [AlphaFS] Returns an enumerable collection of file names and directory names that match a in a specified . - An enumerable collection of file system entries in the directory specified by and that match the specified . - - - - - - - The directory to search. - - The search string to match against the names of directories in . - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - flags that specify how the directory is to be enumerated. - - - [AlphaFS] Returns an enumerable collection of file names and directory names that match a in a specified . - An enumerable collection of file system entries in the directory specified by and that match the specified . - - - - - - - The directory to search. - - The search string to match against the names of directories in . - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - Indicates the format of the path parameter(s). - flags that specify how the directory is to be enumerated. - - - [AlphaFS] Returns an enumerable collection of file names and directory names in a specified . - An enumerable collection of file system entries in the directory specified by . - - - - - - - The transaction. - The directory to search. - - - [AlphaFS] Returns an enumerable collection of file names and directory names that match a in a specified . - An enumerable collection of file system entries in the directory specified by and that match the specified . - - - - - - - The transaction. - The directory to search. - - The search string to match against the names of directories in . - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - - - [AlphaFS] Returns an enumerable collection of file names and directory names that match a in a specified , and optionally searches subdirectories. - An enumerable collection of file system entries in the directory specified by and that match the specified and . - - - - - - - The transaction. - The directory to search. - - The search string to match against the names of directories in . - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - - One of the enumeration values that specifies whether the - should include only the current directory or should include all subdirectories. - - - - [AlphaFS] Returns an enumerable collection of file names and directory names in a specified . - An enumerable collection of file system entries in the directory specified by . - - - - - - - The transaction. - The directory to search. - Indicates the format of the path parameter(s). - - - [AlphaFS] Returns an enumerable collection of file names and directory names that match a in a specified . - An enumerable collection of file system entries in the directory specified by and that match the specified . - - - - - - - The transaction. - The directory to search. - - The search string to match against the names of directories in . - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - Indicates the format of the path parameter(s). - - - [AlphaFS] Returns an enumerable collection of file names and directory names that match a in a specified , and optionally searches subdirectories. - An enumerable collection of file system entries in the directory specified by and that match the specified and . - - - - - - - The transaction. - The directory to search. - - The search string to match against the names of directories in . - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - - One of the enumeration values that specifies whether the - should include only the current directory or should include all subdirectories. - - Indicates the format of the path parameter(s). - - - [AlphaFS] Returns an enumerable collection of file names and directory names in a specified . - An enumerable collection of file system entries in the directory specified by . - - - - - - - The transaction. - The directory to search. - flags that specify how the directory is to be enumerated. - - - [AlphaFS] Returns an enumerable collection of file names and directory names in a specified . - An enumerable collection of file system entries in the directory specified by . - - - - - - - The transaction. - The directory to search. - flags that specify how the directory is to be enumerated. - Indicates the format of the path parameter(s). - - - [AlphaFS] Returns an enumerable collection of file names and directory names that match a in a specified . - An enumerable collection of file system entries in the directory specified by and that match the specified . - - - - - - - The transaction. - The directory to search. - - The search string to match against the names of directories in . - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - flags that specify how the directory is to be enumerated. - - - [AlphaFS] Returns an enumerable collection of file names and directory names that match a in a specified . - An enumerable collection of file system entries in the directory specified by and that match the specified . - - - - - - - The transaction. - The directory to search. - - The search string to match against the names of directories in . - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - flags that specify how the directory is to be enumerated. - Indicates the format of the path parameter(s). - - - Determines whether the given path refers to an existing directory on disk. - - Returns if refers to an existing directory. - Returns if the directory does not exist or an error occurs when trying to determine if the specified file exists. - - - The Exists method returns if any error occurs while trying to determine if the specified file exists. - This can occur in situations that raise exceptions such as passing a file name with invalid characters or too many characters, - a failing or missing disk, or if the caller does not have permission to read the file. - - The path to test. - - - [AlphaFS] Determines whether the given path refers to an existing directory on disk. - - Returns if refers to an existing directory. - Returns if the directory does not exist or an error occurs when trying to determine if the specified file exists. - - - The Exists method returns if any error occurs while trying to determine if the specified file exists. - This can occur in situations that raise exceptions such as passing a file name with invalid characters or too many characters, - a failing or missing disk, or if the caller does not have permission to read the file. - - The path to test. - Indicates the format of the path parameter(s). - - - [AlphaFS] Determines whether the given path refers to an existing directory on disk. - - Returns if refers to an existing directory. - Returns if the directory does not exist or an error occurs when trying to determine if the specified file exists. - - - The Exists method returns if any error occurs while trying to determine if the specified file exists. - This can occur in situations that raise exceptions such as passing a file name with invalid characters or too many characters, - a failing or missing disk, or if the caller does not have permission to read the file. - - The transaction. - The path to test. - - - [AlphaFS] Determines whether the given path refers to an existing directory on disk. - - Returns if refers to an existing directory. - Returns if the directory does not exist or an error occurs when trying to determine if the specified file exists. - - - The Exists method returns if any error occurs while trying to determine if the specified file exists. - This can occur in situations that raise exceptions such as passing a file name with invalid characters or too many characters, - a failing or missing disk, or if the caller does not have permission to read the file. - - The transaction. - The path to test. - Indicates the format of the path parameter(s). - - - Returns the names of subdirectories (including their paths) in the specified directory. - An array of the full names (including paths) of subdirectories in the specified path, or an empty array if no directories are found. - - The names returned by this method are prefixed with the directory information provided in path. - The EnumerateDirectories and GetDirectories methods differ as follows: When you use EnumerateDirectories, you can start enumerating the collection of names - before the whole collection is returned; when you use GetDirectories, you must wait for the whole array of names to be returned before you can access the array. - Therefore, when you are working with many files and directories, EnumerateDirectories can be more efficient. - - - - - - - - - The directory to search. - - - Returns the names of subdirectories (including their paths) that match the specified search pattern in the specified directory. - An array of the full names (including paths) of the subdirectories that match the search pattern in the specified directory, or an empty array if no directories are found. - - The names returned by this method are prefixed with the directory information provided in path. - The EnumerateDirectories and GetDirectories methods differ as follows: When you use EnumerateDirectories, you can start enumerating the collection of names - before the whole collection is returned; when you use GetDirectories, you must wait for the whole array of names to be returned before you can access the array. - Therefore, when you are working with many files and directories, EnumerateDirectories can be more efficient. - - - - - - - - - The directory to search. - - The search string to match against the names of directories in . - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - - - Returns the names of the subdirectories (including their paths) that match the specified search pattern in the specified directory, and optionally searches subdirectories. - An array of the full names (including paths) of the subdirectories that match the specified criteria, or an empty array if no directories are found. - - The names returned by this method are prefixed with the directory information provided in path. - The EnumerateDirectories and GetDirectories methods differ as follows: When you use EnumerateDirectories, you can start enumerating the collection of names - before the whole collection is returned; when you use GetDirectories, you must wait for the whole array of names to be returned before you can access the array. - Therefore, when you are working with many files and directories, EnumerateDirectories can be more efficient. - - - - - - - - - The directory to search. - - The search string to match against the names of directories in . - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - - One of the enumeration values that specifies whether the - should include only the current directory or should include all subdirectories. - - - - Returns the names of subdirectories (including their paths) in the specified directory. - An array of the full names (including paths) of subdirectories in the specified path, or an empty array if no directories are found. - - The names returned by this method are prefixed with the directory information provided in path. - The EnumerateDirectories and GetDirectories methods differ as follows: When you use EnumerateDirectories, you can start enumerating the collection of names - before the whole collection is returned; when you use GetDirectories, you must wait for the whole array of names to be returned before you can access the array. - Therefore, when you are working with many files and directories, EnumerateDirectories can be more efficient. - - - - - - - - - The transaction. - The directory to search. - - - Returns the names of subdirectories (including their paths) that match the specified search pattern in the specified directory. - An array of the full names (including paths) of the subdirectories that match the search pattern in the specified directory, or an empty array if no directories are found. - - The names returned by this method are prefixed with the directory information provided in path. - The EnumerateDirectories and GetDirectories methods differ as follows: When you use EnumerateDirectories, you can start enumerating the collection of names - before the whole collection is returned; when you use GetDirectories, you must wait for the whole array of names to be returned before you can access the array. - Therefore, when you are working with many files and directories, EnumerateDirectories can be more efficient. - - - - - - - - - The transaction. - The directory to search. - - The search string to match against the names of directories in . - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - - - Returns the names of the subdirectories (including their paths) that match the specified search pattern in the specified directory, and optionally searches subdirectories. - An array of the full names (including paths) of the subdirectories that match the specified criteria, or an empty array if no directories are found. - - The names returned by this method are prefixed with the directory information provided in path. - The EnumerateDirectories and GetDirectories methods differ as follows: When you use EnumerateDirectories, you can start enumerating the collection of names - before the whole collection is returned; when you use GetDirectories, you must wait for the whole array of names to be returned before you can access the array. - Therefore, when you are working with many files and directories, EnumerateDirectories can be more efficient. - - - - - - - - - The transaction. - The directory to search. - - The search string to match against the names of directories in . - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - - One of the enumeration values that specifies whether the - should include only the current directory or should include all subdirectories. - - - - Returns the names of files (including their paths) in the specified directory. - An array of the full names (including paths) for the files in the specified directory, or an empty array if no files are found. - - The returned file names are appended to the supplied parameter. - The order of the returned file names is not guaranteed; use the Sort() method if a specific sort order is required. - The EnumerateFiles and GetFiles methods differ as follows: When you use EnumerateFiles, you can start enumerating the collection of names - before the whole collection is returned; when you use GetFiles, you must wait for the whole array of names to be returned before you can access the array. - Therefore, when you are working with many files and directories, EnumerateFiles can be more efficient. - - - - - - - - - The directory to search. - - - Returns the names of files (including their paths) that match the specified search pattern in the specified directory. - An array of the full names (including paths) for the files in the specified directory that match the specified search pattern, or an empty array if no files are found. - - The returned file names are appended to the supplied parameter. - The order of the returned file names is not guaranteed; use the Sort() method if a specific sort order is required. - The EnumerateFiles and GetFiles methods differ as follows: When you use EnumerateFiles, you can start enumerating the collection of names - before the whole collection is returned; when you use GetFiles, you must wait for the whole array of names to be returned before you can access the array. - Therefore, when you are working with many files and directories, EnumerateFiles can be more efficient. - - - - - - - - - The directory to search. - - The search string to match against the names of directories in . - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - - - Returns the names of files (including their paths) that match the specified search pattern in the current directory, and optionally searches subdirectories. - An array of the full names (including paths) for the files in the specified directory that match the specified search pattern and option, or an empty array if no files are found. - - The returned file names are appended to the supplied parameter. - The order of the returned file names is not guaranteed; use the Sort() method if a specific sort order is required. - The EnumerateFiles and GetFiles methods differ as follows: When you use EnumerateFiles, you can start enumerating the collection of names - before the whole collection is returned; when you use GetFiles, you must wait for the whole array of names to be returned before you can access the array. - Therefore, when you are working with many files and directories, EnumerateFiles can be more efficient. - - - - - - - - - The directory to search. - - The search string to match against the names of directories in . - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - - One of the enumeration values that specifies whether the - should include only the current directory or should include all subdirectories. - - - - Returns the names of files (including their paths) in the specified directory. - An array of the full names (including paths) for the files in the specified directory, or an empty array if no files are found. - - The returned file names are appended to the supplied parameter. - The order of the returned file names is not guaranteed; use the Sort() method if a specific sort order is required. - The EnumerateFiles and GetFiles methods differ as follows: When you use EnumerateFiles, you can start enumerating the collection of names - before the whole collection is returned; when you use GetFiles, you must wait for the whole array of names to be returned before you can access the array. - Therefore, when you are working with many files and directories, EnumerateFiles can be more efficient. - - - - - - - - - The transaction. - The directory to search. - - - Returns the names of files (including their paths) that match the specified search pattern in the specified directory. - An array of the full names (including paths) for the files in the specified directory that match the specified search pattern, or an empty array if no files are found. - - The returned file names are appended to the supplied parameter. - The order of the returned file names is not guaranteed; use the Sort() method if a specific sort order is required. - The EnumerateFiles and GetFiles methods differ as follows: When you use EnumerateFiles, you can start enumerating the collection of names - before the whole collection is returned; when you use GetFiles, you must wait for the whole array of names to be returned before you can access the array. - Therefore, when you are working with many files and directories, EnumerateFiles can be more efficient. - - - - - - - - - The transaction. - The directory to search. - - The search string to match against the names of directories in . - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - - - Returns the names of files (including their paths) that match the specified search pattern in the current directory, and optionally searches subdirectories. - An array of the full names (including paths) for the files in the specified directory that match the specified search pattern and option, or an empty array if no files are found. - - The returned file names are appended to the supplied parameter. - The order of the returned file names is not guaranteed; use the Sort() method if a specific sort order is required. - The EnumerateFiles and GetFiles methods differ as follows: When you use EnumerateFiles, you can start enumerating the collection of names - before the whole collection is returned; when you use GetFiles, you must wait for the whole array of names to be returned before you can access the array. - Therefore, when you are working with many files and directories, EnumerateFiles can be more efficient. - - - - - - - - - The transaction. - The directory to search. - - The search string to match against the names of directories in . - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - - One of the enumeration values that specifies whether the - should include only the current directory or should include all subdirectories. - - - - Gets the creation date and time of the specified directory. - A structure set to the creation date and time for the specified directory. This value is expressed in local time. - The directory for which to obtain creation date and time information. - - - Gets the creation date and time, in Coordinated Universal Time (UTC) format, of the specified directory. - A structure set to the creation date and time for the specified directory. This value is expressed in UTC time. - The directory for which to obtain creation date and time information, in Coordinated Universal Time (UTC) format. - - - [AlphaFS] Gets the creation date and time of the specified directory. - A structure set to the creation date and time for the specified directory. This value is expressed in local time. - The directory for which to obtain creation date and time information. - Indicates the format of the path parameter(s). - - - [AlphaFS] Gets the creation date and time, in Coordinated Universal Time (UTC) format, of the specified directory. - A structure set to the creation date and time for the specified directory. This value is expressed in UTC time. - The directory for which to obtain creation date and time information, in Coordinated Universal Time (UTC) format. - Indicates the format of the path parameter(s). - - - [AlphaFS] Gets the creation date and time of the specified directory. - A structure set to the creation date and time for the specified directory. This value is expressed in local time. - The transaction. - The directory for which to obtain creation date and time information. - - - [AlphaFS] Gets the creation date and time of the specified directory. - A structure set to the creation date and time for the specified directory. This value is expressed in local time. - The transaction. - The directory for which to obtain creation date and time information. - Indicates the format of the path parameter(s). - - - [AlphaFS] Gets the creation date and time, in Coordinated Universal Time (UTC) format, of the specified directory. - A structure set to the creation date and time for the specified directory. This value is expressed in UTC time. - The transaction. - The directory for which to obtain creation date and time information, in Coordinated Universal Time (UTC) format. - - - [AlphaFS] Gets the creation date and time, in Coordinated Universal Time (UTC) format, of the specified directory. - A structure set to the creation date and time for the specified directory. This value is expressed in UTC time. - The transaction. - The directory for which to obtain creation date and time information, in Coordinated Universal Time (UTC) format. - Indicates the format of the path parameter(s). - - - Gets the date and time that the specified directory was last accessed. - A structure set to the date and time that the specified directory was last accessed. This value is expressed in local time. - The directory for which to obtain access date and time information. - - - Gets the date and time, in coordinated universal time (UTC), that the specified directory was last accessed. - A structure set to the date and time that the specified directory was last accessed. This value is expressed in UTC time. - The directory for which to obtain access date and time information. - - - [AlphaFS] Gets the date and time that the specified directory was last accessed. - A structure set to the date and time that the specified directory was last accessed. This value is expressed in local time. - The directory for which to obtain access date and time information. - Indicates the format of the path parameter(s). - - - [AlphaFS] Gets the date and time, in coordinated universal time (UTC), that the specified directory was last accessed. - A structure set to the date and time that the specified directory was last accessed. This value is expressed in UTC time. - The directory for which to obtain access date and time information. - Indicates the format of the path parameter(s). - - - [AlphaFS] Gets the date and time that the specified directory was last accessed. - A structure set to the date and time that the specified directory was last accessed. This value is expressed in local time. - The transaction. - The directory for which to obtain access date and time information. - - - [AlphaFS] Gets the date and time that the specified directory was last accessed. - A structure set to the date and time that the specified directory was last accessed. This value is expressed in local time. - The transaction. - The directory for which to obtain access date and time information. - Indicates the format of the path parameter(s). - - - [AlphaFS] Gets the date and time, in coordinated universal time (UTC), that the specified directory was last accessed. - A structure set to the date and time that the specified directory was last accessed. This value is expressed in UTC time. - The transaction. - The directory for which to obtain access date and time information. - - - [AlphaFS] Gets the date and time, in coordinated universal time (UTC), that the specified directory was last accessed. - A structure set to the date and time that the specified directory was last accessed. This value is expressed in UTC time. - The transaction. - The directory for which to obtain access date and time information. - Indicates the format of the path parameter(s). - - - Gets the date and time that the specified directory was last written to. - A structure set to the date and time that the specified directory was last written to. This value is expressed in local time. - The directory for which to obtain write date and time information. - - - Gets the date and time, in coordinated universal time (UTC) time, that the specified directory was last written to. - A structure set to the date and time that the specified directory was last written to. This value is expressed in UTC time. - The directory for which to obtain write date and time information. - - - [AlphaFS] Gets the date and time that the specified directory was last written to. - A structure set to the date and time that the specified directory was last written to. This value is expressed in local time. - The directory for which to obtain write date and time information. - Indicates the format of the path parameter(s). - - - [AlphaFS] Gets the date and time, in coordinated universal time (UTC) time, that the specified directory was last written to. - A structure set to the date and time that the specified directory was last written to. This value is expressed in UTC time. - The directory for which to obtain write date and time information. - Indicates the format of the path parameter(s). - - - [AlphaFS] Gets the date and time that the specified directory was last written to. - A structure set to the date and time that the specified directory was last written to. This value is expressed in local time. - The transaction. - The directory for which to obtain write date and time information. - - - [AlphaFS] Gets the date and time that the specified directory was last written to. - A structure set to the date and time that the specified directory was last written to. This value is expressed in local time. - The transaction. - The directory for which to obtain write date and time information. - Indicates the format of the path parameter(s). - - - [AlphaFS] Gets the date and time, in coordinated universal time (UTC) time, that the specified directory was last written to. - A structure set to the date and time that the specified directory was last written to. This value is expressed in UTC time. - The transaction. - The directory for which to obtain write date and time information. - - - [AlphaFS] Gets the date and time, in coordinated universal time (UTC) time, that the specified directory was last written to. - A structure set to the date and time that the specified directory was last written to. This value is expressed in UTC time. - The transaction. - The directory for which to obtain write date and time information. - Indicates the format of the path parameter(s). - - - [AlphaFS] Check if the directory has permission inheritance enabled. - if permission inheritance is enabled, if permission inheritance is disabled. - The full path to the directory to check. - Indicates the format of the path parameter(s). - - - [AlphaFS] Check if the directory has permission inheritance enabled. - The full path to the directory to check. - if permission inheritance is enabled, if permission inheritance is disabled. - - - Gets a object that encapsulates the access control list (ACL) entries for the specified directory. - A object that encapsulates the access control rules for the file described by the parameter. - - - - The path to a directory containing a object that describes the file's access control list (ACL) information. - - - Gets a object that encapsulates the specified type of access control list (ACL) entries for a particular directory. - A object that encapsulates the access control rules for the directory described by the parameter. - - - - The path to a directory containing a object that describes the directory's access control list (ACL) information. - One (or more) of the values that specifies the type of access control list (ACL) information to receive. - - - [AlphaFS] Gets a object that encapsulates the access control list (ACL) entries for the specified directory. - A object that encapsulates the access control rules for the file described by the parameter. - - - - The path to a directory containing a object that describes the file's access control list (ACL) information. - Indicates the format of the path parameter(s). - - - [AlphaFS] Gets a object that encapsulates the specified type of access control list (ACL) entries for a particular directory. - A object that encapsulates the access control rules for the directory described by the parameter. - - - - The path to a directory containing a object that describes the directory's access control list (ACL) information. - One (or more) of the values that specifies the type of access control list (ACL) information to receive. - Indicates the format of the path parameter(s). - - - [AlphaFS] Gets a object that encapsulates the access control list (ACL) entries for the specified directory handle. - A object that encapsulates the access control rules for the file described by the parameter. - - - - A to a directory containing a object that describes the directory's access control list (ACL) information. - - - [AlphaFS] Gets a object that encapsulates the specified type of access control list (ACL) entries for a particular directory handle. - A object that encapsulates the access control rules for the directory described by the parameter. - - - - A to a directory containing a object that describes the directory's access control list (ACL) information. - One (or more) of the values that specifies the type of access control list (ACL) information to receive. - - - [AlphaFS] Gets the change date and time of the specified directory. - A structure set to the change date and time for the specified directory. This value is expressed in local time. - The directory for which to obtain creation date and time information. - - - [AlphaFS] Gets the change date and time of the specified directory. - A structure set to the change date and time for the specified directory. This value is expressed in local time. - The directory for which to obtain creation date and time information. - Indicates the format of the path parameter(s). - - - [AlphaFS] Gets the change date and time, in Coordinated Universal Time (UTC) format, of the specified directory. - A structure set to the change date and time for the specified directory. This value is expressed in UTC time. - The file for which to obtain change date and time information, in Coordinated Universal Time (UTC) format. - - - [AlphaFS] Gets the change date and time, in Coordinated Universal Time (UTC) format, of the specified directory. - A structure set to the change date and time for the specified directory. This value is expressed in UTC time. - The file for which to obtain change date and time information, in Coordinated Universal Time (UTC) format. - Indicates the format of the path parameter(s). - - - [AlphaFS] Gets the change date and time of the specified directory. - A structure set to the change date and time for the specified directory. This value is expressed in local time. - An open handle to the directory from which to retrieve information. - - - [AlphaFS] Gets the change date and time, in Coordinated Universal Time (UTC) format, of the specified directory. - A structure set to the change date and time for the specified directory. This value is expressed in UTC time. - An open handle to the directory from which to retrieve information. - - - [AlphaFS] Gets the change date and time of the specified directory. - A structure set to the change date and time for the specified directory. This value is expressed in local time. - The transaction. - The directory for which to obtain creation date and time information. - - - [AlphaFS] Gets the change date and time of the specified directory. - A structure set to the change date and time for the specified directory. This value is expressed in local time. - The transaction. - The directory for which to obtain creation date and time information. - Indicates the format of the path parameter(s). - - - [AlphaFS] Gets the change date and time, in Coordinated Universal Time (UTC) format, of the specified directory. - A structure set to the change date and time for the specified directory. This value is expressed in UTC time. - The transaction. - The file for which to obtain change date and time information, in Coordinated Universal Time (UTC) format. - - - [AlphaFS] Gets the change date and time, in Coordinated Universal Time (UTC) format, of the specified directory. - A structure set to the change date and time for the specified directory. This value is expressed in UTC time. - The transaction. - The file for which to obtain change date and time information, in Coordinated Universal Time (UTC) format. - Indicates the format of the path parameter(s). - - - - Gets the current working directory of the application. - - MSDN: Multithreaded applications and shared library code should not use the GetCurrentDirectory function and should avoid using relative path names. - The current directory state written by the SetCurrentDirectory function is stored as a global variable in each process, - therefore multithreaded applications cannot reliably use this value without possible data corruption from other threads that may also be reading or setting this value. - This limitation also applies to the SetCurrentDirectory and GetFullPathName functions. The exception being when the application is guaranteed to be running in a single thread, - for example parsing file names from the command line argument string in the main thread prior to creating any additional threads. - Using relative path names in multithreaded applications or shared library code can yield unpredictable results and is not supported. - - - The path of the current working directory without a trailing directory separator. - - - - Sets the application's current working directory to the specified directory. - - MSDN: Multithreaded applications and shared library code should not use the GetCurrentDirectory function and should avoid using relative path names. - The current directory state written by the SetCurrentDirectory function is stored as a global variable in each process, - therefore multithreaded applications cannot reliably use this value without possible data corruption from other threads that may also be reading or setting this value. - This limitation also applies to the SetCurrentDirectory and GetFullPathName functions. The exception being when the application is guaranteed to be running in a single thread, - for example parsing file names from the command line argument string in the main thread prior to creating any additional threads. - Using relative path names in multithreaded applications or shared library code can yield unpredictable results and is not supported. - - - The path to which the current working directory is set. - - - - Sets the application's current working directory to the specified directory. - - MSDN: Multithreaded applications and shared library code should not use the GetCurrentDirectory function and should avoid using relative path names. - The current directory state written by the SetCurrentDirectory function is stored as a global variable in each process, - therefore multithreaded applications cannot reliably use this value without possible data corruption from other threads that may also be reading or setting this value. - This limitation also applies to the SetCurrentDirectory and GetFullPathName functions. The exception being when the application is guaranteed to be running in a single thread, - for example parsing file names from the command line argument string in the main thread prior to creating any additional threads. - Using relative path names in multithreaded applications or shared library code can yield unpredictable results and is not supported. - - - The path to which the current working directory is set. - Indicates the format of the path parameter. - - - Returns the names of all files and subdirectories in the specified directory. - An string[] array of the names of files and subdirectories in the specified directory. - - The EnumerateFileSystemEntries and GetFileSystemEntries methods differ as follows: When you use EnumerateFileSystemEntries, - you can start enumerating the collection of entries before the whole collection is returned; when you use GetFileSystemEntries, - you must wait for the whole array of entries to be returned before you can access the array. - Therefore, when you are working with many files and directories, EnumerateFiles can be more efficient. - - - - - - - - - The directory for which file and subdirectory names are returned. - - - Returns an array of file system entries that match the specified search criteria. - An string[] array of file system entries that match the specified search criteria. - - The EnumerateFileSystemEntries and GetFileSystemEntries methods differ as follows: When you use EnumerateFileSystemEntries, - you can start enumerating the collection of entries before the whole collection is returned; when you use GetFileSystemEntries, - you must wait for the whole array of entries to be returned before you can access the array. - Therefore, when you are working with many files and directories, EnumerateFiles can be more efficient. - - - - - - - - - The path to be searched. - - The search string to match against the names of directories in . - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - - - Gets an array of all the file names and directory names that match a in a specified path, and optionally searches subdirectories. - An string[] array of file system entries that match the specified search criteria. - - The EnumerateFileSystemEntries and GetFileSystemEntries methods differ as follows: When you use EnumerateFileSystemEntries, - you can start enumerating the collection of entries before the whole collection is returned; when you use GetFileSystemEntries, - you must wait for the whole array of entries to be returned before you can access the array. - Therefore, when you are working with many files and directories, EnumerateFiles can be more efficient. - - - - - - - - - The directory to search. - - The search string to match against the names of directories in . - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - - One of the enumeration values that specifies whether the - should include only the current directory or should include all subdirectories. - - - - Returns the names of all files and subdirectories in the specified directory. - An string[] array of the names of files and subdirectories in the specified directory. - - The EnumerateFileSystemEntries and GetFileSystemEntries methods differ as follows: When you use EnumerateFileSystemEntries, - you can start enumerating the collection of entries before the whole collection is returned; when you use GetFileSystemEntries, - you must wait for the whole array of entries to be returned before you can access the array. - Therefore, when you are working with many files and directories, EnumerateFiles can be more efficient. - - - - - - - - - The transaction. - The directory for which file and subdirectory names are returned. - - - Returns an array of file system entries that match the specified search criteria. - An string[] array of file system entries that match the specified search criteria. - - The EnumerateFileSystemEntries and GetFileSystemEntries methods differ as follows: When you use EnumerateFileSystemEntries, - you can start enumerating the collection of entries before the whole collection is returned; when you use GetFileSystemEntries, - you must wait for the whole array of entries to be returned before you can access the array. - Therefore, when you are working with many files and directories, EnumerateFiles can be more efficient. - - - - - - - - - The transaction. - The path to be searched. - - The search string to match against the names of directories in . - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - - - Gets an array of all the file names and directory names that match a in a specified path, and optionally searches subdirectories. - An string[] array of file system entries that match the specified search criteria. - - The EnumerateFileSystemEntries and GetFileSystemEntries methods differ as follows: When you use EnumerateFileSystemEntries, - you can start enumerating the collection of entries before the whole collection is returned; when you use GetFileSystemEntries, - you must wait for the whole array of entries to be returned before you can access the array. - Therefore, when you are working with many files and directories, EnumerateFiles can be more efficient. - - - - - - - - - The transaction. - The directory to search. - - The search string to match against the names of directories in . - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - - One of the enumeration values that specifies whether the - should include only the current directory or should include all subdirectories. - - - - Returns the volume information, root information, or both for the specified path. - The volume information, root information, or both for the specified path, or if path does not contain root directory information. - - - - The path of a file or directory. - - - Returns the volume information, root information, or both for the specified path. - The volume information, root information, or both for the specified path, or if path does not contain root directory information. - - - - The path of a file or directory. - Indicates the format of the path parameter(s). - - - [AlphaFS] Returns the volume information, root information, or both for the specified path. - The volume information, root information, or both for the specified path, or if path does not contain root directory information. - - - - The transaction. - The path of a file or directory. - - - Returns the volume information, root information, or both for the specified path. - The volume information, root information, or both for the specified path, or if path does not contain root directory information. - - - - The transaction. - The path of a file or directory. - Indicates the format of the path parameter(s). - - - Returns the volume information, root information, or both for the specified path. - The volume information, root information, or both for the specified path, or if path does not contain root directory information. - - - - The transaction. - The path of a file or directory. - Indicates the format of the path parameter(s). - - - Retrieves the names of the logical drives on this computer in the form "<drive letter>:\". - An array of type that represents the logical drives on a computer. - - - [AlphaFS] Retrieves the names of the logical drives on this computer in the form "<drive letter>:\". - An array of type that represents the logical drives on a computer. - Retrieve logical drives as known by the Environment. - Retrieve only when accessible (IsReady) logical drives. - - - [AlphaFS] Enumerates the drive names of all logical drives on a computer. - An IEnumerable of type that represents the logical drives on a computer. - Retrieve logical drives as known by the Environment. - Retrieve only when accessible (IsReady) logical drives. - - - Enumerates the drive names of all logical drives on a computer. - An IEnumerable of type that represents the logical drives on a computer. - Retrieve logical drives as known by the Environment. - Retrieve only when accessible (IsReady) logical drives. - - - Retrieves the parent directory of the specified path, including both absolute and relative paths. - The path for which to retrieve the parent directory. - The parent directory, or if is the root directory, including the root of a UNC server or share name. - - - [AlphaFS] Retrieves the parent directory of the specified path, including both absolute and relative paths. - The parent directory, or if is the root directory, including the root of a UNC server or share name. - The path for which to retrieve the parent directory. - Indicates the format of the path parameter(s). - - - [AlphaFS] Retrieves the parent directory of the specified path, including both absolute and relative paths. - The parent directory, or if is the root directory, including the root of a UNC server or share name. - The transaction. - The path for which to retrieve the parent directory. - - - Retrieves the parent directory of the specified path, including both absolute and relative paths. - The parent directory, or if is the root directory, including the root of a UNC server or share name. - The transaction. - The path for which to retrieve the parent directory. - Indicates the format of the path parameter(s). - - - Retrieves the parent directory of the specified path, including both absolute and relative paths. - The parent directory, or if is the root directory, including the root of a UNC server or share name. - The transaction. - The path for which to retrieve the parent directory. - Indicates the format of the path parameter(s). - - - Applies access control list (ACL) entries described by a object to the specified directory. - A directory to add or remove access control list (ACL) entries from. - A object that describes an ACL entry to apply to the directory described by the path parameter. - - - Applies access control list (ACL) entries described by a object to the specified directory. - Note that unlike this method does not automatically - determine what parts of the specified instance has been modified. Instead, the - parameter is used to specify what entries from to apply to . - A directory to add or remove access control list (ACL) entries from. - A object that describes an ACL entry to apply to the directory described by the path parameter. - One or more of the values that specifies the type of access control list (ACL) information to set. - - - [AlphaFS] Applies access control list (ACL) entries described by a object to the specified directory. - A directory to add or remove access control list (ACL) entries from. - A object that describes an ACL entry to apply to the directory described by the path parameter. - Indicates the format of the path parameter(s). - - - [AlphaFS] Applies access control list (ACL) entries described by a object to the specified directory. - Note that unlike this method does not automatically - determine what parts of the specified instance has been modified. Instead, the - parameter is used to specify what entries from to apply to . - A directory to add or remove access control list (ACL) entries from. - A object that describes an ACL entry to apply to the directory described by the path parameter. - One or more of the values that specifies the type of access control list (ACL) information to set. - Indicates the format of the path parameter(s). - - - Applies access control list (ACL) entries described by a object to the specified directory. - A to a file to add or remove access control list (ACL) entries from. - A object that describes an ACL entry to apply to the directory described by the path parameter. - - - Applies access control list (ACL) entries described by a object to the specified directory. - A to a file to add or remove access control list (ACL) entries from. - A object that describes an ACL entry to apply to the directory described by the path parameter. - One or more of the values that specifies the type of access control list (ACL) information to set. - - - Sets the date and time the directory was created. - The directory for which to set the creation date and time information. - A containing the value to set for the creation date and time of . This value is expressed in local time. - - - Sets the date and time, in coordinated universal time (UTC), that the directory was created. - The directory for which to set the creation date and time information. - A containing the value to set for the creation date and time of . This value is expressed in UTC time. - - - [AlphaFS] Sets the date and time the directory was created. - The directory for which to set the creation date and time information. - Indicates the format of the path parameter(s). - A containing the value to set for the creation date and time of . This value is expressed in local time. - - - [AlphaFS] Sets the date and time the directory was created. - The directory for which to set the creation date and time information. - Indicates the format of the path parameter(s). - A containing the value to set for the creation date and time of . This value is expressed in local time. - If , the date and time information will apply to the reparse point (symlink or junction) and not the file or directory linked to. No effect if does not refer to a reparse point. - - - [AlphaFS] Sets the date and time, in coordinated universal time (UTC), that the directory was created. - The directory for which to set the creation date and time information. - A containing the value to set for the creation date and time of . This value is expressed in UTC time. - Indicates the format of the path parameter(s). - - - [AlphaFS] Sets the date and time, in coordinated universal time (UTC), that the directory was created. - The directory for which to set the creation date and time information. - A containing the value to set for the creation date and time of . This value is expressed in UTC time. - If , the date and time information will apply to the reparse point (symlink or junction) and not the file or directory linked to. No effect if does not refer to a reparse point. - Indicates the format of the path parameter(s). - - - [AlphaFS] Sets the date and time the directory was created. - The transaction. - The directory for which to set the creation date and time information. - A containing the value to set for the creation date and time of . This value is expressed in local time. - - - [AlphaFS] Sets the date and time the directory was created. - The transaction. - The directory for which to set the creation date and time information. - A containing the value to set for the creation date and time of . This value is expressed in local time. - Indicates the format of the path parameter(s). - - - [AlphaFS] Sets the date and time the directory was created. - The transaction. - The directory for which to set the creation date and time information. - A containing the value to set for the creation date and time of . This value is expressed in local time. - If , the date and time information will apply to the reparse point (symlink or junction) and not the file or directory linked to. No effect if does not refer to a reparse point. - Indicates the format of the path parameter(s). - - - [AlphaFS] Sets the date and time, in coordinated universal time (UTC), that the directory was created. - The transaction. - The directory for which to set the creation date and time information. - A containing the value to set for the creation date and time of . This value is expressed in UTC time. - - - [AlphaFS] Sets the date and time, in coordinated universal time (UTC), that the directory was created. - The transaction. - The directory for which to set the creation date and time information. - A containing the value to set for the creation date and time of . This value is expressed in UTC time. - Indicates the format of the path parameter(s). - - - [AlphaFS] Sets the date and time, in coordinated universal time (UTC), that the directory was created. - The transaction. - The directory for which to set the creation date and time information. - A containing the value to set for the creation date and time of . This value is expressed in UTC time. - If , the date and time information will apply to the reparse point (symlink or junction) and not the file or directory linked to. No effect if does not refer to a reparse point. - Indicates the format of the path parameter(s). - - - Sets the date and time that the specified directory was last accessed. - The file for which to set the access date and time information. - A containing the value to set for the last access date and time of . This value is expressed in local time. - - - Sets the date and time, in coordinated universal time (UTC), that the specified directory was last accessed. - The directory for which to set the access date and time information. - A containing the value to set for the last access date and time of . This value is expressed in UTC time. - - - [AlphaFS] Sets the date and time that the specified directory was last accessed. - The file for which to set the access date and time information. - A containing the value to set for the last access date and time of . This value is expressed in local time. - Indicates the format of the path parameter(s). - - - [AlphaFS] Sets the date and time that the specified directory was last accessed. - The file for which to set the access date and time information. - A containing the value to set for the last access date and time of . This value is expressed in local time. - If , the date and time information will apply to the reparse point (symlink or junction) and not the file or directory linked to. No effect if does not refer to a reparse point. - Indicates the format of the path parameter(s). - - - [AlphaFS] Sets the date and time, in coordinated universal time (UTC), that the specified directory was last accessed. - The directory for which to set the access date and time information. - A containing the value to set for the last access date and time of . This value is expressed in UTC time. - Indicates the format of the path parameter(s). - - - [AlphaFS] Sets the date and time, in coordinated universal time (UTC), that the specified directory was last accessed. - The directory for which to set the access date and time information. - A containing the value to set for the last access date and time of . This value is expressed in UTC time. - If , the date and time information will apply to the reparse point (symlink or junction) and not the file or directory linked to. No effect if does not refer to a reparse point. - Indicates the format of the path parameter(s). - - - [AlphaFS] Sets the date and time that the specified directory was last accessed. - The transaction. - The directory for which to set the access date and time information. - A containing the value to set for the last access date and time of . This value is expressed in local time. - - - [AlphaFS] Sets the date and time that the specified directory was last accessed. - The transaction. - The directory for which to set the access date and time information. - A containing the value to set for the last access date and time of . This value is expressed in local time. - Indicates the format of the path parameter(s). - - - [AlphaFS] Sets the date and time that the specified directory was last accessed. - The transaction. - The directory for which to set the access date and time information. - A containing the value to set for the last access date and time of . This value is expressed in local time. - If , the date and time information will apply to the reparse point (symlink or junction) and not the file or directory linked to. No effect if does not refer to a reparse point. - Indicates the format of the path parameter(s). - - - [AlphaFS] Sets the date and time, in coordinated universal time (UTC), that the specified directory was last accessed. - The transaction. - The directory for which to set the access date and time information. - A containing the value to set for the last access date and time of . This value is expressed in UTC time. - - - [AlphaFS] Sets the date and time, in coordinated universal time (UTC), that the specified directory was last accessed. - The transaction. - The directory for which to set the access date and time information. - A containing the value to set for the last access date and time of . This value is expressed in UTC time. - Indicates the format of the path parameter(s). - - - [AlphaFS] Sets the date and time, in coordinated universal time (UTC), that the specified directory was last accessed. - The transaction. - The directory for which to set the access date and time information. - A containing the value to set for the last access date and time of . This value is expressed in UTC time. - If , the date and time information will apply to the reparse point (symlink or junction) and not the file or directory linked to. No effect if does not refer to a reparse point. - Indicates the format of the path parameter(s). - - - [AlphaFS] Sets all the date and time stamps for the specified directory, at once. - The directory for which to set the dates and times information. - A containing the value to set for the creation date and time of . This value is expressed in local time. - A containing the value to set for the last access date and time of . This value is expressed in local time. - A containing the value to set for the last write date and time of . This value is expressed in local time. - - - [AlphaFS] Sets all the date and time stamps for the specified directory, at once. - The directory for which to set the dates and times information. - A containing the value to set for the creation date and time of . This value is expressed in local time. - A containing the value to set for the last access date and time of . This value is expressed in local time. - A containing the value to set for the last write date and time of . This value is expressed in local time. - Indicates the format of the path parameter(s). - - - [AlphaFS] Sets all the date and time stamps for the specified directory, at once. - The directory for which to set the dates and times information. - A containing the value to set for the creation date and time of . This value is expressed in local time. - A containing the value to set for the last access date and time of . This value is expressed in local time. - A containing the value to set for the last write date and time of . This value is expressed in local time. - If , the date and time information will apply to the reparse point (symlink or junction) and not the file or directory linked to. No effect if does not refer to a reparse point. - Indicates the format of the path parameter(s). - - - [AlphaFS] Sets all the date and time stamps, in coordinated universal time (UTC), for the specified directory, at once. - The directory for which to set the dates and times information. - A containing the value to set for the creation date and time of . This value is expressed in UTC time. - A containing the value to set for the last access date and time of . This value is expressed in UTC time. - A containing the value to set for the last write date and time of . This value is expressed in UTC time. - - - [AlphaFS] Sets all the date and time stamps, in coordinated universal time (UTC), for the specified directory, at once. - The directory for which to set the dates and times information. - A containing the value to set for the creation date and time of . This value is expressed in UTC time. - A containing the value to set for the last access date and time of . This value is expressed in UTC time. - A containing the value to set for the last write date and time of . This value is expressed in UTC time. - Indicates the format of the path parameter(s). - - - [AlphaFS] Sets all the date and time stamps, in coordinated universal time (UTC), for the specified directory, at once. - The directory for which to set the dates and times information. - A containing the value to set for the creation date and time of . This value is expressed in UTC time. - A containing the value to set for the last access date and time of . This value is expressed in UTC time. - A containing the value to set for the last write date and time of . This value is expressed in UTC time. - If , the date and time information will apply to the reparse point (symlink or junction) and not the file or directory linked to. No effect if does not refer to a reparse point. - Indicates the format of the path parameter(s). - - - [AlphaFS] Sets all the date and time stamps for the specified directory, at once. - The transaction. - The directory for which to set the dates and times information. - A containing the value to set for the creation date and time of . This value is expressed in local time. - A containing the value to set for the last access date and time of . This value is expressed in local time. - A containing the value to set for the last write date and time of . This value is expressed in local time. - - - [AlphaFS] Sets all the date and time stamps for the specified directory, at once. - The transaction. - The directory for which to set the dates and times information. - A containing the value to set for the creation date and time of . This value is expressed in local time. - A containing the value to set for the last access date and time of . This value is expressed in local time. - A containing the value to set for the last write date and time of . This value is expressed in local time. - Indicates the format of the path parameter(s). - - - [AlphaFS] Sets all the date and time stamps for the specified directory, at once. - The transaction. - The directory for which to set the dates and times information. - A containing the value to set for the creation date and time of . This value is expressed in local time. - A containing the value to set for the last access date and time of . This value is expressed in local time. - A containing the value to set for the last write date and time of . This value is expressed in local time. - If , the date and time information will apply to the reparse point (symlink or junction) and not the file or directory linked to. No effect if does not refer to a reparse point. - Indicates the format of the path parameter(s). - - - [AlphaFS] Sets all the date and time stamps, in coordinated universal time (UTC), for the specified directory, at once. - The transaction. - The directory for which to set the dates and times information. - A containing the value to set for the creation date and time of . This value is expressed in UTC time. - A containing the value to set for the last access date and time of . This value is expressed in UTC time. - A containing the value to set for the last write date and time of . This value is expressed in UTC time. - - - [AlphaFS] Sets all the date and time stamps, in coordinated universal time (UTC), for the specified directory, at once. - The transaction. - The directory for which to set the dates and times information. - A containing the value to set for the creation date and time of . This value is expressed in UTC time. - A containing the value to set for the last access date and time of . This value is expressed in UTC time. - A containing the value to set for the last write date and time of . This value is expressed in UTC time. - Indicates the format of the path parameter(s). - - - [AlphaFS] Sets all the date and time stamps, in coordinated universal time (UTC), for the specified directory, at once. - The transaction. - The directory for which to set the dates and times information. - A containing the value to set for the creation date and time of . This value is expressed in UTC time. - A containing the value to set for the last access date and time of . This value is expressed in UTC time. - A containing the value to set for the last write date and time of . This value is expressed in UTC time. - If , the date and time information will apply to the reparse point (symlink or junction) and not the file or directory linked to. No effect if does not refer to a reparse point. - Indicates the format of the path parameter(s). - - - [AlphaFS] Transfers the date and time stamps for the specified directories. - This method uses BackupSemantics flag to get Timestamp changed for directories. - The source directory to get the date and time stamps from. - The destination directory to set the date and time stamps. - - - [AlphaFS] Transfers the date and time stamps for the specified directories. - This method uses BackupSemantics flag to get Timestamp changed for directories. - The source directory to get the date and time stamps from. - The destination directory to set the date and time stamps. - Indicates the format of the path parameter(s). - - - [AlphaFS] Transfers the date and time stamps for the specified directories. - This method uses BackupSemantics flag to get Timestamp changed for directories. - The transaction. - The source directory to get the date and time stamps from. - The destination directory to set the date and time stamps. - - - [AlphaFS] Transfers the date and time stamps for the specified directories. - This method uses BackupSemantics flag to get Timestamp changed for directories. - The transaction. - The source directory to get the date and time stamps from. - The destination directory to set the date and time stamps. - Indicates the format of the path parameter(s). - - - Sets the date and time that the specified directory was last written to. - The directory for which to set the date and time information. - A containing the value to set for the last write date and time of . This value is expressed in local time. - - - Sets the date and time, in coordinated universal time (UTC), that the specified directory was last written to. - The directory for which to set the date and time information. - A containing the value to set for the last write date and time of . This value is expressed in UTC time. - - - [AlphaFS] Sets the date and time that the specified directory was last written to. - The directory for which to set the date and time information. - A containing the value to set for the last write date and time of . This value is expressed in local time. - Indicates the format of the path parameter(s). - - - [AlphaFS] Sets the date and time that the specified directory was last written to. - The directory for which to set the date and time information. - A containing the value to set for the last write date and time of . This value is expressed in local time. - If , the date and time information will apply to the reparse point (symlink or junction) and not the file or directory linked to. No effect if does not refer to a reparse point. - Indicates the format of the path parameter(s). - - - [AlphaFS] Sets the date and time, in coordinated universal time (UTC), that the specified directory was last written to. - The directory for which to set the date and time information. - A containing the value to set for the last write date and time of . This value is expressed in UTC time. - Indicates the format of the path parameter(s). - - - [AlphaFS] Sets the date and time, in coordinated universal time (UTC), that the specified directory was last written to. - The directory for which to set the date and time information. - A containing the value to set for the last write date and time of . This value is expressed in UTC time. - If , the date and time information will apply to the reparse point (symlink or junction) and not the file or directory linked to. No effect if does not refer to a reparse point. - Indicates the format of the path parameter(s). - - - [AlphaFS] Sets the date and time that the specified directory was last written to. - The transaction. - The directory for which to set the date and time information. - A containing the value to set for the last write date and time of . This value is expressed in local time. - - - [AlphaFS] Sets the date and time that the specified directory was last written to. - The transaction. - The directory for which to set the date and time information. - A containing the value to set for the last write date and time of . This value is expressed in local time. - Indicates the format of the path parameter(s). - - - [AlphaFS] Sets the date and time that the specified directory was last written to. - The transaction. - The directory for which to set the date and time information. - A containing the value to set for the last write date and time of . This value is expressed in local time. - If , the date and time information will apply to the reparse point (symlink or junction) and not the file or directory linked to. No effect if does not refer to a reparse point. - Indicates the format of the path parameter(s). - - - [AlphaFS] Sets the date and time, in coordinated universal time (UTC), that the specified directory was last written to. - The transaction. - The directory for which to set the date and time information. - A containing the value to set for the last write date and time of . This value is expressed in UTC time. - - - [AlphaFS] Sets the date and time, in coordinated universal time (UTC), that the specified directory was last written to. - The transaction. - The directory for which to set the date and time information. - A containing the value to set for the last write date and time of . This value is expressed in UTC time. - Indicates the format of the path parameter(s). - - - [AlphaFS] Sets the date and time, in coordinated universal time (UTC), that the specified directory was last written to. - The transaction. - The directory for which to set the date and time information. - A containing the value to set for the last write date and time of . This value is expressed in UTC time. - If , the date and time information will apply to the reparse point (symlink or junction) and not the file or directory linked to. No effect if does not refer to a reparse point. - Indicates the format of the path parameter(s). - - - [AlphaFS] Compresses a directory using NTFS compression. - This will only compress the root items (non recursive). - - - - - - - A path that describes a directory to compress. - - - [AlphaFS] Compresses a directory using NTFS compression. - This will only compress the root items (non recursive). - - - - - - - A path that describes a directory to compress. - Indicates the format of the path parameter(s). - - - [AlphaFS] Compresses a directory using NTFS compression. - - - - - - - A path that describes a directory to compress. - flags that specify how the directory is to be enumerated. - - - [AlphaFS] Compresses a directory using NTFS compression. - - - - - - - A path that describes a directory to compress. - flags that specify how the directory is to be enumerated. - Indicates the format of the path parameter(s). - - - [AlphaFS] Compresses a directory using NTFS compression. - This will only compress the root items (non recursive). - - - - - - - The transaction. - A path that describes a directory to compress. - - - [AlphaFS] Compresses a directory using NTFS compression. - This will only compress the root items (non recursive). - - - - - - - The transaction. - A path that describes a directory to compress. - Indicates the format of the path parameter(s). - - - [AlphaFS] Compresses a directory using NTFS compression. - - - - - - - The transaction. - A path that describes a directory to compress. - flags that specify how the directory is to be enumerated. - - - [AlphaFS] Compresses a directory using NTFS compression. - - - - - - - The transaction. - A path that describes a directory to compress. - flags that specify how the directory is to be enumerated. - Indicates the format of the path parameter(s). - - - [AlphaFS] Decompresses an NTFS compressed directory. - This will only decompress the root items (non recursive). - - - - - - - A path that describes a directory to decompress. - - - [AlphaFS] Decompresses an NTFS compressed directory. - This will only decompress the root items (non recursive). - - - - - - - A path that describes a directory to decompress. - Indicates the format of the path parameter(s). - - - [AlphaFS] Decompresses an NTFS compressed directory. - - - - - - - A path that describes a directory to decompress. - flags that specify how the directory is to be enumerated. - - - [AlphaFS] Decompresses an NTFS compressed directory. - - - - - - - A path that describes a directory to decompress. - flags that specify how the directory is to be enumerated. - Indicates the format of the path parameter(s). - - - [AlphaFS] Decompresses an NTFS compressed directory. - This will only decompress the root items (non recursive). - - - - - - - The transaction. - A path that describes a directory to decompress. - - - [AlphaFS] Decompresses an NTFS compressed directory. - This will only decompress the root items (non recursive). - - - - - - - The transaction. - A path that describes a directory to decompress. - Indicates the format of the path parameter(s). - - - [AlphaFS] Decompresses an NTFS compressed directory. - - - - - - - The transaction. - A path that describes a directory to decompress. - flags that specify how the directory is to be enumerated. - - - [AlphaFS] Decompresses an NTFS compressed directory. - - - - - - - The transaction. - A path that describes a directory to decompress. - flags that specify how the directory is to be enumerated. - Indicates the format of the path parameter(s). - - - [AlphaFS] Disables NTFS compression of the specified directory and the files in it. - This method disables the directory-compression attribute. It will not decompress the current contents of the directory. However, newly created files and directories will be uncompressed. - - - - - - - A path to a directory to decompress. - - - [AlphaFS] Disables NTFS compression of the specified directory and the files in it. - This method disables the directory-compression attribute. It will not decompress the current contents of the directory. However, newly created files and directories will be uncompressed. - - - - - - - A path to a directory to decompress. - Indicates the format of the path parameter(s). - - - [AlphaFS] Disables NTFS compression of the specified directory and the files in it. - This method disables the directory-compression attribute. It will not decompress the current contents of the directory. However, newly created files and directories will be uncompressed. - - - - - - - The transaction. - A path to a directory to decompress. - - - [AlphaFS] Disables NTFS compression of the specified directory and the files in it. - This method disables the directory-compression attribute. It will not decompress the current contents of the directory. However, newly created files and directories will be uncompressed. - - - - - - - The transaction. - Indicates the format of the path parameter(s). - A path to a directory to decompress. - - - [AlphaFS] Enables NTFS compression of the specified directory and the files in it. - This method enables the directory-compression attribute. It will not compress the current contents of the directory. However, newly created files and directories will be compressed. - - - - - - - A path to a directory to compress. - - - [AlphaFS] Enables NTFS compression of the specified directory and the files in it. - This method enables the directory-compression attribute. It will not compress the current contents of the directory. However, newly created files and directories will be compressed. - - - - - - - A path to a directory to compress. - Indicates the format of the path parameter(s). - - - [AlphaFS] Enables NTFS compression of the specified directory and the files in it. - This method enables the directory-compression attribute. It will not compress the current contents of the directory. However, newly created files and directories will be compressed. - - - - - - - The transaction. - A path to a directory to compress. - - - [AlphaFS] Enables NTFS compression of the specified directory and the files in it. - This method enables the directory-compression attribute. It will not compress the current contents of the directory. However, newly created files and directories will be compressed. - - - - - - - The transaction. - A path to a directory to compress. - Indicates the format of the path parameter(s). - - - Compress/decompress Non-/Transacted files/directories. - - - - - - - The transaction. - A path that describes a directory to compress. - - The search string to match against the names of directories in . - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - flags that specify how the directory is to be enumerated. - compress, when decompress. - Indicates the format of the path parameter(s). - - - [AlphaFS] Decrypts a directory that was encrypted by the current account using the Encrypt method. - - - - - - - A path that describes a directory to decrypt. - Indicates the format of the path parameter(s). - - - [AlphaFS] Decrypts a directory that was encrypted by the current account using the Encrypt method. - - - - - - - A path that describes a directory to decrypt. - to decrypt the directory recursively. only decrypt the directory. - Indicates the format of the path parameter(s). - - - [AlphaFS] Decrypts a directory that was encrypted by the current account using the Encrypt method. - - - - - - - A path that describes a directory to decrypt. - - - [AlphaFS] Decrypts a directory that was encrypted by the current account using the Encrypt method. - - - - - - - A path that describes a directory to decrypt. - to decrypt the directory recursively. only decrypt the directory. - - - [AlphaFS] Encrypts a directory so that only the account used to encrypt the directory can decrypt it. - - - - - - - A path that describes a directory to encrypt. - Indicates the format of the path parameter(s). - - - [AlphaFS] Encrypts a directory so that only the account used to encrypt the directory can decrypt it. - - - - - - - A path that describes a directory to encrypt. - to encrypt the directory recursively. only encrypt the directory. - Indicates the format of the path parameter(s). - - - [AlphaFS] Encrypts a directory so that only the account used to encrypt the directory can decrypt it. - - - - - - - A path that describes a directory to encrypt. - - - [AlphaFS] Encrypts a directory so that only the account used to encrypt the directory can decrypt it. - - - - - - - A path that describes a directory to encrypt. - to encrypt the directory recursively. only encrypt the directory. - - - [AlphaFS] Disables encryption of the specified directory and the files in it. - This method only creates/modifies the file "Desktop.ini" in the root of and disables encryption by writing: "Disable=1" - This method does not affect encryption of files and subdirectories below the indicated directory. - - The name of the directory for which to disable encryption. - Indicates the format of the path parameter(s). - - - [AlphaFS] Disables encryption of the specified directory and the files in it. - This method only creates/modifies the file "Desktop.ini" in the root of and disables encryption by writing: "Disable=1" - This method does not affect encryption of files and subdirectories below the indicated directory. - - The name of the directory for which to disable encryption. - - - [AlphaFS] Enables encryption of the specified directory and the files in it. - This method only creates/modifies the file "Desktop.ini" in the root of and enables encryption by writing: "Disable=0" - This method does not affect encryption of files and subdirectories below the indicated directory. - - The name of the directory for which to enable encryption. - Indicates the format of the path parameter(s). - - - [AlphaFS] Enables encryption of the specified directory and the files in it. - This method only creates/modifies the file "Desktop.ini" in the root of and enables encryption by writing: "Disable=0" - This method does not affect encryption of files and subdirectories below the indicated directory. - - The name of the directory for which to enable encryption. - - - Enables/disables encryption of the specified directory and the files in it. - This method only creates/modifies the file "Desktop.ini" in the root of and enables/disables encryption by writing: "Disable=0" or "Disable=1". - This method does not affect encryption of files and subdirectories below the indicated directory. - - The name of the directory for which to enable encryption. - enabled encryption, disables encryption. - Indicates the format of the path parameter(s). - - - Decrypts/encrypts a directory recursively so that only the account used to encrypt the directory can decrypt it. - - - - - - - A path that describes a directory to encrypt. - encrypt, decrypt. - to decrypt the directory recursively. only decrypt files and directories in the root of . - Indicates the format of the path parameter(s). - - - [AlphaFS] Retrieves information about files in the directory specified by in mode. - An enumeration of records for each file system entry in the specified diretory. - A path to a directory from which to retrieve information. - - - [AlphaFS] Retrieves information about files in the directory specified by in mode. - An enumeration of records for each file system entry in the specified diretory. - A path to a directory from which to retrieve information. - Indicates the format of the path parameter(s). - - - [AlphaFS] Retrieves information about files in the directory specified by in specified mode. - An enumeration of records for each file system entry in the specified diretory. - A path to a directory from which to retrieve information. - The mode with which to open a handle to the directory. - - - [AlphaFS] Retrieves information about files in the directory specified by in specified mode. - An enumeration of records for each file system entry in the specified diretory. - A path to a directory from which to retrieve information. - The mode with which to open a handle to the directory. - Indicates the format of the path parameter(s). - - - [AlphaFS] Retrieves information about files in the directory handle specified. - An IEnumerable of records for each file system entry in the specified diretory. - An open handle to the directory from which to retrieve information. - - - [AlphaFS] Retrieves information about files in the directory specified by in mode. - An enumeration of records for each file system entry in the specified diretory. - The transaction. - A path to a directory from which to retrieve information. - - - [AlphaFS] Retrieves information about files in the directory specified by in mode. - An enumeration of records for each file system entry in the specified diretory. - The transaction. - A path to a directory from which to retrieve information. - Indicates the format of the path parameter(s). - - - [AlphaFS] Retrieves information about files in the directory specified by in specified mode. - An enumeration of records for each file system entry in the specified diretory. - The transaction. - A path to a directory from which to retrieve information. - The mode with which to open a handle to the directory. - - - [AlphaFS] Retrieves information about files in the directory specified by in specified mode. - An enumeration of records for each file system entry in the specified diretory. - The transaction. - A path to a directory from which to retrieve information. - The mode with which to open a handle to the directory. - Indicates the format of the path parameter(s). - - - Returns an enumerable collection of information about files in the directory handle specified. - An IEnumerable of records for each file system entry in the specified diretory. - - Either use or , not both. - - The number of files that are returned for each call to GetFileInformationByHandleEx depends on the size of the buffer that is passed to the function. - Any subsequent calls to GetFileInformationByHandleEx on the same handle will resume the enumeration operation after the last file is returned. - - - The transaction. - An open handle to the directory from which to retrieve information. - A path to the directory. - The mode with which to open a handle to the directory. - suppress any Exception that might be thrown as a result from a failure, such as ACLs protected directories or non-accessible reparse points. - Indicates the format of the path parameter(s). - - - [AlphaFS] Gets the properties of the particular directory without following any symbolic links or mount points. - Properties include aggregated info from of each encountered file system object, plus additional ones: Total, File, Size and Error. - Total: is the total number of enumerated objects. - File: is the total number of files. File is considered when object is neither nor . - Size: is the total size of enumerated objects. - Error: is the total number of errors encountered during enumeration. - - A dictionary mapping the keys mentioned above to their respective aggregated values. - Directory: is an object which has attribute without one. - - - - - - - The target directory. - - - [AlphaFS] Gets the properties of the particular directory without following any symbolic links or mount points. - Properties include aggregated info from of each encountered file system object, plus additional ones: Total, File, Size and Error. - Total: is the total number of enumerated objects. - File: is the total number of files. File is considered when object is neither nor . - Size: is the total size of enumerated objects. - Error: is the total number of errors encountered during enumeration. - - A dictionary mapping the keys mentioned above to their respective aggregated values. - Directory: is an object which has attribute without one. - - - - - - - The target directory. - Indicates the format of the path parameter(s). - - - [AlphaFS] Gets the properties of the particular directory without following any symbolic links or mount points. - Properties include aggregated info from of each encountered file system object, plus additional ones: Total, File, Size and Error. - Total: is the total number of enumerated objects. - File: is the total number of files. File is considered when object is neither nor . - Size: is the total size of enumerated objects. - Error: is the total number of errors encountered during enumeration. - - A dictionary mapping the keys mentioned above to their respective aggregated values. - Directory: is an object which has attribute without one. - - - - - - - The target directory. - flags that specify how the directory is to be enumerated. - - - [AlphaFS] Gets the properties of the particular directory without following any symbolic links or mount points. - Properties include aggregated info from of each encountered file system object, plus additional ones: Total, File, Size and Error. - Total: is the total number of enumerated objects. - File: is the total number of files. File is considered when object is neither nor . - Size: is the total size of enumerated objects. - Error: is the total number of errors encountered during enumeration. - - A dictionary mapping the keys mentioned above to their respective aggregated values. - Directory: is an object which has attribute without one. - - - - - - - The target directory. - flags that specify how the directory is to be enumerated. - Indicates the format of the path parameter(s). - - - [AlphaFS] Gets the properties of the particular directory without following any symbolic links or mount points. - Properties include aggregated info from of each encountered file system object, plus additional ones: Total, File, Size and Error. - Total: is the total number of enumerated objects. - File: is the total number of files. File is considered when object is neither nor . - Size: is the total size of enumerated objects. - Error: is the total number of errors encountered during enumeration. - - A dictionary mapping the keys mentioned above to their respective aggregated values. - Directory: is an object which has attribute without one. - - - - - - - The transaction. - The target directory. - - - [AlphaFS] Gets the properties of the particular directory without following any symbolic links or mount points. - Properties include aggregated info from of each encountered file system object, plus additional ones: Total, File, Size and Error. - Total: is the total number of enumerated objects. - File: is the total number of files. File is considered when object is neither nor . - Size: is the total size of enumerated objects. - Error: is the total number of errors encountered during enumeration. - - A dictionary mapping the keys mentioned above to their respective aggregated values. - Directory: is an object which has attribute without one. - - - - - - - The transaction. - The target directory. - Indicates the format of the path parameter(s). - - - [AlphaFS] Gets the properties of the particular directory without following any symbolic links or mount points. - Properties include aggregated info from of each encountered file system object, plus additional ones: Total, File, Size and Error. - Total: is the total number of enumerated objects. - File: is the total number of files. File is considered when object is neither nor . - Size: is the total size of enumerated objects. - Error: is the total number of errors encountered during enumeration. - - A dictionary mapping the keys mentioned above to their respective aggregated values. - Directory: is an object which has attribute without one. - - - - - - - The transaction. - The target directory. - flags that specify how the directory is to be enumerated. - - - [AlphaFS] Gets the properties of the particular directory without following any symbolic links or mount points. - Properties include aggregated info from of each encountered file system object, plus additional ones: Total, File, Size and Error. - Total: is the total number of enumerated objects. - File: is the total number of files. File is considered when object is neither nor . - Size: is the total size of enumerated objects. - Error: is the total number of errors encountered during enumeration. - - A dictionary mapping the keys mentioned above to their respective aggregated values. - Directory: is an object which has attribute without one. - - - - - - - The transaction. - The target directory. - flags that specify how the directory is to be enumerated. - Indicates the format of the path parameter(s). - - - [AlphaFS] Gets the properties of the particular directory without following any symbolic links or mount points. - Properties include aggregated info from of each encountered file system object, plus additional ones: Total, File, Size and Error. - Total: is the total number of enumerated objects. - File: is the total number of files. File is considered when object is neither nor . - Size: is the total size of enumerated objects. - Error: is the total number of errors encountered during enumeration. - - A dictionary mapping the keys mentioned above to their respective aggregated values. - Directory: is an object which has attribute without one. - - - - - - - The transaction. - The target directory. - flags that specify how the directory is to be enumerated. - Indicates the format of the path parameter(s). - - - [AlphaFS] Enumerates the streams of type :$DATA from the specified directory. - The path to the directory to enumerate streams of. - The streams of type :$DATA in the specified directory. - - - [AlphaFS] Enumerates the streams of type :$DATA from the specified directory. - The path to the directory to enumerate streams of. - Indicates the format of the path parameter(s). - The streams of type :$DATA in the specified directory. - - - [AlphaFS] Enumerates the streams of type :$DATA from the specified directory. - The transaction. - The path to the directory to enumerate streams of. - The streams of type :$DATA in the specified directory. - - - [AlphaFS] Enumerates the streams of type :$DATA from the specified directory. - The transaction. - The path to the directory to enumerate streams of. - Indicates the format of the path parameter(s). - The streams of type :$DATA in the specified directory. - - - [AlphaFS] Backs up (export) encrypted directories. This is one of a group of Encrypted File System (EFS) functions that is - intended to implement backup and restore functionality, while maintaining files in their encrypted state. - - - The directory being backed up is not decrypted; it is backed up in its encrypted state. - If the caller does not have access to the key for the file, the caller needs to export encrypted files. See . - To backup an encrypted directory call one of the overloads and specify the directory to backup along with the destination stream of the backup data. - This function is intended for the backup of only encrypted directories; see for backup of unencrypted directories. - Note that this method does not back up the files inside the directory, only the directory entry itself. - - - - - The name of the file to be backed up. - The destination stream to which the backup data will be written. - - - [AlphaFS] Backs up (export) encrypted directories. This is one of a group of Encrypted File System (EFS) functions that is - intended to implement backup and restore functionality, while maintaining files in their encrypted state. - - - The directory being backed up is not decrypted; it is backed up in its encrypted state. - If the caller does not have access to the key for the file, the caller needs to export encrypted files. See . - To backup an encrypted directory call one of the overloads and specify the directory to backup along with the destination stream of the backup data. - This function is intended for the backup of only encrypted directories; see for backup of unencrypted directories. - Note that this method does not back up the files inside the directory, only the directory entry itself. - - - - - The name of the file to be backed up. - The destination stream to which the backup data will be written. - The path format of the parameter. - - - [AlphaFS] Restores (import) encrypted directories. This is one of a group of Encrypted File System (EFS) functions that is - intended to implement backup and restore functionality, while maintaining files in their encrypted state. - - - If the caller does not have access to the key for the directory, the caller needs to restore encrypted directories. See . - To restore an encrypted directory call one of the overloads and specify the file to restore along with the destination stream of the restored data. - This function is intended for the restoration of only encrypted directories; see for backup of unencrypted files. - - - - - The stream to read previously backed up data from. - The path of the destination directory to restore to. - - - [AlphaFS] Restores (import) encrypted directories. This is one of a group of Encrypted File System (EFS) functions that is - intended to implement backup and restore functionality, while maintaining files in their encrypted state. - - - If the caller does not have access to the key for the directory, the caller needs to restore encrypted directories. See . - To restore an encrypted directory call one of the overloads and specify the file to restore along with the destination stream of the restored data. - This function is intended for the restoration of only encrypted directories; see for backup of unencrypted files. - - - - - The stream to read previously backed up data from. - The path of the destination directory to restore to. - The path format of the parameter. - - - [AlphaFS] Restores (import) encrypted directories. This is one of a group of Encrypted File System (EFS) functions that is - intended to implement backup and restore functionality, while maintaining files in their encrypted state. - - - If the caller does not have access to the key for the directory, the caller needs to restore encrypted directories. See . - To restore an encrypted directory call one of the overloads and specify the file to restore along with the destination stream of the restored data. - This function is intended for the restoration of only encrypted directories; see for backup of unencrypted files. - - - - - The stream to read previously backed up data from. - The path of the destination directory to restore to. - If set to a hidden directory will be overwritten on import. - - - [AlphaFS] Restores (import) encrypted directories. This is one of a group of Encrypted File System (EFS) functions that is - intended to implement backup and restore functionality, while maintaining files in their encrypted state. - - - If the caller does not have access to the key for the directory, the caller needs to restore encrypted directories. See . - To restore an encrypted directory call one of the overloads and specify the file to restore along with the destination stream of the restored data. - This function is intended for the restoration of only encrypted directories; see for backup of unencrypted files. - - - - - The stream to read previously backed up data from. - The path of the destination directory to restore to. - If set to a hidden directory will be overwritten on import. - The path format of the parameter. - - - Exposes instance methods for creating, moving, and enumerating through directories and subdirectories. This class cannot be inherited. - - - Refreshes the state of the EntryInfo instance. - - - [AlphaFS] Decrypts a directory that was encrypted by the current account using the Encrypt method. - - - - - - - - - [AlphaFS] Decrypts a directory that was encrypted by the current account using the Encrypt method. - - - - - - - to decrypt the directory recursively. only decrypt files and directories in the root of the directory. - - - [AlphaFS] Disables encryption of the specified directory and the files in it. It does not affect encryption of subdirectories below the indicated directory. - on success, otherwise. - This method will create/change the file "Desktop.ini" and wil set Encryption value: "Disable=0" - - - [AlphaFS] Enables encryption of the specified directory and the files in it. It does not affect encryption of subdirectories below the indicated directory. - on success, otherwise. - This method will create/change the file "Desktop.ini" and wil set Encryption value: "Disable=1" - - - [AlphaFS] Encrypts a directory so that only the account used to encrypt the directory can decrypt it. - - - - - - - - - [AlphaFS] Decrypts a directory that was encrypted by the current account using the Encrypt method. - - - - - - - to encrypt the directory recursively. only encrypt files and directories in the root of the directory. - - - [AlphaFS] Deletes empty subdirectories from the instance. - - - [AlphaFS] Deletes empty subdirectories from the instance. - deletes empty subdirectories from this directory and its subdirectories. - - - [AlphaFS] Deletes empty subdirectories from the instance. - deletes empty subdirectories from this directory and its subdirectories. - overrides read only of empty directories. - - - [AlphaFS] Compresses a directory using NTFS compression. - This will only compress the root items (non recursive). - - - - - - - - - [AlphaFS] Compresses a directory using NTFS compression. - - - - - - - flags that specify how the directory is to be enumerated. - - - [AlphaFS] Decompresses an NTFS compressed directory. - This will only decompress the root items (non recursive). - - - - - - - - - [AlphaFS] Decompresses an NTFS compressed directory. - - - - - - - flags that specify how the directory is to be enumerated. - - - [AlphaFS] Disables compression of the specified directory and the files in it. - - This method disables the directory-compression attribute. It will not decompress the current contents of the directory. - However, newly created files and directories will be uncompressed. - - - - [AlphaFS] Enables compression of the specified directory and the files in it. - - This method enables the directory-compression attribute. It will not compress the current contents of the directory. - However, newly created files and directories will be compressed. - - - - [AlphaFS] Counts file system objects: files, folders or both) in a given directory. - The counted number of file system objects. - - - - - - - flags that specify how the directory is to be enumerated. - - - [AlphaFS] Counts file system objects: files, folders or both) in a given directory. - The counted number of file system objects. - - - - - - - - The search string to match against the names of directories in path. - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - flags that specify how the directory is to be enumerated. - - - [AlphaFS] Copies a instance and its contents to a new path. - - Use this method to prevent overwriting of an existing directory by default. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two directories have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - A new instance if the directory was completely copied. - - - - - - - The destination directory path. - - - [AlphaFS] Copies a instance and its contents to a new path. - - Use this method to prevent overwriting of an existing directory by default. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two directories have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - A new instance if the directory was completely copied. - - - - - - - The destination directory path. - Indicates the format of the path parameter(s). - - - [AlphaFS] Copies an existing directory to a new directory, allowing the overwriting of an existing directory, can be specified. - - Option is recommended for very large file transfers. - Use this method to allow or prevent overwriting of an existing directory. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two directories have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - - Returns a new directory, or an overwrite of an existing directory if is not . - If the directory exists and contains , an is thrown. - - - - - - - - The destination directory path. - that specify how the directory is to be copied. This parameter can be . - - - [AlphaFS] Copies an existing directory to a new directory, allowing the overwriting of an existing directory, can be specified. - - Option is recommended for very large file transfers. - Use this method to allow or prevent overwriting of an existing directory. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two directories have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - - Returns a new directory, or an overwrite of an existing directory if is not . - If the directory exists and contains , an is thrown. - - - - - - - - The destination directory path. - that specify how the directory is to be copied. This parameter can be . - Indicates the format of the path parameter(s). - - - [AlphaFS] Copies an existing directory to a new directory, allowing the overwriting of an existing directory, can be specified. - and the possibility of notifying the application of its progress through a callback function. - - Option is recommended for very large file transfers. - Use this method to allow or prevent overwriting of an existing directory. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two directories have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - A class with details of the Copy action. - - - - - - - The destination directory path. - that specify how the directory is to be copied. This parameter can be . - A callback function that is called each time another portion of the directory has been copied. This parameter can be . - The argument to be passed to the callback function. This parameter can be . - - - [AlphaFS] Copies an existing directory to a new directory, allowing the overwriting of an existing directory, can be specified. - and the possibility of notifying the application of its progress through a callback function. - - Option is recommended for very large file transfers. - Use this method to allow or prevent overwriting of an existing directory. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two directories have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - A class with details of the Copy action. - - - - - - - The destination directory path. - that specify how the directory is to be copied. This parameter can be . - A callback function that is called each time another portion of the directory has been copied. This parameter can be . - The argument to be passed to the callback function. This parameter can be . - Indicates the format of the path parameter(s). - - - Moves a instance and its contents to a new path. - - Use this method to prevent overwriting of an existing directory by default. - This method does not work across disk volumes. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two directories have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - A class with details of the Move action. - - - - - - - - The name and path to which to move this directory. - The destination cannot be another disk volume or a directory with the identical name. - It can be an existing directory to which you want to add this directory as a subdirectory. - - - - Moves a instance and its contents to a new path. - - Use this method to prevent overwriting of an existing directory by default. - This method does not work across disk volumes. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two directories have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - A new instance if the directory was completely moved. - - - - - - - - The name and path to which to move this directory. - The destination cannot be another disk volume or a directory with the identical name. - It can be an existing directory to which you want to add this directory as a subdirectory. - - Indicates the format of the path parameter(s). - - - [AlphaFS] Moves a instance and its contents to a new path, can be specified. - - Use this method to allow or prevent overwriting of an existing directory. - This method does not work across disk volumes unless contains . - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two directories have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - A new instance if the directory was completely moved. - - - - - - - - The name and path to which to move this directory. - The destination cannot be another disk volume unless contains , or a directory with the identical name. - It can be an existing directory to which you want to add this directory as a subdirectory. - - that specify how the directory is to be moved. This parameter can be . - - - [AlphaFS] Moves a instance and its contents to a new path, can be specified. - - Use this method to allow or prevent overwriting of an existing directory. - This method does not work across disk volumes unless contains . - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two directories have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - A new instance if the directory was completely moved. - - - - - - - - The name and path to which to move this directory. - The destination cannot be another disk volume unless contains , or a directory with the identical name. - It can be an existing directory to which you want to add this directory as a subdirectory. - - that specify how the directory is to be moved. This parameter can be . - Indicates the format of the path parameter(s). - - - [AlphaFS] Moves a instance and its contents to a new path, can be specified, - and the possibility of notifying the application of its progress through a callback function. - - Use this method to allow or prevent overwriting of an existing directory. - This method does not work across disk volumes unless contains . - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two directories have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - A class with details of the Move action. - - - - - - - - The name and path to which to move this directory. - The destination cannot be another disk volume unless contains , or a directory with the identical name. - It can be an existing directory to which you want to add this directory as a subdirectory. - - that specify how the directory is to be moved. This parameter can be . - A callback function that is called each time another portion of the directory has been moved. This parameter can be . - The argument to be passed to the callback function. This parameter can be . - - - [AlphaFS] Moves a instance and its contents to a new path, can be specified, - and the possibility of notifying the application of its progress through a callback function. - - Use this method to allow or prevent overwriting of an existing directory. - This method does not work across disk volumes unless contains . - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two directories have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - A class with details of the Move action. - - - - - - - - The name and path to which to move this directory. - The destination cannot be another disk volume unless contains , or a directory with the identical name. - It can be an existing directory to which you want to add this directory as a subdirectory. - - that specify how the directory is to be moved. This parameter can be . - A callback function that is called each time another portion of the directory has been moved. This parameter can be . - The argument to be passed to the callback function. This parameter can be . - Indicates the format of the path parameter(s). - - - Copy/move a Non-/Transacted file or directory including its children to a new location, - or can be specified, and the possibility of notifying the application of its progress through a callback function. - - Option is recommended for very large file transfers. - You cannot use the Move method to overwrite an existing file, unless contains . - Note that if you attempt to replace a file by moving a file of the same name into that directory, you get an IOException. - - - A class with details of the Copy or Move action. - - - - - - - The destination directory path. - that specify how the file is to be copied. This parameter can be . - that specify how the file is to be moved. This parameter can be . - A callback function that is called each time another portion of the file has been copied. This parameter can be . - The argument to be passed to the callback function. This parameter can be . - Returns the retrieved long full path. - Indicates the format of the path parameter(s). - - - Returns the original path that was passed by the user. - A string that represents this object. - - - Applies access control list (ACL) entries described by a object to the directory described by the current DirectoryInfo object. - A object that describes an ACL entry to apply to the directory described by the path parameter. - - - Applies access control list (ACL) entries described by a object to the directory described by the current DirectoryInfo object. - A object that describes an ACL entry to apply to the directory described by the path parameter. - One or more of the values that specifies the type of access control list (ACL) information to set. - - - Refreshes the state of the object. - - - Returns an array of strongly typed entries representing all the files and subdirectories in a directory. - An array of strongly typed entries. - - For subdirectories, the objects returned by this method can be cast to the derived class . - Use the value returned by the property to determine whether the represents a file or a directory. - - - If there are no files or directories in the DirectoryInfo, this method returns an empty array. This method is not recursive. - For subdirectories, the FileSystemInfo objects returned by this method can be cast to the derived class DirectoryInfo. - Use the FileAttributes value returned by the Attributes property to determine whether the FileSystemInfo represents a file or a directory. - - - - - - - - - - Retrieves an array of strongly typed objects representing the files and subdirectories that match the specified search criteria. - - The search string to match against the names of directories in path. - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - An array of strongly typed entries. - - For subdirectories, the objects returned by this method can be cast to the derived class . - Use the value returned by the property to determine whether the represents a file or a directory. - - - If there are no files or directories in the DirectoryInfo, this method returns an empty array. This method is not recursive. - For subdirectories, the FileSystemInfo objects returned by this method can be cast to the derived class DirectoryInfo. - Use the FileAttributes value returned by the Attributes property to determine whether the FileSystemInfo represents a file or a directory. - - - - - - - - - - Retrieves an array of strongly typed objects representing the files and subdirectories that match the specified search criteria. - - The search string to match against the names of directories in path. - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - - One of the enumeration values that specifies whether the - should include only the current directory or should include all subdirectories. - - An array of strongly typed entries. - - For subdirectories, the objects returned by this method can be cast to the derived class . - Use the value returned by the property to determine whether the represents a file or a directory. - - - If there are no files or directories in the DirectoryInfo, this method returns an empty array. This method is not recursive. - For subdirectories, the FileSystemInfo objects returned by this method can be cast to the derived class DirectoryInfo. - Use the FileAttributes value returned by the Attributes property to determine whether the FileSystemInfo represents a file or a directory. - - - - - - - - - - Returns a file list from the current directory. - An array of type . - The order of the returned file names is not guaranteed; use the Sort() method if a specific sort order is required. - If there are no files in the , this method returns an empty array. - - The EnumerateFiles and GetFiles methods differ as follows: When you use EnumerateFiles, you can start enumerating the collection of names - before the whole collection is returned; when you use GetFiles, you must wait for the whole array of names to be returned before you can access the array. - Therefore, when you are working with many files and directories, EnumerateFiles can be more efficient. - - - - - - - - - - Returns a file list from the current directory matching the given search pattern. - - The search string to match against the names of directories in path. - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - An array of type . - The order of the returned file names is not guaranteed; use the Sort() method if a specific sort order is required. - If there are no files in the , this method returns an empty array. - - The EnumerateFiles and GetFiles methods differ as follows: When you use EnumerateFiles, you can start enumerating the collection of names - before the whole collection is returned; when you use GetFiles, you must wait for the whole array of names to be returned before you can access the array. - Therefore, when you are working with many files and directories, EnumerateFiles can be more efficient. - - - - - - - - - - Returns a file list from the current directory matching the given search pattern and using a value to determine whether to search subdirectories. - - The search string to match against the names of directories in path. - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - - One of the enumeration values that specifies whether the - should include only the current directory or should include all subdirectories. - - An array of type . - The order of the returned file names is not guaranteed; use the Sort() method if a specific sort order is required. - If there are no files in the , this method returns an empty array. - - The EnumerateFiles and GetFiles methods differ as follows: When you use EnumerateFiles, you can start enumerating the collection of names - before the whole collection is returned; when you use GetFiles, you must wait for the whole array of names to be returned before you can access the array. - Therefore, when you are working with many files and directories, EnumerateFiles can be more efficient. - - - - - - - - - - Returns the subdirectories of the current directory. - An array of objects. - If there are no subdirectories, this method returns an empty array. This method is not recursive. - - The EnumerateDirectories and GetDirectories methods differ as follows: When you use EnumerateDirectories, you can start enumerating the collection of names - before the whole collection is returned; when you use GetDirectories, you must wait for the whole array of names to be returned before you can access the array. - Therefore, when you are working with many files and directories, EnumerateDirectories can be more efficient. - - - - - - - - - - Returns an array of directories in the current matching the given search criteria. - An array of type matching . - - The EnumerateDirectories and GetDirectories methods differ as follows: When you use EnumerateDirectories, you can start enumerating the collection of names - before the whole collection is returned; when you use GetDirectories, you must wait for the whole array of names to be returned before you can access the array. - Therefore, when you are working with many files and directories, EnumerateDirectories can be more efficient. - - - - - - - - - The search string to match against the names of directories in path. - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - - - Returns an array of directories in the current matching the given search criteria and using a value to determine whether to search subdirectories. - An array of type matching . - If there are no subdirectories, or no subdirectories match the searchPattern parameter, this method returns an empty array. - - The EnumerateDirectories and GetDirectories methods differ as follows: When you use EnumerateDirectories, you can start enumerating the collection of names - before the whole collection is returned; when you use GetDirectories, you must wait for the whole array of names to be returned before you can access the array. - Therefore, when you are working with many files and directories, EnumerateDirectories can be more efficient. - - - - - - - - - The search string to match against the names of directories in path. - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - - One of the enumeration values that specifies whether the - should include only the current directory or should include all subdirectories. - - - - Gets a object that encapsulates the access control list (ACL) entries for the directory described by the current DirectoryInfo object. - A object that encapsulates the access control rules for the directory. - - - Gets a object that encapsulates the specified type of access control list (ACL) entries for the directory described by the current object. - One of the values that specifies the type of access control list (ACL) information to receive. - A object that encapsulates the access control rules for the file described by the path parameter. - - - Returns an enumerable collection of file system information in the current directory. - An enumerable collection of file system information in the current directory. - - - - - - - - - Returns an enumerable collection of file system information that matches a specified search pattern. - An enumerable collection of file system information objects that matches . - - - - - - - - The search string to match against the names of directories in path. - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - - - Returns an enumerable collection of file system information that matches a specified search pattern and search subdirectory option. - An enumerable collection of file system information objects that matches and . - - - - - - - - The search string to match against the names of directories in path. - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - - One of the enumeration values that specifies whether the - should include only the current directory or should include all subdirectories. - - - - [AlphaFS] Returns an enumerable collection of file system information in the current directory. - An enumerable collection of file system information in the current directory. - - - - - - - flags that specify how the directory is to be enumerated. - - - [AlphaFS] Returns an enumerable collection of file system information that matches a specified search pattern. - An enumerable collection of file system information objects that matches . - - - - - - - - The search string to match against the names of directories in path. - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - flags that specify how the directory is to be enumerated. - - - Returns an enumerable collection of file information in the current directory. - An enumerable collection of the files in the current directory. - - - - - - - - - Returns an enumerable collection of file information that matches a search pattern. - An enumerable collection of files that matches . - - - - - - - - The search string to match against the names of directories in path. - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - - - Returns an enumerable collection of file information that matches a specified search pattern and search subdirectory option. - An enumerable collection of files that matches and . - - - - - - - - The search string to match against the names of directories in path. - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - - One of the enumeration values that specifies whether the - should include only the current directory or should include all subdirectories. - - - - Returns an enumerable collection of file information in the current directory. - An enumerable collection of the files in the current directory. - - - - - - - flags that specify how the directory is to be enumerated. - - - Returns an enumerable collection of file information that matches a search pattern. - An enumerable collection of files that matches . - - - - - - - - The search string to match against the names of directories in path. - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - flags that specify how the directory is to be enumerated. - - - Returns an enumerable collection of directory information in the current directory. - An enumerable collection of directories in the current directory. - - - - - - - - - Returns an enumerable collection of directory information that matches a specified search pattern. - An enumerable collection of directories that matches . - - - - - - - - The search string to match against the names of directories in path. - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - - - Returns an enumerable collection of directory information that matches a specified search pattern and search subdirectory option. - An enumerable collection of directories that matches and . - - - - - - - - The search string to match against the names of directories in path. - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - - One of the enumeration values that specifies whether the - should include only the current directory or should include all subdirectories. - - - - [AlphaFS] Returns an enumerable collection of directory information in the current directory. - An enumerable collection of directories in the current directory. - - - - - - - flags that specify how the directory is to be enumerated. - - - Returns an enumerable collection of directory information that matches a specified search pattern. - An enumerable collection of directories that matches . - - - - - - - - The search string to match against the names of directories in path. - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - flags that specify how the directory is to be enumerated. - - - Deletes this if it is empty. - - - - - - - - - Deletes this instance of a , specifying whether to delete subdirectories and files. - - If the has no files or subdirectories, this method deletes the even if recursive is . - Attempting to delete a that is not empty when recursive is false throws an . - - - - - - - - to delete this directory, its subdirectories, and all files; otherwise, . - - - [AlphaFS] Deletes this instance of a , specifying whether to delete files and subdirectories. - - If the has no files or subdirectories, this method deletes the even if recursive is . - Attempting to delete a that is not empty when recursive is false throws an . - - - - - - - - to delete this directory, its subdirectories, and all files; otherwise, . - ignores read only attribute of files and directories. - - - Creates a subdirectory or subdirectories on the specified path. The specified path can be relative to this instance of the class. - The specified path. This cannot be a different disk volume. - The last directory specified in . - - Any and all directories specified in path are created, unless some part of path is invalid. - The path parameter specifies a directory path, not a file path. - If the subdirectory already exists, this method does nothing. - - - - Creates a subdirectory or subdirectories on the specified path. The specified path can be relative to this instance of the class. - The specified path. This cannot be a different disk volume. - The security to apply. - The last directory specified in . - - Any and all directories specified in path are created, unless some part of path is invalid. - The path parameter specifies a directory path, not a file path. - If the subdirectory already exists, this method does nothing. - - - - [AlphaFS] Creates a subdirectory or subdirectories on the specified path. The specified path can be relative to this instance of the class. - The last directory specified in . - - Any and all directories specified in path are created, unless some part of path is invalid. - The path parameter specifies a directory path, not a file path. - If the subdirectory already exists, this method does nothing. - - The specified path. This cannot be a different disk volume. - When compresses the directory. - - - [AlphaFS] Creates a subdirectory or subdirectories on the specified path. The specified path can be relative to this instance of the class. - The specified path. This cannot be a different disk volume. - The path of the directory to use as a template when creating the new directory. - When compresses the directory. - The last directory specified in . - - Any and all directories specified in path are created, unless some part of path is invalid. - The path parameter specifies a directory path, not a file path. - If the subdirectory already exists, this method does nothing. - - - - [AlphaFS] Creates a subdirectory or subdirectories on the specified path. The specified path can be relative to this instance of the class. - The specified path. This cannot be a different disk volume. - The security to apply. - When compresses the directory. - The last directory specified in . - - Any and all directories specified in path are created, unless some part of path is invalid. - The path parameter specifies a directory path, not a file path. - If the subdirectory already exists, this method does nothing. - - - - [AlphaFS] Creates a subdirectory or subdirectories on the specified path. The specified path can be relative to this instance of the class. - The path of the directory to use as a template when creating the new directory. - The specified path. This cannot be a different disk volume. - When compresses the directory. - The security to apply. - The last directory specified in . - - Any and all directories specified in path are created, unless some part of path is invalid. - The path parameter specifies a directory path, not a file path. - If the subdirectory already exists, this method does nothing. - - - - Creates a subdirectory or subdirectories on the specified path. The specified path can be relative to this instance of the DirectoryInfo class. - The last directory specified in path as an object. - - Any and all directories specified in path are created, unless some part of path is invalid. - The path parameter specifies a directory path, not a file path. - If the subdirectory already exists, this method does nothing. - - The specified path. This cannot be a different disk volume or Universal Naming Convention (UNC) name. - The path of the directory to use as a template when creating the new directory. - The security to apply. - When compresses the directory. - - - Creates a directory. - If the directory already exists, this method does nothing. - - - Creates a directory using a object. - The access control to apply to the directory. - If the directory already exists, this method does nothing. - - - [AlphaFS] Creates a directory using a object. - When compresses the directory. - If the directory already exists, this method does nothing. - - - [AlphaFS] Creates a directory using a object. - The access control to apply to the directory. - When compresses the directory. - If the directory already exists, this method does nothing. - - - [AlphaFS] Returns an enumerable collection of instances for the directory. - An enumerable collection of instances for the directory. - - - Initializes a new instance of the class on the specified path. - The path on which to create the . - - This constructor does not check if a directory exists. This constructor is a placeholder for a string that is used to access the disk in subsequent operations. - The path parameter can be a file name, including a file on a Universal Naming Convention (UNC) share. - - - - [AlphaFS] Initializes a new instance of the class on the specified path. - The path on which to create the . - Indicates the format of the path parameter(s). - This constructor does not check if a directory exists. This constructor is a placeholder for a string that is used to access the disk in subsequent operations. - - - [AlphaFS] Special internal implementation. - The transaction. - The full path on which to create the . - Not used. - Not used. - This constructor does not check if a directory exists. This constructor is a placeholder for a string that is used to access the disk in subsequent operations. - - - [AlphaFS] Initializes a new instance of the class on the specified path. - The transaction. - The path on which to create the . - This constructor does not check if a directory exists. This constructor is a placeholder for a string that is used to access the disk in subsequent operations. - - - [AlphaFS] Initializes a new instance of the class on the specified path. - The transaction. - The path on which to create the . - Indicates the format of the path parameter(s). - This constructor does not check if a directory exists. This constructor is a placeholder for a string that is used to access the disk in subsequent operations. - - - Gets a value indicating whether the directory exists. - - The property returns if any error occurs while trying to determine if the - specified directory exists. - This can occur in situations that raise exceptions such as passing a directory name with invalid characters or too many - characters, - a failing or missing disk, or if the caller does not have permission to read the directory. - - if the directory exists; otherwise, . - - - Gets the name of this instance. - The directory name. - - This Name property returns only the name of the directory, such as "Bin". - To get the full path, such as "c:\public\Bin", use the FullName property. - - - - Gets the parent directory of a specified subdirectory. - The parent directory, or null if the path is null or if the file path denotes a root (such as "\", "C:", or * "\\server\share"). - - - Gets the root portion of the directory. - An object that represents the root of the directory. - - - Indicates the operation to be performed when opening a file using the OpenEncryptedFileRaw. - - - (0) Open the file for export (backup). - - - (1) The file is being opened for import (restore). - - - (2) Import (restore) a directory containing encrypted files. This must be combined with one of the previous two flags to indicate the operation. - - - (4) Overwrite a hidden file on import. - - - Defines values that are used with the FindFirstStreamW function to specify the information level of the returned data. - - Minimum supported client: Windows Vista [desktop apps only] - Minimum supported server: Windows Server 2003 [desktop apps only] - - - - The FindFirstStreamW function retrieves standard stream information. The data is returned in a structure. - - - Used to determine valid enumeration values. All supported enumeration values are less than FindStreamInfoMaxInfoLevel. - - - Specifies control options that filter the device information elements that are added to the device information set. - - - DIGCF_DEFAULT - Return only the device that is associated with the system default device interface, if one is set, for the specified device interface classes. - - - - DIGCF_PRESENT - Return only devices that are currently present. - - - - DIGCF_ALLCLASSES - Return a list of installed devices for the specified device setup classes or device interface classes. - - - - DIGCF_PROFILE - Return only devices that are a part of the current hardware profile. - - - - DIGCF_DEVICEINTERFACE - - Return devices that support device interfaces for the specified device interface classes. - This flag must be set in the Flags parameter if the Enumerator parameter specifies a Device Instance ID. - - - - - FILE_INFO_BY_HANDLE_CLASS - Identifies the type of file information that GetFileInformationByHandleEx should retrieve or SetFileInformationByHandle should set. - - - - FILE_BASIC_INFO - Minimal information for the file should be retrieved or set. Used for file handles. - - - - FILE_ID_BOTH_DIR_INFO - Files in the specified directory should be retrieved. Used for directory handles. - Use only when calling GetFileInformationByHandleEx. - - The number of files returned for each call to GetFileInformationByHandleEx - depends on the size of the buffer that is passed to the function. - Any subsequent calls to GetFileInformationByHandleEx on the same handle - will resume the enumeration operation after the last file is returned. - - - - - Additional flags that control the search. - - - No additional flags used. - - - Searches are case-sensitive. - - - Uses a larger buffer for directory queries, which can increase performance of the find operation. - This value is not supported until Windows Server 2008 R2 and Windows 7. - - - FINDEX_INFO_LEVELS Enumeration - Defines values that are used with the FindFirstFileEx function to specify the information level of the returned data. - - Minimum supported client: Windows XP [desktop apps | Windows Store apps] - Minimum supported server: Windows Server 2003 [desktop apps | Windows Store apps] - - - - A standard set of attribute is returned in a structure. - - - The FindFirstFileEx function does not query the short file name, improving overall enumeration speed. - This value is not supported until Windows Server 2008 R2 and Windows 7. - - - FINDEX_SEARCH_OPS Enumeration - Defines values that are used with the FindFirstFileEx function to specify the type of filtering to perform. - - Minimum supported client: Windows XP [desktop apps | Windows Store apps] - Minimum supported server: Windows Server 2003 [desktop apps | Windows Store apps] - - - - The search for a file that matches a specified file name. - The lpSearchFilter parameter of FindFirstFileEx must be NULL when this search operation is used. - - - - This is an advisory flag. If the file system supports directory filtering, - the function searches for a file that matches the specified name and is also a directory. - If the file system does not support directory filtering, this flag is silently ignored. -   - - The lpSearchFilter parameter of the FindFirstFileEx function must be NULL when this search value is used. - If directory filtering is desired, this flag can be used on all file systems, - but because it is an advisory flag and only affects file systems that support it, - the application must examine the file attribute data stored in the lpFindFileData parameter - of the FindFirstFileEx function to determine whether the function has returned a handle to a directory. - - - - - This filtering type is not available. - For more information, see Device Interface Classes. - - - Enum for struct ChangeErrorMode. - - - Use the system default, which is to display all error dialog boxes. - - - The system does not display the critical-error-handler message box. Instead, the system sends the error to the calling process/thread. - - - The system does not display the Windows Error Reporting dialog. - - - The system automatically fixes memory alignment faults and makes them invisible to the application. It does this for the calling process and any descendant processes. This feature is only supported by certain processor architectures. - - - The system does not display a message box when it fails to find a file. Instead, the error is returned to the calling process/thread. - - - Flags for SetupDiGetDeviceRegistryProperty(). - - - SPDRP_DEVICEDESC - Represents a description of a device instance. - - - - SPDRP_HARDWAREID - Represents the list of hardware identifiers for a device instance. - - - - SPDRP_COMPATIBLEIDS - Represents the list of compatible identifiers for a device instance. - - - - SPDRP_CLASS - Represents the name of the service that is installed for a device instance. - - - - SPDRP_CLASS - Represents the name of the device setup class that a device instance belongs to. - - - - SPDRP_CLASSGUID - Represents the of the device setup class that a device instance belongs to. - - - - SPDRP_DRIVER - Represents the registry entry name of the driver key for a device instance. - - - - SPDRP_MFG - Represents the name of the manufacturer of a device instance. - - - - SPDRP_FRIENDLYNAME - Represents the friendly name of a device instance. - - - - SPDRP_LOCATION_INFORMATION - Represents the bus-specific physical location of a device instance. - - - - SPDRP_PHYSICAL_DEVICE_LOCATION - Encapsulates the physical device location information provided by a device's firmware to Windows. - - - - SPDRP_ENUMERATOR_NAME - Represents the name of the enumerator for a device instance. - - - - SPDRP_LOCATION_PATHS - Represents the location of a device instance in the device tree. - - - - SPDRP_BASE_CONTAINERID - Represents the value of the base container identifier (ID) .The Windows Plug and Play (PnP) manager assigns this value to the device node (devnode). - - - - Volume Attributes used by the GetVolumeInfo() function. - - - No VolumeInfo attributes. - - - FILE_CASE_SENSITIVE_SEARCH - The specified volume supports case-sensitive file names. - - - - FILE_CASE_PRESERVED_NAMES - The specified volume supports preserved case of file names when it places a name on disk. - - - - FILE_UNICODE_ON_DISK - The specified volume supports Unicode in file names as they appear on disk. - - - - FILE_PERSISTENT_ACLS - - The specified volume preserves and enforces access control lists (ACL). - For example, the NTFS file system preserves and enforces ACLs, and the FAT file system does not. - - - - - FILE_FILE_COMPRESSION - The specified volume supports file-based compression. - - - - FILE_VOLUME_QUOTAS - The specified volume supports disk quotas. - - - - FILE_SUPPORTS_SPARSE_FILES - The specified volume supports sparse files. - - - - FILE_SUPPORTS_REPARSE_POINTS - The specified volume supports re-parse points. - - - - (does not appear on MSDN) - - - FILE_VOLUME_IS_COMPRESSED - The specified volume is a compressed volume, for example, a DoubleSpace volume. - - - - FILE_SUPPORTS_OBJECT_IDS - The specified volume supports object identifiers. - - - - FILE_SUPPORTS_ENCRYPTION - The specified volume supports the Encrypted File System (EFS). For more information, see File Encryption. - - - - FILE_NAMED_STREAMS - The specified volume supports named streams. - - - - FILE_READ_ONLY_VOLUME - The specified volume is read-only. - - - - FILE_SEQUENTIAL_WRITE_ONCE - The specified volume is read-only. - - - - FILE_SUPPORTS_TRANSACTIONS - The specified volume supports transactions.For more information, see About KTM. - - - - FILE_SUPPORTS_HARD_LINKS - The specified volume supports hard links. For more information, see Hard Links and Junctions. - - Windows Server 2008, Windows Vista, Windows Server 2003, and Windows XP: This value is not supported until Windows Server 2008 R2 and Windows 7. - - - FILE_SUPPORTS_EXTENDED_ATTRIBUTES - - The specified volume supports extended attributes. An extended attribute is a piece of application-specific metadata - that an application can associate with a file and is not part of the file's data. - - - Windows Server 2008, Windows Vista, Windows Server 2003, and Windows XP: This value is not supported until Windows Server 2008 R2 and Windows 7. - - - FILE_SUPPORTS_OPEN_BY_FILE_ID - The file system supports open by FileID. For more information, see FILE_ID_BOTH_DIR_INFO. - - Windows Server 2008, Windows Vista, Windows Server 2003, and Windows XP: This value is not supported until Windows Server 2008 R2 and Windows 7. - - - FILE_SUPPORTS_USN_JOURNAL - The specified volume supports update sequence number (USN) journals. For more information, see Change Journal Records. - - Windows Server 2008, Windows Vista, Windows Server 2003, and Windows XP: This value is not supported until Windows Server 2008 R2 and Windows 7. - - - Defines values that are used with the GetFileAttributesEx and GetFileAttributesTransacted functions to specify the information level of the returned data. - - - The GetFileAttributesEx or GetFileAttributesTransacted function retrieves a standard set of attribute information. The data is returned in a WIN32_FILE_ATTRIBUTE_DATA structure. - - - Opens an encrypted file in order to backup (export) or restore (import) the file. - If the function succeeds, it returns ERROR_SUCCESS. - If the function fails, it returns a nonzero error code defined in WinError.h. You can use FormatMessage with the FORMAT_MESSAGE_FROM_SYSTEM flag to get a generic text description of the error. - Minimum supported client: Windows XP Professional [desktop apps only] - Minimum supported server: Windows Server 2003 [desktop apps only] - The name of the file to be opened. - The operation to be performed. - [out] The address of a context block that must be presented in subsequent calls to - ReadEncryptedFileRaw, WriteEncryptedFileRaw, or CloseEncryptedFileRaw. - - - Closes an encrypted file after a backup or restore operation, and frees associated system resources. - Minimum supported client: Windows XP Professional [desktop apps only] - Minimum supported server: Windows Server 2003 [desktop apps only] - A pointer to a system-defined context block. The OpenEncryptedFileRaw function returns the context block. - - - Backs up (export) encrypted files. This is one of a group of Encrypted File System (EFS) functions that is intended to implement backup and restore functionality, while maintaining files in their encrypted state. - If the function succeeds, it returns ERROR_SUCCESS. - If the function fails, it returns a nonzero error code defined in WinError.h. You can use FormatMessage with the FORMAT_MESSAGE_FROM_SYSTEM flag to get a generic text description of the error. - Minimum supported client: Windows XP Professional [desktop apps only] - Minimum supported server: Windows Server 2003 [desktop apps only] - - - Restores (import) encrypted files. This is one of a group of Encrypted File System (EFS) functions that is intended to implement backup and restore functionality, while maintaining files in their encrypted state. - If the function succeeds, it returns ERROR_SUCCESS. - If the function fails, it returns a nonzero error code defined in WinError.h. You can use FormatMessage with the FORMAT_MESSAGE_FROM_SYSTEM flag to get a generic text description of the error. - Minimum supported client: Windows XP Professional [desktop apps only] - Minimum supported server: Windows Server 2003 [desktop apps only] - - - Returns a pointer to an IQueryAssociations object. - If this function succeeds, it returns S_OK. Otherwise, it returns an HRESULT error code. - Minimum supported client: Windows 2000 Professional, Windows XP [desktop apps only] - Minimum supported server: Windows 2000 Server [desktop apps only] - - - Searches for and retrieves a file or protocol association-related string from the registry. - Return value Type: HRESULT. Returns a standard COM error value, including the following: S_OK, E_POINTER and S_FALSE. - Minimum supported client: Windows 2000 Professional - Minimum supported server: Windows 2000 Server - - - Exposes methods that simplify the process of retrieving information stored in the registry in association with defining a file type or protocol and associating it with an application. - - - Initializes the IQueryAssociations interface and sets the root key to the appropriate ProgID. - If this method succeeds, it returns S_OK. Otherwise, it returns an HRESULT error code. - Minimum supported client: Windows 2000 Professional, Windows XP [desktop apps only] - Minimum supported server: Windows 2000 Server [desktop apps only] - - - Searches for and retrieves a file or protocol association-related string from the registry. - A standard COM error value, including the following: S_OK, E_POINTER, S_FALSE - Minimum supported client: Windows 2000 Professional, Windows XP [desktop apps only] - Minimum supported server: Windows 2000 Server [desktop apps only] - - - Determines whether a path to a file system object such as a file or folder is valid. - if the file exists; otherwise, . Call GetLastError for extended error information. - - This function tests the validity of the path. - A path specified by Universal Naming Convention (UNC) is limited to a file only; that is, \\server\share\file is permitted. - A network share path to a server or server share is not permitted; that is, \\server or \\server\share. - This function returns FALSE if a mounted remote drive is out of service. - - Minimum supported client: Windows 2000 Professional - Minimum supported server: Windows 2000 Server - - - Converts a file URL to a Microsoft MS-DOS path. - Type: HRESULT - If this function succeeds, it returns S_OK. Otherwise, it returns an HRESULT error code. - - Minimum supported client: Windows 2000 Professional, Windows XP [desktop apps only] - Minimum supported server: Windows 2000 Server [desktop apps only] - - - Creates a path from a file URL. - Type: HRESULT - If this function succeeds, it returns S_OK. Otherwise, it returns an HRESULT error code. - - Minimum supported client: Windows Vista [desktop apps only] - Minimum supported server: Windows Server 2008 [desktop apps only] - - - Converts a Microsoft MS-DOS path to a canonicalized URL. - Type: HRESULT - Returns S_FALSE if pszPath is already in URL format. In this case, pszPath will simply be copied to pszUrl. - Otherwise, it returns S_OK if successful or a standard COM error value if not. - - - UrlCreateFromPath does not support extended paths. These are paths that include the extended-length path prefix "\\?\". - - Minimum supported client: Windows 2000 Professional, Windows XP [desktop apps only] - Minimum supported server: Windows 2000 Server [desktop apps only] - - - Tests whether a URL is a specified type. - - Type: BOOL - For all but one of the URL types, UrlIs returns if the URL is the specified type, otherwise. - If UrlIs is set to , UrlIs will attempt to determine the URL scheme. - If the function is able to determine a scheme, it returns , or . - - Minimum supported client: Windows 2000 Professional, Windows XP [desktop apps only] - Minimum supported server: Windows 2000 Server [desktop apps only] - - - Destroys an icon and frees any memory the icon occupied. - Minimum supported client: Windows XP [desktop apps only] - Minimum supported server: Windows 2000 Server [desktop apps only] - - - Retrieves information about an object in the file system, such as a file, folder, directory, or drive root. - You should call this function from a background thread. Failure to do so could cause the UI to stop responding. - Minimum supported client: Windows 2000 Professional [desktop apps only] - Minimum supported server: Windows 2000 Server [desktop apps only] - - - - Creates a new transaction object. - - - Use the function to close the transaction handle. If the last transaction handle is closed - beforea client calls the CommitTransaction function with the transaction handle, then KTM rolls back the transaction. - Minimum supported client: Windows Vista - Minimum supported server:Windows Server 2008 - - - If the function succeeds, the return value is a handle to the transaction. - If the function fails, the return value is INVALID_HANDLE_VALUE. To get extended error information, call the GetLastError - function. - - - - Requests that the specified transaction be committed. - - You can commit any transaction handle that has been opened or created using the TRANSACTION_COMMIT permission; any - application can commit a transaction, not just the creator. - This function can only be called if the transaction is still active, not prepared, pre-prepared, or rolled back. - Minimum supported client: Windows Vista - Minimum supported server:Windows Server 2008 - - - If the function succeeds, the return value is nonzero. - If the function fails, the return value is 0 (zero). To get extended error information, call the GetLastError function. - - - - - Requests that the specified transaction be rolled back. This function is synchronous. - - - If the function succeeds, the return value is nonzero. - If the function fails, the return value is zero. To get extended error information, call the GetLastError function. - - - - Closes an open object handle. - - The CloseHandle function closes handles to the following objects: - Access token, Communications device, Console input, Console screen buffer, Event, File, File mapping, I/O completion port, - Job, Mailslot, Memory resource notification, Mutex, Named pipe, Pipe, Process, Semaphore, Thread, Transaction, Waitable - timer. - SetLastError is set to . - Minimum supported client: Windows 2000 Professional [desktop apps | Windows Store apps] - Minimum supported server: Windows 2000 Server [desktop apps | Windows Store apps] - - - If the function succeeds, the return value is nonzero. - If the function fails, the return value is zero. To get extended error information, call GetLastError. - If the application is running under a debugger, the function will throw an exception if it receives either a handle value - that is not valid or a pseudo-handle value.This can happen if you close a handle twice, or if you call CloseHandle on a handle - returned by the FindFirstFile function instead of calling the FindClose function. - - - - - Copies an existing file to a new file, notifying the application of its progress through a callback function. - - - This function fails with ERROR_ACCESS_DENIED if the destination file already exists and has the FILE_ATTRIBUTE_HIDDEN or - FILE_ATTRIBUTE_READONLY attribute set. - This function preserves extended attributes, OLE structured storage, NTFS file system alternate data streams, security - resource attributes, and file attributes. - Windows 7, Windows Server 2008 R2, Windows Server 2008, Windows Vista, Windows Server 2003, and Windows XP: - Security resource attributes (ATTRIBUTE_SECURITY_INFORMATION) for the existing file are not copied to the new file until - Windows 8 and Windows Server 2012. - Minimum supported client: Windows XP [desktop apps only] - Minimum supported server: Windows Server 2003 [desktop apps only] - - Filename of the existing file. - Filename of the new file. - The progress routine. - The data. - [out] The pb cancel. - The copy flags. - - If the function succeeds, the return value is nonzero. - If the function fails, the return value is zero. To get extended error information, call GetLastError. - - - - - Copies an existing file to a new file as a transacted operation, notifying the application of its progress through a callback - function. - - - This function fails with ERROR_ACCESS_DENIED if the destination file already exists and has the FILE_ATTRIBUTE_HIDDEN or - FILE_ATTRIBUTE_READONLY attribute set. - This function preserves extended attributes, OLE structured storage, NTFS file system alternate data streams, security - resource attributes, and file attributes. - Windows 7, Windows Server 2008 R2, Windows Server 2008, Windows Vista, Windows Server 2003, and Windows XP: - Security resource attributes (ATTRIBUTE_SECURITY_INFORMATION) for the existing file are not copied to the new file until - Windows 8 and Windows Server 2012. - Minimum supported client: Windows Vista [desktop apps only] - Minimum supported server: Windows Server 2008 [desktop apps only] - - - If the function succeeds, the return value is nonzero. - If the function fails, the return value is zero. To get extended error information, call GetLastError. - - - - - Creates or opens a file or I/O device. The most commonly used I/O devices are as follows: file, file stream, directory, physical - disk, volume, console buffer, tape drive, communications resource, mailslot, and pipe. - - Minimum supported client: Windows XP. - Minimum supported server: Windows Server 2003. - - If the function succeeds, the return value is an open handle to the specified file, device, named pipe, or mail slot. If the - function fails, the return value is Win32Errors.ERROR_INVALID_HANDLE. To get extended error information, call GetLastError. - - - - - Creates or opens a file or I/O device. The most commonly used I/O devices are as follows: file, file stream, directory, physical - disk, volume, console buffer, tape drive, communications resource, mailslot, and pipe. - - Minimum supported client: Windows Vista [desktop apps only]. - Minimum supported server: Windows Server 2008 [desktop apps only]. - - If the function succeeds, the return value is an open handle to the specified file, device, named pipe, or mail slot. If the - function fails, the return value is Win32Errors.ERROR_INVALID_HANDLE". To get extended error information, call GetLastError. - - - - Creates or opens a named or unnamed file mapping object for a specified file. - Minimum supported client: Windows XP. - Minimum supported server: Windows Server 2003. - - If the function succeeds, the return value is a handle to the newly created file mapping object. If the function fails, the return - value is . - - - - - Establishes a hard link between an existing file and a new file. This function is only supported on the NTFS file system, and only - for files, not directories. - - Minimum supported client: Windows XP [desktop apps only]. - Minimum supported server: Windows Server 2003 [desktop apps only]. - - If the function succeeds, the return value is nonzero. If the function fails, the return value is zero (0). To get extended error - information, call GetLastError. - - - - - Establishes a hard link between an existing file and a new file as a transacted operation. This function is only supported on the - NTFS file system, and only for files, not directories. - - Minimum supported client: Windows Vista [desktop apps only]. - Minimum supported server: Windows Server 2008 [desktop apps only]. - - If the function succeeds, the return value is nonzero. If the function fails, the return value is zero (0). To get extended error - information, call GetLastError. - - - - Creates a symbolic link. - Minimum supported client: Windows Vista [desktop apps only]. - Minimum supported server: Windows Server 2008 [desktop apps only]. - - The unmanaged prototype contains a return directive because the CreateSymbolicLink API function returns BOOLEAN, a one-byte data type. - The default marshaling for bool is four bytes (to allow seamless integration with BOOL return values). - If you were to use the default marshaling for BOOLEAN values, it's likely that you will get erroneous results. - The return directive forces PInvoke to marshal just one byte of the return value. - Source: http://www.informit.com/guides/content.aspx?g=dotnet&seqNum=762&ns=16196 - - - If the function succeeds, the return value is nonzero. If the function fails, the return value is zero (0). To get extended error - information, call GetLastError. - - - - Creates a symbolic link as a transacted operation. - Minimum supported client: Windows Vista [desktop apps only]. - Minimum supported server: Windows Server 2008 [desktop apps only]. - - The unmanaged prototype contains a return directive because the CreateSymbolicLink API function returns BOOLEAN, a one-byte data type. - The default marshaling for bool is four bytes (to allow seamless integration with BOOL return values). - If you were to use the default marshaling for BOOLEAN values, it's likely that you will get erroneous results. - The return directive forces PInvoke to marshal just one byte of the return value. - Source: http://www.informit.com/guides/content.aspx?g=dotnet&seqNum=762&ns=16196 - - - If the function succeeds, the return value is nonzero. If the function fails, the return value is zero (0). To get extended error - information, call GetLastError. - - - - Decrypts an encrypted file or directory. - - The DecryptFile function requires exclusive access to the file being decrypted, and will fail if another process is using the file. - If the file is not encrypted, DecryptFile simply returns a nonzero value, which indicates success. If lpFileName specifies a read- - only file, the function fails and GetLastError returns ERROR_FILE_READ_ONLY. If lpFileName specifies a directory that contains a - read-only file, the functions succeeds but the directory is not decrypted. - - Minimum supported client: Windows XP. - Minimum supported server: Windows Server 2003. - - If the function succeeds, the return value is nonzero. If the function fails, the return value is zero. To get extended error - information, call GetLastError. - - - - Deletes an existing file. - - If an application attempts to delete a file that does not exist, the DeleteFile function fails with ERROR_FILE_NOT_FOUND. - - If the file is a read-only file, the function fails with ERROR_ACCESS_DENIED. - - If the path points to a symbolic link, the symbolic link is deleted, not the target. To delete a target, you must call CreateFile - and specify FILE_FLAG_DELETE_ON_CLOSE. - - Minimum supported client: Windows XP [desktop apps | Windows Store apps]. - Minimum supported server: Windows Server 2003 [desktop apps | Windows Store apps]. - - If the function succeeds, the return value is nonzero. If the function fails, the return value is zero (0). To get extended error - information, call GetLastError. - - - - Deletes an existing file as a transacted operation. - Minimum supported client: Windows Vista [desktop apps only]. - Minimum supported server: Windows Server 2008 [desktop apps only]. - - If the function succeeds, the return value is nonzero. If the function fails, the return value is zero (0). To get extended error - information, call GetLastError. - - - - - Encrypts a file or directory. All data streams in a file are encrypted. All new files created in an encrypted directory are - encrypted. - - - The EncryptFile function requires exclusive access to the file being encrypted, and will fail if another process is using the file. - If the file is already encrypted, EncryptFile simply returns a nonzero value, which indicates success. If the file is compressed, - EncryptFile will decompress the file before encrypting it. If lpFileName specifies a read-only file, the function fails and - GetLastError returns ERROR_FILE_READ_ONLY. If lpFileName specifies a directory that contains a read-only file, the functions - succeeds but the directory is not encrypted. - - Minimum supported client: Windows XP. - Minimum supported server: Windows Server 2003. - - If the function succeeds, the return value is nonzero. If the function fails, the return value is zero. To get extended error - information, call GetLastError. - - - - - Disables or enables encryption of the specified directory and the files in it. It does not affect encryption of subdirectories - below the indicated directory. - - - EncryptionDisable() disables encryption of directories and files. It does not affect the visibility of files with the - FILE_ATTRIBUTE_SYSTEM attribute set. This method will create/change the file "Desktop.ini" and wil set Encryption value: - "Disable=0|1". - - Minimum supported client: Windows XP Professional [desktop apps only]. - Minimum supported server: Windows Server 2003 [desktop apps only]. - - If the function succeeds, the return value is nonzero. If the function fails, the return value is zero. To get extended error - information, call GetLastError. - - - - Retrieves the encryption status of the specified file. - Minimum supported client: Windows XP Professional [desktop apps only]. - Minimum supported server: Windows Server 2003 [desktop apps only]. - - If the function succeeds, the return value is nonzero. If the function fails, the return value is zero. To get extended error - information, call GetLastError. - - - - - Closes a file search handle opened by the FindFirstFile, FindFirstFileEx, FindFirstFileNameW, FindFirstFileNameTransactedW, - FindFirstFileTransacted, FindFirstStreamTransactedW, or FindFirstStreamW functions. - - Minimum supported client: Windows XP [desktop apps | Windows Store apps]. - Minimum supported server: Windows Server 2003 [desktop apps | Windows Store apps]. - - If the function succeeds, the return value is nonzero. If the function fails, the return value is zero. To get extended error - information, call GetLastError. - - - - Searches a directory for a file or subdirectory with a name and attributes that match those specified. - A trailing backslash is not allowed and will be removed. - Minimum supported client: Windows XP [desktop apps | Windows Store apps]. - Minimum supported server: Windows Server 2003 [desktop apps | Windows Store apps]. - - If the function succeeds, the return value is a search handle used in a subsequent call to FindNextFile or FindClose, and the - lpFindFileData parameter contains information about the first file or directory found. If the function fails or fails to locate - files from the search string in the lpFileName parameter, the return value is INVALID_HANDLE_VALUE and the contents of - lpFindFileData are indeterminate. To get extended error information, call the GetLastError function. - - - - - Searches a directory for a file or subdirectory with a name that matches a specific name as a transacted operation. - - A trailing backslash is not allowed and will be removed. - Minimum supported client: Windows Vista [desktop apps only]. - Minimum supported server: Windows Server 2008 [desktop apps only]. - - If the function succeeds, the return value is a search handle used in a subsequent call to FindNextFile or FindClose, and the - lpFindFileData parameter contains information about the first file or directory found. If the function fails or fails to locate - files from the search string in the lpFileName parameter, the return value is INVALID_HANDLE_VALUE and the contents of - lpFindFileData are indeterminate. To get extended error information, call the GetLastError function. - - - - - Creates an enumeration of all the hard links to the specified file. The FindFirstFileNameW function returns a handle to the - enumeration that can be used on subsequent calls to the FindNextFileNameW function. - - Minimum supported client: Windows Vista [desktop apps only]. - Minimum supported server: Windows Server 2008 [desktop apps only]. - - If the function succeeds, the return value is a search handle that can be used with the FindNextFileNameW function or closed with - the FindClose function. If the function fails, the return value is INVALID_HANDLE_VALUE (0xffffffff). To get extended error - information, call the GetLastError function. - - - - - Creates an enumeration of all the hard links to the specified file as a transacted operation. The function returns a handle to the - enumeration that can be used on subsequent calls to the FindNextFileNameW function. - - Minimum supported client: Windows Vista [desktop apps only]. - Minimum supported server: Windows Server 2008 [desktop apps only]. - - If the function succeeds, the return value is a search handle that can be used with the FindNextFileNameW function or closed with - the FindClose function. If the function fails, the return value is INVALID_HANDLE_VALUE (0xffffffff). To get extended error - information, call the GetLastError function. - - - - - Continues a file search from a previous call to the FindFirstFile, FindFirstFileEx, or FindFirstFileTransacted functions. - - Minimum supported client: Windows XP [desktop apps | Windows Store apps]. - Minimum supported server: Windows Server 2003 [desktop apps | Windows Store apps]. - - If the function succeeds, the return value is nonzero and the lpFindFileData parameter contains information about the next file or - directory found. If the function fails, the return value is zero and the contents of lpFindFileData are indeterminate. To get - extended error information, call the GetLastError function. If the function fails because no more matching files can be found, the - GetLastError function returns ERROR_NO_MORE_FILES. - - - - - Continues enumerating the hard links to a file using the handle returned by a successful call to the FindFirstFileName function. - - Minimum supported client: Windows Vista [desktop apps only]. - Minimum supported server: Windows Server 2008 [desktop apps only]. - - If the function succeeds, the return value is nonzero. If the function fails, the return value is zero (0). To get extended error - information, call GetLastError. If no matching files can be found, the GetLastError function returns ERROR_HANDLE_EOF. - - - - Flushes the buffers of a specified file and causes all buffered data to be written to a file. - Minimum supported client: Windows XP [desktop apps | Windows Store apps]. - Minimum supported server: Windows Server 2003 [desktop apps | Windows Store apps]. - - If the function succeeds, the return value is nonzero. If the function fails, the return value is zero. To get extended error - information, call GetLastError. - - - - Retrieves the actual number of bytes of disk storage used to store a specified file. - Minimum supported client: Windows XP [desktop apps only]. - Minimum supported server: Windows Server 2003 [desktop apps only]. - - If the function succeeds, the return value is the low-order DWORD of the actual number of bytes of disk storage used to store the - specified file, and if lpFileSizeHigh is non-NULL, the function puts the high-order DWORD of that actual value into the DWORD - pointed to by that parameter. This is the compressed file size for compressed files, the actual file size for noncompressed files. - If the function fails, and lpFileSizeHigh is NULL, the return value is INVALID_FILE_SIZE. To get extended error information, call - GetLastError. If the return value is INVALID_FILE_SIZE and lpFileSizeHigh is non-NULL, an application must call GetLastError to - determine whether the function has succeeded (value is NO_ERROR) or failed (value is other than NO_ERROR). - - - - Retrieves the actual number of bytes of disk storage used to store a specified file as a transacted operation. - Minimum supported client: Windows Vista [desktop apps only]. - Minimum supported server: Windows Server 2008 [desktop apps only]. - - If the function succeeds, the return value is the low-order DWORD of the actual number of bytes of disk storage used to store the - specified file, and if lpFileSizeHigh is non-NULL, the function puts the high-order DWORD of that actual value into the DWORD - pointed to by that parameter. This is the compressed file size for compressed files, the actual file size for noncompressed files. - If the function fails, and lpFileSizeHigh is NULL, the return value is INVALID_FILE_SIZE. To get extended error information, call - GetLastError. If the return value is INVALID_FILE_SIZE and lpFileSizeHigh is non-NULL, an application must call GetLastError to - determine whether the function has succeeded (value is NO_ERROR) or failed (value is other than NO_ERROR). - - - - - Retrieves attributes for a specified file or directory. - - - The GetFileAttributes function retrieves file system attribute information. - GetFileAttributesEx can obtain other sets of file or directory attribute information. - Currently, GetFileAttributesEx retrieves a set of standard attributes that is a superset of the file system attribute - information. - When the GetFileAttributesEx function is called on a directory that is a mounted folder, it returns the attributes of the directory, - not those of the root directory in the volume that the mounted folder associates with the directory. To obtain the attributes of - the associated volume, call GetVolumeNameForVolumeMountPoint to obtain the name of the associated volume. Then use the resulting - name in a call to GetFileAttributesEx. The results are the attributes of the root directory on the associated volume. - Symbolic link behavior: If the path points to a symbolic link, the function returns attributes for the symbolic link. - Minimum supported client: Windows XP [desktop apps only] - Minimum supported server: Windows Server 2003 [desktop apps only] - - - If the function succeeds, the return value is nonzero. - If the function fails, the return value is zero. To get extended error information, call GetLastError. - - - - Retrieves attributes for a specified file or directory. - - The GetFileAttributes function retrieves file system attribute information. - GetFileAttributesEx can obtain other sets of file or directory attribute information. - - Currently, GetFileAttributesEx retrieves a set of standard attributes that is a superset of the file system attribute information. - When the GetFileAttributesEx function is called on a directory that is a mounted folder, it returns the attributes of the directory, - not those of the root directory in the volume that the mounted folder associates with the directory. To obtain the attributes of - the associated volume, call GetVolumeNameForVolumeMountPoint to obtain the name of the associated volume. Then use the resulting - name in a call to GetFileAttributesEx. The results are the attributes of the root directory on the associated volume. - Symbolic link behavior: If the path points to a symbolic link, the function returns attributes for the symbolic link. - Transacted Operations - If a file is open for modification in a transaction, no other thread can open the file for modification until the transaction - is committed. Conversely, if a file is open for modification outside of a transaction, no transacted thread can open the file for - modification until the non-transacted handle is closed. If a non-transacted thread has a handle opened to modify a file, a call to - GetFileAttributesTransacted for that file will fail with an ERROR_TRANSACTIONAL_CONFLICT error. - Minimum supported client: Windows Vista [desktop apps only] - Minimum supported server: Windows Server 2008 [desktop apps only] - - - If the function succeeds, the return value is nonzero. - If the function fails, the return value is zero. To get extended error information, call GetLastError. - - - - Retrieves file information for the specified file. - - If the function succeeds, the return value is nonzero and file information data is contained in the buffer pointed to by the lpByHandleFileInformation parameter. - If the function fails, the return value is zero. To get extended error information, call GetLastError. - - - Depending on the underlying network features of the operating system and the type of server connected to, - the GetFileInformationByHandle function may fail, return partial information, or full information for the given file. - - Minimum supported client: Windows XP [desktop apps only] - Minimum supported server: Windows Server 2003 [desktop apps only] - - - - Retrieves file information for the specified file. - - - Minimum supported client: Windows Vista [desktop apps | Windows Store apps] - Minimum supported server: Windows Server 2008 [desktop apps | Windows Store apps] - Redistributable: Windows SDK on Windows Server 2003 and Windows XP. - - The file. - The file information by handle class. - Information describing the file. - Size of the buffer. - - If the function succeeds, the return value is nonzero and file information data is contained in the buffer pointed to by the - lpByHandleFileInformation parameter. - If the function fails, the return value is zero. To get extended error information, call GetLastError. - - - - Retrieves file information for the specified file. - - Minimum supported client: Windows Vista [desktop apps | Windows Store apps] - Minimum supported server: Windows Server 2008 [desktop apps | Windows Store apps] - Redistributable: Windows SDK on Windows Server 2003 and Windows XP. - - - If the function succeeds, the return value is nonzero and file information data is contained in the buffer pointed to by the - lpByHandleFileInformation parameter. - If the function fails, the return value is zero. To get extended error information, call GetLastError. - - The file. - The file information by handle class. - Information describing the file. - Size of the buffer. - - - - Retrieves the size of the specified file. - - - Minimum supported client: Windows XP [desktop apps only] - Minimum supported server: Windows Server 2003 [desktop apps only] - - - If the function succeeds, the return value is nonzero. - If the function fails, the return value is zero. To get extended error information, call GetLastError. - - - - Retrieves the final path for the specified file. - Minimum supported client: Windows Vista [desktop apps only]. - Minimum supported server: Windows Server 2008 [desktop apps only]. - - If the function succeeds, the return value is nonzero. If the function fails, the return value is zero. To get extended error - information, call GetLastError. - - - - - Checks whether the specified address is within a memory-mapped file in the address space of the specified process. If so, the - function returns the name of the memory-mapped file. - - Minimum supported client: Windows XP. - Minimum supported server: Windows Server 2003. - - If the function succeeds, the return value is nonzero. If the function fails, the return value is zero. To get extended error - information, call GetLastError. - - - - Locks the specified file for exclusive access by the calling process. - Minimum supported client: Windows XP. - Minimum supported server: Windows Server 2003. - - If the function succeeds, the return value is nonzero (TRUE). If the function fails, the return value is zero (FALSE). To get - extended error information, call GetLastError. - - - - Maps a view of a file mapping into the address space of a calling process. - Minimum supported client: Windows XP. - Minimum supported server: Windows Server 2003. - - If the function succeeds, the return value is the starting address of the mapped view. If the function fails, the return value is - . - - - - - Moves a file or directory, including its children. - You can provide a callback function that receives progress notifications. - - - The MoveFileWithProgress function coordinates its operation with the link tracking service, so link sources can be tracked as they are moved. - Minimum supported client: Windows XP [desktop apps only] - Minimum supported server: Windows Server 2003 [desktop apps only] - - Filename of the existing file. - Filename of the new file. - The progress routine. - The data. - The flags. - - If the function succeeds, the return value is nonzero. - If the function fails, the return value is zero. To get extended error information, call GetLastError. - - - - - Moves an existing file or a directory, including its children, as a transacted operation. - You can provide a callback function that receives progress notifications. - - - Minimum supported client: Windows Vista [desktop apps only] - Minimum supported server: Windows Server 2008 [desktop apps only] - - - If the function succeeds, the return value is nonzero. - If the function fails, the return value is zero. To get extended error information, call GetLastError. - - - - An application-defined callback function used with the CopyFileEx, MoveFileTransacted, and MoveFileWithProgress functions. - It is called when a portion of a copy or move operation is completed. - The LPPROGRESS_ROUTINE type defines a pointer to this callback function. - NativeCopyMoveProgressRoutine (NativeCopyMoveProgressRoutine) is a placeholder for the application-defined function name. - - - - Replaces one file with another file, with the option of creating a backup copy of the original file. The replacement file assumes the name of the replaced file and its identity. - - If the function succeeds, the return value is nonzero. - If the function fails, the return value is zero. To get extended error information, call GetLastError. - - Minimum supported client: Windows XP [desktop apps only] - Minimum supported server: Windows Server 2003 [desktop apps only] - - - Sets the attributes for a file or directory. - - If the function succeeds, the return value is nonzero. - If the function fails, the return value is zero. To get extended error information, call GetLastError. - - Minimum supported client: Windows XP - Minimum supported server: Windows Server 2003 - - - Sets the attributes for a file or directory as a transacted operation. - - If the function succeeds, the return value is nonzero. - If the function fails, the return value is zero. To get extended error information, call GetLastError. - - Minimum supported client: Windows Vista [desktop apps only] - Minimum supported server: Windows Server 2008 [desktop apps only] - - - Sets the date and time that the specified file or directory was created, last accessed, or last modified. - - If the function succeeds, the return value is nonzero. - If the function fails, the return value is zero. To get extended error information, call GetLastError. - - Minimum supported client: Windows XP [desktop apps only] - Minimum supported server: Windows Server 2003 [desktop apps only] - - - Unlocks a region in an open file. Unlocking a region enables other processes to access the region. - - If the function succeeds, the return value is nonzero. - If the function fails, the return value is zero. To get extended error information, call GetLastError. - - Minimum supported client: Windows XP - Minimum supported server: Windows Server 2003 - - - Unmaps a mapped view of a file from the calling process's address space. - Minimum supported client: Windows XP. - Minimum supported server: Windows Server 2003. - The base address. - - If the function succeeds, the return value is nonzero. If the function fails, the return value is zero. To get extended error - information, call GetLastError. - - - - - Retrieves information about the specified disk, including the amount of free space on the disk. - - - Symbolic link behavior: If the path points to a symbolic link, the operation is performed on the target. - If this parameter is a UNC name, it must include a trailing backslash (for example, "\\MyServer\MyShare\"). - Furthermore, a drive specification must have a trailing backslash (for example, "C:\"). - The calling application must have FILE_LIST_DIRECTORY access rights for this directory. - Minimum supported client: Windows XP [desktop apps only] - Minimum supported server: Windows Server 2003 [desktop apps only] - - Full pathname of the root file. - [out] The sectors per cluster. - [out] The bytes per sector. - [out] Number of free clusters. - [out] The total number of clusters. - - If the function succeeds, the return value is nonzero. - If the function fails, the return value is zero. To get extended error information, call GetLastError. - - - - - Retrieves information about the amount of space that is available on a disk volume, which is the total amount of space, - the total amount of free space, and the total amount of free space available to the user that is associated with the calling - thread. - - - Symbolic link behavior: If the path points to a symbolic link, the operation is performed on the target. - The GetDiskFreeSpaceEx function returns zero (0) for lpTotalNumberOfFreeBytes and lpFreeBytesAvailable - for all CD requests unless the disk is an unwritten CD in a CD-RW drive. - If this parameter is a UNC name, it must include a trailing backslash, for example, "\\MyServer\MyShare\". - This parameter does not have to specify the root directory on a disk. - The function accepts any directory on a disk. - The calling application must have FILE_LIST_DIRECTORY access rights for this directory. - Minimum supported client: Windows XP [desktop apps | Windows Store apps] - Minimum supported server: Windows Server 2003 [desktop apps | Windows Store apps] - - Pathname of the directory. - [out] The free bytes available. - [out] The total number of in bytes. - [out] The total number of free in bytes. - - If the function succeeds, the return value is nonzero. - If the function fails, the return value is zero (0). To get extended error information, call GetLastError. - - - - - Creates a new directory. - If the underlying file system supports security on files and directories, - the function applies a specified security descriptor to the new directory. - - - Some file systems, such as the NTFS file system, support compression or encryption for individual files and - directories. - On volumes formatted for such a file system, a new directory inherits the compression and encryption attributes of its parent - directory. - An application can obtain a handle to a directory by calling with the FILE_FLAG_BACKUP_SEMANTICS - flag set. - Minimum supported client: Windows XP [desktop apps | Windows Store apps] - Minimum supported server: Windows Server 2003 [desktop apps | Windows Store apps] - - Full pathname of the file. - The security attributes. - - If the function succeeds, the return value is nonzero. - If the function fails, the return value is zero. To get extended error information, call GetLastError. - - - - - Creates a new directory with the attributes of a specified template directory. - If the underlying file system supports security on files and directories, - the function applies a specified security descriptor to the new directory. - The new directory retains the other attributes of the specified template directory. - - - The CreateDirectoryEx function allows you to create directories that inherit stream information from other directories. - This function is useful, for example, when you are using Macintosh directories, which have a resource stream - that is needed to properly identify directory contents as an attribute. - Some file systems, such as the NTFS file system, support compression or encryption for individual files and - directories. - On volumes formatted for such a file system, a new directory inherits the compression and encryption attributes of its parent - directory. - You can obtain a handle to a directory by calling the function with the FILE_FLAG_BACKUP_SEMANTICS - flag set. - Minimum supported client: Windows XP [desktop apps only] - Minimum supported server: Windows Server 2003 [desktop apps only] - - Pathname of the template directory. - Full pathname of the file. - The security attributes. - - If the function succeeds, the return value is nonzero. - If the function fails, the return value is zero (0). To get extended error information, call GetLastError. - - - - - Creates a new directory as a transacted operation, with the attributes of a specified template directory. - If the underlying file system supports security on files and directories, - the function applies a specified security descriptor to the new directory. - The new directory retains the other attributes of the specified template directory. - - - The CreateDirectoryTransacted function allows you to create directories that inherit stream information from other - directories. - This function is useful, for example, when you are using Macintosh directories, which have a resource stream - that is needed to properly identify directory contents as an attribute. - Some file systems, such as the NTFS file system, support compression or encryption for individual files and - directories. - On volumes formatted for such a file system, a new directory inherits the compression and encryption attributes of its parent - directory. - You can obtain a handle to a directory by calling the function with the - FILE_FLAG_BACKUP_SEMANTICS flag set. - Minimum supported client: Windows XP [desktop apps only] - Minimum supported server: Windows Server 2003 [desktop apps only] - - Pathname of the template directory. - Pathname of the new directory. - The security attributes. - The transaction. - - If the function succeeds, the return value is nonzero. - If the function fails, the return value is zero (0). To get extended error information, call GetLastError. - This function fails with ERROR_EFS_NOT_ALLOWED_IN_TRANSACTION if you try to create a - child directory with a parent directory that has encryption disabled. - - - - - Retrieves the current directory for the current process. - - - The RemoveDirectory function marks a directory for deletion on close. - Therefore, the directory is not removed until the last handle to the directory is closed. - RemoveDirectory removes a directory junction, even if the contents of the target are not empty; - the function removes directory junctions regardless of the state of the target object. - Minimum supported client: Windows XP [desktop apps | Windows Store apps] - Minimum supported server: Windows Server 2003 [desktop apps | Windows Store apps] - - The length of the buffer for the current directory string, in TCHARs. The buffer length must include room for a terminating null character. - - A pointer to the buffer that receives the current directory string. This null-terminated string specifies the absolute path to the current directory. - To determine the required buffer size, set this parameter to NULL and the nBufferLength parameter to 0. - - - If the function succeeds, the return value specifies the number of characters that are written to the buffer, not including the terminating null character. - If the function fails, the return value is zero. To get extended error information, call GetLastError. - - - - - Deletes an existing empty directory. - - - The RemoveDirectory function marks a directory for deletion on close. - Therefore, the directory is not removed until the last handle to the directory is closed. - RemoveDirectory removes a directory junction, even if the contents of the target are not empty; - the function removes directory junctions regardless of the state of the target object. - Minimum supported client: Windows XP [desktop apps | Windows Store apps] - Minimum supported server: Windows Server 2003 [desktop apps | Windows Store apps] - - Full pathname of the file. - - If the function succeeds, the return value is nonzero. - If the function fails, the return value is zero. To get extended error information, call GetLastError. - - - - - Deletes an existing empty directory as a transacted operation. - - - The RemoveDirectoryTransacted function marks a directory for deletion on close. - Therefore, the directory is not removed until the last handle to the directory is closed. - RemoveDirectory removes a directory junction, even if the contents of the target are not empty; - the function removes directory junctions regardless of the state of the target object. - Minimum supported client: Windows Vista [desktop apps only] - Minimum supported server: Windows Server 2008 [desktop apps only] - - Full pathname of the file. - The transaction. - - If the function succeeds, the return value is nonzero. - If the function fails, the return value is zero. To get extended error information, call GetLastError. - - - - - Changes the current directory for the current process. - - - The path to the new current directory. This parameter may specify a relative path or a full path. In either case, the full path of the specified directory is calculated and stored as the current directory. - - - If the function succeeds, the return value is nonzero. - If the function fails, the return value is zero. To get extended error information, call GetLastError. - - - - The CM_Connect_Machine function creates a connection to a remote machine. - - Beginning in Windows 8 and Windows Server 2012 functionality to access remote machines has been removed. - You cannot access remote machines when running on these versions of Windows. - Available in Microsoft Windows 2000 and later versions of Windows. - - Name of the unc server. - [out] The ph machine. - - If the operation succeeds, the function returns CR_SUCCESS. - Otherwise, it returns one of the CR_-prefixed error codes defined in Cfgmgr32.h. - - - - - The CM_Get_Device_ID_Ex function retrieves the device instance ID for a specified device instance on a local or a remote machine. - - - Beginning in Windows 8 and Windows Server 2012 functionality to access remote machines has been removed. - You cannot access remote machines when running on these versions of Windows. -   - Available in Microsoft Windows 2000 and later versions of Windows. - - The dn development instance. - The buffer. - Length of the buffer. - The ul flags. - The machine. - - If the operation succeeds, the function returns CR_SUCCESS. - Otherwise, it returns one of the CR_-prefixed error codes defined in Cfgmgr32.h. - - - - - The CM_Disconnect_Machine function removes a connection to a remote machine. - - - Beginning in Windows 8 and Windows Server 2012 functionality to access remote machines has been removed. - You cannot access remote machines when running on these versions of Windows. - SetLastError is set to . - Available in Microsoft Windows 2000 and later versions of Windows. - - The machine. - - If the operation succeeds, the function returns CR_SUCCESS. - Otherwise, it returns one of the CR_-prefixed error codes defined in Cfgmgr32.h. - - - - - The CM_Get_Parent_Ex function obtains a device instance handle to the parent node of a specified device node (devnode) in a local - or a remote machine's device tree. - - - Beginning in Windows 8 and Windows Server 2012 functionality to access remote machines has been removed. - You cannot access remote machines when running on these versions of Windows. - Available in Microsoft Windows 2000 and later versions of Windows. - - [out] The pdn development instance. - The dn development instance. - The ul flags. - The machine. - - If the operation succeeds, the function returns CR_SUCCESS. - Otherwise, it returns one of the CR_-prefixed error codes defined in Cfgmgr32.h. - - - - Sends a control code directly to a specified device driver, causing the corresponding device to perform the corresponding operation. - - If the operation completes successfully, the return value is nonzero. - If the operation fails or is pending, the return value is zero. To get extended error information, call GetLastError. - - - To retrieve a handle to the device, you must call the function with either the name of a device or - the name of the driver associated with a device. - To specify a device name, use the following format: \\.\DeviceName - Minimum supported client: Windows XP - Minimum supported server: Windows Server 2003 - - The device. - The i/o control code. - Buffer for in data. - Size of the in buffer. - Buffer for out data. - Size of the out buffer. - [out] The bytes returned. - The overlapped. - - - Sends a control code directly to a specified device driver, causing the corresponding device to perform the corresponding operation. - - If the operation completes successfully, the return value is nonzero. - If the operation fails or is pending, the return value is zero. To get extended error information, call GetLastError. - - - To retrieve a handle to the device, you must call the function with either the name of a device or - the name of the driver associated with a device. - To specify a device name, use the following format: \\.\DeviceName - Minimum supported client: Windows XP - Minimum supported server: Windows Server 2003 - - The device. - The i/o control code. - Buffer for in data. - Size of the in buffer. - Buffer for out data. - Size of the out buffer. - [out] The bytes returned. - The overlapped. - - - - The SetupDiDestroyDeviceInfoList function deletes a device information set and frees all associated memory. - - - SetLastError is set to . - Available in Microsoft Windows 2000 and later versions of Windows. - - Information describing the development. - - The function returns TRUE if it is successful. - Otherwise, it returns FALSE and the logged error can be retrieved with a call to GetLastError. - - - - - The SetupDiEnumDeviceInterfaces function enumerates the device interfaces that are contained in a device information set. - - - Repeated calls to this function return an structure for a different device - interface. - This function can be called repeatedly to get information about interfaces in a device information set that are - associated - with a particular device information element or that are associated with all device information elements. - Available in Microsoft Windows 2000 and later versions of Windows. - - Information describing the development. - Information describing the development. - [in,out] Unique identifier for the interface class. - Zero-based index of the member. - [in,out] Information describing the device interface. - - SetupDiEnumDeviceInterfaces returns TRUE if the function completed without error. - If the function completed with an error, FALSE is returned and the error code for the failure can be retrieved by calling - GetLastError. - - - - - The SetupDiGetClassDevsEx function returns a handle to a device information set that contains requested device information elements - for a local or a remote computer. - - - The caller of SetupDiGetClassDevsEx must delete the returned device information set when it is no longer needed by calling - . - Available in Microsoft Windows 2000 and later versions of Windows. - - [in,out] Unique identifier for the class. - The enumerator. - The parent. - The devs ex flags. - Set the device information belongs to. - Name of the machine. - The reserved. - - If the operation succeeds, SetupDiGetClassDevsEx returns a handle to a device information set that contains all installed - devices that matched the supplied parameters. - If the operation fails, the function returns INVALID_HANDLE_VALUE. To get extended error information, call - GetLastError. - - - - - The SetupDiGetDeviceInterfaceDetail function returns details about a device interface. - - - The interface detail returned by this function consists of a device path that can be passed to Win32 functions such as - CreateFile. - Do not attempt to parse the device path symbolic name. The device path can be reused across system starts. - Available in Microsoft Windows 2000 and later versions of Windows. - - Information describing the development. - [in,out] Information describing the device interface. - [in,out] Information describing the device interface detail. - Size of the device interface detail data. - Size of the required. - [in,out] Information describing the device information. - - SetupDiGetDeviceInterfaceDetail returns TRUE if the function completed without error. - If the function completed with an error, FALSE is returned and the error code for the failure can be retrieved by calling - GetLastError. - - - - - The SetupDiGetDeviceRegistryProperty function retrieves a specified Plug and Play device property. - - Available in Microsoft Windows 2000 and later versions of Windows. - Set the device information belongs to. - [in,out] Information describing the device information. - The property. - [out] Type of the property register data. - Buffer for property data. - Size of the property buffer. - Size of the required. - - SetupDiGetDeviceRegistryProperty returns TRUE if the call was successful. - Otherwise, it returns FALSE and the logged error can be retrieved by making a call to GetLastError. - SetupDiGetDeviceRegistryProperty returns the ERROR_INVALID_DATA error code if the requested property does not exist for a - device or if the property data is not valid. - - - - The FindFirstFileEx function does not query the short file name, improving overall enumeration speed. -   - - The data is returned in a structure, - and cAlternateFileName member is always a NULL string. - This value is not supported until Windows Server 2008 R2 and Windows 7. - - - - - Uses a larger buffer for directory queries, which can increase performance of the find operation. - This value is not supported until Windows Server 2008 R2 and Windows 7. - - - DefaultFileBufferSize = 4096; Default type buffer size used for reading and writing files. - - - DefaultFileEncoding = Encoding.UTF8; Default type of Encoding used for reading and writing files. - - - MaxDirectoryLength = 255 - - - MaxPath = 260 - The specified path, file name, or both exceed the system-defined maximum length. - For example, on Windows-based platforms, paths must be less than 248 characters, and file names must be less than 260 characters. - - - - MaxPathUnicode = 32000 - - - When an exception is raised, bit shifting is needed to prevent: "System.OverflowException: Arithmetic operation resulted in an overflow." - - - The BackupRead function can be used to back up a file or directory, including the security information. - The function reads data associated with a specified file or directory into a buffer, - which can then be written to the backup medium using the WriteFile function. - - - This function is not intended for use in backing up files encrypted under the Encrypted File System. - Use ReadEncryptedFileRaw for that purpose. - Minimum supported client: Windows XP [desktop apps only] - Minimum supported server: Windows Server 2003 [desktop apps only] - - The file. - The buffer. - Number of bytes to reads. - [out] Number of bytes reads. - true to abort. - true to process security. - [out] The context. - - If the function succeeds, the return value is nonzero. - If the function fails, the return value is zero, indicating that an I/O error occurred. To get extended error information, - call GetLastError. - - - - The BackupSeek function seeks forward in a data stream initially accessed by using the or - function. - The function reads data associated with a specified file or directory into a buffer, which can then be written to the backup - medium using the WriteFile function. - - - Applications use the BackupSeek function to skip portions of a data stream that cause errors. - This function does not seek across stream headers. For example, this function cannot be used to skip the stream name. - If an application attempts to seek past the end of a substream, the function fails, the lpdwLowByteSeeked and - lpdwHighByteSeeked parameters - indicate the actual number of bytes the function seeks, and the file position is placed at the start of the next stream - header. -   - Minimum supported client: Windows XP [desktop apps only] - Minimum supported server: Windows Server 2003 [desktop apps only] - - The file. - The low bytes to seek. - The high bytes to seek. - [out] The lpdw low bytes seeked. - [out] The lpdw high bytes seeked. - [out] The context. - - If the function could seek the requested amount, the function returns a nonzero value. - If the function could not seek the requested amount, the function returns zero. To get extended error information, call - GetLastError. - - - - The BackupWrite function can be used to restore a file or directory that was backed up using . - Use the ReadFile function to get a stream of data from the backup medium, then use BackupWrite to write the data to the - specified file or directory. -   - - - This function is not intended for use in restoring files encrypted under the Encrypted File System. Use WriteEncryptedFileRaw - for that purpose. - Minimum supported client: Windows XP [desktop apps only] - Minimum supported server: Windows Server 2003 [desktop apps only] - - The file. - The buffer. - Number of bytes to writes. - [out] Number of bytes writtens. - true to abort. - true to process security. - [out] The context. - - If the function succeeds, the return value is nonzero. - If the function fails, the return value is zero, indicating that an I/O error occurred. To get extended error information, - call GetLastError. - - - - Check is the current handle is not null, not closed and not invalid. - The current handle to check. - will throw an , will not raise this exception.. - on success, otherwise. - - - - Check is the current handle is not null, not closed and not invalid. - The current handle to check. - The result of Marshal.GetLastWin32Error() - will throw an , will not raise this exception.. - on success, otherwise. - - - - - Controls whether the system will handle the specified types of serious errors or whether the process will handle them. - - - Because the error mode is set for the entire process, you must ensure that multi-threaded applications do not set different error- - mode attributes. Doing so can lead to inconsistent error handling. - - Minimum supported client: Windows XP [desktop apps only]. - Minimum supported server: Windows Server 2003 [desktop apps only]. - The mode. - The return value is the previous state of the error-mode bit attributes. - - - - Controls whether the system will handle the specified types of serious errors or whether the calling thread will handle them. - - - Because the error mode is set for the entire process, you must ensure that multi-threaded applications do not set different error- - mode attributes. Doing so can lead to inconsistent error handling. - - Minimum supported client: Windows 7 [desktop apps only]. - Minimum supported server: Windows Server 2008 R2 [desktop apps only]. - The new mode. - [out] The old mode. - The return value is the previous state of the error-mode bit attributes. - - - Retrieves the full path and file name of the specified file or directory. - If the function fails for any other reason, the return value is zero. To get extended error information, call GetLastError. - The GetFullPathName function is not recommended for multithreaded applications or shared library code. - Minimum supported client: Windows XP [desktop apps only] - Minimum supported server: Windows Server 2003 [desktop apps only] - - - Retrieves the full path and file name of the specified file or directory as a transacted operation. - If the function fails for any other reason, the return value is zero. To get extended error information, call GetLastError. - Minimum supported client: Windows Vista [desktop apps only] - Minimum supported server: Windows Server 2008 [desktop apps only] - - - Converts the specified path to its long form. - - If the function succeeds, the return value is nonzero. - If the function fails, the return value is zero. To get extended error information, call GetLastError. - - Minimum supported client: Windows XP [desktop apps only] - Minimum supported server: Windows Server 2003 [desktop apps only] - - - Converts the specified path to its long form as a transacted operation. - - If the function succeeds, the return value is nonzero. - If the function fails, the return value is zero. To get extended error information, call GetLastError. - - Minimum supported client: Windows Vista [desktop apps only] - Minimum supported server: Windows Server 2008 [desktop apps only] - - - Retrieves the short path form of the specified path. - - If the function succeeds, the return value is nonzero. - If the function fails, the return value is zero. To get extended error information, call GetLastError. - - Minimum supported client: Windows XP - Minimum supported server: Windows Server 2003 - - - Represents a wrapper class for a handle used by the SetupDiGetClassDevs/SetupDiDestroyDeviceInfoList Win32 API functions. - - - Initializes a new instance of the class. - - - Contains the basic information for a file. Used for file handles. - - Specifying -1 for , , or - indicates that operations on the current handle should not affect the given field. - (I.e, specifying -1 for will leave the unaffected by writes performed - on the current handle.) - - - - The time the file was created in format, - which is a 64-bit value representing the number of 100-nanosecond intervals since January 1, 1601 (UTC). - - - - The time the file was last accessed in format. - - - The time the file was last written to in format. - - - The time the file was changed in format. - - - The file attributes. - If this is set to 0 in a structure passed to SetFileInformationByHandle then none of the attributes are changed. - - - Contains information that the GetFileInformationByHandle function retrieves. - - - The file attributes. - - - A structure that specifies when a file or directory is created. - - - A structure. For a file, the structure specifies the last time that a file is read from or written to. - For a directory, the structure specifies when the directory is created. - For both files and directories, the specified date is correct, but the time of day is always set to midnight. - - - - A structure. For a file, the structure specifies the last time that a file is written to. - For a directory, the structure specifies when the directory is created. - - - The serial number of the volume that contains a file. - - - The high-order part of the file size. - - - The low-order part of the file size. - - - The number of links to this file. For the FAT file system this member is always 1. For the NTFS file system, it can be more than 1. - - - The high-order part of a unique identifier that is associated with a file. - - - The low-order part of a unique identifier that is associated with a file. - - - Controls whether the system will handle the specified types of serious errors or whether the process will handle them. - Minimum supported client: Windows 2000 Professional - Minimum supported server: Windows 2000 Server - - - ChangeErrorMode is for the Win32 SetThreadErrorMode() method, used to suppress possible pop-ups. - One of the values. - - - Contains information about files in the specified directory. Used for directory handles. Use only when calling GetFileInformationByHandleEx. - - The number of files that are returned for each call to GetFileInformationByHandleEx depends on the size of the buffer that is passed to the function. - Any subsequent calls to GetFileInformationByHandleEx on the same handle will resume the enumeration operation after the last file is returned. - - - - The offset for the next FILE_ID_BOTH_DIR_INFO structure that is returned. Contains zero (0) if no other entries follow this one. - - - The byte offset of the file within the parent directory. This member is undefined for file systems, such as NTFS, - in which the position of a file within the parent directory is not fixed and can be changed at any time to maintain sort order. - - - - The time that the file was created. - - - The time that the file was last accessed. - - - The time that the file was last written to. - - - The time that the file was last changed. - - - The absolute new end-of-file position as a byte offset from the start of the file to the end of the file. - Because this value is zero-based, it actually refers to the first free byte in the file. - In other words, EndOfFile is the offset to the byte that immediately follows the last valid byte in the file. - - - - The number of bytes that are allocated for the file. This value is usually a multiple of the sector or cluster size of the underlying physical device. - - - The file attributes. - - - The length of the file name. - - - The size of the extended attributes for the file. - - - The length of ShortName. - - - The short 8.3 file naming convention (for example, "FILENAME.TXT") name of the file. - - - The file ID. - - - The first character of the file name string. This is followed in memory by the remainder of the string. - - - Represents the number of 100-nanosecond intervals since January 1, 1601. This structure is a 64-bit value. - - - Converts a value to long. - - - Converts a value to long. - - - Determines whether the specified Object is equal to the current Object. - Another object to compare to. - if the specified Object is equal to the current Object; otherwise, . - - - Serves as a hash function for a particular type. - A hash code for the current Object. - - - Implements the operator == - A. - B. - The result of the operator. - - - Implements the operator != - A. - B. - The result of the operator. - - - An SP_DEVINFO_DATA structure defines a device instance that is a member of a device information set. - - - The size, in bytes, of the SP_DEVINFO_DATA structure. - - - The GUID of the device's setup class. - - - An opaque handle to the device instance (also known as a handle to the devnode). - - - Reserved. For internal use only. - - - An SP_DEVICE_INTERFACE_DATA structure defines a device interface in a device information set. - - - The size, in bytes, of the SP_DEVICE_INTERFACE_DATA structure. - - - The GUID for the class to which the device interface belongs. - - - Can be one or more of the following: SPINT_ACTIVE (1), SPINT_DEFAULT (2), SPINT_REMOVED (3). - - - Reserved. Do not use. - - - An SP_DEVICE_INTERFACE_DETAIL_DATA structure contains the path for a device interface. - - - The size, in bytes, of the SP_DEVICE_INTERFACE_DETAIL_DATA structure. - - - The device interface path. This path can be passed to Win32 functions such as CreateFile. - - - WIN32_FILE_ATTRIBUTE_DATA structure contains attribute information for a file or directory. The GetFileAttributesEx function uses this structure. - - Not all file systems can record creation and last access time, and not all file systems record them in the same manner. - For example, on the FAT file system, create time has a resolution of 10 milliseconds, write time has a resolution of 2 seconds, - and access time has a resolution of 1 day. On the NTFS file system, access time has a resolution of 1 hour. - For more information, see File Times. - - - - The file attributes of a file. - - - A structure that specifies when a file or directory was created. - If the underlying file system does not support creation time, this member is zero. - - - A structure. - For a file, the structure specifies when the file was last read from, written to, or for executable files, run. - For a directory, the structure specifies when the directory is created. If the underlying file system does not support last access time, this member is zero. - On the FAT file system, the specified date for both files and directories is correct, but the time of day is always set to midnight. - - - - A structure. - For a file, the structure specifies when the file was last written to, truncated, or overwritten, for example, when WriteFile or SetEndOfFile are used. - The date and time are not updated when file attributes or security descriptors are changed. - For a directory, the structure specifies when the directory is created. If the underlying file system does not support last write time, this member is zero. - - - - The high-order DWORD of the file size. This member does not have a meaning for directories. - This value is zero unless the file size is greater than MAXDWORD. - The size of the file is equal to (nFileSizeHigh * (MAXDWORD+1)) + nFileSizeLow. - - - - The low-order DWORD of the file size. This member does not have a meaning for directories. - - - The file size. - - - Contains information about the file that is found by the FindFirstFile, FindFirstFileEx, or FindNextFile function. - - If a file has a long file name, the complete name appears in the cFileName member, and the 8.3 format truncated version of the name appears - in the cAlternateFileName member. Otherwise, cAlternateFileName is empty. If the FindFirstFileEx function was called with a value of FindExInfoBasic - in the fInfoLevelId parameter, the cAlternateFileName member will always contain a string value. This remains true for all subsequent calls to the - FindNextFile function. As an alternative method of retrieving the 8.3 format version of a file name, you can use the GetShortPathName function. - For more information about file names, see File Names, Paths, and Namespaces. - - - Not all file systems can record creation and last access times, and not all file systems record them in the same manner. - For example, on the FAT file system, create time has a resolution of 10 milliseconds, write time has a resolution of 2 seconds, - and access time has a resolution of 1 day. The NTFS file system delays updates to the last access time for a file by up to 1 hour - after the last access. For more information, see File Times. - - - - The file attributes of a file. - - - A structure that specifies when a file or directory was created. - If the underlying file system does not support creation time, this member is zero. - - - A structure. - For a file, the structure specifies when the file was last read from, written to, or for executable files, run. - For a directory, the structure specifies when the directory is created. If the underlying file system does not support last access time, this member is zero. - On the FAT file system, the specified date for both files and directories is correct, but the time of day is always set to midnight. - - - - A structure. - For a file, the structure specifies when the file was last written to, truncated, or overwritten, for example, when WriteFile or SetEndOfFile are used. - The date and time are not updated when file attributes or security descriptors are changed. - For a directory, the structure specifies when the directory is created. If the underlying file system does not support last write time, this member is zero. - - - - The high-order DWORD of the file size. This member does not have a meaning for directories. - This value is zero unless the file size is greater than MAXDWORD. - The size of the file is equal to (nFileSizeHigh * (MAXDWORD+1)) + nFileSizeLow. - - - - The low-order DWORD of the file size. This member does not have a meaning for directories. - - - If the dwFileAttributes member includes the FILE_ATTRIBUTE_REPARSE_POINT attribute, this member specifies the reparse point tag. - Otherwise, this value is undefined and should not be used. - - - - Reserved for future use. - - - The name of the file. - - - An alternative name for the file. This name is in the classic 8.3 file name format. - - - Contains stream data. - - - Type of stream data. - - - Attributes of data to facilitate cross-operating system transfer. - - - Size of data, in bytes. - - - Length of the name of the alternative data stream, in bytes. - - - Defines, redefines, or deletes MS-DOS device names. - - If the function succeeds, the return value is nonzero. - If the function fails, the return value is zero. To get extended error information, call GetLastError. - - Minimum supported client: Windows XP [desktop apps only] - Minimum supported server: Windows Server 2003 [desktop apps only] - - - Deletes a drive letter or mounted folder. - - If the function succeeds, the return value is nonzero. - If the function fails, the return value is zero. To get extended error information, call GetLastError. - - Minimum supported client: Windows XP [desktop apps only] - Minimum supported server: Windows Server 2003 [desktop apps only] - - - Retrieves the name of a volume on a computer. FindFirstVolume is used to begin scanning the volumes of a computer. - - If the function succeeds, the return value is a search handle used in a subsequent call to the FindNextVolume and FindVolumeClose functions. - If the function fails to find any volumes, the return value is the INVALID_HANDLE_VALUE error code. To get extended error information, call GetLastError. - - Minimum supported client: Windows XP [desktop apps only] - Minimum supported server: Windows Server 2003 [desktop apps only] - - - Retrieves the name of a mounted folder on the specified volume. FindFirstVolumeMountPoint is used to begin scanning the mounted folders on a volume. - - If the function succeeds, the return value is a search handle used in a subsequent call to the FindNextVolumeMountPoint and FindVolumeMountPointClose functions. - If the function fails to find a mounted folder on the volume, the return value is the INVALID_HANDLE_VALUE error code. - - Minimum supported client: Windows XP [desktop apps only] - Minimum supported server: Windows Server 2003 [desktop apps only] - - - Continues a volume search started by a call to the FindFirstVolume function. FindNextVolume finds one volume per call. - - If the function succeeds, the return value is nonzero. - If the function fails, the return value is zero. To get extended error information, call GetLastError. - - Minimum supported client: Windows XP [desktop apps only] - Minimum supported server: Windows Server 2003 [desktop apps only] - - - Continues a mounted folder search started by a call to the FindFirstVolumeMountPoint function. FindNextVolumeMountPoint finds one mounted folder per call. - - If the function succeeds, the return value is nonzero. - If the function fails, the return value is zero. To get extended error information, call GetLastError. If no more mounted folders can be found, the GetLastError function returns the ERROR_NO_MORE_FILES error code. - In that case, close the search with the FindVolumeMountPointClose function. - - Minimum supported client: Windows XP - Minimum supported server: Windows Server 2003 - - - Closes the specified volume search handle. - - SetLastError is set to . - Minimum supported client: Windows XP [desktop apps only]. Minimum supported server: Windows Server 2003 [desktop apps only]. - - - If the function succeeds, the return value is nonzero. If the function fails, the return value is zero. To get extended error - information, call GetLastError. - - - - Closes the specified mounted folder search handle. - - SetLastError is set to . - Minimum supported client: Windows XP - Minimum supported server: Windows Server 2003 - - - If the function succeeds, the return value is nonzero. If the function fails, the return value is zero. To get extended error - information, call GetLastError. - - - - - Determines whether a disk drive is a removable, fixed, CD-ROM, RAM disk, or network drive. - To determine whether a drive is a USB-type drive, call and specify the - SPDRP_REMOVAL_POLICY property. - - - SMB does not support volume management functions. - Minimum supported client: Windows XP [desktop apps only] - Minimum supported server: Windows Server 2003 [desktop apps only] - - Full pathname of the root file. - - The return value specifies the type of drive, see . - If the function fails, the return value is zero. To get extended error information, call GetLastError. - - - - - Retrieves a bitmask representing the currently available disk drives. - - - SMB does not support volume management functions. - Minimum supported client: Windows XP [desktop apps only] - Minimum supported server: Windows Server 2003 [desktop apps only] - - - If the function succeeds, the return value is a bitmask representing the currently available disk drives. - Bit position 0 (the least-significant bit) is drive A, bit position 1 is drive B, bit position 2 is drive C, and so on. - If the function fails, the return value is zero. To get extended error information, call GetLastError. - - - - Retrieves information about the file system and volume associated with the specified root directory. - - If all the requested information is retrieved, the return value is nonzero. - If not all the requested information is retrieved, the return value is zero. - - Minimum supported client: Windows XP [desktop apps only] - Minimum supported server: Windows Server 2003 [desktop apps only] - "lpRootPathName" must end with a trailing backslash. - - - Retrieves information about the file system and volume associated with the specified file. - - If all the requested information is retrieved, the return value is nonzero. - If not all the requested information is retrieved, the return value is zero. To get extended error information, call GetLastError. - - To retrieve the current compression state of a file or directory, use FSCTL_GET_COMPRESSION. - SMB does not support volume management functions. - Minimum supported client: Windows Vista [desktop apps only] - Minimum supported server: Windows Server 2008 [desktop apps only] - - - Retrieves a volume GUID path for the volume that is associated with the specified volume mount point (drive letter, volume GUID path, or mounted folder). - - If the function succeeds, the return value is nonzero. - If the function fails, the return value is zero. To get extended error information, call GetLastError. - - Use GetVolumeNameForVolumeMountPoint to obtain a volume GUID path for use with functions such as SetVolumeMountPoint and FindFirstVolumeMountPoint that require a volume GUID path as an input parameter. - SMB does not support volume management functions. - Mount points aren't supported by ReFS volumes. - Minimum supported client: Windows XP [desktop apps only] - Minimum supported server: Windows Server 2003 [desktop apps only] - - - Retrieves the volume mount point where the specified path is mounted. - - If a specified path is passed, GetVolumePathName returns the path to the volume mount point, which means that it returns the - root of the volume where the end point of the specified path is located. - For example, assume that you have volume D mounted at C:\Mnt\Ddrive and volume E mounted at "C:\Mnt\Ddrive\Mnt\Edrive". Also - assume that you have a file with the path "E:\Dir\Subdir\MyFile". - If you pass "C:\Mnt\Ddrive\Mnt\Edrive\Dir\Subdir\MyFile" to GetVolumePathName, it returns the path "C:\Mnt\Ddrive\Mnt\Edrive\". - If a network share is specified, GetVolumePathName returns the shortest path for which GetDriveType returns DRIVE_REMOTE, - which means that the path is validated as a remote drive that exists, which the current user can access. - Minimum supported client: Windows XP [desktop apps only] - Minimum supported server: Windows Server 2003 [desktop apps only] - - - If the function succeeds, the return value is nonzero. - If the function fails, the return value is zero. To get extended error information, call GetLastError. - - - - Retrieves a list of drive letters and mounted folder paths for the specified volume. - Minimum supported client: Windows XP. - Minimum supported server: Windows Server 2003. - - If the function succeeds, the return value is nonzero. If the function fails, the return value is zero. To get extended error - information, call GetLastError. - - - - Sets the label of a file system volume. - Minimum supported client: Windows XP [desktop apps only]. - Minimum supported server: Windows Server 2003 [desktop apps only]. - "lpRootPathName" must end with a trailing backslash. - - If the function succeeds, the return value is nonzero. If the function fails, the return value is zero. To get extended error - information, call GetLastError. - - - - Associates a volume with a drive letter or a directory on another volume. - Minimum supported client: Windows XP [desktop apps only]. - Minimum supported server: Windows Server 2003 [desktop apps only]. - - If the function succeeds, the return value is nonzero. If the function fails, the return value is zero. To get extended error - information, call GetLastError. - - - - Retrieves information about MS-DOS device names. - Minimum supported client: Windows XP [desktop apps only]. - Minimum supported server: Windows Server 2003 [desktop apps only]. - - If the function succeeds, the return value is the number of TCHARs stored into the buffer pointed to by lpTargetPath. If the - function fails, the return value is zero. To get extended error information, call GetLastError. If the buffer is too small, the - function fails and the last error code is ERROR_INSUFFICIENT_BUFFER. - - - - Indicates the format of a path passed to a method. - - At some point in code you know the full path of file system objects, e.g.: "C:\Windows". - For example, Directory.EnumerateFileSystemEntries() will return all files and directories from a given path. - Most likely, some processing will happen on the results of the enum. The file or directory may be passed - on to another function. Whenever a file path is required, some performance can be gained. -   - A path like: "C:\Windows" or "\\server\share" is considered a full path for a directory because it is rooted and has a drive/unc path. - If the method supports it, and will skip GetFullPath() - calls for path resolving of the object, while also avoiding path validation and checks. - Using (default) will always call GetFullPath() and perform path validation and checks. -   - When working in a loop with thousands of files, will give the best performance. - - - - The format of the path is automatically detected by the method and internally converted to an extended length path. - It can be either a standard (short) full path, an extended length (unicode) full path or a relative path. - Example relative path: "Windows". - - - - The path is a full path in either normal or extended length (UNICODE) format. - Internally it will be converted to an extended length (UNICODE) path. - Using this option has a very slight performance advantage compared to using . - Example full path: "C:\Windows" or "\\server\share". - - - - The path is an extended length path. No additional processing will be done on the path, and it will be used as is. - Using this option has a slight performance advantage compared to using . - Example long full path: "\\?\C:\Windows" or "\\?\UNC\server\share". - - - - The exception that is thrown when an attempt to create a directory or file that already exists was made. - - - Initializes a new instance of the class. - - - Initializes a new instance of the class. - The message. - - - Initializes a new instance of the class. - The message. - The inner exception. - - - Initializes a new instance of the class. - The data for serializing or deserializing the object. - The source and destination for the object. - - - The requested operation could not be completed because the device was not ready. - - - Initializes a new instance of the class. - - - Initializes a new instance of the class. - The message. - - - Initializes a new instance of the class. - The message. - The inner exception. - - - Initializes a new instance of the class. - The data for serializing or deserializing the object. - The source and destination for the object. - - - The operation could not be completed because the directory is read-only. - - - Initializes a new instance of the class. - - - Initializes a new instance of the class. - The message. - - - Initializes a new instance of the class. - The message. - The inner exception. - - - Initializes a new instance of the class. - The data for serializing or deserializing the object. - The source and destination for the object. - - - The operation could not be completed because the directory was not empty. - - - Initializes a new instance of the class. - - - Initializes a new instance of the class. - The message. - - - Initializes a new instance of the class. - The message. - The inner exception. - - - Initializes a new instance of the class. - The data for serializing or deserializing the object. - The source and destination for the object. - - - The operation could not be completed because the file is read-only. - - - Initializes a new instance of the class. - - - Initializes a new instance of the class. - The message. - - - Initializes a new instance of the class. - The message. - The inner exception. - - - Initializes a new instance of the class. - The data for serializing or deserializing the object. - The source and destination for the object. - - - Provides static methods for the creation, copying, deletion, moving, and opening of files, and aids in the creation of objects. - This class cannot be inherited. - - - - [AlphaFS] Calculates the hash/checksum for the given . - The name of the file. - One of the values. - - - [AlphaFS] Calculates the hash/checksum for the given . - The name of the file. - One of the values. - Indicates the format of the path parameter(s). - - - [AlphaFS] Calculates the hash/checksum for the given . - The transaction. - The name of the file. - One of the values. - - - [AlphaFS] Calculates the hash/checksum for the given . - The transaction. - The name of the file. - One of the values. - Indicates the format of the path parameter(s). - - - [AlphaFS] Calculates the hash/checksum for the given . - The transaction. - One of the values. - The name of the file. - Indicates the format of the path parameter(s). - - - [AlphaFS] Backs up (export) encrypted files. This is one of a group of Encrypted File System (EFS) functions that is - intended to implement backup and restore functionality, while maintaining files in their encrypted state. - - - The file being backed up is not decrypted; it is backed up in its encrypted state. - - - If the caller does not have access to the key for the file, the caller needs - to export encrypted files. See - . - - - To backup an encrypted file call one of the - overloads and specify the file to backup - along with the destination stream of the backup data. - - - This function is intended for the backup of only encrypted files; see for backup - of unencrypted files. - - - The name of the file to be backed up. - The destination stream to which the backup data will be written. - - - - [AlphaFS] Backs up (export) encrypted files. This is one of a group of Encrypted File System (EFS) functions that is - intended to implement backup and restore functionality, while maintaining files in their encrypted state. - - - The file being backed up is not decrypted; it is backed up in its encrypted state. - - - If the caller does not have access to the key for the file, the caller needs - to export encrypted files. See - . - - - To backup an encrypted file call one of the - overloads and specify the file to backup - along with the destination stream of the backup data. - - - This function is intended for the backup of only encrypted files; see for backup - of unencrypted files. - - - The name of the file to be backed up. - The destination stream to which the backup data will be written. - The path format of the parameter. - - - - [AlphaFS] Restores (import) encrypted files. This is one of a group of Encrypted File System (EFS) functions that is - intended to implement backup and restore functionality, while maintaining files in their encrypted state. - - - If the caller does not have access to the key for the file, the caller needs - to restore encrypted files. See - . - - - To restore an encrypted file call one of the - overloads and specify the file to restore - along with the destination stream of the restored data. - - - This function is intended for the restoration of only encrypted files; see for - backup of unencrypted files. - - - The stream to read previously backed up data from. - The path of the destination file to restore to. - - - - [AlphaFS] Restores (import) encrypted files. This is one of a group of Encrypted File System (EFS) functions that is - intended to implement backup and restore functionality, while maintaining files in their encrypted state. - - - If the caller does not have access to the key for the file, the caller needs - to restore encrypted files. See - . - - - To restore an encrypted file call one of the - overloads and specify the file to restore - along with the destination stream of the restored data. - - - This function is intended for the restoration of only encrypted files; see for - backup of unencrypted files. - - - The stream to read previously backed up data from. - The path of the destination file to restore to. - The path format of the parameter. - - - - [AlphaFS] Restores (import) encrypted files. This is one of a group of Encrypted File System (EFS) functions that is - intended to implement backup and restore functionality, while maintaining files in their encrypted state. - - - If the caller does not have access to the key for the file, the caller needs - to restore encrypted files. See - . - - - To restore an encrypted file call one of the - overloads and specify the file to restore - along with the destination stream of the restored data. - - - This function is intended for the restoration of only encrypted files; see for - backup of unencrypted files. - - - The stream to read previously backed up data from. - The path of the destination file to restore to. - If set to a hidden file will be overwritten on import. - - - - [AlphaFS] Restores (import) encrypted files. This is one of a group of Encrypted File System (EFS) functions that is - intended to implement backup and restore functionality, while maintaining files in their encrypted state. - - - If the caller does not have access to the key for the file, the caller needs - to restore encrypted files. See - . - - - To restore an encrypted file call one of the - overloads and specify the file to restore - along with the destination stream of the restored data. - - - This function is intended for the restoration of only encrypted files; see for - backup of unencrypted files. - - - The stream to read previously backed up data from. - The path of the destination file to restore to. - If set to a hidden file will be overwritten on import. - The path format of the parameter. - - - - [AlphaFS] Enumerates the streams of type :$DATA from the specified file. - The path to the file to enumerate streams of. - The streams of type :$DATA in the specified file. - - - [AlphaFS] Enumerates the streams of type :$DATA from the specified file. - The path to the file to enumerate streams of. - Indicates the format of the path parameter(s). - The streams of type :$DATA in the specified file. - - - [AlphaFS] Enumerates the streams of type :$DATA from the specified file. - The transaction. - The path to the file to enumerate streams of. - The streams of type :$DATA in the specified file. - - - [AlphaFS] Enumerates the streams of type :$DATA from the specified file. - The transaction. - The path to the file to enumerate streams of. - Indicates the format of the path parameter(s). - The streams of type :$DATA in the specified file. - - - [AlphaFS] Enumerates the streams of type :$DATA from the specified file or directory. - The transaction. - The path to the file or directory to enumerate streams of. - Indicates the format of the path parameter(s). - The streams of type :$DATA in the specified file or directory. - - - [AlphaFS] Creates an enumeration of all the hard links to the specified . - The name of the file. - Indicates the format of the path parameter(s). - An enumerable collection of of all the hard links to the specified - - - [AlphaFS] Creates an enumeration of all the hard links to the specified . - The name of the file. - An enumerable collection of of all the hard links to the specified - - - [AlphaFS] Creates an enumeration of all the hard links to the specified . - The transaction. - The name of the file. - Indicates the format of the path parameter(s). - An enumerable collection of of all the hard links to the specified - - - [AlphaFS] Creates an enumeration of all the hard links to the specified . - The transaction. - The name of the file. - An enumerable collection of of all the hard links to the specified - - - [AlphaFS] Creates an enumeration of all the hard links to the specified . - - The transaction. - The name of the file. - Indicates the format of the path parameter(s). - An enumerable collection of of all the hard links to the specified - - - [AlphaFS] Creates a symbolic link. - See to run this method in an elevated state. - The name of the target for the symbolic link to be created. - The symbolic link to be created. - Indicates whether the link target, , is a file or directory. - Indicates the format of the path parameter(s). - - Several Exceptions possible. - - - [AlphaFS] Creates a symbolic link. - See to run this method in an elevated state. - The name of the target for the symbolic link to be created. - The symbolic link to be created. - Indicates whether the link target, , is a file or directory. - - Several Exceptions possible. - - - [AlphaFS] Creates a symbolic link. - See to run this method in an elevated state. - The transaction. - The name of the target for the symbolic link to be created. - The symbolic link to be created. - Indicates whether the link target, , is a file or directory. - Indicates the format of the path parameter(s). - - Several Exceptions possible. - - - [AlphaFS] Creates a symbolic link. - See to run this method in an elevated state. - The transaction. - The name of the target for the symbolic link to be created. - The symbolic link to be created. - Indicates whether the link target, , is a file or directory. - - Several Exceptions possible. - - - Creates a symbolic link. - See to run this method in an elevated state. - The transaction. - The name of the target for the symbolic link to be created. - The symbolic link to be created. - Indicates whether the link target, , is a file or directory. - Indicates the format of the path parameter(s). - - Several Exceptions possible. - - - [AlphaFS] Establishes a hard link between an existing file and a new file. This function is only supported on the NTFS file system, and only for files, not directories. - The name of the new file. This parameter cannot specify the name of a directory. - The name of the existing file. This parameter cannot specify the name of a directory. - Indicates the format of the path parameter(s). - - - [AlphaFS] Establishes a hard link between an existing file and a new file. This function is only supported on the NTFS file system, and only for files, not directories. - The name of the new file. This parameter cannot specify the name of a directory. - The name of the existing file. This parameter cannot specify the name of a directory. - - - - [AlphaFS] Establishes a hard link between an existing file and a new file. This function is only supported on the NTFS file system, - and only for files, not directories. - - The transaction. - The name of the new file. This parameter cannot specify the name of a directory. - The name of the existing file. This parameter cannot specify the name of a directory. - Indicates the format of the path parameter(s). - - - - [AlphaFS] Establishes a hard link between an existing file and a new file. This function is only supported on the NTFS file system, - and only for files, not directories. - - The transaction. - The name of the new file. This parameter cannot specify the name of a directory. - The name of the existing file. This parameter cannot specify the name of a directory. - - - Establish a hard link between an existing file and a new file. This function - is only supported on the NTFS file system, and only for files, not directories. - - - The transaction. - The name of the new file. This parameter cannot specify the name of a directory. - The name of the existing file. This parameter cannot specify the name of a directory. - Indicates the format of the path parameter(s). - - - [AlphaFS] Compresses a file using NTFS compression. - A path that describes a file to compress. - Indicates the format of the path parameter(s). - - - [AlphaFS] Compresses a file using NTFS compression. - A path that describes a file to compress. - - - [AlphaFS] Compresses a file using NTFS compression. - The transaction. - A path that describes a file to compress. - Indicates the format of the path parameter(s). - - - [AlphaFS] Compresses a file using NTFS compression. - The transaction. - A path that describes a file to compress. - - - [AlphaFS] Decompresses an NTFS compressed file. - A path that describes a file to decompress. - Indicates the format of the path parameter(s). - - - [AlphaFS] Decompresses an NTFS compressed file. - A path that describes a file to decompress. - - - [AlphaFS] Decompresses an NTFS compressed file. - The transaction. - A path that describes a file to decompress. - Indicates the format of the path parameter(s). - - - [AlphaFS] Decompresses an NTFS compressed file. - The transaction. - A path that describes a file to decompress. - - - Deletes the specified file. - If the file to be deleted does not exist, no exception is thrown. - - The name of the file to be deleted. Wildcard characters are not supported. - - - - - - - - [AlphaFS] Deletes the specified file. - If the file to be deleted does not exist, no exception is thrown. - - The name of the file to be deleted. Wildcard characters are not supported. - - - overrides the read only of the file. - - Indicates the format of the path parameter(s). - - - - - - - [AlphaFS] Deletes the specified file. - If the file to be deleted does not exist, no exception is thrown. - - The name of the file to be deleted. Wildcard characters are not supported. - - - overrides the read only of the file. - - - - - - - - [AlphaFS] Deletes the specified file. - If the file to be deleted does not exist, no exception is thrown. - The transaction. - - The name of the file to be deleted. Wildcard characters are not supported. - - - - - - - - [AlphaFS] Deletes the specified file. - The transaction. - The name of the file to be deleted. Wildcard characters are not supported. - overrides the read only of the file. - Indicates the format of the path parameter(s). - If the file to be deleted does not exist, no exception is thrown. - - - - - - - [AlphaFS] Deletes the specified file. - The transaction. - The name of the file to be deleted. Wildcard characters are not supported. - overrides the read only of the file. - If the file to be deleted does not exist, no exception is thrown. - - - - - - - Deletes a Non-/Transacted file. - If the file to be deleted does not exist, no exception is thrown. - - - - - The transaction. - The name of the file to be deleted. - overrides the read only of the file. - Indicates the format of the path parameter(s). - - - Decrypts a file that was encrypted by the current account using the Encrypt method. - A path that describes a file to decrypt. - - - [AlphaFS] Decrypts a file that was encrypted by the current account using the Encrypt method. - A path that describes a file to decrypt. - Indicates the format of the path parameter(s). - - - Encrypts a file so that only the account used to encrypt the file can decrypt it. - A path that describes a file to encrypt. - - - [AlphaFS] Encrypts a file so that only the account used to encrypt the file can decrypt it. - A path that describes a file to encrypt. - Indicates the format of the path parameter(s). - - - Decrypts/encrypts a file or directory so that only the account used to encrypt the file can decrypt it. - - Specifies that is a file or directory. - A path that describes a file to encrypt. - encrypt, decrypt. - Indicates the format of the path parameter(s). - - - Creates or opens a file for writing UTF-8 encoded text. - The file to be opened for writing. - A StreamWriter that writes to the specified file using UTF-8 encoding. - - - [AlphaFS] Creates or opens a file for writing UTF-8 encoded text. - The file to be opened for writing. - Indicates the format of the path parameter(s). - A StreamWriter that writes to the specified file using UTF-8 encoding. - - - [AlphaFS] Creates or opens a file for writing encoded text. - The file to be opened for writing. - The encoding that is applied to the contents of the file. - Indicates the format of the path parameter(s). - A StreamWriter that writes to the specified file using UTF-8 encoding. - - - [AlphaFS] Creates or opens a file for writing UTF-8 encoded text. - The transaction. - The file to be opened for writing. - A StreamWriter that writes to the specified file using UTF-8 encoding. - - - [AlphaFS] Creates or opens a file for writing encoded text. - The transaction. - The file to be opened for writing. - The encoding that is applied to the contents of the file. - Indicates the format of the path parameter(s). - A StreamWriter that writes to the specified file using UTF-8 encoding. - - - Creates or opens a file for writing encoded text. - The transaction. - The file to be opened for writing. - The applied to the contents of the file. - Indicates the format of the path parameter(s). - A that writes to the specified file using NativeMethods.DefaultFileBufferSize encoding. - - - Copies an existing file to a new file. Overwriting a file of the same name is not allowed. - - The attributes of the original file are retained in the copied file. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - - - - - - - The file to copy. - The name of the destination file. This cannot be a directory or an existing file. - - - Copies an existing file to a new file. Overwriting a file of the same name is allowed. - - The attributes of the original file are retained in the copied file. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - - - - - - - The file to copy. - The name of the destination file. This cannot be a directory. - if the destination file should ignoring the read-only and hidden attributes and overwrite; otherwise, . - - - [AlphaFS] Copies an existing file to a new file. Overwriting a file of the same name is not allowed. - - The attributes of the original file are retained in the copied file. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - - - - - - - The file to copy. - The name of the destination file. This cannot be a directory. - Indicates the format of the path parameter(s). - - - [AlphaFS] Copies an existing file to a new file. Overwriting a file of the same name is allowed. - - The attributes of the original file are retained in the copied file. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - - - - - - - The file to copy. - The name of the destination file. This cannot be a directory. - if the destination file should ignoring the read-only and hidden attributes and overwrite; otherwise, . - Indicates the format of the path parameter(s). - - - [AlphaFS] Copies an existing file to a new file. Overwriting a file of the same name is not allowed. - - The attributes of the original file are retained in the copied file. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - - - - - - - The transaction. - The file to copy. - The name of the destination file. This cannot be a directory or an existing file. - - - [AlphaFS] Copies an existing file to a new file. Overwriting a file of the same name is not allowed. - - The attributes of the original file are retained in the copied file. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - - - - - - - The transaction. - The file to copy. - The name of the destination file. This cannot be a directory. - Indicates the format of the path parameter(s). - - - [AlphaFS] Copies an existing file to a new file. Overwriting a file of the same name is allowed. - - The attributes of the original file are retained in the copied file. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - - - - - - - The transaction. - The file to copy. - The name of the destination file. This cannot be a directory. - if the destination file should ignoring the read-only and hidden attributes and overwrite; otherwise, . - - - [AlphaFS] Copies an existing file to a new file. Overwriting a file of the same name is allowed. - - The attributes of the original file are retained in the copied file. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - - - - - - - The transaction. - The file to copy. - The name of the destination file. This cannot be a directory. - if the destination file should ignoring the read-only and hidden attributes and overwrite; otherwise, . - Indicates the format of the path parameter(s). - - - [AlphaFS] Copies an existing file to a new file. Overwriting a file of the same name is allowed. can be specified. - - Option is recommended for very large file transfers. - The attributes of the original file are retained in the copied file. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - - - - - - - The file to copy. - The name of the destination file. This cannot be a directory. - that specify how the file is to be copied. This parameter can be . - - - [AlphaFS] Copies an existing file to a new file. Overwriting a file of the same name is allowed. can be specified. - - Option is recommended for very large file transfers. - The attributes of the original file are retained in the copied file. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - - - - - - - The file to copy. - The name of the destination file. This cannot be a directory. - that specify how the file is to be copied. This parameter can be . - Indicates the format of the path parameter(s). - - - [AlphaFS] Copies an existing file to a new file. Overwriting a file of the same name is allowed. can be specified. - - Option is recommended for very large file transfers. - The attributes of the original file are retained in the copied file. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - - - - - - - The file to copy. - The name of the destination file. This cannot be a directory. - that specify how the file is to be copied. This parameter can be . - if original Timestamps must be preserved, otherwise. - - - [AlphaFS] Copies an existing file to a new file. Overwriting a file of the same name is allowed. can be specified. - - Option is recommended for very large file transfers. - The attributes of the original file are retained in the copied file. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - - - - - - - The file to copy. - The name of the destination file. This cannot be a directory. - that specify how the file is to be copied. This parameter can be . - if original Timestamps must be preserved, otherwise. - Indicates the format of the path parameter(s). - - - [AlphaFS] Copies an existing file to a new file. Overwriting a file of the same name is allowed. can be specified, - and the possibility of notifying the application of its progress through a callback function. - - A class with details of the Copy action. - - Option is recommended for very large file transfers. - The attributes of the original file are retained in the copied file. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - - - - - - - The file to copy. - The name of the destination file. This cannot be a directory. - that specify how the file is to be copied. This parameter can be . - A callback function that is called each time another portion of the file has been copied. This parameter can be . - The argument to be passed to the callback function. This parameter can be . - - - [AlphaFS] Copies an existing file to a new file. Overwriting a file of the same name is allowed. can be specified, - and the possibility of notifying the application of its progress through a callback function. - - A class with details of the Copy action. - - Option is recommended for very large file transfers. - The attributes of the original file are retained in the copied file. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - - - - - - - The file to copy. - The name of the destination file. This cannot be a directory. - that specify how the file is to be copied. This parameter can be . - A callback function that is called each time another portion of the file has been copied. This parameter can be . - The argument to be passed to the callback function. This parameter can be . - Indicates the format of the path parameter(s). - - - [AlphaFS] Copies an existing file to a new file. Overwriting a file of the same name is allowed. can be specified, - and the possibility of notifying the application of its progress through a callback function. - - A class with details of the Copy action. - - Option is recommended for very large file transfers. - The attributes of the original file are retained in the copied file. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - - - - - - - The file to copy. - The name of the destination file. This cannot be a directory. - that specify how the file is to be copied. This parameter can be . - if original Timestamps must be preserved, otherwise. - A callback function that is called each time another portion of the file has been copied. This parameter can be . - The argument to be passed to the callback function. This parameter can be . - - - [AlphaFS] Copies an existing file to a new file. Overwriting a file of the same name is allowed. can be specified, - and the possibility of notifying the application of its progress through a callback function. - - A class with details of the Copy action. - - Option is recommended for very large file transfers. - The attributes of the original file are retained in the copied file. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - - - - - - - The file to copy. - The name of the destination file. This cannot be a directory. - that specify how the file is to be copied. This parameter can be . - if original Timestamps must be preserved, otherwise. - A callback function that is called each time another portion of the file has been copied. This parameter can be . - The argument to be passed to the callback function. This parameter can be . - Indicates the format of the path parameter(s). - - - [AlphaFS] Copies an existing file to a new file. Overwriting a file of the same name is allowed. can be specified. - - Option is recommended for very large file transfers. - The attributes of the original file are retained in the copied file. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - - - - - - - The transaction. - The file to copy. - The name of the destination file. This cannot be a directory. - that specify how the file is to be copied. This parameter can be . - - - [AlphaFS] Copies an existing file to a new file. Overwriting a file of the same name is allowed. can be specified. - - Option is recommended for very large file transfers. - The attributes of the original file are retained in the copied file. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - - - - - - - The transaction. - The file to copy. - The name of the destination file. This cannot be a directory. - that specify how the file is to be copied. This parameter can be . - Indicates the format of the path parameter(s). - - - [AlphaFS] Copies an existing file to a new file. Overwriting a file of the same name is allowed. can be specified. - - Option is recommended for very large file transfers. - The attributes of the original file are retained in the copied file. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - - - - - - - The transaction. - The file to copy. - The name of the destination file. This cannot be a directory. - that specify how the file is to be copied. This parameter can be . - if original Timestamps must be preserved, otherwise. - - - [AlphaFS] Copies an existing file to a new file. Overwriting a file of the same name is allowed. can be specified. - - Option is recommended for very large file transfers. - The attributes of the original file are retained in the copied file. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - - - - - - - The transaction. - The file to copy. - The name of the destination file. This cannot be a directory. - that specify how the file is to be copied. This parameter can be . - if original Timestamps must be preserved, otherwise. - Indicates the format of the path parameter(s). - - - [AlphaFS] Copies an existing file to a new file. Overwriting a file of the same name is allowed. can be specified, - and the possibility of notifying the application of its progress through a callback function. - - A class with details of the Copy action. - - Option is recommended for very large file transfers. - The attributes of the original file are retained in the copied file. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - - - - - - - The transaction. - The file to copy. - The name of the destination file. This cannot be a directory. - that specify how the file is to be copied. This parameter can be . - A callback function that is called each time another portion of the file has been copied. This parameter can be . - The argument to be passed to the callback function. This parameter can be . - - - [AlphaFS] Copies an existing file to a new file. Overwriting a file of the same name is allowed. can be specified, - and the possibility of notifying the application of its progress through a callback function. - - A class with details of the Copy action. - - Option is recommended for very large file transfers. - The attributes of the original file are retained in the copied file. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - - - - - - - The transaction. - The file to copy. - The name of the destination file. This cannot be a directory. - that specify how the file is to be copied. This parameter can be . - A callback function that is called each time another portion of the file has been copied. This parameter can be . - The argument to be passed to the callback function. This parameter can be . - Indicates the format of the path parameter(s). - - - [AlphaFS] Copies an existing file to a new file. Overwriting a file of the same name is allowed. can be specified, - and the possibility of notifying the application of its progress through a callback function. - - A class with details of the Copy action. - - Option is recommended for very large file transfers. - The attributes of the original file are retained in the copied file. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - - - - - - - The transaction. - The file to copy. - The name of the destination file. This cannot be a directory. - that specify how the file is to be copied. This parameter can be . - if original Timestamps must be preserved, otherwise. - A callback function that is called each time another portion of the file has been copied. This parameter can be . - The argument to be passed to the callback function. This parameter can be . - - - [AlphaFS] Copies an existing file to a new file. Overwriting a file of the same name is allowed. can be specified, - and the possibility of notifying the application of its progress through a callback function. - - A class with details of the Copy action. - - Option is recommended for very large file transfers. - The attributes of the original file are retained in the copied file. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - The transaction. - The file to copy. - The name of the destination file. This cannot be a directory. - that specify how the file is to be copied. This parameter can be . - if original Timestamps must be preserved, otherwise. - A callback function that is called each time another portion of the file has been copied. This parameter can be . - The argument to be passed to the callback function. This parameter can be . - Indicates the format of the path parameter(s). - - - - - - - - - - Moves a specified file to a new location, providing the option to specify a new file name. - - This method works across disk volumes, and it does not throw an exception if the source and destination are the same. - Note that if you attempt to replace a file by moving a file of the same name into that directory, you get an . - You cannot use the Move method to overwrite an existing file. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - - - - - - - The name of the file to move. - The new path for the file. - - - [AlphaFS] Moves a specified file to a new location, providing the option to specify a new file name. - - This method works across disk volumes, and it does not throw an exception if the source and destination are the same. - Note that if you attempt to replace a file by moving a file of the same name into that directory, you get an . - You cannot use the Move method to overwrite an existing file. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - - - - - - - The name of the file to move. - The new path for the file. - Indicates the format of the path parameter(s). - - - [AlphaFS] Moves a specified file to a new location, providing the option to specify a new file name. - - This method works across disk volumes, and it does not throw an exception if the source and destination are the same. - Note that if you attempt to replace a file by moving a file of the same name into that directory, you get an . - You cannot use the Move method to overwrite an existing file. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - - - - - - - The transaction. - The name of the file to move. - The new path for the file. - - - [AlphaFS] Moves a specified file to a new location, providing the option to specify a new file name. - - This method works across disk volumes, and it does not throw an exception if the source and destination are the same. - Note that if you attempt to replace a file by moving a file of the same name into that directory, you get an . - You cannot use the Move method to overwrite an existing file. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - - - - - - - The transaction. - The name of the file to move. - The new path for the file. - Indicates the format of the path parameter(s). - - - [AlphaFS] Moves a specified file to a new location, providing the option to specify a new file name. - - This method works across disk volumes, and it does not throw an exception if the source and destination are the same. - Note that if you attempt to replace a file by moving a file of the same name into that directory, you get an . - You cannot use the Move method to overwrite an existing file. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - - - - - - - The name of the file to move. - The new path for the file. - that specify how the file is to be moved. This parameter can be . - - - [AlphaFS] Moves a specified file to a new location, providing the option to specify a new file name. - - This method works across disk volumes, and it does not throw an exception if the source and destination are the same. - Note that if you attempt to replace a file by moving a file of the same name into that directory, you get an . - You cannot use the Move method to overwrite an existing file. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - - - - - - - The name of the file to move. - The new path for the file. - that specify how the file is to be moved. This parameter can be . - Indicates the format of the path parameter(s). - - - [AlphaFS] Moves a specified file to a new location, providing the option to specify a new file name. - A class with the status of the Move action. - - This method works across disk volumes, and it does not throw an exception if the source and destination are the same. - Note that if you attempt to replace a file by moving a file of the same name into that directory, you get an . - You cannot use the Move method to overwrite an existing file. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - - - - - - - The name of the file to move. - The new path for the file. - that specify how the file is to be moved. This parameter can be . - A callback function that is called each time another portion of the file has been moved. This parameter can be . - The argument to be passed to the callback function. This parameter can be . - - - [AlphaFS] Moves a specified file to a new location, providing the option to specify a new file name. - A class with the status of the Move action. - - This method works across disk volumes, and it does not throw an exception if the source and destination are the same. - Note that if you attempt to replace a file by moving a file of the same name into that directory, you get an . - You cannot use the Move method to overwrite an existing file. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - - - - - - - The name of the file to move. - The new path for the file. - that specify how the file is to be moved. This parameter can be . - A callback function that is called each time another portion of the file has been moved. This parameter can be . - The argument to be passed to the callback function. This parameter can be . - Indicates the format of the path parameter(s). - - - [AlphaFS] Moves a specified file to a new location, providing the option to specify a new file name. - - This method works across disk volumes, and it does not throw an exception if the source and destination are the same. - Note that if you attempt to replace a file by moving a file of the same name into that directory, you get an . - You cannot use the Move method to overwrite an existing file. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - - - - - - - The transaction. - The name of the file to move. - The new path for the file. - that specify how the file is to be moved. This parameter can be . - - - [AlphaFS] Moves a specified file to a new location, providing the option to specify a new file name. - - This method works across disk volumes, and it does not throw an exception if the source and destination are the same. - Note that if you attempt to replace a file by moving a file of the same name into that directory, you get an . - You cannot use the Move method to overwrite an existing file. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - - - - - - - The transaction. - The name of the file to move. - The new path for the file. - that specify how the file is to be moved. This parameter can be . - Indicates the format of the path parameter(s). - - - [AlphaFS] Moves a specified file to a new location, providing the option to specify a new file name. - A class with the status of the Move action. - - This method works across disk volumes, and it does not throw an exception if the source and destination are the same. - Note that if you attempt to replace a file by moving a file of the same name into that directory, you get an . - You cannot use the Move method to overwrite an existing file. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - - - - - - - The transaction. - The name of the file to move. - The new path for the file. - that specify how the file is to be moved. This parameter can be . - A callback function that is called each time another portion of the file has been moved. This parameter can be . - The argument to be passed to the callback function. This parameter can be . - - - [AlphaFS] Moves a specified file to a new location, providing the option to specify a new file name. - A class with the status of the Move action. - - This method works across disk volumes, and it does not throw an exception if the source and destination are the same. - Note that if you attempt to replace a file by moving a file of the same name into that directory, you get an . - You cannot use the Move method to overwrite an existing file. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - - - - - - - The transaction. - The name of the file to move. - The new path for the file. - that specify how the file is to be moved. This parameter can be . - A callback function that is called each time another portion of the file has been moved. This parameter can be . - The argument to be passed to the callback function. This parameter can be . - Indicates the format of the path parameter(s). - - - Determine the Copy or Move action. - - - Copy/move a Non-/Transacted file or directory including its children to a new location, or can be specified, - and the possibility of notifying the application of its progress through a callback function. - - A class with the status of the Copy or Move action. - - Option is recommended for very large file transfers. - You cannot use the Move method to overwrite an existing file, unless - contains . - This Move method works across disk volumes, and it does not throw an exception if the - source and destination are the same. - Note that if you attempt to replace a file by moving a file of the same name into - that directory, you get an IOException. - - - - - - - - - Specifies that and are a file or directory. - The transaction. - The source directory path. - The destination directory path. - if original Timestamps must be preserved, otherwise. This parameter is ignored for move operations. - that specify how the file is to be copied. This parameter can be . - Flags that specify how the file or directory is to be moved. This parameter can be . - A callback function that is called each time another portion of the file has been copied/moved. This parameter can be . - The argument to be passed to the callback function. This parameter can be . - - Indicates the format of the path parameter(s). - - - [AlphaFS] Determines whether the specified file is in use (locked). - Returns if the specified file is in use (locked); otherwise, - - - The file to check. - - - [AlphaFS] Determines whether the specified file is in use (locked). - Returns if the specified file is in use (locked); otherwise, - - - - The file to check. - Indicates the format of the path parameter(s). - - - [AlphaFS] Determines whether the specified file is in use (locked). - Returns if the specified file is in use (locked); otherwise, - - - - The transaction. - The file to check. - - - [AlphaFS] Determines whether the specified file is in use (locked). - Returns if the specified file is in use (locked); otherwise, - - - - The transaction. - The file to check. - Indicates the format of the path parameter(s). - - - [AlphaFS] Determines whether the specified file is in use (locked). - Returns if the specified file is in use (locked); otherwise, - - - - The transaction. - The file to check. - Indicates the format of the path parameter(s). - - - Appends lines to a file, and then closes the file. If the specified file does not exist, this method creates a file, writes the - specified lines to the file, and then closes the file. - - - The method creates the file if it doesn't exist, but it doesn't create new directories. Therefore, the value of the path parameter - must contain existing directories. - - - - - - - - - - - - The file to append the lines to. The file is created if it doesn't already exist. - The lines to append to the file. - - - Appends lines to a file, and then closes the file. If the specified file does not exist, this method creates a file, writes the - specified lines to the file, and then closes the file. - - - The method creates the file if it doesn't exist, but it doesn't create new directories. Therefore, the value of the path parameter - must contain existing directories. - - - - - - - - - - - - The file to append the lines to. The file is created if it doesn't already exist. - The lines to append to the file. - The character to use. - - - [AlphaFS] Appends lines to a file, and then closes the file. If the specified file does not exist, this method creates a file, - writes the specified lines to the file, and then closes the file. - - - The method creates the file if it doesn't exist, but it doesn't create new directories. Therefore, the value of the path parameter - must contain existing directories. - - - - - - - - - - - - The file to append the lines to. The file is created if it doesn't already exist. - The lines to append to the file. - Indicates the format of the path parameter(s). - - - [AlphaFS] Appends lines to a file, and then closes the file. If the specified file does not - exist, this method creates a file, writes the specified lines to the file, and then closes - the file. - - - The method creates the file if it doesn't exist, but it doesn't create new directories. - Therefore, the value of the path parameter must contain existing directories. - - - - - - - - - - - - - The file to append the lines to. The file is created if it doesn't already exist. - - The lines to append to the file. - The character to use. - Indicates the format of the path parameter(s). - - - [AlphaFS] Appends lines to a file, and then closes the file. If the specified file does not exist, this method creates a file, - writes the specified lines to the file, and then closes the file. - - - The method creates the file if it doesn't exist, but it doesn't create new directories. Therefore, the value of the path parameter - must contain existing directories. - - - - - - - - - - - - The transaction. - The file to append the lines to. The file is created if it doesn't already exist. - The lines to append to the file. - - - [AlphaFS] Appends lines to a file, and then closes the file. If the specified file does not exist, this method creates a file, - writes the specified lines to the file, and then closes the file. - - - The method creates the file if it doesn't exist, but it doesn't create new directories. Therefore, the value of the path parameter - must contain existing directories. - - - - - - - - - - - - The transaction. - The file to append the lines to. The file is created if it doesn't already exist. - The lines to append to the file. - The character to use. - - - [AlphaFS] Appends lines to a file, and then closes the file. If the specified file does not exist, this method creates a file, writes the - specified lines to the file, and then closes the file. - - - The method creates the file if it doesn't exist, but it doesn't create new directories. Therefore, the value of the path parameter - must contain existing directories. - - - - - - - - - - - - The transaction. - The file to append the lines to. The file is created if it doesn't already exist. - The lines to append to the file. - Indicates the format of the path parameter(s). - - - [AlphaFS] Appends lines to a file, and then closes the file. If the specified file does not exist, this method creates a file, - writes the specified lines to the file, and then closes the file. - - - The method creates the file if it doesn't exist, but it doesn't create new directories. Therefore, the value of the path parameter - must contain existing directories. - - - - - - - - - - - - The transaction. - The file to append the lines to. The file is created if it doesn't already exist. - The lines to append to the file. - The character to use. - Indicates the format of the path parameter(s). - - - Appends the specified stringto the file, creating the file if it does not already exist. - - - - - - - - - - - The file to append the specified string to. - The string to append to the file. - - - Appends the specified string to the file, creating the file if it does not already exist. - - - - - - - - - - - The file to append the specified string to. - The string to append to the file. - The character to use. - - - [AlphaFS] Appends the specified stringto the file, creating the file if it does not already exist. - - - - - - - - - - - The file to append the specified string to. - The string to append to the file. - Indicates the format of the path parameter(s). - - - [AlphaFS] Appends the specified string to the file, creating the file if it does not already exist. - - - - - - - - - - - The file to append the specified string to. - The string to append to the file. - The character to use. - Indicates the format of the path parameter(s). - - - [AlphaFS] Appends the specified stringto the file, creating the file if it does not already exist. - - - - - - - - - - - The transaction. - The file to append the specified string to. - The string to append to the file. - - - [AlphaFS] Appends the specified string to the file, creating the file if it does not already exist. - - - - - - - - - - - The transaction. - The file to append the specified string to. - The string to append to the file. - The character to use. - - - [AlphaFS] Appends the specified stringto the file, creating the file if it does not already exist. - - - - - - - - - - - The transaction. - The file to append the specified string to. - The string to append to the file. - Indicates the format of the path parameter(s). - - - [AlphaFS] Appends the specified string to the file, creating the file if it does not already exist. - - - - - - - - - - - The transaction. - The file to append the specified string to. - The string to append to the file. - The character to use. - Indicates the format of the path parameter(s). - - - Creates a new file, writes a collection of strings to the file, and then closes the file. - The default behavior of the method is to write out data by using UTF-8 encoding without a byte order mark (BOM). - - - - - - - - - - - The file to write to. - The lines to write to the file. - - - Creates a new file by using the specified encoding, writes a collection of strings to the file, and then closes the file. - The file to write to. - The string array to write to the file. - - - Creates a new file by using the specified encoding, writes a collection of strings to the file, and then closes the file. - - - - - - - - - - - The file to write to. - The lines to write to the file. - The character to use. - - - Creates a new file by using the specified encoding, writes a collection of strings to the file, and then closes the file. - - - - - - - - - - - The file to write to. - The string array to write to the file. - The character to use. - - - [AlphaFS] Creates a new file, writes a collection of strings to the file, and then closes the file. - The default behavior of the method is to write out data by using UTF-8 encoding without a byte order mark (BOM). - - - - - - - - - - - The file to write to. - The lines to write to the file. - Indicates the format of the path parameter(s). - - - [AlphaFS] Creates a new file by using the specified encoding, writes a collection of strings to the file, and then closes the file. - - - - - - - - - - - The file to write to. - The string array to write to the file. - Indicates the format of the path parameter(s). - - - [AlphaFS] Creates a new file by using the specified encoding, writes a collection of strings to the file, and then closes the file. - - - - - - - - - - - The file to write to. - The lines to write to the file. - The character to use. - Indicates the format of the path parameter(s). - - - [AlphaFS] Creates a new file by using the specified encoding, writes a collection of strings to the file, and then closes the file. - - - - - - - - - - - The file to write to. - The string array to write to the file. - The character to use. - Indicates the format of the path parameter(s). - - - [AlphaFS] Creates a new file, writes a collection of strings to the file, and then closes the file. - The default behavior of the method is to write out data by using UTF-8 encoding without a byte order mark (BOM). - - - - - - - - - - - The transaction. - The file to write to. - The lines to write to the file. - - - [AlphaFS] Creates a new file, writes a collection of strings to the file, and then closes the file. - The default behavior of the method is to write out data by using UTF-8 encoding without a byte order mark (BOM). - - - - - - - - - - - The transaction. - The file to write to. - The string array to write to the file. - - - [AlphaFS] Creates a new file by using the specified encoding, writes a collection of strings to the file, and then closes the file. - - - - - - - - - - - The transaction. - The file to write to. - The lines to write to the file. - The character to use. - - - [AlphaFS] Creates a new file by using the specified encoding, writes a collection of strings to the file, and then closes the file. - - - - - - - - - - - The transaction. - The file to write to. - The string array to write to the file. - The character to use. - - - [AlphaFS] Creates a new file, writes a collection of strings to the file, and then closes the file. - The default behavior of the method is to write out data by using UTF-8 encoding without a byte order mark (BOM). - - - - - - - - - - - The transaction. - The file to write to. - The lines to write to the file. - Indicates the format of the path parameter(s). - - - [AlphaFS] Creates a new file by using the specified encoding, writes a collection of strings to the file, and then closes the file. - - - - - - - - - - - The transaction. - The file to write to. - The string array to write to the file. - Indicates the format of the path parameter(s). - - - [AlphaFS] Creates a new file by using the specified encoding, writes a collection of strings to the file, and then closes the file. - - - - - - - - - - - The transaction. - The file to write to. - The lines to write to the file. - The character to use. - Indicates the format of the path parameter(s). - - - [AlphaFS] Creates a new file by using the specified encoding, writes a collection of strings to the file, and then closes the file. - - - - - - - - - - - The transaction. - The file to write to. - The string array to write to the file. - The character to use. - Indicates the format of the path parameter(s). - - - Creates a new file, writes the specified string to the file, and then closes the file. If the target file already exists, it is overwritten. - This method uses UTF-8 encoding without a Byte-Order Mark (BOM) - - - - - - - - - - - The file to write to. - The string to write to the file. - - - Creates a new file, writes the specified string to the file using the specified encoding, and then closes the file. If the target file already exists, it is overwritten. - The file to write to. - The string to write to the file. - The applied to the contents of the file. - - - [AlphaFS] Creates a new file, writes the specified string to the file, and then closes the file. If the target file already exists, it is overwritten. - This method uses UTF-8 encoding without a Byte-Order Mark (BOM) - - - - - - - - - - - The file to write to. - The string to write to the file. - Indicates the format of the path parameter(s). - - - [AlphaFS] Creates a new file, writes the specified string to the file using the specified encoding, and then closes the file. If the target file already exists, it is overwritten. - - - - - - - - - - - The file to write to. - The string to write to the file. - The applied to the contents of the file. - Indicates the format of the path parameter(s). - - - [AlphaFS] Creates a new file as part of a transaction, write the contents to the file, and then closes the file. If the target file already exists, it is overwritten. - This method uses UTF-8 encoding without a Byte-Order Mark (BOM) - - - - - - - - - - - The transaction. - The file to write to. - The string to write to the file. - - - [AlphaFS] Creates a new file as part of a transaction, writes the specified string to the file using the specified encoding, and then closes the file. If the target file already exists, it is overwritten. - - - - - - - - - - - The transaction. - The file to write to. - The string to write to the file. - The applied to the contents of the file. - - - [AlphaFS] Creates a new file as part of a transaction, write the contents to the file, and then closes the file. If the target file already exists, it is overwritten. - This method uses UTF-8 encoding without a Byte-Order Mark (BOM) - - - - - - - - - - - The transaction. - The file to write to. - The string to write to the file. - Indicates the format of the path parameter(s). - - - [AlphaFS] Creates a new file as part of a transaction, writes the specified string to the file using the specified encoding, and then closes the file. If the target file already exists, it is overwritten. - - - - - - - - - - - The transaction. - The file to write to. - The string to write to the file. - The applied to the contents of the file. - Indicates the format of the path parameter(s). - - - Creates/appends a new file by using the specified encoding, writes a collection of strings to the file, and then closes the file. - - - - - - - - - - - The transaction. - The file to write to. - The lines to write to the file. - The character to use. - for file Append, for file Write. - to a line terminator, to ommit the line terminator. - Indicates the format of the path parameter(s). - - - - Creates a that appends NativeMethods.DefaultFileEncoding encoded text to an existing file, or to a new - file if the specified file does not exist. - - The path to the file to append to. - - A stream writer that appends NativeMethods.DefaultFileEncoding encoded text to the specified file or to a new file. - - - - - Creates a that appends NativeMethods.DefaultFileEncoding encoded text to an existing file, or - to a new file if the specified file does not exist. - - The path to the file to append to. - Indicates the format of the path parameter(s). - - A stream writer that appends NativeMethods.DefaultFileEncoding encoded text to the specified file or to a new file. - - - - - Creates a that appends NativeMethods.DefaultFileEncoding encoded text to an existing file, or - to a new file if the specified file does not exist. - - The path to the file to append to. - The character to use. - Indicates the format of the path parameter(s). - - A stream writer that appends NativeMethods.DefaultFileEncoding encoded text to the specified file or to a new file. - - - - - Creates a that appends NativeMethods.DefaultFileEncoding encoded text to an existing file, or - to a new file if the specified file does not exist. - - The path to the file to append to. - The character to use. - - A stream writer that appends NativeMethods.DefaultFileEncoding encoded text to the specified file or to a new file. - - - - - Creates a that appends NativeMethods.DefaultFileEncoding encoded text to an existing file, or - to a new file if the specified file does not exist. - - The transaction. - The path to the file to append to. - - A stream writer that appends NativeMethods.DefaultFileEncoding encoded text to the specified file or to a new file. - - - - - Creates a that appends NativeMethods.DefaultFileEncoding encoded text to an existing file, or - to a new file if the specified file does not exist. - - The transaction. - The path to the file to append to. - Indicates the format of the path parameter(s). - - A stream writer that appends NativeMethods.DefaultFileEncoding encoded text to the specified file or to a new file. - - - - - Creates a that appends NativeMethods.DefaultFileEncoding encoded text to an existing file, or - to a new file if the specified file does not exist. - - The transaction. - The path to the file to append to. - The character to use. - Indicates the format of the path parameter(s). - - A stream writer that appends NativeMethods.DefaultFileEncoding encoded text to the specified file or to a new file. - - - - - Creates a that appends NativeMethods.DefaultFileEncoding encoded text to an existing file, or - to a new file if the specified file does not exist. - - The transaction. - The path to the file to append to. - The character to use. - - A stream writer that appends NativeMethods.DefaultFileEncoding encoded text to the specified file or to a new file. - - - - Creates a that appends NativeMethods.DefaultFileEncoding encoded text to an existing file, or to a new file if the specified file does not exist. - - The transaction. - The path to the file to append to. - The character to use. - Indicates the format of the path parameter(s). - - A stream writer that appends NativeMethods.DefaultFileEncoding encoded text to the specified file or to a new file. - - - - Creates or overwrites a file in the specified path. - The path and name of the file to create. - A that provides read/write access to the file specified in . - - - Creates or overwrites the specified file. - The name of the file. - The number of bytes buffered for reads and writes to the file. - - A with the specified buffer size that provides read/write access to the file specified in - . - - - - - Creates or overwrites the specified file, specifying a buffer size and a - value that describes how to create or overwrite the file. - - The name of the file. - The number of bytes buffered for reads and writes to the file. - One of the values that describes how to create or overwrite the file. - A new file with the specified buffer size. - - - - Creates or overwrites the specified file, specifying a buffer size and a - value that describes how to create or overwrite the file. - - The name of the file. - The number of bytes buffered for reads and writes to the file. - One of the values that describes how to create or overwrite the file. - - One of the values that determines the access control and audit security for the file. - - A new file with the specified buffer size, file options, and file security. - - - Creates or overwrites a file in the specified path. - The path and name of the file to create. - Indicates the format of the path parameter(s). - - A that provides read/write access to the file specified in - . - - - - Creates or overwrites the specified file. - The name of the file. - The number of bytes buffered for reads and writes to the file. - Indicates the format of the path parameter(s). - - A with the specified buffer size that provides read/write access to the file specified in - . - - - - - Creates or overwrites the specified file, specifying a buffer size and a - value that describes how to create or overwrite the file. - - The name of the file. - - The number of bytes buffered for reads and writes to the file. - - - One of the values that describes how to create or overwrite the - file. - - Indicates the format of the path parameter(s). - A new file with the specified buffer size. - - - - Creates or overwrites the specified file, specifying a buffer size and a - value that describes how to create or overwrite the file. - - The name of the file. - - The number of bytes buffered for reads and writes to the file. - - - One of the values that describes how to create or overwrite the - file. - - - One of the values that determines the access control and audit - security for the file. - - Indicates the format of the path parameter(s). - - A new file with the specified buffer size, file options, and file security. - - - - Creates or overwrites a file in the specified path. - The transaction. - The path and name of the file to create. - - A that provides read/write access to the file specified in - . - - - - Creates or overwrites the specified file. - The transaction. - The name of the file. - - The number of bytes buffered for reads and writes to the file. - - - A with the specified buffer size that provides read/write access - to the file specified in . - - - - - Creates or overwrites the specified file, specifying a buffer size and a - value that describes how to create or overwrite the file. - - The transaction. - The name of the file. - The number of bytes buffered for reads and writes to the file. - One of the values that describes how to create or overwrite the file. - A new file with the specified buffer size. - - - - Creates or overwrites the specified file, specifying a buffer size and a - value that describes how to create or overwrite the file. - - The transaction. - The name of the file. - The number of bytes buffered for reads and writes to the file. - One of the values that describes how to create or overwrite the file. - - One of the values that determines the access control and audit security for the file. - - A new file with the specified buffer size, file options, and file security. - - - Creates or overwrites a file in the specified path. - The transaction. - The path and name of the file to create. - Indicates the format of the path parameter(s). - - A that provides read/write access to the file specified in - . - - - - Creates or overwrites the specified file. - The transaction. - The name of the file. - The number of bytes buffered for reads and writes to the file. - Indicates the format of the path parameter(s). - - A with the specified buffer size that provides read/write access to the file specified in - . - - - - - Creates or overwrites the specified file, specifying a buffer size and a - value that describes how to create or overwrite the file. - - The transaction. - The name of the file. - The number of bytes buffered for reads and writes to the file. - One of the values that describes how to create or overwrite the file. - Indicates the format of the path parameter(s). - A new file with the specified buffer size. - - - - Creates or overwrites the specified file, specifying a buffer size and a - value that describes how to create or overwrite the file. - - The transaction. - The name of the file. - The number of bytes buffered for reads and writes to the file. - One of the values that describes how to create or overwrite the file. - - One of the values that determines the access control and audit security for the file. - - Indicates the format of the path parameter(s). - A new file with the specified buffer size, file options, and file security. - - - Creates or overwrites a file in the specified path. - The transaction. - The name of the file. - The additional advanced options to create a file. - - A instance that determines the access control and audit security for the file. - - The option gives you more precise control over how you want to create a file. - - The allow you additionally specify to default read/write capability - just write, bypassing any cache. - - - The option controls how you would like to share created file with other requesters. - - Indicates the format of the parameter. - The number of bytes buffered for reads and writes to the file. - A that provides read/write access to the file specified in path. - - - Creates or opens a file, directory or I/O device. - A that provides read/write access to the file or directory specified by . - - To obtain a directory handle using CreateFile, specify the FILE_FLAG_BACKUP_SEMANTICS flag as part of dwFlagsAndAttributes. - The most commonly used I/O devices are as follows: file, file stream, directory, physical disk, volume, console buffer, tape drive, communications resource, mailslot, and pipe. - - - - - The transaction. - The path and name of the file or directory to create. - One of the values that describes how to create or overwrite the file or directory. - A instance that determines the access control and audit security for the file or directory. - A constant that determines how to open or create the file or directory. - A constant that determines the access rights to use when creating access and audit rules for the file or directory. - A constant that determines how the file or directory will be shared by processes. - . - Indicates the format of the parameter. - - - Determines whether the specified file exists. - - MSDN: .NET 3.5+: Trailing spaces are removed from the end of the - parameter before checking whether the directory exists. - The Exists method returns if any error occurs while trying to - determine if the specified file exists. - This can occur in situations that raise exceptions such as passing a file name with - invalid characters or too many characters, a failing or missing disk, or if the caller does not have permission to read the - file. - The Exists method should not be used for path validation, - this method merely checks if the file specified in path exists. - Passing an invalid path to Exists returns false. - Be aware that another process can potentially do something with the file in - between the time you call the Exists method and perform another operation on the file, such as Delete. - - The file to check. - - Returns if the caller has the required permissions and - contains the name of an existing file; otherwise, - - - - - [AlphaFS] Determines whether the specified file exists. - - MSDN: .NET 3.5+: Trailing spaces are removed from the end of the - parameter before checking whether the directory exists. - The Exists method returns if any error occurs while trying to - determine if the specified file exists. - This can occur in situations that raise exceptions such as passing a file name with - invalid characters or too many characters, - a failing or missing disk, or if the caller does not have permission to read the - file. - The Exists method should not be used for path validation, this method merely checks - if the file specified in path exists. - Passing an invalid path to Exists returns false. - Be aware that another process can potentially do something with the file in - between the time you call the Exists method and perform another operation on the file, such - as Delete. - - The file to check. - Indicates the format of the path parameter(s). - - Returns if the caller has the required permissions and - contains the name of an existing file; otherwise, - - - - - - [AlphaFS] Determines whether the specified file exists. - - - MSDN: .NET 3.5+: Trailing spaces are removed from the end of the - parameter before checking whether the directory exists. - The Exists method returns if any error occurs while trying to - determine if the specified file exists. - This can occur in situations that raise exceptions such as passing a file name with - invalid characters or too many characters, - a failing or missing disk, or if the caller does not have permission to read the - file. - The Exists method should not be used for path validation, - this method merely checks if the file specified in path exists. - Passing an invalid path to Exists returns false. - Be aware that another process can potentially do something with the file in - between - the time you call the Exists method and perform another operation on the file, such - as Delete. - - The transaction. - The file to check. - - Returns if the caller has the required permissions - and contains the name of an existing file; otherwise, - - - - - - [AlphaFS] Determines whether the specified file exists. - - - MSDN: .NET 3.5+: Trailing spaces are removed from the end of the - parameter before checking whether the directory exists. - The Exists method returns if any error occurs while trying to - determine if the specified file exists. - This can occur in situations that raise exceptions such as passing a file name with - invalid characters or too many characters, - a failing or missing disk, or if the caller does not have permission to read the - file. - The Exists method should not be used for path validation, - this method merely checks if the file specified in path exists. - Passing an invalid path to Exists returns false. - Be aware that another process can potentially do something with the file in - between - the time you call the Exists method and perform another operation on the file, such - as Delete. - - The transaction. - The file to check. - Indicates the format of the path parameter(s). - - Returns if the caller has the required permissions - and contains the name of an existing file; otherwise, - - - - - Determines whether the specified file or directory exists. - - MSDN: .NET 3.5+: Trailing spaces are removed from the end of the parameter before checking whether - the directory exists. - The Exists method returns if any error occurs while trying to determine if the specified file - exists. - This can occur in situations that raise exceptions such as passing a file name with invalid characters or too many characters, - - a failing or missing disk, or if the caller does not have permission to read the file. - The Exists method should not be used for path validation, - this method merely checks if the file specified in path exists. - Passing an invalid path to Exists returns false. - Be aware that another process can potentially do something with the file in between - the time you call the Exists method and perform another operation on the file, such as Delete. - - Specifies that is a file or directory. - The transaction. - The file to check. - Indicates the format of the path parameter(s). - - Returns if the caller has the required permissions - and contains the name of an existing file or directory; otherwise, - - - - Gets a object that encapsulates the access control list (ACL) entries for a specified file. - A object that encapsulates the access control rules for the file described by the parameter. - - - - The path to a file containing a object that describes the file's access control list (ACL) information. - - - Gets a object that encapsulates the access control list (ACL) entries for a specified file. - A object that encapsulates the access control rules for the file described by the parameter. - - - - The path to a file containing a object that describes the file's access control list (ACL) information. - One (or more) of the values that specifies the type of access control list (ACL) information to receive. - - - [AlphaFS] Gets a object that encapsulates the access control list (ACL) entries for a specified file. - A object that encapsulates the access control rules for the file described by the parameter. - - - - The path to a file containing a object that describes the file's access control list (ACL) information. - Indicates the format of the path parameter(s). - - - [AlphaFS] Gets a object that encapsulates the access control list (ACL) entries for a specified file. - A object that encapsulates the access control rules for the file described by the parameter. - - - - The path to a file containing a object that describes the file's access control list (ACL) information. - One (or more) of the values that specifies the type of access control list (ACL) information to receive. - Indicates the format of the path parameter(s). - - - [AlphaFS] Gets a object that encapsulates the access control list (ACL) entries for a specified file handle. - A object that encapsulates the access control rules for the file described by the parameter. - - - - A to a file containing a object that describes the file's access control list (ACL) information. - - - [AlphaFS] Gets a object that encapsulates the access control list (ACL) entries for a specified file handle. - A object that encapsulates the access control rules for the file described by the parameter. - - - - A to a file containing a object that describes the file's access control list (ACL) information. - One (or more) of the values that specifies the type of access control list (ACL) information to receive. - - - [AlphaFS] Gets an object for a particular file or directory. - An object that encapsulates the access control rules for the file or directory described by the parameter. - - - - Generic type parameter. - Specifies that is a file or directory. - The path to a file/directory containing a / object that describes the file's/directory's access control list (ACL) information. - One (or more) of the values that specifies the type of access control list (ACL) information to receive. - Indicates the format of the path parameter(s). - - - Gets the of the file on the path. - The path to the file. - The of the file on the path. - - - [AlphaFS] Gets the of the file on the path. - The path to the file. - Indicates the format of the path parameter(s). - The of the file on the path. - - - [AlphaFS] Gets the of the file on the path. - The transaction. - The path to the file. - The of the file on the path. - - - [AlphaFS] Gets the of the file on the path. - The transaction. - The path to the file. - Indicates the format of the path parameter(s). - The of the file on the path. - - - Gets the or of the specified file or directory. - The or of the specified file or directory. - - - Generic type parameter. - The transaction. - The path to the file or directory. - Indicates the format of the path parameter(s). - - - - - Calls NativeMethods.GetFileAttributesEx to retrieve WIN32_FILE_ATTRIBUTE_DATA. - Note that classes should use -1 as the uninitialized state for dataInitialized when relying on this method. - - No path (null, empty string) checking or normalization is performed. - . - . - [in,out]. - . - . - 0 on success, otherwise a Win32 error code. - - - Gets the creation date and time of the specified file. - The file for which to obtain creation date and time information. - - A structure set to the creation date and time for the specified file. This value is expressed in - local time. - - - - [AlphaFS] Gets the creation date and time of the specified file. - The file for which to obtain creation date and time information. - Indicates the format of the path parameter(s). - - A structure set to the creation date and time for the specified file. This value is expressed in - local time. - - - - [AlphaFS] Gets the creation date and time of the specified file. - The transaction. - The file for which to obtain creation date and time information. - - A structure set to the creation date and time for the specified file. This value is expressed in - local time. - - - - [AlphaFS] Gets the creation date and time of the specified file. - The transaction. - The file for which to obtain creation date and time information. - Indicates the format of the path parameter(s). - - A structure set to the creation date and time for the specified file. This value is expressed in - local time. - - - - Gets the creation date and time, in Coordinated Universal Time (UTC) format, of the specified file. - - The file for which to obtain creation date and time information, in Coordinated Universal Time (UTC) format. - - - A structure set to the creation date and time for the specified file. This value is expressed in UTC - time. - - - - [AlphaFS] Gets the creation date and time, in Coordinated Universal Time (UTC) format, of the specified file. - - The file for which to obtain creation date and time information, in Coordinated Universal Time (UTC) format. - - Indicates the format of the path parameter(s). - - A structure set to the creation date and time for the specified file. This value is expressed in UTC - time. - - - - [AlphaFS] Gets the creation date and time, in Coordinated Universal Time (UTC) format, of the specified file. - The transaction. - - The file for which to obtain creation date and time information, in Coordinated Universal Time (UTC) format. - - - A structure set to the creation date and time for the specified file. This value is expressed in UTC - time. - - - - [AlphaFS] Gets the creation date and time, in Coordinated Universal Time (UTC) format, of the specified file. - The transaction. - - The file for which to obtain creation date and time information, in Coordinated Universal Time (UTC) format. - - Indicates the format of the path parameter(s). - - A structure set to the creation date and time for the specified file. This value is expressed in UTC - time. - - - - - [AlphaFS] Gets the creation date and time, in Coordinated Universal Time (UTC) or local time, of the specified file or directory. - - The transaction. - The file or directory for which to obtain creation date and time information. - - gets the Coordinated Universal Time (UTC), gets the local time. - - Indicates the format of the path parameter(s). - - A structure set to the creation date and time for the specified file or directory. Depending on - this value is expressed in UTC- or local time. - - - - Gets the date and time that the specified file was last accessed. - The file for which to obtain access date and time information. - - A structure set to the date and time that the specified file was last accessed. This value is - expressed in local time. - - - - [AlphaFS] Gets the date and time that the specified file was last accessed. - The file for which to obtain access date and time information. - Indicates the format of the path parameter(s). - - A structure set to the date and time that the specified file was last accessed. This value is - expressed in local time. - - - - [AlphaFS] Gets the date and time that the specified file was last accessed. - The transaction. - The file for which to obtain access date and time information. - - A structure set to the date and time that the specified file was last accessed. This value is - expressed in local time. - - - - [AlphaFS] Gets the date and time that the specified file was last accessed. - The transaction. - The file for which to obtain access date and time information. - Indicates the format of the path parameter(s). - - A structure set to the date and time that the specified file was last accessed. This value is - expressed in local time. - - - - Gets the date and time, in coordinated universal time (UTC), that the specified file was last accessed. - The file for which to obtain access date and time information. - - A structure set to the date and time that the specified file was last accessed. This value is - expressed in UTC time. - - - - [AlphaFS] Gets the date and time, in coordinated universal time (UTC), that the specified file was last accessed. - The file for which to obtain access date and time information. - Indicates the format of the path parameter(s). - - A structure set to the date and time that the specified file was last accessed. This value is - expressed in UTC time. - - - - [AlphaFS] Gets the date and time, in coordinated universal time (UTC), that the specified file was last accessed. - The transaction. - The file for which to obtain access date and time information. - - A structure set to the date and time that the specified file was last accessed. This value is - expressed in UTC time. - - - - [AlphaFS] Gets the date and time, in coordinated universal time (UTC), that the specified file was last accessed. - The transaction. - The file for which to obtain access date and time information. - Indicates the format of the path parameter(s). - - A structure set to the date and time that the specified file was last accessed. This value is - expressed in UTC time. - - - - - [AlphaFS] Gets the date and time, in coordinated universal time (UTC) or local time, that the specified file or directory was last - accessed. - - The transaction. - The file or directory for which to obtain access date and time information. - - gets the Coordinated Universal Time (UTC), gets the local time. - - Indicates the format of the path parameter(s). - - A structure set to the date and time that the specified file or directory was last accessed. - Depending on this value is expressed in UTC- or local time. - - - - Gets the date and time that the specified file was last written to. - The file for which to obtain write date and time information. - - A structure set to the date and time that the specified file was last written to. This value is - expressed in local time. - - - - [AlphaFS] Gets the date and time that the specified file was last written to. - The file for which to obtain write date and time information. - Indicates the format of the path parameter(s). - - A structure set to the date and time that the specified file was last written to. This value is - expressed in local time. - - - - [AlphaFS] Gets the date and time that the specified file was last written to. - The transaction. - The file for which to obtain write date and time information. - - A structure set to the date and time that the specified file was last written to. This value is - expressed in local time. - - - - [AlphaFS] Gets the date and time that the specified file was last written to. - The transaction. - The file for which to obtain write date and time information. - Indicates the format of the path parameter(s). - - A structure set to the date and time that the specified file was last written to. This value is - expressed in local time. - - - - Gets the date and time, in coordinated universal time (UTC) time, that the specified file was last written to. - The file for which to obtain write date and time information. - - A structure set to the date and time that the specified file was last written to. This value is - expressed in UTC time. - - - - - [AlphaFS] Gets the date and time, in coordinated universal time (UTC) time, that the specified file was last written to. - - The file for which to obtain write date and time information. - Indicates the format of the path parameter(s). - - A structure set to the date and time that the specified file was last written to. This value is - expressed in UTC time. - - - - - [AlphaFS] Gets the date and time, in coordinated universal time (UTC) time, that the specified file was last written to. - - The transaction. - The file for which to obtain write date and time information. - - A structure set to the date and time that the specified file was last written to. This value is - expressed in UTC time. - - - - - [AlphaFS] Gets the date and time, in coordinated universal time (UTC) time, that the specified file was last written to. - - The transaction. - The file for which to obtain write date and time information. - Indicates the format of the path parameter(s). - - A structure set to the date and time that the specified file was last written to. This value is - expressed in UTC time. - - - - - [AlphaFS] Gets the date and time, in coordinated universal time (UTC) or local time, that the specified file or directory was last - written to. - - The transaction. - The file or directory for which to obtain write date and time information. - - gets the Coordinated Universal Time (UTC), gets the local time. - - Indicates the format of the path parameter(s). - - A structure set to the date and time that the specified file or directory was last written to. - Depending on this value is expressed in UTC- or local time. - - - - Opens a on the specified path with read/write access. - The file to open. - A value that specifies whether a file is created if one does not exist, and determines whether the contents of existing files are retained or overwritten. - A opened in the specified mode and path, with read/write access and not shared. - - - Opens a on the specified path, with the specified mode and access. - The file to open. - A value that specifies whether a file is created if one does not exist, and determines whether the contents of existing files are retained or overwritten. - A value that specifies the operations that can be performed on the file. - An unshared that provides access to the specified file, with the specified mode and access. - - - Opens a on the specified path, having the specified mode with read, write, or read/write access and the specified sharing option. - The file to open. - A value that specifies whether a file is created if one does not exist, and determines whether the contents of existing files are retained or overwritten. - A value that specifies the operations that can be performed on the file. - A value specifying the type of access other threads have to the file. - A on the specified path, having the specified mode with read, write, or read/write access and the specified sharing option. - - - [AlphaFS] Opens a on the specified path with read/write access. - The file to open. - - A value that specifies whether a file is created if one does not exist, and determines whether the contents - of existing files are retained or overwritten. - - Indicates the format of the path parameter(s). - A opened in the specified mode and path, with read/write access and not shared. - - - [AlphaFS] Opens a on the specified path, with the specified mode and access. - The file to open. - - A value that specifies whether a file is created if one does not exist, and determines whether the contents - of existing files are retained or overwritten. - - A value that specifies the operations that can be performed on the file. - Indicates the format of the path parameter(s). - - An unshared that provides access to the specified file, with the specified mode and access. - - - - [AlphaFS] Opens a on the specified path, having the specified mode with read, write, or read/write access and the specified sharing option. - The file to open. - - A value that specifies whether a file is created if one does not exist, and determines whether the contents - of existing files are retained or overwritten. - - A value that specifies the operations that can be performed on the file. - A value specifying the type of access other threads have to the file. - Indicates the format of the path parameter(s). - - A on the specified path, having the specified mode with read, write, or read/write access and the - specified sharing option. - - - - [AlphaFS] Opens a on the specified path, having the specified mode with read, write, or read/write access and the specified sharing option. - The file to open. - - A value that specifies whether a file is created if one does not exist, and determines whether the contents - of existing files are retained or overwritten. - - A value that specifies the operations that can be performed on the file. - A value specifying the type of access other threads have to the file. - The extended attributes. - Indicates the format of the path parameter(s). - - A on the specified path, having the specified mode with read, write, or read/write access and the - specified sharing option. - - - - [AlphaFS] Opens a on the specified path using the specified creation mode, read/write and sharing permission, and buffer size. - The file to open. - A constant that determines how to open or create the file. - A value that specifies the operations that can be performed on the - file. - A constant that determines how the file will be shared by processes. - A positive value greater than 0 indicating the buffer size. The default buffer size is 4096. - - A on the specified path, having the specified mode with read, write, or read/write - access and the specified sharing option. - - - - [AlphaFS] Opens a on the specified path using the specified creation mode, read/write and sharing permission, and buffer size. - The file to open. - A constant that determines how to open or create the file. - A value that specifies the operations that can be performed on the - file. - A constant that determines how the file will be shared by processes. - A positive value greater than 0 indicating the buffer size. The - default buffer size is 4096. - Specifies whether to use asynchronous I/O or synchronous I/O. However, note that the - underlying operating system might not support asynchronous I/O, so when specifying true, the handle might be - opened synchronously depending on the platform. When opened asynchronously, the BeginRead and BeginWrite methods - perform better on large reads or writes, but they might be much slower for small reads or writes. If the - application is designed to take advantage of asynchronous I/O, set the useAsync parameter to true. Using - asynchronous I/O correctly can speed up applications by as much as a factor of 10, but using it without - redesigning the application for asynchronous I/O can decrease performance by as much as a factor of 10. - - A on the specified path, having the specified mode with read, write, or read/write - access and the specified sharing option. - - - - [AlphaFS] Opens a on the specified path using the specified creation mode, read/write and sharing permission, and buffer size. - The file to open. - A constant that determines how to open or create the file. - A value that specifies the operations that can be performed on the - file. - A constant that determines how the file will be shared by processes. - A positive value greater than 0 indicating the buffer size. The - default buffer size is 4096. - A value that specifies additional file options. - - A on the specified path, having the specified mode with read, write, or read/write - access and the specified sharing option. - - - - [AlphaFS] Opens a on the specified path using the specified creation mode, read/write and sharing permission, and buffer size. - The file to open. - A constant that determines how to open or create the file. - A value that specifies the operations that can be performed on the - file. - A constant that determines how the file will be shared by processes. - A positive value greater than 0 indicating the buffer size. The - default buffer size is 4096. - The extended attributes specifying additional options. - - A on the specified path, having the specified mode with read, write, or read/write - access and the specified sharing option. - - - - [AlphaFS] Opens a on the specified path using the specified creation mode, read/write and sharing permission, and buffer size. - The file to open. - A constant that determines how to open or create the file. - A value that specifies the operations that can be performed on the - file. - A constant that determines how the file will be shared by processes. - A positive value greater than 0 indicating the buffer size. The - default buffer size is 4096. - Indicates the format of the path parameter. - - A on the specified path, having the specified mode with read, write, or read/write - access and the specified sharing option. - - - - [AlphaFS] Opens a on the specified path using the specified creation mode, read/write and sharing permission, and buffer size. - The file to open. - A constant that determines how to open or create the file. - A value that specifies the operations that can be performed on the - file. - A constant that determines how the file will be shared by processes. - A positive value greater than 0 indicating the buffer size. The - default buffer size is 4096. - Specifies whether to use asynchronous I/O or synchronous I/O. However, note that the - underlying operating system might not support asynchronous I/O, so when specifying true, the handle might be - opened synchronously depending on the platform. When opened asynchronously, the BeginRead and BeginWrite methods - perform better on large reads or writes, but they might be much slower for small reads or writes. If the - application is designed to take advantage of asynchronous I/O, set the useAsync parameter to true. Using - asynchronous I/O correctly can speed up applications by as much as a factor of 10, but using it without - redesigning the application for asynchronous I/O can decrease performance by as much as a factor of 10. - Indicates the format of the path parameter. - - A on the specified path, having the specified mode with read, write, or read/write - access and the specified sharing option. - - - - [AlphaFS] Opens a on the specified path using the specified creation mode, read/write and sharing permission, and buffer size. - The file to open. - A constant that determines how to open or create the file. - A value that specifies the operations that can be performed on the - file. - A constant that determines how the file will be shared by processes. - A positive value greater than 0 indicating the buffer size. The - default buffer size is 4096. - A value that specifies additional file options. - Indicates the format of the path parameter. - - A on the specified path, having the specified mode with read, write, or read/write - access and the specified sharing option. - - - - [AlphaFS] Opens a on the specified path using the specified creation mode, read/write and sharing permission, and buffer size. - The file to open. - A constant that determines how to open or create the file. - A value that specifies the operations that can be performed on the - file. - A constant that determines how the file will be shared by processes. - A positive value greater than 0 indicating the buffer size. The - default buffer size is 4096. - The extended attributes specifying additional options. - Indicates the format of the path parameter. - - A on the specified path, having the specified mode with read, write, or read/write - access and the specified sharing option. - - - - [AlphaFS] Opens a on the specified path using the specified creation mode, read/write and sharing permission, and buffer size. - The file to open. - A constant that determines how to open or create the file. - A value that specifies the operations that can be performed on the - file. - A constant that determines how the file will be shared by processes. - A positive value greater than 0 indicating the buffer size. The - default buffer size is 4096. - A value that specifies additional file options. - - A on the specified path, having the specified mode with read, write, or read/write - access and the specified sharing option. - - - - [AlphaFS] Opens a on the specified path using the specified creation mode, read/write and sharing permission, and buffer size. - The file to open. - A constant that determines how to open or create the file. - A value that specifies the operations that can be performed on the - file. - A constant that determines how the file will be shared by processes. - A positive value greater than 0 indicating the buffer size. The - default buffer size is 4096. - Extended attributes specifying additional options. - - A on the specified path, having the specified mode with read, write, or read/write - access and the specified sharing option. - - - - [AlphaFS] Opens a on the specified path using the specified creation mode, read/write and sharing permission, and buffer size. - The file to open. - A constant that determines how to open or create the file. - A value that specifies the operations that can be performed on the - file. - A constant that determines how the file will be shared by processes. - A positive value greater than 0 indicating the buffer size. The - default buffer size is 4096. - A value that specifies additional file options. - A value that determines the access control and audit security for the file. - - A on the specified path, having the specified mode with read, write, or read/write - access and the specified sharing option. - - - - [AlphaFS] Opens a on the specified path using the specified creation mode, read/write and sharing permission, and buffer size. - The file to open. - A constant that determines how to open or create the file. - A value that specifies the operations that can be performed on the - file. - A constant that determines how the file will be shared by processes. - A positive value greater than 0 indicating the buffer size. The - default buffer size is 4096. - Extended attributes specifying additional options. - A value that determines the access control and audit security for the file. - - A on the specified path, having the specified mode with read, write, or read/write - access and the specified sharing option. - - - - [AlphaFS] Opens a on the specified path using the specified creation mode, read/write and sharing permission, and buffer size. - The file to open. - A constant that determines how to open or create the file. - A value that specifies the operations that can be performed on the - file. - A constant that determines how the file will be shared by processes. - A positive value greater than 0 indicating the buffer size. The - default buffer size is 4096. - A value that specifies additional file options. - Indicates the format of the path parameter. - - A on the specified path, having the specified mode with read, write, or read/write - access and the specified sharing option. - - - - [AlphaFS] Opens a on the specified path using the specified creation mode, read/write and sharing permission, and buffer size. - The file to open. - A constant that determines how to open or create the file. - A value that specifies the operations that can be performed on the - file. - A constant that determines how the file will be shared by processes. - A positive value greater than 0 indicating the buffer size. The - default buffer size is 4096. - Extended attributes specifying additional options. - Indicates the format of the path parameter. - - A on the specified path, having the specified mode with read, write, or read/write - access and the specified sharing option. - - - - [AlphaFS] Opens a on the specified path using the specified creation mode, access rights and sharing permission, the buffer size, additional file options, access control and audit security. - The file to open. - A constant that determines how to open or create the file. - A value that specifies the operations that can be performed on the - file. - A constant that determines how the file will be shared by processes. - A positive value greater than 0 indicating the buffer size. The - default buffer size is 4096. - A value that specifies additional file options. - A value that determines the access control and audit security for the file. - Indicates the format of the path parameter. - - A on the specified path, having the specified mode with read, write, or read/write - access and the specified sharing option. - - - - [AlphaFS] Opens a on the specified path using the specified creation mode, access rights and sharing permission, the buffer size, additional file options, access control and audit security. - The file to open. - A constant that determines how to open or create the file. - A value that specifies the operations that can be performed on the - file. - A constant that determines how the file will be shared by processes. - A positive value greater than 0 indicating the buffer size. The - default buffer size is 4096. - Extended attributes specifying additional options. - A value that determines the access control and audit security for the file. - Indicates the format of the path parameter. - - A on the specified path, having the specified mode with read, write, or read/write - access and the specified sharing option. - - - - [AlphaFS] (Transacted) Opens a on the specified path with read/write access. - The transaction. - The file to open. - - A value that specifies whether a file is created if one does not exist, and determines whether the contents - of existing files are retained or overwritten. - - A opened in the specified mode and path, with read/write access and not shared. - - - [AlphaFS] (Transacted) Opens a on the specified path with read/write access. - The transaction. - The file to open. - - A value that specifies whether a file is created if one does not exist, and determines whether the contents - of existing files are retained or overwritten. - - Indicates the format of the path parameter(s). - A opened in the specified mode and path, with read/write access and not shared. - - - [AlphaFS] (Transacted) Opens a on the specified path, with the specified mode and access. - The transaction. - The file to open. - - A value that specifies whether a file is created if one does not exist, and determines whether the contents - of existing files are retained or overwritten. - - A value that specifies the operations that can be performed on the file. - - An unshared that provides access to the specified file, with the specified mode and access. - - - - [AlphaFS] (Transacted) Opens a on the specified path, having the specified mode with read, write, or read/write access and the specified sharing option. - The transaction. - The file to open. - - A value that specifies whether a file is created if one does not exist, and determines whether the contents - of existing files are retained or overwritten. - - A value that specifies the operations that can be performed on the file. - A value specifying the type of access other threads have to the file. - - A on the specified path, having the specified mode with read, write, or read/write access and the - specified sharing option. - - - - [AlphaFS] (Transacted) Opens a on the specified path, with the specified mode and access. - The transaction. - The file to open. - - A value that specifies whether a file is created if one does not exist, and determines whether the contents - of existing files are retained or overwritten. - - A value that specifies the operations that can be performed on the file. - Indicates the format of the path parameter(s). - - An unshared that provides access to the specified file, with the specified mode and access. - - - - [AlphaFS] (Transacted) Opens a on the specified path, having the specified mode with read, write, or read/write access and the specified sharing option. - The transaction. - The file to open. - A value that specifies whether a file is created if one does not exist, and determines whether the contents of existing files are retained or overwritten. - A value that specifies the operations that can be performed on the file. - A value specifying the type of access other threads have to the file. - Indicates the format of the path parameter(s). - A on the specified path, having the specified mode with read, write, or read/write access and the specified sharing option. - - - [AlphaFS] (Transacted) Opens a on the specified path, having the specified mode with read, write, or read/write access and the specified sharing option. - The transaction. - The file to open. - - A value that specifies whether a file is created if one does not exist, and determines whether the contents - of existing files are retained or overwritten. - - A value that specifies the operations that can be performed on the file. - A value specifying the type of access other threads have to the file. - The extended attributes. - Indicates the format of the path parameter(s). - - A on the specified path, having the specified mode with read, write, or read/write access and the - specified sharing option. - - - - [AlphaFS] (Transacted) Opens a on the specified path using the specified creation mode, read/write and sharing permission, and buffer size. - The transaction. - The file to open. - A constant that determines how to open or create the file. - A value that specifies the operations that can be performed on the - file. - A constant that determines how the file will be shared by processes. - A positive value greater than 0 indicating the buffer size. The - default buffer size is 4096. - - A on the specified path, having the specified mode with read, write, or read/write - access and the specified sharing option. - - - - [AlphaFS] (Transacted) Opens a on the specified path using the specified creation mode, read/write and sharing permission, and buffer size. - The transaction. - The file to open. - A constant that determines how to open or create the file. - A value that specifies the operations that can be performed on the - file. - A constant that determines how the file will be shared by processes. - A positive value greater than 0 indicating the buffer size. The - default buffer size is 4096. - Specifies whether to use asynchronous I/O or synchronous I/O. However, note that the - underlying operating system might not support asynchronous I/O, so when specifying true, the handle might be - opened synchronously depending on the platform. When opened asynchronously, the BeginRead and BeginWrite methods - perform better on large reads or writes, but they might be much slower for small reads or writes. If the - application is designed to take advantage of asynchronous I/O, set the useAsync parameter to true. Using - asynchronous I/O correctly can speed up applications by as much as a factor of 10, but using it without - redesigning the application for asynchronous I/O can decrease performance by as much as a factor of 10. - - A on the specified path, having the specified mode with read, write, or read/write - access and the specified sharing option. - - - - [AlphaFS] (Transacted) Opens a on the specified path using the specified creation mode, read/write and sharing permission, and buffer size. - The transaction. - The file to open. - A constant that determines how to open or create the file. - A value that specifies the operations that can be performed on the - file. - A constant that determines how the file will be shared by processes. - A positive value greater than 0 indicating the buffer size. The - default buffer size is 4096. - A value that specifies additional file options. - - A on the specified path, having the specified mode with read, write, or read/write - access and the specified sharing option. - - - - [AlphaFS] (Transacted) Opens a on the specified path using the specified creation mode, read/write and sharing permission, and buffer size. - The transaction. - The file to open. - A constant that determines how to open or create the file. - A value that specifies the operations that can be performed on the - file. - A constant that determines how the file will be shared by processes. - A positive value greater than 0 indicating the buffer size. The - default buffer size is 4096. - The extended attributes specifying additional options. - - A on the specified path, having the specified mode with read, write, or read/write - access and the specified sharing option. - - - - [AlphaFS] (Transacted) Opens a on the specified path using the specified creation mode, read/write and sharing permission, and buffer size. - The transaction. - The file to open. - A constant that determines how to open or create the file. - A value that specifies the operations that can be performed on the - file. - A constant that determines how the file will be shared by processes. - A positive value greater than 0 indicating the buffer size. The - default buffer size is 4096. - Indicates the format of the path parameter. - - A on the specified path, having the specified mode with read, write, or read/write - access and the specified sharing option. - - - - [AlphaFS] (Transacted) Opens a on the specified path using the specified creation mode, read/write and sharing permission, and buffer size. - The transaction. - The file to open. - A constant that determines how to open or create the file. - A value that specifies the operations that can be performed on the - file. - A constant that determines how the file will be shared by processes. - A positive value greater than 0 indicating the buffer size. The - default buffer size is 4096. - Specifies whether to use asynchronous I/O or synchronous I/O. However, note that the - underlying operating system might not support asynchronous I/O, so when specifying true, the handle might be - opened synchronously depending on the platform. When opened asynchronously, the BeginRead and BeginWrite methods - perform better on large reads or writes, but they might be much slower for small reads or writes. If the - application is designed to take advantage of asynchronous I/O, set the useAsync parameter to true. Using - asynchronous I/O correctly can speed up applications by as much as a factor of 10, but using it without - redesigning the application for asynchronous I/O can decrease performance by as much as a factor of 10. - Indicates the format of the path parameter. - - A on the specified path, having the specified mode with read, write, or read/write - access and the specified sharing option. - - - - [AlphaFS] (Transacted) Opens a on the specified path using the specified creation mode, read/write and sharing permission, and buffer size. - The transaction. - The file to open. - A constant that determines how to open or create the file. - A value that specifies the operations that can be performed on the - file. - A constant that determines how the file will be shared by processes. - A positive value greater than 0 indicating the buffer size. The - default buffer size is 4096. - A value that specifies additional file options. - Indicates the format of the path parameter. - - A on the specified path, having the specified mode with read, write, or read/write - access and the specified sharing option. - - - - [AlphaFS] (Transacted) Opens a on the specified path using the specified creation mode, read/write and sharing permission, and buffer size. - The transaction. - The file to open. - A constant that determines how to open or create the file. - A value that specifies the operations that can be performed on the - file. - A constant that determines how the file will be shared by processes. - A positive value greater than 0 indicating the buffer size. The - default buffer size is 4096. - The extended attributes specifying additional options. - Indicates the format of the path parameter. - - A on the specified path, having the specified mode with read, write, or read/write - access and the specified sharing option. - - - - [AlphaFS] (Transacted) Opens a on the specified path using the specified creation mode, read/write and sharing permission, and buffer size. - The transaction. - The file to open. - A constant that determines how to open or create the file. - A value that specifies the operations that can be performed on the - file. - A constant that determines how the file will be shared by processes. - A positive value greater than 0 indicating the buffer size. The - default buffer size is 4096. - A value that specifies additional file options. - - A on the specified path, having the specified mode with read, write, or read/write - access and the specified sharing option. - - - - [AlphaFS] (Transacted) Opens a on the specified path using the specified creation mode, read/write and sharing permission, and buffer size. - The transaction. - The file to open. - A constant that determines how to open or create the file. - A value that specifies the operations that can be performed on the - file. - A constant that determines how the file will be shared by processes. - A positive value greater than 0 indicating the buffer size. The - default buffer size is 4096. - Extended attributes specifying additional options. - - A on the specified path, having the specified mode with read, write, or read/write - access and the specified sharing option. - - - - [AlphaFS] (Transacted) Opens a on the specified path using the specified creation mode, read/write and sharing permission, and buffer size. - The transaction. - The file to open. - A constant that determines how to open or create the file. - A value that specifies the operations that can be performed on the - file. - A constant that determines how the file will be shared by processes. - A positive value greater than 0 indicating the buffer size. The - default buffer size is 4096. - A value that specifies additional file options. - A value that determines the access control and audit security for the file. - - A on the specified path, having the specified mode with read, write, or read/write - access and the specified sharing option. - - - - [AlphaFS] (Transacted) Opens a on the specified path using the specified creation mode, read/write and sharing permission, and buffer size. - The transaction. - The file to open. - A constant that determines how to open or create the file. - A value that specifies the operations that can be performed on the - file. - A constant that determines how the file will be shared by processes. - A positive value greater than 0 indicating the buffer size. The - default buffer size is 4096. - Extended attributes specifying additional options. - A value that determines the access control and audit security for the file. - - A on the specified path, having the specified mode with read, write, or read/write - access and the specified sharing option. - - - - [AlphaFS] (Transacted) Opens a on the specified path using the specified creation mode, read/write and sharing permission, and buffer size. - The transaction. - The file to open. - A constant that determines how to open or create the file. - A value that specifies the operations that can be performed on the - file. - A constant that determines how the file will be shared by processes. - A positive value greater than 0 indicating the buffer size. The - default buffer size is 4096. - A value that specifies additional file options. - Indicates the format of the path parameter. - - A on the specified path, having the specified mode with read, write, or read/write - access and the specified sharing option. - - - - [AlphaFS] (Transacted) Opens a on the specified path using the specified creation mode, read/write and sharing permission, and buffer size. - The transaction. - The file to open. - A constant that determines how to open or create the file. - A value that specifies the operations that can be performed on the - file. - A constant that determines how the file will be shared by processes. - A positive value greater than 0 indicating the buffer size. The - default buffer size is 4096. - Extended attributes specifying additional options. - Indicates the format of the path parameter. - - A on the specified path, having the specified mode with read, write, or read/write - access and the specified sharing option. - - - - [AlphaFS] (Transacted) Opens a on the specified path using the specified creation mode, access rights and sharing permission, the buffer size, additional file options, access control and audit security. - The transaction. - The file to open. - A constant that determines how to open or create the file. - A value that specifies the operations that can be performed on the - file. - A constant that determines how the file will be shared by processes. - A positive value greater than 0 indicating the buffer size. The - default buffer size is 4096. - A value that specifies additional file options. - A value that determines the access control and audit security for the file. - Indicates the format of the path parameter. - - A on the specified path, having the specified mode with read, write, or read/write - access and the specified sharing option. - - - - [AlphaFS] (Transacted) Opens a on the specified path using the specified creation mode, access rights and sharing permission, the buffer size, additional file options, access control and audit security. - The transaction. - The file to open. - A constant that determines how to open or create the file. - A value that specifies the operations that can be performed on the - file. - A constant that determines how the file will be shared by processes. - A positive value greater than 0 indicating the buffer size. The - default buffer size is 4096. - Extended attributes specifying additional options. - A value that determines the access control and audit security for the file. - Indicates the format of the path parameter. - - A on the specified path, having the specified mode with read, write, or read/write - access and the specified sharing option. - - - - [AlphaFS] Opens a on the specified path, having the specified mode with read, write, or read/write access, the specified sharing option and additional options specified. - The transaction. - The file to open. - A value that specifies whether a file is created if one does not exist, and determines whether the contents of existing files are retained or overwritten. - A value that specifies the operations that can be performed on the file. - A value specifying the type of access other threads have to the file. - Advanced options for this file. - A positive value greater than 0 indicating the buffer size. The default buffer size is 4096. - The security. - Indicates the format of the path parameter(s). - - A instance on the specified path, having the specified mode with - read, write, or read/write access and the specified sharing option. - - - - Opens a on the specified path, having the specified mode with read, write, or read/write access, the specified sharing option and additional options specified. - The transaction. - The file to open. - A value that specifies whether a file is created if one does not exist, and determines whether the contents of existing files are retained or overwritten. - A value that specifies whether a file is created if one does not exist, and determines whether the contents of existing files are retained or overwritten along with additional options. - A value specifying the type of access other threads have to the file. - Advanced options for this file. - A positive value greater than 0 indicating the buffer size. The default buffer size is 4096. - The security. - Indicates the format of the path parameter(s). - - A instance on the specified path, having the specified mode with - read, write, or read/write access and the specified sharing option. - - - - Opens a binary file, reads the contents of the file into a byte array, and then closes the file. - The file to open for reading. - A byte array containing the contents of the file. - - - [AlphaFS] Opens a binary file, reads the contents of the file into a byte array, and then closes the file. - The file to open for reading. - Indicates the format of the path parameter(s). - A byte array containing the contents of the file. - - - [AlphaFS] Opens a binary file, reads the contents of the file into a byte array, and then closes the file. - The transaction. - The file to open for reading. - A byte array containing the contents of the file. - - - [AlphaFS] Opens a binary file, reads the contents of the file into a byte array, and then closes the file. - The transaction. - The file to open for reading. - Indicates the format of the path parameter(s). - A byte array containing the contents of the file. - - - Opens a binary file, reads the contents of the file into a byte array, and then closes the file. - - The transaction. - The file to open for reading. - Indicates the format of the path parameter(s). - A byte array containing the contents of the file. - - - Opens a text file, reads all lines of the file, and then closes the file. - The file to open for reading. - All lines of the file. - - - Opens a file, reads all lines of the file with the specified encoding, and then closes the file. - The file to open for reading. - The applied to the contents of the file. - All lines of the file. - - - [AlphaFS] Opens a text file, reads all lines of the file, and then closes the file. - The file to open for reading. - Indicates the format of the path parameter(s). - All lines of the file. - - - [AlphaFS] Opens a file, reads all lines of the file with the specified encoding, and then closes the file. - The file to open for reading. - The applied to the contents of the file. - Indicates the format of the path parameter(s). - All lines of the file. - - - [AlphaFS] Opens a text file, reads all lines of the file, and then closes the file. - The transaction. - The file to open for reading. - All lines of the file. - - - [AlphaFS] Opens a file, reads all lines of the file with the specified encoding, and then closes the file. - The transaction. - The file to open for reading. - The applied to the contents of the file. - All lines of the file. - - - [AlphaFS] Opens a text file, reads all lines of the file, and then closes the file. - The transaction. - The file to open for reading. - Indicates the format of the path parameter(s). - All lines of the file. - - - [AlphaFS] Opens a file, reads all lines of the file with the specified encoding, and then closes the file. - The transaction. - The file to open for reading. - The applied to the contents of the file. - Indicates the format of the path parameter(s). - All lines of the file. - - - Opens a file, read all lines of the file with the specified encoding, and then close the file. - The transaction. - The file to open for reading. - The applied to the contents of the file. - Indicates the format of the path parameter(s). - An IEnumerable string containing all lines of the file. - - - Opens a text file, reads all lines of the file, and then closes the file. - The file to open for reading. - All lines of the file. - - - Opens a file, reads all lines of the file with the specified encoding, and then closes the file. - The file to open for reading. - The applied to the contents of the file. - All lines of the file. - - - [AlphaFS] Opens a text file, reads all lines of the file, and then closes the file. - The file to open for reading. - Indicates the format of the path parameter(s). - All lines of the file. - - - [AlphaFS] Opens a file, reads all lines of the file with the specified encoding, and then closes the file. - The file to open for reading. - The applied to the contents of the file. - Indicates the format of the path parameter(s). - All lines of the file. - - - [AlphaFS] Opens a text file, reads all lines of the file, and then closes the file. - The transaction. - The file to open for reading. - All lines of the file. - - - [AlphaFS] Opens a file, reads all lines of the file with the specified encoding, and then closes the file. - The transaction. - The file to open for reading. - The applied to the contents of the file. - All lines of the file. - - - [AlphaFS] Opens a text file, reads all lines of the file, and then closes the file. - The transaction. - The file to open for reading. - Indicates the format of the path parameter(s). - All lines of the file. - - - [AlphaFS] Opens a file, reads all lines of the file with the specified encoding, and then closes the file. - The transaction. - The file to open for reading. - The applied to the contents of the file. - Indicates the format of the path parameter(s). - All lines of the file. - - - Open a file, read all lines of the file with the specified encoding, and then close the file. - The transaction. - The file to open for reading. - The applied to the contents of the file. - Indicates the format of the path parameter(s). - All lines of the file. - - - Reads the lines of a file. - The file to read. - All the lines of the file, or the lines that are the result of a query. - - - Read the lines of a file that has a specified encoding. - The file to read. - The encoding that is applied to the contents of the file. - All the lines of the file, or the lines that are the result of a query. - - - [AlphaFS] Reads the lines of a file. - The file to read. - Indicates the format of the path parameter(s). - All the lines of the file, or the lines that are the result of a query. - - - [AlphaFS] Read the lines of a file that has a specified encoding. - The file to read. - The encoding that is applied to the contents of the file. - Indicates the format of the path parameter(s). - All the lines of the file, or the lines that are the result of a query. - - - [AlphaFS] Reads the lines of a file. - The transaction. - The file to read. - All the lines of the file, or the lines that are the result of a query. - - - [AlphaFS] Read the lines of a file that has a specified encoding. - The transaction. - The file to read. - The encoding that is applied to the contents of the file. - All the lines of the file, or the lines that are the result of a query. - - - [AlphaFS] Reads the lines of a file. - The transaction. - The file to read. - Indicates the format of the path parameter(s). - All the lines of the file, or the lines that are the result of a query. - - - [AlphaFS] Read the lines of a file that has a specified encoding. - The transaction. - The file to read. - The encoding that is applied to the contents of the file. - Indicates the format of the path parameter(s). - All the lines of the file, or the lines that are the result of a query. - - - Reads the lines of a file that has a specified encoding. - The transaction. - The file to read. - The encoding that is applied to the contents of the file. - Indicates the format of the path parameter(s). - All the lines of the file, or the lines that are the result of a query. - - - - Replaces the contents of a specified file with the contents of another file, deleting the original file, and creating a backup of - the replaced file. - - - The Replace method replaces the contents of a specified file with the contents of another file. It also creates a backup of the - file that was replaced. - - - If the and are on different volumes, this method will - raise an exception. If the is on a different volume from the source file, the backup - file will be deleted. - - - Pass null to the parameter if you do not want to create a backup of the file being - replaced. - - The name of a file that replaces the file specified by . - The name of the file being replaced. - The name of the backup file. - - - - Replaces the contents of a specified file with the contents of another file, deleting the original file, and creating a backup of - the replaced file and optionally ignores merge errors. - - - The Replace method replaces the contents of a specified file with the contents of another file. It also creates a backup of the - file that was replaced. - - - If the and are on different volumes, this method will - raise an exception. If the is on a different volume from the source file, the backup - file will be deleted. - - - Pass null to the parameter if you do not want to create a backup of the file being - replaced. - - The name of a file that replaces the file specified by . - The name of the file being replaced. - The name of the backup file. - - to ignore merge errors (such as attributes and access control lists (ACLs)) from the replaced file to the - replacement file; otherwise, . - - - - - [AlphaFS] Replaces the contents of a specified file with the contents of another file, deleting the original file, and creating a - backup of the replaced file and optionally ignores merge errors. - - - The Replace method replaces the contents of a specified file with the contents of another file. It also creates a backup of the - file that was replaced. - - - If the and are on different volumes, this method will - raise an exception. If the is on a different volume from the source file, the backup - file will be deleted. - - - Pass null to the parameter if you do not want to create a backup of the file being - replaced. - - The name of a file that replaces the file specified by . - The name of the file being replaced. - The name of the backup file. - - to ignore merge errors (such as attributes and access control lists (ACLs)) from the replaced file to the - replacement file; otherwise, . - - Indicates the format of the path parameter(s). - - - Replaces the contents of a specified file with the contents of another file, deleting - the original file, and creating a backup of the replaced file and optionally ignores merge errors. - - - The Replace method replaces the contents of a specified file with the contents of another file. It also creates a backup of the - file that was replaced. - - - If the and are on different volumes, this method will - raise an exception. If the is on a different volume from the source file, the backup - file will be deleted. - - - Pass null to the parameter if you do not want to create a backup of the file being - replaced. - - The name of a file that replaces the file specified by . - The name of the file being replaced. - The name of the backup file. - - to ignore merge errors (such as attributes and access control lists (ACLs)) from the replaced file to the - replacement file; otherwise, . - - Indicates the format of the path parameter(s). - - - Applies access control list (ACL) entries described by a FileSecurity object to the specified file. - - - - A file to add or remove access control list (ACL) entries from. - A object that describes an ACL entry to apply to the file described by the parameter. - - - Applies access control list (ACL) entries described by a object to the specified directory. - - - - A directory to add or remove access control list (ACL) entries from. - A object that describes an ACL entry to apply to the directory described by the path parameter. - One or more of the values that specifies the type of access control list (ACL) information to set. - - - [AlphaFS] Applies access control list (ACL) entries described by a FileSecurity object to the specified file. - - - - A file to add or remove access control list (ACL) entries from. - A object that describes an ACL entry to apply to the file described by the parameter. - Indicates the format of the path parameter(s). - - - [AlphaFS] Applies access control list (ACL) entries described by a object to the specified directory. - - - - A directory to add or remove access control list (ACL) entries from. - A object that describes an ACL entry to apply to the directory described by the path parameter. - One or more of the values that specifies the type of access control list (ACL) information to set. - Indicates the format of the path parameter(s). - - - Applies access control list (ACL) entries described by a FileSecurity object to the specified file. - - - - A to a file to add or remove access control list (ACL) entries from. - A object that describes an ACL entry to apply to the file described by the parameter. - - - Applies access control list (ACL) entries described by a FileSecurity object to the specified file. - - - - A to a file to add or remove access control list (ACL) entries from. - A object that describes an ACL entry to apply to the file described by the parameter. - One or more of the values that specifies the type of access control list (ACL) information to set. - - - [AlphaFS] Applies access control list (ACL) entries described by a / object to the specified file or directory. - Use either or , not both. - - - - A file/directory to add or remove access control list (ACL) entries from. This parameter This parameter may be . - A to add or remove access control list (ACL) entries from. This parameter This parameter may be . - A / object that describes an ACL entry to apply to the file/directory described by the / parameter. - One or more of the values that specifies the type of access control list (ACL) information to set. - Indicates the format of the path parameter(s). - - - Sets the specified of the file or directory on the specified path. - - Certain file attributes, such as and , can be combined. - Other attributes, such as , must be used alone. - - - It is not possible to change the status of a File object using this method. - - The path to the file or directory. - A bitwise combination of the enumeration values. - Sets the specified of the file or directory on the specified path. - - - [AlphaFS] Sets the specified of the file or directory on the specified path. - - Certain file attributes, such as and , can be combined. - Other attributes, such as , must be used alone. - - - It is not possible to change the status of a File object using this method. - - The path to the file or directory. - A bitwise combination of the enumeration values. - Indicates the format of the path parameter(s). - - - [AlphaFS] Sets the specified of the file on the specified path. - - Certain file attributes, such as and , can be combined. - Other attributes, such as , must be used alone. - - - It is not possible to change the status of a File object using this method. - - The transaction. - The path to the file. - A bitwise combination of the enumeration values. - - - [AlphaFS] Sets the specified of the file on the specified path. - - Certain file attributes, such as and , can be combined. - Other attributes, such as , must be used alone. - - - It is not possible to change the status of a File object using this method. - - The transaction. - The path to the file. - A bitwise combination of the enumeration values. - Indicates the format of the path parameter(s). - - - Sets the attributes for a Non-/Transacted file/directory. - - Certain file attributes, such as and , can be combined. - Other attributes, such as , must be used alone. - - - It is not possible to change the status of a File object using the SetAttributes method. - - - Specifies that is a file or directory. - The transaction. - The name of the file or directory whose attributes are to be set. - - The attributes to set for the file or directory. Note that all other values override . - - - does not throw an Exception when the file system object does not exist. - - Indicates the format of the path parameter(s). - - - Sets the date and time the file was created. - The file for which to set the creation date and time information. - - A containing the value to set for the creation date and time of . This value - is expressed in local time. - - - - [AlphaFS] Sets the date and time the file was created. - The file for which to set the creation date and time information. - - A containing the value to set for the creation date and time of . This value - is expressed in local time. - - Indicates the format of the path parameter(s). - - - [AlphaFS] Sets the date and time the file was created. - The file for which to set the creation date and time information. - - A containing the value to set for the creation date and time of . This value - is expressed in local time. - - If , the date and time information will apply to the reparse point (symlink or junction) and not the file or directory linked to. No effect if does not refer to a reparse point. - Indicates the format of the path parameter(s). - - - [AlphaFS] Sets the date and time the file was created. - The transaction. - The file for which to set the creation date and time information. - - A containing the value to set for the creation date and time of . This value - is expressed in local time. - - - - [AlphaFS] Sets the date and time the file was created. - The transaction. - The file for which to set the creation date and time information. - - A containing the value to set for the creation date and time of . This value - is expressed in local time. - - Indicates the format of the path parameter(s). - - - [AlphaFS] Sets the date and time the file was created. - The transaction. - The file for which to set the creation date and time information. - - A containing the value to set for the creation date and time of . This value - is expressed in local time. - - If , the date and time information will apply to the reparse point (symlink or junction) and not the file or directory linked to. No effect if does not refer to a reparse point. - Indicates the format of the path parameter(s). - - - Sets the date and time, in coordinated universal time (UTC), that the file was created. - The file for which to set the creation date and time information. - - A containing the value to set for the creation date and time of . This value - is expressed in UTC time. - - - - [AlphaFS] Sets the date and time, in coordinated universal time (UTC), that the file was created. - The file for which to set the creation date and time information. - - A containing the value to set for the creation date and time of . This value - is expressed in UTC time. - - Indicates the format of the path parameter(s). - - - [AlphaFS] Sets the date and time, in coordinated universal time (UTC), that the file was created. - The file for which to set the creation date and time information. - - A containing the value to set for the creation date and time of . This value - is expressed in UTC time. - - If , the date and time information will apply to the reparse point (symlink or junction) and not the file or directory linked to. No effect if does not refer to a reparse point. - Indicates the format of the path parameter(s). - - - [AlphaFS] Sets the date and time, in coordinated universal time (UTC), that the file was created. - The transaction. - The file for which to set the creation date and time information. - - A containing the value to set for the creation date and time of . This value - is expressed in UTC time. - - - - [AlphaFS] Sets the date and time, in coordinated universal time (UTC), that the file was created. - The transaction. - The file for which to set the creation date and time information. - - A containing the value to set for the creation date and time of . This value - is expressed in UTC time. - - Indicates the format of the path parameter(s). - - - [AlphaFS] Sets the date and time, in coordinated universal time (UTC), that the file was created. - The transaction. - The file for which to set the creation date and time information. - - A containing the value to set for the creation date and time of . This value - is expressed in UTC time. - - If , the date and time information will apply to the reparse point (symlink or junction) and not the file or directory linked to. No effect if does not refer to a reparse point. - Indicates the format of the path parameter(s). - - - Sets the date and time that the specified file was last accessed. - The file for which to set the access date and time information. - - A containing the value to set for the last access date and time of . This - value is expressed in local time. - - - - [AlphaFS] Sets the date and time that the specified file was last accessed. - The file for which to set the access date and time information. - - A containing the value to set for the last access date and time of . This - value is expressed in local time. - - Indicates the format of the path parameter(s). - - - [AlphaFS] Sets the date and time that the specified file was last accessed. - The file for which to set the access date and time information. - - A containing the value to set for the last access date and time of . This - value is expressed in local time. - - If , the date and time information will apply to the reparse point (symlink or junction) and not the file or directory linked to. No effect if does not refer to a reparse point. - Indicates the format of the path parameter(s). - - - [AlphaFS] Sets the date and time that the specified file was last accessed. - The transaction. - The file for which to set the access date and time information. - - A containing the value to set for the last access date and time of . This - value is expressed in local time. - - - - [AlphaFS] Sets the date and time that the specified file was last accessed. - The transaction. - The file for which to set the access date and time information. - - A containing the value to set for the last access date and time of . This - value is expressed in local time. - - Indicates the format of the path parameter(s). - - - [AlphaFS] Sets the date and time that the specified file was last accessed. - The transaction. - The file for which to set the access date and time information. - - A containing the value to set for the last access date and time of . This - value is expressed in local time. - - If , the date and time information will apply to the reparse point (symlink or junction) and not the file or directory linked to. No effect if does not refer to a reparse point. - Indicates the format of the path parameter(s). - - - Sets the date and time, in coordinated universal time (UTC), that the specified file was last accessed. - The file for which to set the access date and time information. - - A containing the value to set for the last access date and time of . This - value is expressed in UTC time. - - - - [AlphaFS] Sets the date and time, in coordinated universal time (UTC), that the specified file was last accessed. - The file for which to set the access date and time information. - - A containing the value to set for the last access date and time of . This - value is expressed in UTC time. - - Indicates the format of the path parameter(s). - - - [AlphaFS] Sets the date and time, in coordinated universal time (UTC), that the specified file was last accessed. - The file for which to set the access date and time information. - - A containing the value to set for the last access date and time of . This - value is expressed in UTC time. - - If , the date and time information will apply to the reparse point (symlink or junction) and not the file or directory linked to. No effect if does not refer to a reparse point. - Indicates the format of the path parameter(s). - - - [AlphaFS] Sets the date and time, in coordinated universal time (UTC), that the specified file was last accessed. - The transaction. - The file for which to set the access date and time information. - - A containing the value to set for the last access date and time of . This - value is expressed in UTC time. - - - - [AlphaFS] Sets the date and time, in coordinated universal time (UTC), that the specified file was last accessed. - The transaction. - The file for which to set the access date and time information. - - A containing the value to set for the last access date and time of . This - value is expressed in UTC time. - - Indicates the format of the path parameter(s). - - - [AlphaFS] Sets the date and time, in coordinated universal time (UTC), that the specified file was last accessed. - The transaction. - The file for which to set the access date and time information. - - A containing the value to set for the last access date and time of . This - value is expressed in UTC time. - - If , the date and time information will apply to the reparse point (symlink or junction) and not the file or directory linked to. No effect if does not refer to a reparse point. - Indicates the format of the path parameter(s). - - - Sets the date and time that the specified file was last written to. - The file for which to set the date and time information. - - A containing the value to set for the last write date and time of . This value - is expressed in local time. - - - - [AlphaFS] Sets the date and time that the specified file was last written to. - The file for which to set the date and time information. - - A containing the value to set for the last write date and time of . This value - is expressed in local time. - - Indicates the format of the path parameter(s). - - - [AlphaFS] Sets the date and time that the specified file was last written to. - The file for which to set the date and time information. - - A containing the value to set for the last write date and time of . This value - is expressed in local time. - - If , the date and time information will apply to the reparse point (symlink or junction) and not the file or directory linked to. No effect if does not refer to a reparse point. - Indicates the format of the path parameter(s). - - - [AlphaFS] Sets the date and time that the specified file was last written to. - The transaction. - The file for which to set the date and time information. - - A containing the value to set for the last write date and time of . This value - is expressed in local time. - - - - [AlphaFS] Sets the date and time that the specified file was last written to. - The transaction. - The file for which to set the date and time information. - - A containing the value to set for the last write date and time of . This value - is expressed in local time. - - Indicates the format of the path parameter(s). - - - [AlphaFS] Sets the date and time that the specified file was last written to. - The transaction. - The file for which to set the date and time information. - - A containing the value to set for the last write date and time of . This value - is expressed in local time. - - If , the date and time information will apply to the reparse point (symlink or junction) and not the file or directory linked to. No effect if does not refer to a reparse point. - Indicates the format of the path parameter(s). - - - Sets the date and time, in coordinated universal time (UTC), that the specified file was last written to. - The file for which to set the date and time information. - - A containing the value to set for the last write date and time of . This value - is expressed in UTC time. - - - - - [AlphaFS] Sets the date and time, in coordinated universal time (UTC), that the specified file was last written to. - - The file for which to set the date and time information. - - A containing the value to set for the last write date and time of . This value - is expressed in UTC time. - - Indicates the format of the path parameter(s). - - - - [AlphaFS] Sets the date and time, in coordinated universal time (UTC), that the specified file was last written to. - - The file for which to set the date and time information. - - A containing the value to set for the last write date and time of . This value - is expressed in UTC time. - - If , the date and time information will apply to the reparse point (symlink or junction) and not the file or directory linked to. No effect if does not refer to a reparse point. - Indicates the format of the path parameter(s). - - - - [AlphaFS] Sets the date and time, in coordinated universal time (UTC), that the specified file was last written to. - - The transaction. - The file for which to set the date and time information. - - A containing the value to set for the last write date and time of . This value - is expressed in UTC time. - - - - - [AlphaFS] Sets the date and time, in coordinated universal time (UTC), that the specified file was last written to. - - The transaction. - The file for which to set the date and time information. - - A containing the value to set for the last write date and time of . This value - is expressed in UTC time. - - Indicates the format of the path parameter(s). - - - - [AlphaFS] Sets the date and time, in coordinated universal time (UTC), that the specified file was last written to. - - The transaction. - The file for which to set the date and time information. - - A containing the value to set for the last write date and time of . This value - is expressed in UTC time. - - If , the date and time information will apply to the reparse point (symlink or junction) and not the file or directory linked to. No effect if does not refer to a reparse point. - Indicates the format of the path parameter(s). - - - [AlphaFS] Sets all the date and time stamps for the specified file, at once. - The file for which to set the dates and times information. - - A containing the value to set for the creation date and time of . This value - is expressed in local time. - - - A containing the value to set for the last access date and time of . This - value is expressed in local time. - - - A containing the value to set for the last write date and time of . This value - is expressed in local time. - - Indicates the format of the path parameter(s). - - - [AlphaFS] Sets all the date and time stamps for the specified file, at once. - The file for which to set the dates and times information. - - A containing the value to set for the creation date and time of . This value - is expressed in local time. - - - A containing the value to set for the last access date and time of . This - value is expressed in local time. - - - A containing the value to set for the last write date and time of . This value - is expressed in local time. - - - - [AlphaFS] Sets all the date and time stamps for the specified file, at once. - The file for which to set the dates and times information. - - A containing the value to set for the creation date and time of . This value - is expressed in local time. - - - A containing the value to set for the last access date and time of . This - value is expressed in local time. - - - A containing the value to set for the last write date and time of . This value - is expressed in local time. - - If , the date and time information will apply to the reparse point (symlink or junction) and not the file or directory linked to. No effect if does not refer to a reparse point. - Indicates the format of the path parameter(s). - - - [AlphaFS] Sets all the date and time stamps for the specified file, at once. - The transaction. - The file for which to set the dates and times information. - - A containing the value to set for the creation date and time of . This value - is expressed in local time. - - - A containing the value to set for the last access date and time of . This - value is expressed in local time. - - - A containing the value to set for the last write date and time of . This value - is expressed in local time. - - Indicates the format of the path parameter(s). - - - [AlphaFS] Sets all the date and time stamps for the specified file, at once. - The transaction. - The file for which to set the dates and times information. - - A containing the value to set for the creation date and time of . This value - is expressed in local time. - - - A containing the value to set for the last access date and time of . This - value is expressed in local time. - - - A containing the value to set for the last write date and time of . This value - is expressed in local time. - - - - [AlphaFS] Sets all the date and time stamps for the specified file, at once. - The transaction. - The file for which to set the dates and times information. - - A containing the value to set for the creation date and time of . This value - is expressed in local time. - - - A containing the value to set for the last access date and time of . This - value is expressed in local time. - - - A containing the value to set for the last write date and time of . This value - is expressed in local time. - - If , the date and time information will apply to the reparse point (symlink or junction) and not the file or directory linked to. No effect if does not refer to a reparse point. - Indicates the format of the path parameter(s). - - - [AlphaFS] Sets all the date and time stamps, in coordinated universal time (UTC), for the specified file, at once. - The file for which to set the dates and times information. - - A containing the value to set for the creation date and time of . This value - is expressed in UTC time. - - - A containing the value to set for the last access date and time of . This - value is expressed in UTC time. - - - A containing the value to set for the last write date and time of . This value - is expressed in UTC time. - - Indicates the format of the path parameter(s). - - - [AlphaFS] Sets all the date and time stamps, in coordinated universal time (UTC), for the specified file, at once. - The file for which to set the dates and times information. - - A containing the value to set for the creation date and time of . This value - is expressed in UTC time. - - - A containing the value to set for the last access date and time of . This - value is expressed in UTC time. - - - A containing the value to set for the last write date and time of . This value - is expressed in UTC time. - - - - [AlphaFS] Sets all the date and time stamps, in coordinated universal time (UTC), for the specified file, at once. - The file for which to set the dates and times information. - - A containing the value to set for the creation date and time of . This value - is expressed in UTC time. - - - A containing the value to set for the last access date and time of . This - value is expressed in UTC time. - - - A containing the value to set for the last write date and time of . This value - is expressed in UTC time. - - If , the date and time information will apply to the reparse point (symlink or junction) and not the file or directory linked to. No effect if does not refer to a reparse point. - Indicates the format of the path parameter(s). - - - [AlphaFS] Sets all the date and time stamps, in coordinated universal time (UTC), for the specified file, at once. - The transaction. - The file for which to set the dates and times information. - - A containing the value to set for the creation date and time of . This value - is expressed in UTC time. - - - A containing the value to set for the last access date and time of . This - value is expressed in UTC time. - - - A containing the value to set for the last write date and time of . This value - is expressed in UTC time. - - Indicates the format of the path parameter(s). - - - [AlphaFS] Sets all the date and time stamps, in coordinated universal time (UTC), for the specified file, at once. - The transaction. - The file for which to set the dates and times information. - - A containing the value to set for the creation date and time of . This value - is expressed in UTC time. - - - A containing the value to set for the last access date and time of . This - value is expressed in UTC time. - - - A containing the value to set for the last write date and time of . This value - is expressed in UTC time. - - - - [AlphaFS] Sets all the date and time stamps, in coordinated universal time (UTC), for the specified file, at once. - The transaction. - The file for which to set the dates and times information. - - A containing the value to set for the creation date and time of . This value - is expressed in UTC time. - - - A containing the value to set for the last access date and time of . This - value is expressed in UTC time. - - - A containing the value to set for the last write date and time of . This value - is expressed in UTC time. - - If , the date and time information will apply to the reparse point (symlink or junction) and not the file or directory linked to. No effect if does not refer to a reparse point. - Indicates the format of the path parameter(s). - - - Set the date and time, in coordinated universal time (UTC), that the file or directory was created and/or last accessed and/or written to. - - - Specifies that is a file or directory. - The transaction. - The file or directory for which to set the date and time information. - A containing the value to set for the creation date and time of . This value is expressed in UTC time. - A containing the value to set for the last access date and time of . This value is expressed in UTC time. - A containing the value to set for the last write date and time of . This value is expressed in UTC time. - If , the date and time information will apply to the reparse point (symlink or junction) and not the file or directory linked to. No effect if does not refer to a reparse point. - Indicates the format of the path parameter(s). - - - - Creates a new file, writes the specified byte array to the file, and then closes the file. If the target file already exists, it is - overwritten. - - The file to write to. - The bytes to write to the file. - - - - [AlphaFS] Creates a new file, writes the specified byte array to the file, and then closes the file. If the target file already - exists, it is overwritten. - - The file to write to. - The bytes to write to the file. - Indicates the format of the path parameter(s). - - - - [AlphaFS] Creates a new file, writes the specified byte array to the file, and then closes the file. If the target file already - exists, it is overwritten. - - The transaction. - The file to write to. - The bytes to write to the file. - - - - [AlphaFS] Creates a new file, writes the specified byte array to the file, and then closes the file. If the target file already - exists, it is overwritten. - - The transaction. - The file to write to. - The bytes to write to the file. - Indicates the format of the path parameter(s). - - - Creates a new file as part of a transaction, writes the specified byte array to - the file, and then closes the file. If the target file already exists, it is overwritten. - - - The transaction. - The file to write to. - The bytes to write to the file. - Indicates the format of the path parameter(s). - - - [AlphaFS] Gets the change date and time of the specified file. - A structure set to the change date and time for the specified file. This value is expressed in local time. - The file for which to obtain creation date and time information. - Indicates the format of the path parameter(s). - - - [AlphaFS] Gets the change date and time of the specified file. - A structure set to the change date and time for the specified file. This value is expressed in local time. - The file for which to obtain creation date and time information. - - - [AlphaFS] Gets the change date and time of the specified file. - A structure set to the change date and time for the specified file. This value is expressed in local time. - An open handle to the file or directory from which to retrieve information. - - - [AlphaFS] Gets the change date and time of the specified file. - A structure set to the change date and time for the specified file. This value is expressed in local time. - The transaction. - The file for which to obtain creation date and time information. - Indicates the format of the path parameter(s). - - - [AlphaFS] Gets the change date and time of the specified file. - A structure set to the change date and time for the specified file. This value is expressed in local time. - The transaction. - The file for which to obtain creation date and time information. - - - [AlphaFS] Gets the change date and time, in Coordinated Universal Time (UTC) format, of the specified file. - A structure set to the change date and time for the specified file. This value is expressed in UTC time. - The file for which to obtain change date and time information, in Coordinated Universal Time (UTC) format. - Indicates the format of the path parameter(s). - - - [AlphaFS] Gets the change date and time, in Coordinated Universal Time (UTC) format, of the specified file. - A structure set to the change date and time for the specified file. This value is expressed in UTC time. - The file for which to obtain change date and time information, in Coordinated Universal Time (UTC) format. - - - [AlphaFS] Gets the change date and time, in Coordinated Universal Time (UTC) format, of the specified file. - A structure set to the change date and time for the specified file. This value is expressed in UTC time. - An open handle to the file or directory from which to retrieve information. - - - [AlphaFS] Gets the change date and time, in Coordinated Universal Time (UTC) format, of the specified file. - A structure set to the change date and time for the specified file. This value is expressed in UTC time. - The transaction. - The file for which to obtain change date and time information, in Coordinated Universal Time (UTC) format. - Indicates the format of the path parameter(s). - - - [AlphaFS] Gets the change date and time, in Coordinated Universal Time (UTC) format, of the specified file. - A structure set to the change date and time for the specified file. This value is expressed in UTC time. - The transaction. - The file for which to obtain change date and time information, in Coordinated Universal Time (UTC) format. - - - Gets the change date and time of the specified file. - A structure set to the change date and time for the specified file. This value is expressed in local time. - Use either or , not both. - - - - Specifies that is a file or directory. - The transaction. - An open handle to the file or directory from which to retrieve information. - The file or directory for which to obtain creation date and time information. - gets the Coordinated Universal Time (UTC), gets the local time. - Indicates the format of the path parameter(s). - - - [AlphaFS] Retrieves the actual number of bytes of disk storage used to store a specified file. - - If the file is located on a volume that supports compression and the file is compressed, the value obtained is the compressed size - of the specified file. If the file is located on a volume that supports sparse files and the file is a sparse file, the value - obtained is the sparse size of the specified file. - - The name of the file. - Indicates the format of the path parameter(s). - The actual number of bytes of disk storage used to store the specified file. - - - [AlphaFS] Retrieves the actual number of bytes of disk storage used to store a specified file. - - If the file is located on a volume that supports compression and the file is compressed, the value obtained is the compressed size - of the specified file. If the file is located on a volume that supports sparse files and the file is a sparse file, the value - obtained is the sparse size of the specified file. - - The name of the file. - The actual number of bytes of disk storage used to store the specified file. - - - - [AlphaFS] Retrieves the actual number of bytes of disk storage used to store a specified file as part of a transaction. If the file - is located on a volume that supports compression and the file is compressed, the value obtained is the compressed size of the - specified file. If the file is located on a volume that supports sparse files and the file is a sparse file, the value obtained is - the sparse size of the specified file. - - The transaction. - The name of the file. - Indicates the format of the path parameter(s). - The actual number of bytes of disk storage used to store the specified file. - - - - [AlphaFS] Retrieves the actual number of bytes of disk storage used to store a specified file as part of a transaction. If the file - is located on a volume that supports compression and the file is compressed, the value obtained is the compressed size of the - specified file. If the file is located on a volume that supports sparse files and the file is a sparse file, the value obtained is - the sparse size of the specified file. - - The transaction. - The name of the file. - The actual number of bytes of disk storage used to store the specified file. - - - Retrieves the actual number of bytes of disk storage used to store a - specified file as part of a transaction. If the file is located on a volume that supports compression and the file is compressed, - the value obtained is the compressed size of the specified file. If the file is located on a volume that supports sparse files and - the file is a sparse file, the value obtained is the sparse size of the specified file. - - - The transaction. - The name of the file. - Indicates the format of the path parameter(s). - The actual number of bytes of disk storage used to store the specified file. - - - [AlphaFS] Retrieves the encryption status of the specified file. - The name of the file. - Indicates the format of the path parameter(s). - The of the specified . - - - [AlphaFS] Retrieves the encryption status of the specified file. - The name of the file. - The of the specified . - - - Retrieves the encryption status of the specified file. - The name of the file. - Indicates the format of the path parameter(s). - The of the specified . - - - [AlphaFS] Retrieves file information for the specified . - A connected to the open file from which to retrieve the information. - A object containing the requested information. - - - [AlphaFS] Gets the of the file on the path. - The instance of the file or directory. - The path to the file or directory. - Indicates the format of the path parameter(s). - - - [AlphaFS] Gets the of the file on the path. - The instance of the file or directory. - The path to the file or directory. - - - [AlphaFS] Gets the of the file on the path. - The instance of the file or directory. - The transaction. - The path to the file or directory. - Indicates the format of the path parameter(s). - - - [AlphaFS] Gets the of the file on the path. - The instance of the file or directory. - The transaction. - The path to the file or directory. - - - Gets a FileSystemEntryInfo from a Non-/Transacted directory/file. - The instance of the file or directory, or null on Exception when is true. - BasicSearch and LargeCache are used by default, if possible. - - - Specifies that is a file or directory. - The transaction. - The path to the file or directory. - - true suppress any Exception that might be thrown as a result from a failure, - such as ACLs protected directories or non-accessible reparse points. - - Indicates the format of the path parameter(s). - - - [AlphaFS] Gets information about the target of a mount point or symbolic link on an NTFS file system. - The path to the reparse point. - Indicates the format of the path parameter(s). - - An instance of or containing information about the symbolic link - or mount point pointed to by . - - - - [AlphaFS] Gets information about the target of a mount point or symbolic link on an NTFS file system. - The path to the reparse point. - - An instance of or containing information about the symbolic link - or mount point pointed to by . - - - - [AlphaFS] Gets information about the target of a mount point or symbolic link on an NTFS file system. - The transaction. - The path to the reparse point. - Indicates the format of the path parameter(s). - - An instance of or containing information about the symbolic link - or mount point pointed to by . - - - - [AlphaFS] Gets information about the target of a mount point or symbolic link on an NTFS file system. - The transaction. - The path to the reparse point. - - An instance of or containing information about the symbolic link - or mount point pointed to by . - - - - Gets information about the target of a mount point or symbolic link on an NTFS file system. - The transaction. - The path to the reparse point. - Indicates the format of the path parameter(s). - - An instance of or containing information about the symbolic link - or mount point pointed to by . - - - - [AlphaFS] Retrieves the file size, in bytes to store a specified file. - The path to the file. - Indicates the format of the path parameter(s). - The file size, in bytes. - - - [AlphaFS] Retrieves the file size, in bytes to store a specified file. - The path to the file. - The file size, in bytes. - - - [AlphaFS] Retrieves the file size, in bytes to store a specified file. - The to the file. - The file size, in bytes. - - - [AlphaFS] Retrieves the file size, in bytes to store a specified file. - The transaction. - The path to the file. - Indicates the format of the path parameter(s). - The number of bytes of disk storage used to store the specified file. - - - [AlphaFS] Retrieves the file size, in bytes to store a specified file. - The transaction. - The path to the file. - The number of bytes of disk storage used to store the specified file. - - - Retrieves the file size, in bytes to store a specified file. - Use either or , not both. - The transaction. - The to the file. - The path to the file. - Indicates the format of the path parameter(s). - The number of bytes of disk storage used to store the specified file. - - - [AlphaFS] Transfers the date and time stamps for the specified files. - This method does not change last access time for the source file. - The source file to get the date and time stamps from. - The destination file to set the date and time stamps. - Indicates the format of the path parameter(s). - - - [AlphaFS] Transfers the date and time stamps for the specified files. - This method does not change last access time for the source file. - The source file to get the date and time stamps from. - The destination file to set the date and time stamps. - - - [AlphaFS] Transfers the date and time stamps for the specified files. - This method does not change last access time for the source file. - The transaction. - The source file to get the date and time stamps from. - The destination file to set the date and time stamps. - Indicates the format of the path parameter(s). - - - [AlphaFS] Transfers the date and time stamps for the specified files. - This method does not change last access time for the source file. - The transaction. - The source file to get the date and time stamps from. - The destination file to set the date and time stamps. - - - Transfer the date and time stamps for the specified files and directories. - - This method does not change last access time for the source file. - This method uses BackupSemantics flag to get Timestamp changed for directories. - - Specifies that and are a file or directory. - The transaction. - The source path. - The destination path. - Indicates the format of the path parameter(s). - - - Opens an existing file for reading. - The file to be opened for reading. - A read-only on the specified path. - - This method is equivalent to the (string, FileMode, FileAccess, FileShare) constructor overload with a - value of Open, a value of Read and a value of Read. - - - - [AlphaFS] Opens an existing file for reading. - The file to be opened for reading. - Indicates the format of the path parameter(s). - A read-only on the specified path. - - This method is equivalent to the (string, FileMode, FileAccess, FileShare) constructor overload with a - value of Open, a value of Read and a value of Read. - - - - [AlphaFS] Opens an existing file for reading. - The transaction. - The file to be opened for reading. - A read-only on the specified path. - - This method is equivalent to the (string, FileMode, FileAccess, FileShare) constructor overload with a - value of Open, a value of Read and a value of Read. - - - - [AlphaFS] Opens an existing file for reading. - The transaction. - The file to be opened for reading. - Indicates the format of the path parameter(s). - A read-only on the specified path. - - This method is equivalent to the (string, FileMode, FileAccess, FileShare) constructor overload with a - value of Open, a value of Read and a value of Read. - - - - Opens an existing UTF-8 encoded text file for reading. - The file to be opened for reading. - A on the specified path. - This method is equivalent to the (String) constructor overload. - - - [AlphaFS] Opens an existing UTF-8 encoded text file for reading. - The file to be opened for reading. - Indicates the format of the path parameter(s). - A on the specified path. - This method is equivalent to the (String) constructor overload. - - - [AlphaFS] Opens an existing encoded text file for reading. - The file to be opened for reading. - The applied to the contents of the file. - Indicates the format of the path parameter(s). - A on the specified path. - This method is equivalent to the (String) constructor overload. - - - [AlphaFS] Opens an existing encoded text file for reading. - The file to be opened for reading. - The applied to the contents of the file. - A on the specified path. - This method is equivalent to the (String) constructor overload. - - - [AlphaFS] Opens an existing UTF-8 encoded text file for reading. - The transaction. - The file to be opened for reading. - A on the specified path. - This method is equivalent to the (String) constructor overload. - - - [AlphaFS] Opens an existing UTF-8 encoded text file for reading. - The transaction. - The file to be opened for reading. - Indicates the format of the path parameter(s). - A on the specified path. - This method is equivalent to the (String) constructor overload. - - - [AlphaFS] Opens an existing encoded text file for reading. - The transaction. - The file to be opened for reading. - The applied to the contents of the file. - Indicates the format of the path parameter(s). - A on the specified path. - This method is equivalent to the (String) constructor overload. - - - [AlphaFS] Opens an existing encoded text file for reading. - The transaction. - The file to be opened for reading. - The applied to the contents of the file. - A on the specified path. - This method is equivalent to the (String) constructor overload. - - - Opens an existing file or creates a new file for writing. - The file to be opened for writing. - An unshared object on the specified path with access. - This method is equivalent to the (String, FileMode, FileAccess, FileShare) constructor overload with file mode set to OpenOrCreate, the access set to Write, and the share mode set to None. - - - [AlphaFS] Opens an existing file or creates a new file for writing. - The file to be opened for writing. - Indicates the format of the path parameter(s). - An unshared object on the specified path with access. - This method is equivalent to the (String, FileMode, FileAccess, FileShare) constructor overload with file mode set to OpenOrCreate, the access set to Write, and the share mode set to None. - - - [AlphaFS] Opens an existing file or creates a new file for writing. - The transaction. - The file to be opened for writing. - An unshared object on the specified path with access. - This method is equivalent to the (String, FileMode, FileAccess, FileShare) constructor overload with file mode set to OpenOrCreate, the access set to Write, and the share mode set to None. - - - [AlphaFS] Opens an existing file or creates a new file for writing. - The transaction. - The file to be opened for writing. - Indicates the format of the path parameter(s). - An unshared object on the specified path with access. - This method is equivalent to the (String, FileMode, FileAccess, FileShare) constructor overload with file mode set to OpenOrCreate, the access set to Write, and the share mode set to None. - - - [AlphaFS] Opens the specified file for reading purposes bypassing security attributes. - The file path to open. - Indicates the format of the path parameter(s). - A on the specified path, having the read-only mode and sharing options. - - - [AlphaFS] Opens the specified file for reading purposes bypassing security attributes. This method is simpler to use then BackupFileStream to read only file's data stream. - The file path to open. - A on the specified path, having the read-only mode and sharing options. - - - [AlphaFS] Opens the specified file for reading purposes bypassing security attributes. - The transaction. - The file path to open. - Indicates the format of the path parameter(s). - A on the specified path, having the read-only mode and sharing options. - - - [AlphaFS] Opens the specified file for reading purposes bypassing security attributes. - The transaction. - The file path to open. - A on the specified path, having the read-only mode and sharing options. - - - Provides access to information of a device, on a local or remote host. - - - Initializes a DeviceInfo class. - - - Initializes a DeviceInfo class. - The DNS or NetBIOS name of the remote server. refers to the local host. - - - Enumerates all available devices on the local host. - One of the devices. - instances of type from the local host. - - - Represents the value of the base container identifier (ID) .The Windows Plug and Play (PnP) manager assigns this value to the device node (devnode). - - - Represents the name of the device setup class that a device instance belongs to. - - - Represents the of the device setup class that a device instance belongs to. - - - Represents the list of compatible identifiers for a device instance. - - - Represents a description of a device instance. - - - The device interface path. - - - Represents the registry entry name of the driver key for a device instance. - - - Represents the name of the enumerator for a device instance. - - - Represents the friendly name of a device instance. - - - Represents the list of hardware identifiers for a device instance. - - - The host name that was passed to the class constructor. - - - Gets the instance Id of the device. - - - Represents the bus-specific physical location of a device instance. - - - Represents the location of a device instance in the device tree. - - - Represents the name of the manufacturer of a device instance. - - - Encapsulates the physical device location information provided by a device's firmware to Windows. - - - Represents the name of the service that is installed for a device instance. - - - Retrieves information about the amount of space that is available on a disk volume, which is the total amount of space, - the total amount of free space, and the total amount of free space available to the user that is associated with the calling thread. - This class cannot be inherited. - - - - Initializes a DiskSpaceInfo instance. - A valid drive path or drive letter. This can be either uppercase or lowercase, 'a' to 'z' or a network share in the format: \\server\share - This is a Lazyloading object; call to populate all properties first before accessing. - - - Initializes a DiskSpaceInfo instance. - A valid drive path or drive letter. This can be either uppercase or lowercase, 'a' to 'z' or a network share in the format: \\server\share - gets both size- and disk cluster information. Get only disk cluster information, Get only size information. - Refreshes the state of the object. - suppress any Exception that might be thrown as a result from a failure, such as unavailable resources. - - - Refreshes the state of the object. - - - Initializes all properties to 0. - - - Returns the drive name. - A string that represents this object. - - - Indicates the amount of available free space on a drive, formatted as percentage. - - - Indicates the amount of available free space on a drive, formatted as a unit size. - - - Returns the Clusters size. - - - Gets the name of a drive. - The name of the drive. - This property is the name assigned to the drive, such as C:\ or E:\ - - - The total number of bytes on a disk that are available to the user who is associated with the calling thread, formatted as a unit size. - - - Indicates the amount of used space on a drive, formatted as percentage. - - - Indicates the amount of used space on a drive, formatted as a unit size. - - - The total number of free bytes on a disk that are available to the user who is associated with the calling thread. - - - The total number of bytes on a disk that are available to the user who is associated with the calling thread. - - - The total number of free bytes on a disk. - - - The number of bytes per sector. - - - The total number of free clusters on the disk that are available to the user who is associated with the calling thread. - - - The number of sectors per cluster. - - - The total number of clusters on the disk that are available to the user who is associated with the calling thread. - If per-user disk quotas are in use, this value may be less than the total number of clusters on the disk. - - - - Provides access to information on a local or remote drive. - - This class models a drive and provides methods and properties to query for drive information. - Use DriveInfo to determine what drives are available, and what type of drives they are. - You can also query to determine the capacity and available free space on the drive. - - - - Provides access to information on the specified drive. - - - - A valid drive path or drive letter. - This can be either uppercase or lowercase, - 'a' to 'z' or a network share in the format: \\server\share - - - - Indicates the amount of available free space on a drive. - The amount of free space available on the drive, in bytes. - This property indicates the amount of free space available on the drive. Note that this number may be different from the number because this property takes into account disk quotas. - - - Gets the name of the file system, such as NTFS or FAT32. - Use DriveFormat to determine what formatting a drive uses. - - - Gets the drive type. - One of the values. - - The DriveType property indicates whether a drive is any of: CDRom, Fixed, Unknown, Network, NoRootDirectory, - Ram, Removable, or Unknown. Values are listed in the enumeration. - - - - Gets a value indicating whether a drive is ready. - if the drive is ready; otherwise, . - - IsReady indicates whether a drive is ready. For example, it indicates whether a CD is in a CD drive or whether - a removable storage device is ready for read/write operations. If you do not test whether a drive is ready, and - it is not ready, querying the drive using DriveInfo will raise an IOException. - - Do not rely on IsReady() to avoid catching exceptions from other members such as TotalSize, TotalFreeSpace, and DriveFormat. - Between the time that your code checks IsReady and then accesses one of the other properties - (even if the access occurs immediately after the check), a drive may have been disconnected or a disk may have been removed. - - - - Gets the name of the drive. - The name of the drive. - This property is the name assigned to the drive, such as C:\ or E:\ - - - Gets the root directory of a drive. - A DirectoryInfo object that contains the root directory of the drive. - - - Gets the total amount of free space available on a drive. - The total free space available on a drive, in bytes. - This property indicates the total amount of free space available on the drive, not just what is available to the current user. - - - Gets the total size of storage space on a drive. - The total size of the drive, in bytes. - This property indicates the total size of the drive in bytes, not just what is available to the current user. - - - Gets or sets the volume label of a drive. - The volume label. - - The label length is determined by the operating system. For example, NTFS allows a volume label - to be up to 32 characters long. Note that is a valid VolumeLabel. - - - - [AlphaFS] Returns the instance. - - - [AlphaFS] The MS-DOS device name. - - - [AlphaFS] Indicates if this drive is a SUBST.EXE / DefineDosDevice drive mapping. - - - [AlphaFS] Indicates if this drive is a UNC path. - Only retrieve this information if we're dealing with a real network share mapping: http://alphafs.codeplex.com/discussions/316583 - - - [AlphaFS] Determines whether the specified volume name is a defined volume on the current computer. - - - [AlphaFS] Contains information about a file-system volume. - A VolumeInfo object that contains file-system volume information of the drive. - - - Retrieves the drive names of all logical drives on a computer. - An array of type that represents the logical drives on a computer. - - - Returns a drive name as a string. - The name of the drive. - This method returns the Name property. - - - [AlphaFS] Enumerates the drive names of all logical drives on a computer. - Retrieve logical drives as known by the Environment. - Retrieve only when accessible (IsReady) logical drives. - - An IEnumerable of type that represents - the logical drives on a computer. - - - - [AlphaFS] Gets the first available drive letter on the local system. - A drive letter as . When no drive letters are available, an exception is thrown. - The letters "A" and "B" are reserved for floppy drives and will never be returned by this function. - - - Gets an available drive letter on the local system. - When get the last available drive letter. When gets the first available drive letter. - A drive letter as . When no drive letters are available, an exception is thrown. - The letters "A" and "B" are reserved for floppy drives and will never be returned by this function. - - - Retrieves information about the file system and volume associated with the specified root file or directorystream. - - - Used by CopyFileXxx and MoveFileXxx. The function should return one of the following values. - - - PROGRESS_CONTINUE - Continue the copy operation. - - - - PROGRESS_CANCEL - Cancel the copy operation and delete the destination file. - - - - PROGRESS_STOP - Stop the copy operation. It can be restarted at a later time. - - - - PROGRESS_QUIET - Continue the copy operation, but stop invoking to report progress. - - - - [AlphaFS] Directory enumeration options, flags that specify how a directory is to be enumerated. - - - None (do not use). - - - Enumerate files only. - - - Enumerate directories only. - - - Enumerate files and directories. - - - Return full path as long full path (Unicode format), only valid when return type is . - - - Skip reparse points during directory enumeration. - - - Suppress any Exception that might be thrown as a result from a failure, such as ACLs protected directories or non-accessible reparse points. - - - Specifies whether to search the current directory, or the current directory and all subdirectories. - - - Enumerates the directory without querying the short file name, improving overall enumeration speed. - This option is enabled by default if supported. This value is not supported until Windows Server 2008 R2 and Windows 7. - - - Enumerates the directory using a larger buffer for directory queries, which can increase performance of the find operation. - This option is enabled by default if supported. This value is not supported until Windows Server 2008 R2 and Windows 7. - - - System-Defined Device Interface Classes - http://msdn.microsoft.com/en-us/library/windows/hardware/ff541389%28v=vs.85%29.aspx - - - The BUS1394_CLASS_GUID device interface class is defined for 1394 bus devices. - - - The GUID_61883_CLASS device interface class is defined for devices in the 61883 device setup class. - - - The GUID_DEVICE_APPLICATIONLAUNCH_BUTTON device interface class is defined for Advanced Configuration and Power Interface (ACPI) application start buttons. - - - The GUID_DEVICE_BATTERY device interface class is defined for battery devices. - - - The GUID_DEVICE_LID device interface class is defined for Advanced Configuration and Power Interface (ACPI) lid devices. - - - The GUID_DEVICE_MEMORY device interface class is defined for Advanced Configuration and Power Interface (ACPI) memory devices. - - - The GUID_DEVICE_MESSAGE_INDICATOR device interface class is defined for Advanced Configuration and Power Interface (ACPI) message indicator devices. - - - The GUID_DEVICE_PROCESSOR device interface class is defined for Advanced Configuration and Power Interface (ACPI) processor devices. - - - The GUID_DEVICE_SYS_BUTTON device interface classis defined for Advanced Configuration and Power Interface (ACPI) system power button devices. - - - The GUID_DEVICE_THERMAL_ZONE device interface class is defined for Advanced Configuration and Power Interface (ACPI) thermal zone devices. - - - The GUID_BTHPORT_DEVICE_INTERFACE device interface class is defined for Bluetooth radios. - - - The GUID_DEVINTERFACE_BRIGHTNESS device interface class is defined for display adapter drivers that operate in the context of the Windows Vista Display Driver Model and support brightness control of monitor child devices. - - - The GUID_DEVINTERFACE_DISPLAY_ADAPTER device interface class is defined for display views that are supported by display adapters. - - - The GUID_DEVINTERFACE_I2C device interface class is defined for display adapter drivers that operate in the context of the Windows Vista Display Driver Model and perform I2C transactions with monitor child devices. - - - The GUID_DEVINTERFACE_IMAGE device interface class is defined for WIA devices and Still Image (STI) devices, including digital cameras and scanners. - - - The GUID_DEVINTERFACE_MONITOR device interface class is defined for monitor devices. - - - The GUID_DEVINTERFACE_OPM device interface class is defined for display adapter drivers that operate in the context of the Windows Vista Display Driver Model and support output protection management (OPM) for monitor child devices. - - - The GUID_DEVINTERFACE_VIDEO_OUTPUT_ARRIVAL device interface class is defined for child devices of display devices. - - - The GUID_DISPLAY_DEVICE_ARRIVAL device interface class is defined for display adapters. - - - The GUID_DEVINTERFACE_HID device interface class is defined for HID collections. - - - The GUID_DEVINTERFACE_KEYBOARD device interface class is defined for keyboard devices. - - - The GUID_DEVINTERFACE_MOUSE device interface class is defined for mouse devices. - - - The GUID_DEVINTERFACE_MODEM device interface class is defined for modem devices. - - - The GUID_DEVINTERFACE_NET device interface class is defined for network devices. - - - The GUID_DEVINTERFACE_COMPORT device interface class is defined for COM ports. - - - The GUID_DEVINTERFACE_PARALLEL device interface class is defined for parallel ports that support an IEEE 1284-compatible hardware interface. - - - The GUID_DEVINTERFACE_PARCLASS device interface class is defined for devices that are attached to a parallel port. - - - The GUID_DEVINTERFACE_SERENUM_BUS_ENUMERATOR device interface class is defined for Plug and Play (PnP) serial ports. - - - The GUID_DEVINTERFACE_CDCHANGER device interface class is defined for CD-ROM changer devices. - - - The GUID_DEVINTERFACE_CDROM device interface class is defined for CD-ROM storage devices. - - - The GUID_DEVINTERFACE_DISK device interface class is defined for hard disk storage devices. - - - The GUID_DEVINTERFACE_FLOPPY device interface class is defined for floppy disk storage devices. - - - The GUID_DEVINTERFACE_MEDIUMCHANGER device interface class is defined for medium changer devices. - - - The GUID_DEVINTERFACE_PARTITION device interface class is defined for partition devices. - - - The GUID_DEVINTERFACE_STORAGEPORT device interface class is defined for storage port devices. - - - The GUID_DEVINTERFACE_TAPE device interface class is defined for tape storage devices. - - - The GUID_DEVINTERFACE_VOLUME device interface class is defined for volume devices. - - - The GUID_DEVINTERFACE_WRITEONCEDISK device interface class is defined for write-once disk devices. - - - The GUID_DEVINTERFACE_USB_DEVICE device interface class is defined for USB devices that are attached to a USB hub. - - - The GUID_DEVINTERFACE_USB_HOST_CONTROLLER device interface class is defined for USB host controller devices. - - - The GUID_DEVINTERFACE_USB_HUB device interface class is defined for USB hub devices. - - - Defines the controllable aspects of the Volume.DefineDosDevice() method. - - - DDD_EXACT_MATCH_ON_REMOVE - Default. - - - - DDD_RAW_TARGET_PATH - Uses the targetPath string as is. Otherwise, it is converted from an MS-DOS path to a path. - - - - DDD_REMOVE_DEFINITION - Removes the specified definition for the specified device. - To determine which definition to remove, the function walks the list of mappings for the device, looking for a match of targetPath against a prefix of each mapping associated with this device. - The first mapping that matches is the one removed, and then the function returns. - If targetPath is null or a pointer to a null string, the function will remove the first mapping associated with the device and pop the most recent one pushed.If there is nothing left to pop, the device name will be removed. - If this value is not specified, the string pointed to by the targetPath parameter will become the new mapping for this device. - - - - DDD_EXACT_MATCH_ON_REMOVE - If this value is specified along with , the function will use an exact match to determine which mapping to remove. - Use this value to ensure that you do not delete something that you did not define. - - - - DDD_NO_BROADCAST_SYSTEM - Do not broadcast the WM_SETTINGCHANGE message. - By default, this message is broadcast to notify the shell and applications of the change. - - - - Determines the format to convert a path to using - - - (FileNameNormalized / VolumeNameDos) Return the normalized drive name. This is the default. - - - Return the path with a volume GUID path instead of the drive name. - - - Return the path with the volume device path. - - - Return the path with no drive information. - - - Return the opened file name (not normalized). - - - Enumeration specifying the different reparse point tags. - - Reparse tags, with the exception of IO_REPARSE_TAG_SYMLINK, are processed on the server and are not processed by a client after transmission over the wire. - Clients should treat associated reparse data as opaque data. - - - - The entry is not a reparse point. - - - IO_REPARSE_APPXSTREAM - - - IO_REPARSE_TAG_CSV - - - IO_REPARSE_TAG_DRIVER_EXTENDER - Used by Home server drive extender. - - - - IO_REPARSE_TAG_DEDUP - - - IO_REPARSE_TAG_DFS - Used by the DFS filter. - - - - IO_REPARSE_TAG_DFSR - Used by the DFS filter. - - - - IO_REPARSE_TAG_FILTER_MANAGER - Used by filter manager test harness. - - - - IO_REPARSE_TAG_HSM - (Obsolete) Used by legacy Hierarchical Storage Manager Product. - - - - IO_REPARSE_TAG_HSM2 - (Obsolete) Used by legacy Hierarchical Storage Manager Product. - - - - IO_REPARSE_TAG_NFS - NFS symlinks, Windows 8 / SMB3 and later. - - - - IO_REPARSE_TAG_MOUNT_POINT - Used for mount point support. - - - - IO_REPARSE_TAG_SIS - Used by single-instance storage (SIS) filter driver. - - - - IO_REPARSE_TAG_SYMLINK - Used for symbolic link support. - - - - IO_REPARSE_TAG_WIM - - - WIN32_STREAM_ID Attributes of data to facilitate cross-operating system transfer. - - - STREAM_NORMAL_ATTRIBUTE - This backup stream has no special attributes. - - - - STREAM_MODIFIED_WHEN_READ - Attribute set if the stream contains data that is modified when read. - Allows the backup application to know that verification of data will fail. - - - - STREAM_CONTAINS_SECURITY - The backup stream contains security information. - This attribute applies only to backup stream of type . - - - - Reserved. - - - STREAM_SPARSE_ATTRIBUTE - The backup stream is part of a sparse file stream. - This attribute applies only to backup stream of type , , and . - - - - The type of the data contained in the backup stream. - - - This indicates an error. - - - BACKUP_DATA - Standard data. This corresponds to the NTFS $DATA stream type on the default (unnamed) data stream. - - - - BACKUP_EA_DATA - Extended attribute data. This corresponds to the NTFS $EA stream type. - - - - BACKUP_SECURITY_DATA - Security descriptor data. - - - - BACKUP_ALTERNATE_DATA - Alternative data streams. This corresponds to the NTFS $DATA stream type on a named data stream. - - - - BACKUP_LINK - Hard link information. This corresponds to the NTFS $FILE_NAME stream type. - - - - BACKUP_PROPERTY_DATA - Property data. - - - - BACKUP_OBJECT_ID - Objects identifiers. This corresponds to the NTFS $OBJECT_ID stream type. - - - - BACKUP_REPARSE_DATA - Reparse points. This corresponds to the NTFS $REPARSE_POINT stream type. - - - - BACKUP_SPARSE_BLOCK - Sparse file. This corresponds to the NTFS $DATA stream type for a sparse file. - - - - BACKUP_TXFS_DATA - Transactional NTFS (TxF) data stream. - - Windows Server 2003 and Windows XP: This value is not supported. - - - Flags that specify how a file or directory is to be copied. - - - No CopyOptions used, this allows overwriting the file. - - - COPY_FILE_FAIL_IF_EXISTS - The copy operation fails immediately if the target file already exists. - - - - COPY_FILE_RESTARTABLE - - Progress of the copy is tracked in the target file in case the copy fails. The failed copy can be restarted at a later time by specifying the same values - forexisting file name and new file name as those used in the call that failed. This can significantly slow down the copy operation as the new file may be - flushed multiple times during the copy operation. - - - - - COPY_FILE_OPEN_SOURCE_FOR_WRITE - The file is copied and the original file is opened for write access. - - - - COPY_FILE_ALLOW_DECRYPTED_DESTINATION - An attempt to copy an encrypted file will succeed even if the destination copy cannot be encrypted. - - - - COPY_FILE_COPY_SYMLINK - If the source file is a symbolic link, the destination file is also a symbolic link pointing to the same file that the source symbolic link is pointing to. - - - - COPY_FILE_NO_BUFFERING - The copy operation is performed using unbuffered I/O, bypassing system I/O cache resources. Recommended for very large file transfers. - - - - Used by CopyFileXxx and MoveFileXxx. The reason that was called. - - - CALLBACK_CHUNK_FINISHED - Another part of the data file was copied. - - - - CALLBACK_STREAM_SWITCH - Another stream was created and is about to be copied. This is the callback reason given when the callback routine is first invoked. - - - - Provides static methods to retrieve device resource information from a local or remote host. - - - Enumerates all available devices on the local host. - instances of type from the local host. - One of the devices. - - - Enumerates all available devices of type on the local or remote host. - instances of type for the specified . - The name of the local or remote host on which the device resides. refers to the local host. - One of the devices. - - - Enumerates all available devices on the local or remote host. - - - Get information about the target of a mount point or symbolic link on an NTFS file system. - - - Sets the NTFS compression state of a file or directory on a volume whose file system supports per-file and per-directory compression. - Specifies that is a file or directory. - The transaction. - A path that describes a folder or file to compress or decompress. - = compress, = decompress - Indicates the format of the path parameter(s). - - - Builds a DeviceInfo Data structure. - An initialized NativeMethods.SP_DEVINFO_DATA instance. - - - Builds a Device Interface Data structure. - An initialized NativeMethods.SP_DEVICE_INTERFACE_DATA instance. - - - Builds a Device Interface Detail Data structure. - An initialized NativeMethods.SP_DEVICE_INTERFACE_DETAIL_DATA instance. - - - Repeatedly invokes InvokeIoControl with the specified input until enough memory has been allocated. - - - The provides access to data associated with a specific file or directory, including security information and alternative data streams, for backup and restore operations. - This class uses the BackupRead, - BackupSeek and - BackupWrite functions from the Win32 API to provide access to the file or directory. - - - - Initializes a new instance of the class with the specified path and creation mode. - A relative or absolute path for the file that the current object will encapsulate. - A constant that determines how to open or create the file. - The file will be opened for exclusive access for both reading and writing. - - - Initializes a new instance of the class with the specified path, creation mode and access rights. - A relative or absolute path for the file that the current object will encapsulate. - A constant that determines how to open or create the file. - A constant that determines the access rights to use when creating access and audit rules for the file. - The file will be opened for exclusive access. - - - Initializes a new instance of the class with the specified path, creation mode, access rights and sharing permission. - A relative or absolute path for the file that the current object will encapsulate. - A constant that determines how to open or create the file. - A constant that determines the access rights to use when creating access and audit rules for the file. - A constant that determines how the file will be shared by processes. - - - Initializes a new instance of the class with the specified path, creation mode, access rights and sharing permission, and additional file attributes. - A relative or absolute path for the file that the current object will encapsulate. - A constant that determines how to open or create the file. - A constant that determines the access rights to use when creating access and audit rules for the file. - A constant that determines how the file will be shared by processes. - A constant that specifies additional file attributes. - - - Initializes a new instance of the class with the specified path, creation mode, access rights and sharing permission, additional file attributes, access control and audit security. - A relative or absolute path for the file that the current object will encapsulate. - A constant that determines how to open or create the file. - A constant that determines the access rights to use when creating access and audit rules for the file. - A constant that determines how the file will be shared by processes. - A constant that specifies additional file attributes. - A constant that determines the access control and audit security for the file. This parameter This parameter may be . - - - Initializes a new instance of the class with the specified path and creation mode. - The transaction. - A relative or absolute path for the file that the current object will encapsulate. - A constant that determines how to open or create the file. - The file will be opened for exclusive access for both reading and writing. - - - Initializes a new instance of the class with the specified path, creation mode and access rights. - The transaction. - A relative or absolute path for the file that the current object will encapsulate. - A constant that determines how to open or create the file. - A constant that determines the access rights to use when creating access and audit rules for the file. - The file will be opened for exclusive access. - - - Initializes a new instance of the class with the specified path, creation mode, access rights and sharing permission. - The transaction. - A relative or absolute path for the file that the current object will encapsulate. - A constant that determines how to open or create the file. - A constant that determines the access rights to use when creating access and audit rules for the file. - A constant that determines how the file will be shared by processes. - - - Initializes a new instance of the class with the specified path, creation mode, access rights and sharing permission, and additional file attributes. - The transaction. - A relative or absolute path for the file that the current object will encapsulate. - A constant that determines how to open or create the file. - A constant that determines the access rights to use when creating access and audit rules for the file. - A constant that determines how the file will be shared by processes. - A constant that specifies additional file attributes. - - - Initializes a new instance of the class with the specified path, creation mode, access rights and sharing permission, additional file attributes, access control and audit security. - The transaction. - A relative or absolute path for the file that the current object will encapsulate. - A constant that determines how to open or create the file. - A constant that determines the access rights to use when creating access and audit rules for the file. - A constant that determines how the file will be shared by processes. - A constant that specifies additional file attributes. - A constant that determines the access control and audit security for the file. This parameter This parameter may be . - - - Initializes a new instance of the class for the specified file handle, with the specified read/write permission. - A file handle for the file that this object will encapsulate. - A constant that gets the and properties of the object. - - - When overridden in a derived class, gets the length in bytes of the stream. - This method always throws an exception. - - - - When overridden in a derived class, gets or sets the position within the current stream. - This method always throws an exception. - - - - When overridden in a derived class, sets the position within the current stream. - A byte offset relative to the parameter. - A value of type indicating the reference point used to obtain the new position. - The new position within the current stream. - This stream does not support seeking using this method, and calling this method will always throw . See for an alternative way of seeking forward. - - - - When overridden in a derived class, sets the length of the current stream. - The desired length of the current stream in bytes. - This method is not supported by the class, and calling it will always generate a . - - - - Gets a value indicating whether the current stream supports reading. - if the stream supports reading, otherwise. - - - Gets a value indicating whether the current stream supports seeking. - This method always returns . - - - Gets a value indicating whether the current stream supports writing. - if the stream supports writing, otherwise. - - - Gets a object that represents the operating system file handle for the file that the current object encapsulates. - A object that represents the operating system file handle for the file that - the current object encapsulates. - - - Reads a sequence of bytes from the current stream and advances the position within the stream by the number of bytes read. - This method will not backup the access-control list (ACL) data for the file or directory. - - An array of bytes. When this method returns, the buffer contains the specified byte array with the values between - and ( + - 1) replaced by the bytes read from the - current source. - - - The zero-based byte offset in at which to begin storing the data read from the current stream. - - The maximum number of bytes to be read from the current stream. - - The total number of bytes read into the buffer. This can be less than the number of bytes requested if that many bytes are not - currently available, or zero (0) if the end of the stream has been reached. - - - - - - - - - - When overridden in a derived class, reads a sequence of bytes from the current stream and advances the position within the stream by the number of bytes read. - An array of bytes. When this method returns, the buffer contains the specified byte array with the values - between and ( + - 1) replaced by the bytes read from the current source. - The zero-based byte offset in at which to begin storing the data read from the current stream. - The maximum number of bytes to be read from the current stream. - Indicates whether the function will backup the access-control list (ACL) data for the file or directory. - - The total number of bytes read into the buffer. This can be less than the number of bytes requested if that many bytes are not - currently available, or zero (0) if the end of the stream has been reached. - - - - - - - - - Writes a sequence of bytes to the current stream and advances the current position within this stream by the number of bytes written. - - Writes a sequence of bytes to the current stream and advances the current position within this stream by the number of bytes written. - - An array of bytes. This method copies bytes from to the current stream. - The zero-based byte offset in at which to begin copying bytes to the current stream. - The number of bytes to be written to the current stream. - - - - - - This method will not process the access-control list (ACL) data for the file or directory. - - - When overridden in a derived class, writes a sequence of bytes to the current stream and advances the current position within this stream by the number of bytes written. - An array of bytes. This method copies bytes from to the current stream. - The zero-based byte offset in at which to begin copying bytes to the current stream. - The number of bytes to be written to the current stream. - Specifies whether the function will restore the access-control list (ACL) data for the file or directory. - If this is you need to specify and access when - opening the file or directory handle. If the handle does not have those access rights, the operating system denies - access to the ACL data, and ACL data restoration will not occur. - - - - - - - - Clears all buffers for this stream and causes any buffered data to be written to the underlying device. - - - Skips ahead the specified number of bytes from the current stream. - This method represents the Win32 API implementation of BackupSeek. - - Applications use the method to skip portions of a data stream that cause errors. This function does not - seek across stream headers. For example, this function cannot be used to skip the stream name. If an application - attempts to seek past the end of a substream, the function fails, the return value indicates the actual number of bytes - the function seeks, and the file position is placed at the start of the next stream header. - - - The number of bytes to skip. - The number of bytes actually skipped. - - - Gets a object that encapsulates the access control list (ACL) entries for the file described by the current object. - - - A object that encapsulates the access control list (ACL) entries for the file described by the current - object. - - - - Applies access control list (ACL) entries described by a object to the file described by the current object. - A object that describes an ACL entry to apply to the current file. - - - Prevents other processes from changing the while permitting read access. - The beginning of the range to lock. The value of this parameter must be equal to or greater than zero (0). - The range to be locked. - - - - - Allows access by other processes to all or part of a file that was previously locked. - The beginning of the range to unlock. - The range to be unlocked. - - - - - - Reads a stream header from the current . - The stream header read from the current , or if the end-of-file - was reached before the required number of bytes of a header could be read. - - The stream must be positioned at where an actual header starts for the returned object to represent valid - information. - - - Releases the unmanaged resources used by the and optionally releases the managed resources. - to release both managed and unmanaged resources; to release only unmanaged resources. - - - Releases unmanaged resources and performs other cleanup operations before the is reclaimed by garbage collection. - - - Represents the encryption status of the specified file. - - - The file can be encrypted. - - - The file is encrypted. - - - The file is a system file. System files cannot be encrypted. - - - The file is a root directory. Root directories cannot be encrypted. - - - The file is a system directory. System directories cannot be encrypted. - - - The encryption status is unknown. The file may be encrypted. - - - The file system does not support file encryption. - - - Reserved for future use. - - - The file is a read-only file. - - - Contains information that the GetFileInformationByHandle function retrieves. - - - Gets the file attributes. - The file attributes. - - - Gets the time this entry was created. - The time this entry was created. - - - Gets the time, in coordinated universal time (UTC), this entry was created. - The time, in coordinated universal time (UTC), this entry was created. - - - Gets the time this entry was last accessed. - For a file, the structure specifies the last time that a file is read from or written to. - For a directory, the structure specifies when the directory is created. - For both files and directories, the specified date is correct, but the time of day is always set to midnight. - If the underlying file system does not support the last access time, this member is zero (0). - - The time this entry was last accessed. - - - Gets the time, in coordinated universal time (UTC), this entry was last accessed. - For a file, the structure specifies the last time that a file is read from or written to. - For a directory, the structure specifies when the directory is created. - For both files and directories, the specified date is correct, but the time of day is always set to midnight. - If the underlying file system does not support the last access time, this member is zero (0). - - The time, in coordinated universal time (UTC), this entry was last accessed. - - - Gets the time this entry was last modified. - For a file, the structure specifies the last time that a file is written to. - For a directory, the structure specifies when the directory is created. - If the underlying file system does not support the last access time, this member is zero (0). - - The time this entry was last modified. - - - Gets the time, in coordinated universal time (UTC), this entry was last modified. - For a file, the structure specifies the last time that a file is written to. - For a directory, the structure specifies when the directory is created. - If the underlying file system does not support the last access time, this member is zero (0). - - The time, in coordinated universal time (UTC), this entry was last modified. - - - Gets the serial number of the volume that contains a file. - The serial number of the volume that contains a file. - - - Gets the size of the file. - The size of the file. - - - Gets the number of links to this file. For the FAT file system this member is always 1. For the NTFS file system, it can be more than 1. - The number of links to this file. - - - - Gets the unique identifier associated with the file. The identifier and the volume serial number uniquely identify a - file on a single computer. To determine whether two open handles represent the same file, combine the identifier - and the volume serial number for each file and compare them. - - The unique identifier of the file. - - - Contains information about files in the specified directory. Used for directory handles. - - - The number of bytes that are allocated for the file. This value is usually a multiple of the sector or cluster size of the underlying physical device. - - - Gets the time this entry was changed. - The time this entry was changed. - - - Gets the time, in coordinated universal time (UTC), this entry was changed. - The time, in coordinated universal time (UTC), this entry was changed. - - - Gets the time this entry was created. - The time this entry was created. - - - Gets the time, in coordinated universal time (UTC), this entry was created. - The time, in coordinated universal time (UTC), this entry was created. - - - The size of the extended attributes for the file. - - - The absolute new end-of-file position as a byte offset from the start of the file to the end of the file. - Because this value is zero-based, it actually refers to the first free byte in the file. In other words, EndOfFile is the offset to - the byte that immediately follows the last valid byte in the file. - - - - The file attributes. - - - The file ID. - - - The byte offset of the file within the parent directory. This member is undefined for file systems, such as NTFS, - in which the position of a file within the parent directory is not fixed and can be changed at any time to maintain sort order. - - - - The name of the file. - - - Gets the time this entry was last accessed. - The time this entry was last accessed. - - - Gets the time, in coordinated universal time (UTC), this entry was last accessed. - The time, in coordinated universal time (UTC), this entry was last accessed. - - - Gets the time this entry was last modified. - The time this entry was last modified. - - - Gets the time, in coordinated universal time (UTC), this entry was last modified. - The time, in coordinated universal time (UTC), this entry was last modified. - - - The short 8.3 file naming convention (for example, FILENAME.TXT) name of the file. - - - Provides properties and instance methods for the creation, copying, deletion, moving, and opening of files, and aids in the creation of objects. This class cannot be inherited. - - - [AlphaFS] Calculates the hash/checksum. - One of the values. - - - Refreshes the state of the EntryInfo instance. - - - [AlphaFS] Returns an enumerable collection of instances for the file. - An enumerable collection of instances for the file. - - - [AlphaFS] Decompresses an NTFS compressed file. - - - [AlphaFS] Compresses a file using NTFS compression. - - - Returns the path as a string. - The path. - - - Applies access control list (ACL) entries described by a FileSecurity object to the file described by the current FileInfo object. - - The SetAccessControl method applies access control list (ACL) entries to the current file that represents the noninherited ACL - list. Use the SetAccessControl method whenever you need to add or remove ACL entries from a file. - - A object that describes an access control list (ACL) entry to apply to the current file. - - - Applies access control list (ACL) entries described by a FileSecurity object to the file described by the current FileInfo object. - - The SetAccessControl method applies access control list (ACL) entries to the current file that represents the noninherited ACL - list. Use the SetAccessControl method whenever you need to add or remove ACL entries from a file. - - A object that describes an access control list (ACL) entry to apply to the current file. - One or more of the values that specifies the type of access control list (ACL) information to set. - - - Replaces the contents of a specified file with the file described by the current object, deleting the original file, and creating a backup of the replaced file. - A object that encapsulates information about the file described by the parameter. - - The Replace method replaces the contents of a specified file with the contents of the file described by the current - object. It also creates a backup of the file that was replaced. Finally, it returns a new - object that describes the overwritten file. - - Pass null to the parameter if you do not want to create a backup of the file being replaced. - The name of a file to replace with the current file. - The name of a file with which to create a backup of the file described by the parameter. - - - Replaces the contents of a specified file with the file described by the current object, deleting the original file, and creating a backup of the replaced file. Also specifies whether to ignore merge errors. - A object that encapsulates information about the file described by the parameter. - - The Replace method replaces the contents of a specified file with the contents of the file described by the current - object. It also creates a backup of the file that was replaced. Finally, it returns a new - object that describes the overwritten file. - - Pass null to the parameter if you do not want to create a backup of the file being replaced. - The name of a file to replace with the current file. - The name of a file with which to create a backup of the file described by the parameter. - to ignore merge errors (such as attributes and ACLs) from the replaced file to the replacement file; otherwise, . - - - [AlphaFS] Replaces the contents of a specified file with the file described by the current object, deleting the original file, and creating a backup of the replaced file. Also specifies whether to ignore merge errors. - A object that encapsulates information about the file described by the parameter. - - The Replace method replaces the contents of a specified file with the contents of the file described by the current - object. It also creates a backup of the file that was replaced. Finally, it returns a new - object that describes the overwritten file. - - Pass null to the parameter if you do not want to create a backup of the file being replaced. - The name of a file to replace with the current file. - The name of a file with which to create a backup of the file described by the parameter. - Indicates the format of the path parameter(s). - - - [AlphaFS] Replaces the contents of a specified file with the file described by the current object, deleting the original file, and creating a backup of the replaced file. Also specifies whether to ignore merge errors. - A object that encapsulates information about the file described by the parameter. - - The Replace method replaces the contents of a specified file with the contents of the file described by the current - object. It also creates a backup of the file that was replaced. Finally, it returns a new - object that describes the overwritten file. - - Pass null to the parameter if you do not want to create a backup of the file being replaced. - The name of a file to replace with the current file. - The name of a file with which to create a backup of the file described by the parameter. - to ignore merge errors (such as attributes and ACLs) from the replaced file to the replacement file; otherwise, . - Indicates the format of the path parameter(s). - - - Refreshes the state of the object. - - - Creates a write-only . - A write-only unshared object for a new or existing file. - - - Creates a with NativeMethods.DefaultFileEncoding encoding that reads from an existing text file. - A new with NativeMethods.DefaultFileEncoding encoding. - - - [AlphaFS] Creates a with that reads from an existing text file. - A new with the specified . - The applied to the contents of the file. - - - Creates a read-only . - A new read-only object. - This method returns a read-only object with the mode set to Read. - - - Opens a file in the specified mode. - A file opened in the specified mode, with read/write access and unshared. - A constant specifying the mode (for example, Open or Append) in which to open the file. - - - Opens a file in the specified mode with read, write, or read/write access. - A object opened in the specified mode and access, and unshared. - A constant specifying the mode (for example, Open or Append) in which to open the file. - A constant specifying whether to open the file with Read, Write, or ReadWrite file access. - - - Opens a file in the specified mode with read, write, or read/write access and the specified sharing option. - A object opened with the specified mode, access, and sharing options. - A constant specifying the mode (for example, Open or Append) in which to open the file. - A constant specifying whether to open the file with Read, Write, or ReadWrite file access. - A constant specifying the type of access other objects have to this file. - - - [AlphaFS] Opens a file in the specified mode with read, write, or read/write access. - A object opened in the specified mode and access, and unshared. - A constant specifying the mode (for example, Open or Append) in which to open the file. - A value that specifies whether a file is created if one does not exist, and determines whether the contents of existing files are retained or overwritten along with additional options. - - - [AlphaFS] Opens a file in the specified mode with read, write, or read/write access and the specified sharing option. - A object opened with the specified mode, access, and sharing options. - A constant specifying the mode (for example, Open or Append) in which to open the file. - A value that specifies whether a file is created if one does not exist, and determines whether the contents of existing files are retained or overwritten along with additional options. - A constant specifying the type of access other objects have to this file. - - - Gets a object that encapsulates the access control list (ACL) entries for the file described by the current object. - A FileSecurity object that encapsulates the access control rules for the current file. - - - Gets a object that encapsulates the specified type of access control list (ACL) entries for the file described by the current FileInfo object. - object that encapsulates the specified type of access control list (ACL) entries for the file described by the current FileInfo object. - One of the values that specifies which group of access control entries to retrieve. - - - Encrypts a file so that only the account used to encrypt the file can decrypt it. - - - Permanently deletes a file. - If the file does not exist, this method does nothing. - - - - - [AlphaFS] Permanently deletes a file. - If the file does not exist, this method does nothing. - overrides the read only of the file. - - - Decrypts a file that was encrypted by the current account using the Encrypt method. - - - Creates a instance that writes a new text file. - A new - - - Creates a file. - A new file. - - - Copies an existing file to a new file, disallowing the overwriting of an existing file. - A new instance with a fully qualified path. - - Use this method to prevent overwriting of an existing file by default. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - A new instance with a fully qualified path. - - - - - - - - The name of the new file to copy to. - - - Copies an existing file to a new file, allowing the overwriting of an existing file. - - Use this method to allow or prevent overwriting of an existing file. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - A new instance with a fully qualified path. - - - - - - - - The name of the new file to copy to. - to allow an existing file to be overwritten; otherwise, . - - - [AlphaFS] Copies an existing file to a new file, disallowing the overwriting of an existing file. - - Use this method to prevent overwriting of an existing file by default. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - A new instance with a fully qualified path. - - - - - - - - The name of the new file to copy to. - Indicates the format of the path parameter(s). - - - [AlphaFS] Copies an existing file to a new file, allowing the overwriting of an existing file. - - Use this method to allow or prevent overwriting of an existing file. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - A new instance with a fully qualified path. - - - - - - - - The name of the new file to copy to. - to allow an existing file to be overwritten; otherwise, . - Indicates the format of the path parameter(s). - - - [AlphaFS] Copies an existing file to a new file, allowing the overwriting of an existing file, can be specified. - - Option is recommended for very large file transfers. - Use this method to allow or prevent overwriting of an existing file. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - A new instance with a fully qualified path. - - - - - - - - The name of the new file to copy to. - that specify how the file is to be copied. - - - [AlphaFS] Copies an existing file to a new file, allowing the overwriting of an existing file, can be specified. - - Option is recommended for very large file transfers. - Use this method to allow or prevent overwriting of an existing file. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - A new instance with a fully qualified path. - - - - - - - - The name of the new file to copy to. - that specify how the file is to be copied. - Indicates the format of the path parameter(s). - - - [AlphaFS] Copies an existing file to a new file, allowing the overwriting of an existing file, can be specified. - - Option is recommended for very large file transfers. - Use this method to allow or prevent overwriting of an existing file. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - A new instance with a fully qualified path. - - - - - - - - The name of the new file to copy to. - that specify how the file is to be copied. - if original Timestamps must be preserved, otherwise. - - - [AlphaFS] Copies an existing file to a new file, allowing the overwriting of an existing file, can be specified. - - Option is recommended for very large file transfers. - Use this method to allow or prevent overwriting of an existing file. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - A new instance with a fully qualified path. - - - - - - - - The name of the new file to copy to. - that specify how the file is to be copied. - if original Timestamps must be preserved, otherwise. - Indicates the format of the path parameter(s). - - - [AlphaFS] Copies an existing file to a new file, allowing the overwriting of an existing file, can be specified. - and the possibility of notifying the application of its progress through a callback function. - - Option is recommended for very large file transfers. - Use this method to allow or prevent overwriting of an existing file. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - A class with details of the Copy action. - - - - - - - - The name of the new file to copy to. - that specify how the file is to be copied. - A callback function that is called each time another portion of the file has been copied. This parameter can be . - The argument to be passed to the callback function. This parameter can be . - - - [AlphaFS] Copies an existing file to a new file, allowing the overwriting of an existing file, can be specified. - - Option is recommended for very large file transfers. - Use this method to allow or prevent overwriting of an existing file. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - A class with details of the Copy action. - - - - - - - - The name of the new file to copy to. - that specify how the file is to be copied. - A callback function that is called each time another portion of the file has been copied. This parameter can be . - The argument to be passed to the callback function. This parameter can be . - Indicates the format of the path parameter(s). - - - [AlphaFS] Copies an existing file to a new file, allowing the overwriting of an existing file, can be specified. - and the possibility of notifying the application of its progress through a callback function. - - Option is recommended for very large file transfers. - Use this method to allow or prevent overwriting of an existing file. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - A class with details of the Copy action. - - - - - - - - The name of the new file to copy to. - that specify how the file is to be copied. - if original Timestamps must be preserved, otherwise. - A callback function that is called each time another portion of the file has been copied. This parameter can be . - The argument to be passed to the callback function. This parameter can be . - - - [AlphaFS] Copies an existing file to a new file, allowing the overwriting of an existing file, can be specified. - and the possibility of notifying the application of its progress through a callback function. - - Option is recommended for very large file transfers. - Use this method to allow or prevent overwriting of an existing file. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - A class with details of the Copy action. - - - - - - - - The name of the new file to copy to. - that specify how the file is to be copied. - if original Timestamps must be preserved, otherwise. - A callback function that is called each time another portion of the file has been copied. This parameter can be . - The argument to be passed to the callback function. This parameter can be . - Indicates the format of the path parameter(s). - - - Moves a specified file to a new location, providing the option to specify a new file name. - - Use this method to prevent overwriting of an existing file by default. - This method works across disk volumes. - For example, the file c:\MyFile.txt can be moved to d:\public and renamed NewFile.txt. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - A class with details of the Move action. - - - - - - - - The path to move the file to, which can specify a different file name. - - - [AlphaFS] Moves a specified file to a new location, providing the option to specify a new file name. - Returns a new instance with a fully qualified path when successfully moved, - - Use this method to prevent overwriting of an existing file by default. - This method works across disk volumes. - For example, the file c:\MyFile.txt can be moved to d:\public and renamed NewFile.txt. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable - behavior. - - - - - - - - - - The path to move the file to, which can specify a different file name. - Indicates the format of the path parameter(s). - - - [AlphaFS] Moves a specified file to a new location, providing the option to specify a new file name, can be specified. - Returns a new instance with a fully qualified path when successfully moved, - - Use this method to allow or prevent overwriting of an existing file. - This method works across disk volumes. - For example, the file c:\MyFile.txt can be moved to d:\public and renamed NewFile.txt. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable - behavior. - - - - - - - - - - The path to move the file to, which can specify a different file name. - that specify how the directory is to be moved. This parameter can be . - - - [AlphaFS] Moves a specified file to a new location, providing the option to specify a new file name, can be specified. - Returns a new instance with a fully qualified path when successfully moved, - - Use this method to allow or prevent overwriting of an existing file. - This method works across disk volumes. - For example, the file c:\MyFile.txt can be moved to d:\public and renamed NewFile.txt. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable - behavior. - - - - - - - - - - The path to move the file to, which can specify a different file name. - that specify how the directory is to be moved. This parameter can be . - Indicates the format of the path parameter(s). - - - [AlphaFS] Moves a specified file to a new location, providing the option to specify a new file name, can be specified, - and the possibility of notifying the application of its progress through a callback function. - - Use this method to allow or prevent overwriting of an existing file. - This method works across disk volumes. - For example, the file c:\MyFile.txt can be moved to d:\public and renamed NewFile.txt. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - A class with the status of the Move action. - - - - - - - - The path to move the file to, which can specify a different file name. - that specify how the directory is to be moved. This parameter can be . - A callback function that is called each time another portion of the directory has been moved. This parameter can be . - The argument to be passed to the callback function. This parameter can be . - - - [AlphaFS] Moves a specified file to a new location, providing the option to specify a new file name, can be specified. - - Use this method to allow or prevent overwriting of an existing file. - This method works across disk volumes. - For example, the file c:\MyFile.txt can be moved to d:\public and renamed NewFile.txt. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - A class with the status of the Move action. - - - - - - - - The path to move the file to, which can specify a different file name. - that specify how the directory is to be moved. This parameter can be . - A callback function that is called each time another portion of the directory has been moved. This parameter can be . - The argument to be passed to the callback function. This parameter can be . - Indicates the format of the path parameter(s). - - - Copy/move an existing file to a new file, allowing the overwriting of an existing file. - - Option is recommended for very large file transfers. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - A class with the status of the Copy or Move action. - A full path string to the destination directory - if original Timestamps must be preserved, otherwise. - This parameter can be . Use to specify how the file is to be copied. - This parameter can be . Use that specify how the file is to be moved. - This parameter can be . A callback function that is called each time another portion of the file has been copied. - This parameter can be . The argument to be passed to the callback function. - [out] Returns the retrieved long full path. - Indicates the format of the path parameter(s). - - - - - - - - - Creates a that appends text to the file represented by this instance of the . - A new - - - Creates a that appends text to the file represented by this instance of the . - The character to use. - A new - - - Initializes a new instance of the class, which acts as a wrapper for a file path. - The fully qualified name of the new file, or the relative file name. Do not end the path with the directory separator character. - This constructor does not check if a file exists. This constructor is a placeholder for a string that is used to access the file in subsequent operations. - - - [AlphaFS] Initializes a new instance of the class, which acts as a wrapper for a file path. - The fully qualified name of the new file, or the relative file name. Do not end the path with the directory separator character. - Indicates the format of the path parameter(s). - This constructor does not check if a file exists. This constructor is a placeholder for a string that is used to access the file in subsequent operations. - - - [AlphaFS] Initializes a new instance of the class, which acts as a wrapper for a file path. - The transaction. - The fully qualified name of the new file, or the relative file name. Do not end the path with the directory separator character. - This constructor does not check if a file exists. This constructor is a placeholder for a string that is used to access the file in subsequent operations. - - - [AlphaFS] Initializes a new instance of the class, which acts as a wrapper for a file path. - The transaction. - The fully qualified name of the new file, or the relative file name. Do not end the path with the directory separator character. - Indicates the format of the path parameter(s). - This constructor does not check if a file exists. This constructor is a placeholder for a string that is used to access the file in subsequent operations. - - - Gets an instance of the parent directory. - A object representing the parent directory of this file. - To get the parent directory as a string, use the DirectoryName property. - - - - Gets a string representing the directory's full path. - A string representing the directory's full path. - - To get the parent directory as a DirectoryInfo object, use the Directory property. - When first called, FileInfo calls Refresh and caches information about the file. - On subsequent calls, you must call Refresh to get the latest copy of the information. - - - - - Gets a value indicating whether the file exists. - if the file exists; otherwise, . - - The property returns if any error occurs while trying to determine if the specified file exists. - This can occur in situations that raise exceptions such as passing a file name with invalid characters or too many characters, - a failing or missing disk, or if the caller does not have permission to read the file. - - - - Gets or sets a value that determines if the current file is read only. - if the current file is read only; otherwise, . - - Use the IsReadOnly property to quickly determine or change whether the current file is read only. - When first called, FileInfo calls Refresh and caches information about the file. - On subsequent calls, you must call Refresh to get the latest copy of the information. - - - - - - Gets the size, in bytes, of the current file. - The size of the current file in bytes. - - The value of the Length property is pre-cached - To get the latest value, call the Refresh method. - - - - - - Gets the name of the file. - The name of the file. - - The name of the file includes the file extension. - When first called, calls Refresh and caches information about the file. - On subsequent calls, you must call Refresh to get the latest copy of the information. - The name of the file includes the file extension. - - - - Specifies how the operating system should open a file. - - - If you pass , the set of attributes is unspecified. explicitly sets no attributes. - - - The file is read only. Applications can read the file, but cannot write to or delete it. - Equals 1 - - - The file is hidden. Do not include it in an ordinary directory listing. - Equals 2 - - - The file is part of or used exclusively by an operating system. - Equals 4 - - - The handle that identifies a directory. - Equals 16 - - - The file should be archived. Applications use this attribute to mark files for backup or removal. - Equals 32 - - - The file should be archived. Applications use this attribute to mark files for backup or removal. - Equals 64 - - - The file does not have other attributes set. This attribute is valid only if used alone. - Equals 128 - - - The file is being used for temporary storage. - Equals 256 - - - A file that is a sparse file. - Equals 512 - - - A file or directory that has an associated reparse point, or a file that is a symbolic link. - Equals 1024 - - - A file or directory that is compressed. For a file, all of the data in the file is compressed. For a directory, compression is the default for newly created files and subdirectories. - Equals 2048 - - - The data of a file is not immediately available. This attribute indicates that file data is physically moved to offline storage. This attribute is used by Remote Storage, the hierarchical storage management software. Applications should not arbitrarily change this attribute. - Equals 4096 - - - The file or directory is not to be indexed by the content indexing service. - Equals 8192 - - - The file or directory is encrypted. For a file, this means that all data in the file is encrypted. For a directory, this means that encryption is the default for newly created files and subdirectories. - Equals 16384 - - - The directory or user data stream is configured with integrity (only supported on ReFS volumes). It is not included in an ordinary directory listing. The integrity setting persists with the file if it's renamed. If a file is copied the destination file will have integrity set if either the source file or destination directory have integrity set. - This flag is not supported until Windows Server 2012. - - - The user data stream not to be read by the background data integrity scanner (AKA scrubber). When set on a directory it only provides inheritance. This flag is only supported on Storage Spaces and ReFS volumes. It is not included in an ordinary directory listing. - This flag is not supported until Windows Server 2012. - - - ... - - - The file data is requested, but it should continue to be located in remote storage. It should not be transported back to local storage. This flag is for use by remote storage systems. - - - Normal reparse point processing will not occur; an attempt to open the reparse point will be made. When a file is opened, a file handle is returned, whether or not the filter that controls the reparse point is operational. See MSDN documentation for more information. - - - Access will occur according to POSIX rules. This includes allowing multiple files with names, differing only in case, for file systems that support that naming. Use care when using this option, because files created with this flag may not be accessible by applications that are written for MS-DOS or 16-bit Windows. - - - The file is being opened or created for a backup or restore operation. The system ensures that the calling process overrides file security checks when the process has SE_BACKUP_NAME and SE_RESTORE_NAME privileges. You must set this flag to obtain a handle to a directory. A directory handle can be passed to some functions instead of a file handle. - - - The file is to be deleted immediately after all of its handles are closed, which includes the specified handle and any other open or duplicated handles. If there are existing open handles to a file, the call fails unless they were all opened with the share mode. Subsequent open requests for the file fail, unless the share mode is specified. - Equals 67108864 - - - Access is intended to be sequential from beginning to end. The system can use this as a hint to optimize file caching. - Equals 134217728 - - - Access is intended to be random. The system can use this as a hint to optimize file caching. - Equals 268435456 - - - There are strict requirements for successfully working with files opened with the flag, for details see the section on "File Buffering" in the online MSDN documentation. - - - The file or device is being opened or created for asynchronous I/O. - Equals 1073741824 - - - Write operations will not go through any intermediate cache, they will go directly to disk. - Equals .NET -2147483648 - - - Class that retrieves file system entries (i.e. files and directories) using Win32 API FindFirst()/FindNext(). - - - Get an enumerator that returns all of the file system objects that match the wildcards that are in any of the directories to be searched. - An instance: FileSystemEntryInfo, DirectoryInfo, FileInfo or string (full path). - - - Gets a specific file system object. - - The return type is based on C# inference. Possible return types are: - - (full path), - ( or ), instance - or null in case an Exception is raised and is . - - - - Gets or sets the ability to return the object as a instance. - returns the object as a instance. - - - Gets or sets the ability to return the full path in long full path format. - returns the full path in long full path format, returns the full path in regular path format. - - - Gets or sets the ability to return the object instance as a . - returns the full path of the object as a - - - Gets the value indicating which to use. - - - Gets or sets the ability to skip on access errors. - suppress any Exception that might be thrown as a result from a failure, such as ACLs protected directories or non-accessible reparse points. - - - Gets the file system object type. - - = Return files and directories. - = Return only directories. - = Return only files. - - - - Gets or sets if the path is an absolute or relative path. - Gets a value indicating whether the specified path string contains absolute or relative path information. - - - Gets or sets the initial path to the folder. - The initial path to the file or folder in long path format. - - - Gets or sets the path to the folder. - The path to the file or folder in long path format. - - - Gets or sets a value indicating which to use. - indicates a folder object, indicates a file object. - - - Gets the value indicating which to use. - - - Specifies whether the search should include only the current directory or should include all subdirectories. - to all subdirectories. - - - Search for file system object-name using a pattern. - The path which has wildcard characters, for example, an asterisk () or a question mark (). - - - skips ReparsePoints, will follow ReparsePoints. - - - Get or sets the KernelTransaction instance. - The transaction. - - - Represents information about a file system entry. - This class cannot be inherited. - - - - Initializes a new instance of the class. - The NativeMethods.WIN32_FIND_DATA structure. - - - Gets the 8.3 version of the filename. - the 8.3 version of the filename. - - - Gets the attributes. - The attributes. - - - Gets the time this entry was created. - The time this entry was created. - - - Gets the time, in coordinated universal time (UTC), this entry was created. - The time, in coordinated universal time (UTC), this entry was created. - - - Gets the name of the file. - The name of the file. - - - Gets the size of the file. - The size of the file. - - - The full path of the file system object. - - - Gets a value indicating whether this instance is compressed. - if this instance is compressed; otherwise, . - - It is not possible to change the compression status of a File object by using the SetAttributes method. - Instead, you must actually compress the file using either a compression tool or one of the classes in the namespace. - - - - Gets a value indicating whether this instance is hidden, and thus is not included in an ordinary directory listing. - if this instance is hidden; otherwise, . - - - Gets a value indicating whether this instance represents a directory. - if this instance represents a directory; otherwise, . - - - Gets a value indicating whether this instance is encrypted (EFS). - if this instance is encrypted (EFS); otherwise, . - - For a file, this means that all data in the file is encrypted. - For a directory, this means that encryption is the default for newly created files and directories. - - - - Gets a value indicating whether this instance is a mount point. - if this instance is a mount point; otherwise, . - - - Gets a value indicating whether this instance is offline. The data of the file is not immediately available. - if this instance is offline; otherwise, . - - - Gets a value indicating whether this instance is read-only. - if this instance is read-only; otherwise, . - - - Gets a value indicating whether this instance contains a reparse point, which is a block of user-defined data associated with a file or a directory. - if this instance contains a reparse point; otherwise, . - - - Gets a value indicating whether this instance is a symbolic link. - if this instance is a symbolic link; otherwise, . - - - Gets the time this entry was last accessed. - The time this entry was last accessed. - - - Gets the time, in coordinated universal time (UTC), this entry was last accessed. - The time, in coordinated universal time (UTC), this entry was last accessed. - - - Gets the time this entry was last modified. - The time this entry was last modified. - - - Gets the time, in coordinated universal time (UTC), this entry was last modified. - The time, in coordinated universal time (UTC), this entry was last modified. - - - The full path of the file system object in Unicode (LongPath) format. - - - Gets the reparse point tag of this entry. - The reparse point tag of this entry. - - - Gets internal WIN32 FIND Data - - - Returns the of the instance. - The instance as a string. - - - Provides the base class for both and objects. - - - Deletes a file or directory. - - - Refreshes the state of the object. - - FileSystemInfo.Refresh() takes a snapshot of the file from the current file system. - Refresh cannot correct the underlying file system even if the file system returns incorrect or outdated information. - This can happen on platforms such as Windows 98. - Calls must be made to Refresh() before attempting to get the attribute information, or the information will be - outdated. - - - - Returns a string that represents the current object. - - ToString is the major formatting method in the .NET Framework. It converts an object to its string representation so that it is - suitable for display. - - A string that represents this instance. - - - Determines whether the specified Object is equal to the current Object. - Another object to compare to. - if the specified Object is equal to the current Object; otherwise, . - - - Serves as a hash function for a particular type. - A hash code for the current Object. - - - Implements the operator == - A. - B. - The result of the operator. - - - Implements the operator != - A. - B. - The result of the operator. - - - Refreshes the state of the EntryInfo instance. - - FileSystemInfo.RefreshEntryInfo() takes a snapshot of the file from the current file system. - Refresh cannot correct the underlying file system even if the file system returns incorrect or outdated information. - This can happen on platforms such as Windows 98. - Calls must be made to Refresh() before attempting to get the attribute information, or the information will be outdated. - - - - [AlphaFS] Resets the state of the file system object to uninitialized. - - - Initializes the specified file name. - - - Specifies that is a file or directory. - The transaction. - The full path and name of the file. - Indicates the format of the path parameter(s). - - - - Gets or sets the attributes for the current file or directory. - - - The value of the CreationTime property is pre-cached - To get the latest value, call the Refresh method. - - of the current . - - - - - - - Gets or sets the creation time of the current file or directory. - - The value of the CreationTime property is pre-cached To get the latest value, call the Refresh method. - This method may return an inaccurate value, because it uses native functions whose values may not be continuously updated by - the operating system. - If the file described in the FileSystemInfo object does not exist, this property will return - 12:00 midnight, January 1, 1601 A.D. (C.E.) Coordinated Universal Time (UTC), adjusted to local time. - NTFS-formatted drives may cache file meta-info, such as file creation time, for a short period of time. - This process is known as file tunneling. As a result, it may be necessary to explicitly set the creation time of a file if you are - overwriting or replacing an existing file. - - The creation date and time of the current object. - - - - - - Gets or sets the creation time, in coordinated universal time (UTC), of the current file or directory. - - The value of the CreationTimeUtc property is pre-cached - To get the latest value, call the Refresh method. - This method may return an inaccurate value, because it uses native functions - whose values may not be continuously updated by the operating system. - To get the latest value, call the Refresh method. - If the file described in the FileSystemInfo object does not exist, this property will return - 12:00 midnight, January 1, 1601 A.D. (C.E.) Coordinated Universal Time (UTC). - NTFS-formatted drives may cache file meta-info, such as file creation time, for a short period of time. - This process is known as file tunneling. As a result, it may be necessary to explicitly set the creation time - of a file if you are overwriting or replacing an existing file. - - The creation date and time in UTC format of the current object. - - - - - - - Gets a value indicating whether the file or directory exists. - - - The property returns if any error occurs while trying to determine if the - specified file or directory exists. - This can occur in situations that raise exceptions such as passing a directory- or file name with invalid characters or too - many characters, - a failing or missing disk, or if the caller does not have permission to read the file or directory. - - if the file or directory exists; otherwise, . - - - - Gets the string representing the extension part of the file. - - - The Extension property returns the extension, including the period (.). - For example, for a file c:\NewFile.txt, this property returns ".txt". - - A string containing the extension. - - - - Gets the full path of the directory or file. - - A string containing the full path. - - - Gets or sets the time the current file or directory was last accessed. - - The value of the LastAccessTime property is pre-cached - To get the latest value, call the Refresh method. - This method may return an inaccurate value, because it uses native functions - whose values may not be continuously updated by the operating system. - If the file described in the FileSystemInfo object does not exist, this property will return - 12:00 midnight, January 1, 1601 A.D. (C.E.) Coordinated Universal Time (UTC), adjusted to local time. - - The time that the current file or directory was last accessed. - - - - - Gets or sets the time, in coordinated universal time (UTC), that the current file or directory was last accessed. - - The value of the LastAccessTimeUtc property is pre-cached. - To get the latest value, call the Refresh method. - This method may return an inaccurate value, because it uses native functions - whose values may not be continuously updated by the operating system. - If the file described in the FileSystemInfo object does not exist, this property will return - 12:00 midnight, January 1, 1601 A.D. (C.E.) Coordinated Universal Time (UTC), adjusted to local time. - - The UTC time that the current file or directory was last accessed. - - - - - Gets or sets the time when the current file or directory was last written to. - - The value of the LastWriteTime property is pre-cached. - To get the latest value, call the Refresh method. - This method may return an inaccurate value, because it uses native functions - whose values may not be continuously updated by the operating system. - If the file described in the FileSystemInfo object does not exist, this property will return - 12:00 midnight, January 1, 1601 A.D. (C.E.) Coordinated Universal Time (UTC), adjusted to local time. - - The time the current file was last written. - - - - - Gets or sets the time, in coordinated universal time (UTC), when the current file or directory was last written to. - - The value of the LastWriteTimeUtc property is pre-cached. To get the latest value, call the Refresh method. - This method may return an inaccurate value, because it uses native functions whose values may not be continuously updated by - the operating system. - If the file described in the FileSystemInfo object does not exist, this property will return 12:00 midnight, January 1, 1601 - A.D. (C.E.) Coordinated Universal Time (UTC), adjusted to local time. - - The UTC time when the current file was last written to. - - - - For files, gets the name of the file. For directories, gets the name of the last directory in the hierarchy if a hierarchy exists. - Otherwise, the Name property gets the name of the directory. - - - For a directory, Name returns only the name of the parent directory, such as Dir, not c:\Dir. - For a subdirectory, Name returns only the name of the subdirectory, such as Sub1, not c:\Dir\Sub1. - For a file, Name returns only the file name and file name extension, such as MyFile.txt, not c:\Dir\Myfile.txt. - - - A string that is the name of the parent directory, the name of the last directory in the hierarchy, - or the name of a file, including the file name extension. - - - - Returns the path as a string. - - - [AlphaFS] Gets the instance of the class. - - - [AlphaFS] The initial "IsDirectory" indicator that was passed to the constructor. - - - The full path of the file system object in Unicode (LongPath) format. - - - [AlphaFS] Represents the KernelTransaction that was passed to the constructor. - - - Represents the fully qualified path of the file or directory. - - Classes derived from can use the FullPath field - to determine the full path of the object being manipulated. - - - - The path originally specified by the user, whether relative or absolute. - - - A bitfield of flags for specifying options for various internal operations that convert paths to full paths. - - - No special options applies. - - - Remove any trailing whitespace from the path. - - - Add a trailing directory separator to the path (if one does not already exist). - - - Remove the trailing directory separator from the path (if one exists). - - - Return full path as long full path (Unicode format). Not valid for . - - - Prevents any exception from being thrown if a filesystem object does not exist. Not valid for . - - - Check that the path contains only valid path-characters. - - - Also check for wildcard (? and *) characters. - - - Do not trim the trailing dot or space. - - - Performs both and checks. - - - Performs operations on String instances that contain file or directory path information. These operations are performed in a cross-platform manner. - - - Determines whether a path includes a file name extension. - if the characters that follow the last directory separator (\\ or /) or volume separator (:) in the path include a period (.) followed by one or more characters; otherwise, . - - The path to search for an extension. The path cannot contain any of the characters defined in . - - - Gets a value indicating whether the specified path string contains absolute or relative path information. - if contains a root; otherwise, . - - The IsPathRooted method returns if the first character is a directory separator character such as - , or if the path starts with a drive letter and colon (). - For example, it returns true for path strings such as "\\MyDir\\MyFile.txt", "C:\\MyDir", or "C:MyDir". - It returns for path strings such as "MyDir". - - This method does not verify that the path or file name exists. - - - The path to test. The path cannot contain any of the characters defined in . - - - [AlphaFS] Gets a value indicating whether the specified path string contains absolute or relative path information. - if contains a root; otherwise, . - - The IsPathRooted method returns true if the first character is a directory separator character such as - , or if the path starts with a drive letter and colon (). - For example, it returns for path strings such as "\\MyDir\\MyFile.txt", "C:\\MyDir", or "C:MyDir". - It returns for path strings such as "MyDir". - - This method does not verify that the path or file name exists. - - - The path to test. The path cannot contain any of the characters defined in . - will check for invalid path characters. - - - [AlphaFS] Check if file or folder name has any invalid characters. - - File or folder name. - if name contains any invalid characters. Otherwise - - - Checks that the given path format is supported. - - - A path to the file or directory. - Checks that the path contains only valid path-characters. - . - - - Checks that the path contains only valid path-characters. - - - A path to the file or directory. - also checks for ? and * characters. - When , throws an . - - - Tranlates DosDevicePath, Volume GUID. For example: "\Device\HarddiskVolumeX\path\filename.ext" can translate to: "\path\filename.ext" or: "\\?\Volume{GUID}\path\filename.ext". - A translated dos path. - A DosDevicePath, for example: \Device\HarddiskVolumeX\path\filename.ext. - Alternate path/device text, usually string.Empty or . - - - Check if is a directory- and/or volume-separator character. - if is a separator character. - The character to check. - - If , checks for all separator characters: , - and - If , only checks for: and - If only checks for: - - - - Changes the extension of a path string. - The modified path information. - - The path information to modify. The path cannot contain any of the characters defined in . - The new extension (with or without a leading period). Specify to remove an existing extension from path. - - - Returns the directory information for the specified path string. - - Directory information for , or if denotes a root directory or is - . - Returns if does not contain directory information. - - - The path of a file or directory. - - - [AlphaFS] Returns the directory information for the specified path string. - - Directory information for , or if denotes a root directory or is - . Returns if does not contain directory information. - - - The path of a file or directory. - will check for invalid path characters. - - - [AlphaFS] Returns the directory information for the specified path string without the root information, for example: "C:\Windows\system32" returns: "Windows". - The without the file name part and without the root information (if any), or if is or if denotes a root (such as "\", "C:", or * "\\server\share"). - The path. - - - [AlphaFS] Returns the directory information for the specified path string without the root information, for example: "C:\Windows\system32" returns: "Windows". - The without the file name part and without the root information (if any), or if is or if denotes a root (such as "\", "C:", or * "\\server\share"). - The transaction. - The path. - - - Returns the extension of the specified path string. - - The extension of the specified path (including the period "."), or null, or . - If is null, this method returns null. - If does not have extension information, - this method returns . - - - - The path string from which to get the extension. The path cannot contain any of the characters defined in . - - - Returns the extension of the specified path string. - - The extension of the specified path (including the period "."), or null, or . - If is null, this method returns null. - If does not have extension information, - this method returns . - - - The path string from which to get the extension. The path cannot contain any of the characters defined in . - will check for invalid path characters. - - - Returns the file name and extension of the specified path string. - - The characters after the last directory character in . If the last character of is a - directory or volume separator character, this method returns string.Empty. If path is null, this method returns null. - - - The path string from which to obtain the file name and extension. The path cannot contain any of the characters defined in . - - - [AlphaFS] Returns the file name and extension of the specified path string. - - The characters after the last directory character in . If the last character of is a - directory or volume separator character, this method returns string.Empty. If path is null, this method returns null. - - - The path string from which to obtain the file name and extension. - will check for invalid path characters. - - - Returns the file name of the specified path string without the extension. - The string returned by GetFileName, minus the last period (.) and all characters following it. - - The path of the file. The path cannot contain any of the characters defined in . - - - [AlphaFS] Returns the file name of the specified path string without the extension. - The string returned by GetFileName, minus the last period (.) and all characters following it. - - The path of the file. The path cannot contain any of the characters defined in . - will check for invalid path characters. - - - Gets an array containing the characters that are not allowed in file names. - An array containing the characters that are not allowed in file names. - - - Gets an array containing the characters that are not allowed in path names. - An array containing the characters that are not allowed in path names. - - - Gets the root directory information of the specified path. - - Returns the root directory of , such as "C:\", - or if is , - or an empty string if does not contain root directory information. - - - The path from which to obtain root directory information. - - - [AlphaFS] Gets the root directory information of the specified path. - - Returns the root directory of , such as "C:\", - or if is , - or an empty string if does not contain root directory information. - - - The path from which to obtain root directory information. - will check for invalid path characters. - - - [AlphaFS] Retrieves the final path for the specified file, formatted as . - The final path as a string. - - A final path is the path that is returned when a path is fully resolved. For example, for a symbolic link named "C:\tmp\mydir" that - points to "D:\yourdir", the final path would be "D:\yourdir". - - Then handle to a instance. - - - [AlphaFS] Retrieves the final path for the specified file, formatted as . - The final path as a string. - - A final path is the path that is returned when a path is fully resolved. For example, for a symbolic link named "C:\tmp\mydir" that - points to "D:\yourdir", the final path would be "D:\yourdir". - - Then handle to a instance. - The final path, formatted as - - - Retrieves the final path for the specified file, formatted as . - The final path as a string. - - A final path is the path that is returned when a path is fully resolved. For example, for a symbolic link named "C:\tmp\mydir" that - points to "D:\yourdir", the final path would be "D:\yourdir". The string that is returned by this function uses the - syntax. - - Then handle to a instance. - The final path, formatted as - - - Combines an array of strings into a path. - The combined paths. - - - An array of parts of the path. - - - Combines an array of strings into a path. - The combined paths. - - The parameters are not parsed if they have white space. - Therefore, if path2 includes white space (for example, " c:\\ "), - the Combine method appends path2 to path1 instead of returning only path2. - - - - will not check for invalid path characters. - An array of parts of the path. - - - AltDirectorySeparatorChar = '/' Provides a platform-specific alternate character used to separate directory levels in a path string that reflects a hierarchical file system organization. - - - DirectorySeparatorChar = '\' Provides a platform-specific character used to separate directory levels in a path string that reflects a hierarchical file system organization. - - - PathSeparator = ';' A platform-specific separator character used to separate path strings in environment variables. - - - VolumeSeparatorChar = ':' Provides a platform-specific Volume Separator character. - - - [AlphaFS] AltDirectorySeparatorChar = "/" Provides a platform-specific alternate string used to separate directory levels in a path string that reflects a hierarchical file system organization. - - - [AlphaFS] CurrentDirectoryPrefix = '.' Provides a current directory character. - - - [AlphaFS] CurrentDirectoryPrefix = "." Provides a current directory string. - - - [AlphaFS] DirectorySeparator = "\" Provides a platform-specific string used to separate directory levels in a path string that reflects a hierarchical file system organization. - - - [AlphaFS] ExtensionSeparatorChar = '.' Provides an Extension Separator character. - - - [AlphaFS] ParentDirectoryPrefix = ".." Provides a parent directory string. - - - [AlphaFS] StreamSeparator = ':' Provides a platform-specific Stream-name character. - - - [AlphaFS] StreamSeparator = ':' Provides a platform-specific Stream-name character. - - - [AlphaFS] StreamDataLabel = ':$DATA' Provides a platform-specific Stream :$DATA label. - - - [AlphaFS] StringTerminatorChar = '\0' String Terminator Suffix. - - - [AlphaFS] Characters to trim from the SearchPattern. - - - [AlphaFS] VolumeSeparatorChar = ':' Provides a platform-specific Volume Separator character. - - - [AlphaFS] WildcardStarMatchAll = "*" Provides a match-all-items string. - - - [AlphaFS] WildcardStarMatchAll = '*' Provides a match-all-items character. - - - [AlphaFS] WildcardQuestion = "?" Provides a replace-item string. - - - [AlphaFS] WildcardQuestion = '?' Provides a replace-item string. - - - [AlphaFS] UncPrefix = "\\" Provides standard Windows Path UNC prefix. - - - [AlphaFS] LongPathPrefix = "\\?\" Provides standard Windows Long Path prefix. - - - [AlphaFS] LongPathUncPrefix = "\\?\UNC\" Provides standard Windows Long Path UNC prefix. - - - [AlphaFS] GlobalRootPrefix = "\\?\GLOBALROOT\" Provides standard Windows Volume prefix. - - - [AlphaFS] MsDosNamespacePrefix = "\\.\" Provides standard logical drive prefix. - - - [AlphaFS] SubstitutePrefix = "\??\" Provides a SUBST.EXE Path prefix to a Logical Drive. - - - [AlphaFS] VolumePrefix = "\\?\Volume" Provides standard Windows Volume prefix. - - - [AlphaFS] DevicePrefix = "\Device\" Provides standard Windows Device prefix. - - - [AlphaFS] DosDeviceLanmanPrefix = "\Device\LanmanRedirector\" Provides a MS-Dos Lanman Redirector Path UNC prefix to a network share. - - - [AlphaFS] DosDeviceMupPrefix = "\Device\Mup\" Provides a MS-Dos Mup Redirector Path UNC prefix to a network share. - - - [AlphaFS] DosDeviceUncPrefix = "\??\UNC\" Provides a SUBST.EXE Path UNC prefix to a network share. - - - Returns the absolute path for the specified path string. - The fully qualified location of path, such as "C:\MyFile.txt". - - GetFullPathName merges the name of the current drive and directory with a specified file name to determine the full path and file name of a specified file. - It also calculates the address of the file name portion of the full path and file name. -   - This method does not verify that the resulting path and file name are valid, or that they see an existing file on the associated volume. - The .NET Framework does not support direct access to physical disks through paths that are device names, such as "\\.\PHYSICALDRIVE0". -   - MSDN: Multithreaded applications and shared library code should not use the GetFullPathName function and - should avoid using relative path names. The current directory state written by the SetCurrentDirectory function is stored as a global variable in each process, - therefore multithreaded applications cannot reliably use this value without possible data corruption from other threads that may also be reading or setting this value. - This limitation also applies to the SetCurrentDirectory and GetCurrentDirectory functions. The exception being when the application is guaranteed to be running in a single thread, - for example parsing file names from the command line argument string in the main thread prior to creating any additional threads. - Using relative path names in multithreaded applications or shared library code can yield unpredictable results and is not supported. - - - - - The file or directory for which to obtain absolute path information. - - - Returns the absolute path for the specified path string. - The fully qualified location of path, such as "C:\MyFile.txt". - - GetFullPathName merges the name of the current drive and directory with a specified file name to determine the full path and file name of a specified file. - It also calculates the address of the file name portion of the full path and file name. -   - This method does not verify that the resulting path and file name are valid, or that they see an existing file on the associated volume. - The .NET Framework does not support direct access to physical disks through paths that are device names, such as "\\.\PHYSICALDRIVE0". -   - MSDN: Multithreaded applications and shared library code should not use the GetFullPathName function and - should avoid using relative path names. The current directory state written by the SetCurrentDirectory function is stored as a global variable in each process, - therefore multithreaded applications cannot reliably use this value without possible data corruption from other threads that may also be reading or setting this value. - This limitation also applies to the SetCurrentDirectory and GetCurrentDirectory functions. The exception being when the application is guaranteed to be running in a single thread, - for example parsing file names from the command line argument string in the main thread prior to creating any additional threads. - Using relative path names in multithreaded applications or shared library code can yield unpredictable results and is not supported. - - - - - The file or directory for which to obtain absolute path information. - Options for controlling the full path retrieval. - - - [AlphaFS] Returns the absolute path for the specified path string. - The fully qualified location of path, such as "C:\MyFile.txt". - - GetFullPathName merges the name of the current drive and directory with a specified file name to determine the full path and file name of a specified file. - It also calculates the address of the file name portion of the full path and file name. -   - This method does not verify that the resulting path and file name are valid, or that they see an existing file on the associated volume. - The .NET Framework does not support direct access to physical disks through paths that are device names, such as "\\.\PHYSICALDRIVE0". -   - MSDN: Multithreaded applications and shared library code should not use the GetFullPathName function and - should avoid using relative path names. The current directory state written by the SetCurrentDirectory function is stored as a global variable in each process, - therefore multithreaded applications cannot reliably use this value without possible data corruption from other threads that may also be reading or setting this value. - This limitation also applies to the SetCurrentDirectory and GetCurrentDirectory functions. The exception being when the application is guaranteed to be running in a single thread, - for example parsing file names from the command line argument string in the main thread prior to creating any additional threads. - Using relative path names in multithreaded applications or shared library code can yield unpredictable results and is not supported. - - - - - The transaction. - The file or directory for which to obtain absolute path information. - - - [AlphaFS] Returns the absolute path for the specified path string. - The fully qualified location of path, such as "C:\MyFile.txt". - - GetFullPathName merges the name of the current drive and directory with a specified file name to determine the full path and file name of a specified file. - It also calculates the address of the file name portion of the full path and file name. -   - This method does not verify that the resulting path and file name are valid, or that they see an existing file on the associated volume. - The .NET Framework does not support direct access to physical disks through paths that are device names, such as "\\.\PHYSICALDRIVE0". -   - MSDN: Multithreaded applications and shared library code should not use the GetFullPathName function and - should avoid using relative path names. The current directory state written by the SetCurrentDirectory function is stored as a global variable in each process, - therefore multithreaded applications cannot reliably use this value without possible data corruption from other threads that may also be reading or setting this value. - This limitation also applies to the SetCurrentDirectory and GetCurrentDirectory functions. The exception being when the application is guaranteed to be running in a single thread, - for example parsing file names from the command line argument string in the main thread prior to creating any additional threads. - Using relative path names in multithreaded applications or shared library code can yield unpredictable results and is not supported. - - - - - The transaction. - The file or directory for which to obtain absolute path information. - Options for controlling the full path retrieval. - - - Retrieves the absolute path for the specified string. - The fully qualified location of , such as "C:\MyFile.txt". - - GetFullPathName merges the name of the current drive and directory with a specified file name to determine the full path and file name of a specified file. - It also calculates the address of the file name portion of the full path and file name. -   - This method does not verify that the resulting path and file name are valid, or that they see an existing file on the associated volume. - The .NET Framework does not support direct access to physical disks through paths that are device names, such as "\\.\PHYSICALDRIVE0". -   - MSDN: Multithreaded applications and shared library code should not use the GetFullPathName function and - should avoid using relative path names. The current directory state written by the SetCurrentDirectory function is stored as a global variable in each process, - therefore multithreaded applications cannot reliably use this value without possible data corruption from other threads that may also be reading or setting this value. - This limitation also applies to the SetCurrentDirectory and GetCurrentDirectory functions. The exception being when the application is guaranteed to be running in a single thread, - for example parsing file names from the command line argument string in the main thread prior to creating any additional threads. - Using relative path names in multithreaded applications or shared library code can yield unpredictable results and is not supported. - - - - The transaction. - The file or directory for which to obtain absolute path information. - Options for controlling the full path retrieval. - - - Applies the to - with applied . - - - - - - - [AlphaFS] Adds a trailing character to the string, when absent. - A text string with a trailing character. The function returns when is . - A text string to which the trailing is to be added, when absent. - - - [AlphaFS] Adds a trailing or character to the string, when absent. - A text string with a trailing or character. The function returns when is . - A text string to which the trailing or is to be added, when absent. - If the character will be added instead. - - - [AlphaFS] Removes the trailing character from the string, when present. - A text string where the trailing character has been removed. The function returns when is . - A text string from which the trailing is to be removed, when present. - - - [AlphaFS] Removes the trailing or character from the string, when present. - A text string where the trailing or character has been removed. The function returns when is . - A text string from which the trailing or is to be removed, when present. - If the trailing character will be removed instead. - - - [AlphaFS] Returns the directory information for the specified with a trailing character. - - The suffixed directory information for the specified with a trailing character, - or if is or if denotes a root (such as "\", "C:", or * "\\server\share"). - - This method is similar to calling Path.GetDirectoryName() + Path.AddTrailingDirectorySeparator() - The path. - - - [AlphaFS] Returns the directory information for the specified with a trailing character. - - The suffixed directory information for the specified with a trailing character, - or if is or if denotes a root (such as "\", "C:", or * "\\server\share"). - - This method is similar to calling Path.GetDirectoryName() + Path.AddTrailingDirectorySeparator() - The transaction. - The path. - - - [AlphaFS] Returns the directory information for the specified without the root and with a trailing character. - - The directory information for the specified without the root and with a trailing character, - or if is or if is . - - The path. - - - [AlphaFS] Returns the directory information for the specified without the root and with a trailing character. - - The directory information for the specified without the root and with a trailing character, - or if is or if is . - - The transaction. - The path. - - - Returns the directory information for the specified with a trailing character. - - The suffixed directory information for the specified with a trailing character, - or if is or if denotes a root (such as "\", "C:", or * "\\server\share"). - - This method is similar to calling Path.GetDirectoryName() + Path.AddTrailingDirectorySeparator() - The transaction. - The path. - - - Returns the directory information for the specified without the root and with a trailing character. - - The directory information for the specified without the root and with a trailing character, - or if is or if is . - - The transaction. - The path. - - - [AlphaFS] Gets the connection name of the locally mapped drive. - The server and share as: \\servername\sharename. - - - - - The local path with drive name. - - - [AlphaFS] Gets the network share name from the locally mapped path. - The network share connection name of . - - - - - The local path with drive name. - - - [AlphaFS] Determines if a path string is a valid Universal Naming Convention (UNC) path. - if the specified path is a Universal Naming Convention (UNC) path, otherwise. - The path to check. - - - [AlphaFS] Determines if a path string is a valid Universal Naming Convention (UNC) path, optionally skip invalid path character check. - if the specified path is a Universal Naming Convention (UNC) path, otherwise. - The path to check. - will check for invalid path characters. - - - [AlphaFS] Converts a local path to a network share path. - A Local path, e.g.: "C:\Windows" will be returned as: "\\MachineName\C$\Windows". - If a logical drive points to a network share path, the share path will be returned instead. - - On successful conversion a UNC path is returned. - If the conversion fails, is returned. - If is an empty string or , is returned. - - - - - A local path, e.g.: "C:\Windows". - - - [AlphaFS] Converts a local path to a network share path, optionally returning it in a long path format. - A Local path, e.g.: "C:\Windows" will be returned as: "\\MachineName\C$\Windows". - If a logical drive points to a network share path, the share path will be returned instead. - - On successful conversion a UNC path is returned. - If the conversion fails, is returned. - If is an empty string or , is returned. - - - - - A local path, e.g.: "C:\Windows". - returns the path in long path (Unicode) format, when returns the path as a regular path. - - - [AlphaFS] Converts a local path to a network share path, optionally returning it in a long path format and the ability to add or remove a trailing backslash. - A Local path, e.g.: "C:\Windows" will be returned as: "\\MachineName\C$\Windows". - If a logical drive points to a network share path, the share path will be returned instead. - - On successful conversion a UNC path is returned. - If the conversion fails, is returned. - If is an empty string or , is returned. - - - - - A local path, e.g.: "C:\Windows". - returns the path in long path (Unicode) format, when returns the path as a regular path. - adds a trailing character to , when absent. - removes the trailing character from , when present. - - - [AlphaFS] Determines if a path string is a valid Universal Naming Convention (UNC) path, optionally skip invalid path character check. - if the specified path is a Universal Naming Convention (UNC) path, otherwise. - The path to check. - When indicates that is already in regular path format. - will check for invalid path characters. - - - Converts a local path to a network share path. - A Local path, e.g.: "C:\Windows" will be returned as: "\\MachineName\C$\Windows". - If a logical drive points to a network share path, the share path will be returned instead. - - On successful conversion a UNC path is returned. - If the conversion fails, is returned. - If is an empty string or , is returned. - - - - - A local path, e.g.: "C:\Windows". - returns the path in long path (Unicode) format, when returns the path as a regular path. - adds a trailing character to , when absent. - removes the trailing character from , when present. - - - Makes an extended long path from the specified by prefixing . - The prefixed with a , the minimum required full path is: "C:\". - This method does not verify that the resulting path and file name are valid, or that they see an existing file on the associated volume. - - - The path to the file or directory, this can also be an UNC path. - - - [AlphaFS] Converts the specified existing path to its regular long form. - An existing path to a folder or file. - The regular full path. - - - [AlphaFS] Converts the specified existing path to its regular long form. - The transaction. - An existing path to a folder or file. - The regular full path. - - - [AlphaFS] Gets the regular path from long prefixed one. i.e.: "\\?\C:\Temp\file.txt" to C:\Temp\file.txt" or: "\\?\UNC\Server\share\file.txt" to "\\Server\share\file.txt". - Regular form path string. - This method does not handle paths with volume names, eg. \\?\Volume{GUID}\Folder\file.txt. - The path. - - - [AlphaFS] Retrieves the short path form of the specified path. - A path that has the 8.3 path form. - Will fail on NTFS volumes with disabled 8.3 name generation. - The path must actually exist to be able to get the short path name. - An existing path to a folder or file. - - - [AlphaFS] Retrieves the short path form of the specified path. - A path that has the 8.3 path form. - Will fail on NTFS volumes with disabled 8.3 name generation. - The path must actually exist to be able to get the short path name. - The transaction. - An existing path to a folder or file. - - - [AlphaFS] Determines whether the specified path starts with a or . - if the specified path has a long path (UNC) prefix, otherwise. - The path to the file or directory. - - - Makes an extended long path from the specified by prefixing . - The prefixed with a , the minimum required full path is: "C:\". - This method does not verify that the resulting path and file name are valid, or that they see an existing file on the associated volume. - - - The path to the file or directory, this can also be an UNC path. - Options for controlling the full path retrieval. - - - Retrieves the short path form, or the regular long form of the specified . - If is , a path of the 8.3 form otherwise the regular long form. - - Will fail on NTFS volumes with disabled 8.3 name generation. - The path must actually exist to be able to get the short- or long path name. - - The transaction. - An existing path to a folder or file. - to retrieve the short path form, to retrieve the regular long form from the 8.3 . - - - Gets the regular path from a long path. - - Returns the regular form of a long . - For example: "\\?\C:\Temp\file.txt" to: "C:\Temp\file.txt", or: "\\?\UNC\Server\share\file.txt" to: "\\Server\share\file.txt". - - - MSDN: String.TrimEnd Method notes to Callers: http://msdn.microsoft.com/en-us/library/system.string.trimend%28v=vs.110%29.aspx - - - - The path. - Options for controlling the full path retrieval. - When , throws an . - - - Gets the path as a long full path. - The path as an extended length path. - - The transaction. - Full pathname of the source path to convert. - The path format to use. - Options for controlling the operation. Note that on .NET 3.5 the TrimEnd option has no effect. - - - Returns a random folder name or file name. - A random folder name or file name. - - - Creates a uniquely named, zero-byte temporary file on disk and returns the full path of that file. - The full path of the temporary file. - - - Returns the path of the current user's temporary folder. - The path to the temporary folder, ending with a backslash. - - - [AlphaFS] Returns the path of the current user's temporary folder. - The folder name to append to the temporary folder. - The path to the temporary folder, combined with . - - - Represents a wrapper class for a handle used by the CM_Connect_Machine/CM_Disconnect_Machine Win32 API functions. - - - Initializes a new instance of the class. - - - Represents a wrapper class for a handle used by the FindFirstFile/FindNextFile Win32 API functions. - - - Constructor that prevents a default instance of this class from being created. - - - Constructor that prevents a default instance of this class from being created. - The handle. - true to reliably release the handle during the finalization phase; false to prevent - reliable release (not recommended). - - - When overridden in a derived class, executes the code required to free the handle. - if the handle is released successfully; otherwise, in the event of a catastrophic failure, . In this case, it generates a ReleaseHandleFailed Managed Debugging Assistant. - - - Contains Shell32 information about a file. - - - Initializes a Shell32Info instance. - Shell32 is limited to MAX_PATH length. - This constructor does not check if a file exists. This constructor is a placeholder for a string that is used to access the file in subsequent operations. - - The fully qualified name of the new file, or the relative file name. Do not end the path with the directory separator character. - - - Initializes a Shell32Info instance. - Shell32 is limited to MAX_PATH length. - This constructor does not check if a file exists. This constructor is a placeholder for a string that is used to access the file in subsequent operations. - - The fully qualified name of the new file, or the relative file name. Do not end the path with the directory separator character. - Indicates the format of the path parameter(s). - - - Gets an handle to the Shell icon that represents the file. - Icon size or . Can also be combined with and others. - An handle to the Shell icon that represents the file. - Caller is responsible for destroying this handle with DestroyIcon() when no longer needed. - - - Gets the Shell command association from the registry. - The shell verb. - - Returns the associated file- or protocol-related Shell command from the registry or string.Empty if no association can be - found. - - - - Refreshes the state of the object. - - - Returns the path as a string. - The path. - - - Gets the Shell file or protocol association from the registry. - - - The attributes of the file object. - - - Gets the Shell command association from the registry. - - - Gets the Shell command association from the registry. - - - Gets the Shell DDE association from the registry. - - - Gets the Shell default icon association from the registry. - - - Represents the fully qualified path of the file. - - - Gets the Shell friendly application name association from the registry. - - - Gets the Shell friendly document name association from the registry. - - - Reflects the initialization state of the instance. - - - Gets the Shell "Open With" command association from the registry. - - - Class for CopyMoveResult that contains the results for the Copy or Move action. - - - Create a CopyMoveResult class instance for the Copy or Move action. - Indicates the source file or directory. - Indicates the destination file or directory. - Indicates if the action was canceled. - The error code encountered during the Copy or Move action. - - - The error code encountered during the Copy or Move action. - 0 (zero) indicates success. - - - The error message from the that was encountered during the Copy or Move action. - A message describing the error. - - - When true indicates that the Copy or Move action was canceled. - when the Copy/Move action was canceled. Otherwise . - - - Indicates the source file or directory. - - - Indicates the destination file or directory. - - - The total number of folders copied. - - - The total number of files copied. - - - The total number of bytes copied. - - - Information about the target of a symbolic link or mount point. - - - The print name. - - - The substitute name. - - - Used by MoveFileXxx.Flags that specify how a file or directory is to be moved. - - - No MoveOptions used, this fails when the file name already exists. - - - MOVE_FILE_REPLACE_EXISTSING - If the destination file name already exists, the function replaces its contents with the contents of the source file. - This value cannot be used if lpNewFileName or lpExistingFileName names a directory. - This value cannot be used if either source or destination names a directory. - - - - MOVE_FILE_COPY_ALLOWED - If the file is to be moved to a different volume, the function simulates the move by using the CopyFile and DeleteFile functions. - This value cannot be used with . - - - - MOVE_FILE_DELAY_UNTIL_REBOOT - - The system does not move the file until the operating system is restarted. - The system moves the file immediately after AUTOCHK is executed, but before creating any paging files. - - - Consequently, this parameter enables the function to delete paging files from previous startups. - This value can only be used if the process is in the context of a user who belongs to the administrators group or the LocalSystem account. - - This value cannot be used with . - - - - MOVE_FILE_WRITE_THROUGH - The function does not return until the file has actually been moved on the disk. - - Setting this value guarantees that a move performed as a copy and delete operation is flushed to disk before the function returns. - The flush occurs at the end of the copy operation. - - This value has no effect if is set. - - - - MOVE_FILE_CREATE_HARDLINK - Reserved for future use. - - - - MOVE_FILE_FAIL_IF_NOT_TRACKABLE - The function fails if the source file is a link source, but the file cannot be tracked after the move. - This situation can occur if the destination is a volume formatted with the FAT file system. - - - - The file or directory was not a reparse point. - - - Initializes a new instance of the class. - - - Initializes a new instance of the class. - The message. - - - Initializes a new instance of the class. - The message. - The inner exception. - - - Initializes a new instance of the class. - The info. - The context. - - - Provides access to a file system object, using Shell32. - - - Provides information for the IQueryAssociations interface methods, used by Shell32. - - - None. - - - Instructs not to map CLSID values to ProgID values. - - - Identifies the value of the supplied file parameter (3rd parameter of function GetFileAssociation()) as an executable file name. - If this flag is not set, the root key will be set to the ProgID associated with the .exe key instead of the executable file's ProgID. - - - Specifies that when an IQueryAssociation method does not find the requested value under the root key, it should attempt to retrieve the comparable value from the * subkey. - - - Specifies that when an IQueryAssociation method does not find the requested value under the root key, it should attempt to retrieve the comparable value from the Folder subkey. - - - Specifies that only HKEY_CLASSES_ROOT should be searched, and that HKEY_CURRENT_USER should be ignored. - - - Specifies that the return string should not be truncated. Instead, return an error value and the required size for the complete string. - - - - Instructs IQueryAssociations methods to verify that data is accurate. - This setting allows IQueryAssociations methods to read data from the user's hard disk for verification. - For example, they can check the friendly name in the registry against the one stored in the .exe file. - - Setting this flag typically reduces the efficiency of the method. - - - - Instructs IQueryAssociations methods to ignore Rundll.exe and return information about its target. - Typically IQueryAssociations methods return information about the first .exe or .dll in a command string. - If a command uses Rundll.exe, setting this flag tells the method to ignore Rundll.exe and return information about its target. - - - - Instructs IQueryAssociations methods not to fix errors in the registry, such as the friendly name of a function not matching the one found in the .exe file. - - - Specifies that the BaseClass value should be ignored. - - - Specifies that the "Unknown" ProgID should be ignored; instead, fail. - Introduced in Windows 7. - - - Specifies that the supplied ProgID should be mapped using the system defaults, rather than the current user defaults. - Introduced in Windows 8. - - - Specifies that the value is a protocol, and should be mapped using the current user defaults. - Introduced in Windows 8. - - - ASSOCSTR enumeration - Used by the AssocQueryString() function to define the type of string that is to be returned. - - - None. - - - A command string associated with a Shell verb. - - - - An executable from a Shell verb command string. - For example, this string is found as the (Default) value for a subkey such as HKEY_CLASSES_ROOT\ApplicationName\shell\Open\command. - If the command uses Rundll.exe, set the flag in the attributes parameter of IQueryAssociations::GetString to retrieve the target executable. - - - - The friendly name of a document type. - - - The friendly name of an executable file. - - - Ignore the information associated with the open subkey. - - - Look under the ShellNew subkey. - - - A template for DDE commands. - - - The DDE command to use to create a process. - - - The application name in a DDE broadcast. - - - The topic name in a DDE broadcast. - - - - Corresponds to the InfoTip registry value. - Returns an info tip for an item, or list of properties in the form of an IPropertyDescriptionList from which to create an info tip, such as when hovering the cursor over a file name. - The list of properties can be parsed with PSGetPropertyDescriptionListFromString. - - - - - Corresponds to the QuickTip registry value. This is the same as , except that it always returns a list of property names in the form of an IPropertyDescriptionList. - The difference between this value and is that this returns properties that are safe for any scenario that causes slow property retrieval, such as offline or slow networks. - Some of the properties returned from might not be appropriate for slow property retrieval scenarios. - The list of properties can be parsed with PSGetPropertyDescriptionListFromString. - - - - - Corresponds to the TileInfo registry value. Contains a list of properties to be displayed for a particular file type in a Windows Explorer window that is in tile view. - This is the same as , but, like , it also returns a list of property names in the form of an IPropertyDescriptionList. - The list of properties can be parsed with PSGetPropertyDescriptionListFromString. - - - - - Describes a general type of MIME file association, such as image and bmp, - so that applications can make general assumptions about a specific file type. - - - - - Returns the path to the icon resources to use by default for this association. - Positive numbers indicate an index into the dll's resource table, while negative numbers indicate a resource ID. - An example of the syntax for the resource is "c:\myfolder\myfile.dll,-1". - - - - - For an object that has a Shell extension associated with it, - you can use this to retrieve the CLSID of that Shell extension object by passing a string representation - of the IID of the interface you want to retrieve as the pwszExtra parameter of IQueryAssociations::GetString. - For example, if you want to retrieve a handler that implements the IExtractImage interface, - you would specify "{BB2E617C-0920-11d1-9A0B-00C04FC2D6C1}", which is the IID of IExtractImage. - - - - - For a verb invoked through COM and the IDropTarget interface, you can use this flag to retrieve the IDropTarget object's CLSID. - This CLSID is registered in the DropTarget subkey. - The verb is specified in the supplied file parameter in the call to IQueryAssociations::GetString. - - - - - For a verb invoked through COM and the IExecuteCommand interface, you can use this flag to retrieve the IExecuteCommand object's CLSID. - This CLSID is registered in the verb's command subkey as the DelegateExecute entry. - The verb is specified in the supplied file parameter in the call to IQueryAssociations::GetString. - - - - (No description available on MSDN) - Introduced in Windows 8. - - - The maximum defined value, used for validation purposes. - - - Shell32 FileAttributes structure, used to retrieve the different types of a file system object. - - - 0x000000000 - Get file system object large icon. - The flag must also be set. - - - 0x000000001 - Get file system object small icon. - The flag must also be set. - - - 0x000000002 - Get file system object open icon. - A container object displays an open icon to indicate that the container is open. - The and/or flag must also be set. - - - 0x000000004 - Get file system object Shell-sized icon. - If this attribute is not specified the function sizes the icon according to the system metric values. - - - 0x000000008 - Get file system object by its PIDL. - Indicate that the given file contains the address of an ITEMIDLIST structure rather than a path name. - - - 0x000000010 - Indicates that the given file should not be accessed. Rather, it should act as if the given file exists and use the supplied attributes. - This flag cannot be combined with the , or attributes. - - - 0x000000020 - Apply the appropriate overlays to the file's icon. - The flag must also be set. - - - 0x000000040 - Returns the index of the overlay icon. - The value of the overlay index is returned in the upper eight bits of the iIcon member of the structure specified by psfi. - - - 0x000000100 - Retrieve the handle to the icon that represents the file and the index of the icon within the system image list. The handle is copied to the member of the structure, and the index is copied to the member. - - - 0x000000200 - Retrieve the display name for the file. The name is copied to the member of the structure. - The returned display name uses the long file name, if there is one, rather than the 8.3 form of the file name. - - - 0x000000400 - Retrieve the string that describes the file's type. - - - 0x000000800 - Retrieve the item attributes. The attributes are copied to the member of the structure. - Will touch every file, degrading performance. - - - 0x000001000 - Retrieve the name of the file that contains the icon representing the file specified by pszPath. The name of the file containing the icon is copied to the member of the structure. The icon's index is copied to that structure's member. - - - 0x000002000 - Retrieve the type of the executable file if pszPath identifies an executable file. - This flag cannot be specified with any other attributes. - - - 0x000004000 - Retrieve the index of a system image list icon. - - - 0x000008000 - Add the link overlay to the file's icon. - The flag must also be set. - - - 0x000010000 - Blend the file's icon with the system highlight color. - - - 0x000020000 - Modify to indicate that contains specific attributes that are desired. - This flag cannot be specified with the attribute. Will touch every file, degrading performance. - - - SHFILEINFO structure, contains information about a file system object. - - - A handle to the icon that represents the file. - Caller is responsible for destroying this handle with DestroyIcon() when no longer needed. - - - The index of the icon image within the system image list. - - - An array of values that indicates the attributes of the file object. - - - The name of the file as it appears in the Windows Shell, or the path and file name of the file that contains the icon representing the file. - - - The type of file. - - - SFGAO - Attributes that can be retrieved from a file system object. - - - 0x00000000 - None. - - - 0x00000001 - The specified items can be copied. - - - 0x00000002 - The specified items can be moved. - - - 0x00000004 - Shortcuts can be created for the specified items. - - - 0x00000008 - The specified items can be bound to an IStorage object through IShellFolder::BindToObject. For more information about namespace manipulation capabilities, see IStorage. - - - 0x00000010 - The specified items can be renamed. Note that this value is essentially a suggestion; not all namespace clients allow items to be renamed. However, those that do must have this attribute set. - - - 0x00000020 - The specified items can be deleted. - - - 0x00000040 - The specified items have property sheets. - - - 0x00000100 - The specified items are drop targets. - - - 0x00001000 - The specified items are system items. - Windows 7 and later. - - - 0x00002000 - The specified items are encrypted and might require special presentation. - - - 0x00004000 - Accessing the item (through IStream or other storage interfaces) is expected to be a slow operation. - - - 0x00008000 - The specified items are shown as dimmed and unavailable to the user. - - - 0x00010000 - The specified items are shortcuts. - - - 0x00020000 - The specified objects are shared. - - - 0x00040000 - The specified items are read-only. In the case of folders, this means that new items cannot be created in those folders. - - - 0x00080000 - The item is hidden and should not be displayed unless the Show hidden files and folders option is enabled in Folder Settings. - - - 0x00100000 - The items are nonenumerated items and should be hidden. They are not returned through an enumerator such as that created by the IShellFolder::EnumObjects method. - - - 0x00200000 - The items contain new content, as defined by the particular application. - - - 0x00400000 - Indicates that the item has a stream associated with it. - - - 0x00800000 - Children of this item are accessible through IStream or IStorage. - - - 0x01000000 - When specified as input, instructs the folder to validate that the items contained in a folder or Shell item array exist. - - - 0x02000000 - The specified items are on removable media or are themselves removable devices. - - - 0x04000000 - The specified items are compressed. - - - 0x08000000 - The specified items can be hosted inside a web browser or Windows Explorer frame. - - - 0x10000000 - The specified folders are either file system folders or contain at least one descendant (child, grandchild, or later) that is a file system folder. - - - 0x20000000 - The specified items are folders. - - - 0x40000000 - The specified folders or files are part of the file system (that is, they are files, directories, or root directories). - - - 0x80000000 - The specified folders have subfolders. - - - Used by method UrlIs() to define a URL type. - - - Is the URL valid? - - - Is the URL opaque? - - - Is the URL a URL that is not typically tracked in navigation history? - - - Is the URL a file URL? - - - Attempt to determine a valid scheme for the URL. - - - Does the URL string end with a directory? - - - Does the URL have an appended query string? - - - Destroys an icon and frees any memory the icon occupied. - An handle to an icon. - - - Gets the file or protocol that is associated with from the registry. - A path to the file. - The associated file- or protocol-related string from the registry or string.Empty if no association can be found. - - - Gets the content-type that is associated with from the registry. - A path to the file. - The associated file- or protocol-related content-type from the registry or string.Empty if no association can be found. - - - Gets the default icon that is associated with from the registry. - A path to the file. - The associated file- or protocol-related default icon from the registry or string.Empty if no association can be found. - - - Gets the friendly application name that is associated with from the registry. - A path to the file. - The associated file- or protocol-related friendly application name from the registry or string.Empty if no association can be found. - - - Gets the friendly document name that is associated with from the registry. - A path to the file. - The associated file- or protocol-related friendly document name from the registry or string.Empty if no association can be found. - - - Gets an handle to the Shell icon that represents the file. - Caller is responsible for destroying this handle with DestroyIcon() when no longer needed. - - The path to the file system object which should not exceed maximum path length. Both absolute and - relative paths are valid. - - - Icon size or . Can also be combined - with and others. - - An handle to the Shell icon that represents the file, or IntPtr.Zero on failure. - - - Retrieves information about an object in the file system, such as a file, folder, directory, or drive root. - A struct instance. - - You should call this function from a background thread. - Failure to do so could cause the UI to stop responding. - Unicode path are supported. - - The path to the file system object which should not exceed the maximum path length. Both absolute and relative paths are valid. - A attribute. - One ore more attributes. - - suppress any Exception that might be thrown as a result from a failure, - such as ACLs protected directories or non-accessible reparse points. - - - - Retrieves an instance of containing information about the specified file. - A path to the file. - A class instance. - - - Retrieves an instance of containing information about the specified file. - A path to the file. - Indicates the format of the path parameter(s). - A class instance. - - - Gets the "Open With" command that is associated with from the registry. - A path to the file. - The associated file- or protocol-related "Open With" command from the registry or string.Empty if no association can be found. - - - Gets the Shell command that is associated with from the registry. - A path to the file. - The associated file- or protocol-related Shell command from the registry or string.Empty if no association can be found. - - - Converts a file URL to a Microsoft MS-DOS path. - The file URL. - - The Microsoft MS-DOS path. If no path can be created, string.Empty is returned. - If is , will also be returned. - - - - Creates a path from a file URL. - The URL. - - The file path. If no path can be created, string.Empty is returned. - If is , will also be returned. - - - - Determines whether a path to a file system object such as a file or folder is valid. - The full path of maximum length the maximum path length to the object to verify. - if the file exists; otherwise - - - Tests whether a URL is a specified type. - The URL. - - - For all but one of the URL types, UrlIs returns if the URL is the specified type, or otherwise. - If UrlIs is set to , UrlIs will attempt to determine the URL scheme. - If the function is able to determine a scheme, it returns , or otherwise. - - - - Converts a Microsoft MS-DOS path to a canonicalized URL. - The full MS-DOS path of maximum length . - - The URL. If no URL can be created string.Empty is returned. - If is , will also be returned. - - - - Tests a URL to determine if it is a file URL. - The URL. - if the URL is a file URL, or otherwise. - - - Returns whether a URL is a URL that browsers typically do not include in navigation history. - The URL. - if the URL is a URL that is not included in navigation history, or otherwise. - - - Returns whether a URL is opaque. - The URL. - if the URL is opaque, or otherwise. - - - Searches for and retrieves a file or protocol association-related string from the registry. - A path to a file. - One or more attributes. Only one "InitXXX" attribute can be used. - A attribute. - The associated file- or protocol-related string from the registry or string.Empty if no association can be found. - - - - Retrieve information about an object in the file system, such as a file, folder, directory, or drive root. - A struct instance. - - You should call this function from a background thread. - Failure to do so could cause the UI to stop responding. - Unicode path are not supported. - - The path to the file system object which should not exceed the maximum path length in length. Both absolute and relative paths are valid. - A attribute. - A attribute. - Checks that the path contains only valid path-characters. - - suppress any Exception that might be thrown as a result from a failure, - such as ACLs protected directories or non-accessible reparse points. - - - - Indicates whether the link target is a file or directory. - Used by Win32 API CreateSymbolicLink()/CreateSymbolicLinkTransacted() - - - The link target is a file. - - - The link target is a directory. - - - Represents information about a symbolic link. - - - Gets the type of the link. - The type of the link. - - - Specifies the type of a symbolic link. - - - The symbolic link is absolute. - - - The symbolic link is relative. - - - The function attempted to use a name that is reserved for use by another transaction. - - - Initializes a new instance of the class. - - - Initializes a new instance of the class. - The message. - - - Initializes a new instance of the class. - The message. - The inner exception. - - - Initializes a new instance of the class. - The info. - The context. - - - The function attempted to use a name that is reserved for use by another transaction. - - - Initializes a new instance of the class. - - - Initializes a new instance of the class. - The message. - - - Initializes a new instance of the class. - The message. - The inner exception. - - - Initializes a new instance of the class. - The info. - The context. - - - The remote server or share does not support transacted file operations. - - - Initializes a new instance of the class. - - - Initializes a new instance of the class. - The message. - - - Initializes a new instance of the class. - The message. - The inner exception. - - - Initializes a new instance of the class. - The object that holds the serialized object data. - The contextual information about the source or destination. - - - The transaction handle associated with this operation is not valid. - - - Initializes a new instance of the class. - - - Initializes a new instance of the class. - The message. - - - Initializes a new instance of the class. - The message. - The inner exception. - - - Initializes a new instance of the class. - The data for serializing or deserializing the object. - The source and destination for the object. - - - A KTM transaction object for use with the transacted operations in - - - Initializes a new instance of the class, internally using the specified . - This method allows the usage of methods accepting a with an instance of . - - The transaction to use for any transactional operations. - - - Initializes a new instance of the class with a default security descriptor, infinite timeout and no description. - - - Initializes a new instance of the class with a default security descriptor. - The time, in milliseconds, when the transaction will be aborted if it has not already reached the prepared state. - A user-readable description of the transaction. This parameter may be . - - - Initializes a new instance of the class. - The security descriptor. - The time, in milliseconds, when the transaction will be aborted if it has not already reached the prepared state. - Specify 0 to provide an infinite timeout. - A user-readable description of the transaction. This parameter may be . - - - Requests that the specified transaction be committed. - - - - - - Requests that the specified transaction be rolled back. This function is synchronous. - - - - - Gets the safe handle. - The safe handle. - - - Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. - - - Represents a wrapper class for a handle used by the FindFirstFile/FindNextFile Win32 API functions. - - - Initializes a new instance of the class. - - - Initializes a new instance of the class. - The handle. - [owns handle]. - - - When overridden in a derived class, executes the code required to free the handle. - if the handle is released successfully; otherwise, in the event of a catastrophic failure, . In this case, it generates a ReleaseHandleFailed Managed Debugging Assistant. - - - Represents a wrapper class for a handle used by the FindFirstVolumeMountPoint/FindVolumeMountPointClose methods of the Win32 API. - - - Initializes a new instance of the class. - - - Initializes a new instance of the class. - The handle. - [owns handle]. - - - When overridden in a derived class, executes the code required to free the handle. - if the handle is released successfully; otherwise, in the event of a catastrophic failure, . - - - - Represents a wrapper class for a handle used by the FindFirstVolume/FindNextVolume methods of the Win32 API. - - - Initializes a new instance of the class. - - - Initializes a new instance of the class. - The handle. - [owns handle]. - - - When overridden in a derived class, executes the code required to free the handle. - if the handle is released successfully; otherwise, in the event of a catastrophic failure, . In this case, it generates a ReleaseHandleFailed Managed Debugging Assistant. - - - - Provides a concrete implementation of SafeHandle supporting transactions. - - - Initializes a new instance of the class. - - - When overridden in a derived class, executes the code required to free the handle. - if the handle is released successfully; otherwise, in the event of a catastrophic failure, . In this case, it generates a ReleaseHandleFailed Managed Debugging Assistant. - - - It is too late to perform the requested operation, since the Transaction has already been aborted. - - - Initializes a new instance of the class. - - - Initializes a new instance of the class. - The message. - - - Initializes a new instance of the class. - The message. - The inner exception. - - - Initializes a new instance of the class. - The info. - The context. - - - It is too late to perform the requested operation, since the Transaction has already been committed. - - - Initializes a new instance of the class. - - - Initializes a new instance of the class. - The message. - - - Initializes a new instance of the class. - The message. - The inner exception. - - - Initializes a new instance of the class. - The object that holds the serialized object data. - The contextual information about the source or destination. - - - The exception that is thrown when an attempt to create a file or directory that already exists was made. - - - Initializes a new instance of the class. - - - Initializes a new instance of the class. - The message. - - - Initializes a new instance of the class. - The message. - The inner exception. - - - Initializes a new instance of the class. - The data for serializing or deserializing the object. - The source and destination for the object. - - - Static class providing utility methods for working with Microsoft Windows devices and volumes. - - - Defines, redefines, or deletes MS-DOS device names. - An MS-DOS device name string specifying the device the function is defining, redefining, or deleting. - An MS-DOS path that will implement this device. - - - Defines, redefines, or deletes MS-DOS device names. - - An MS-DOS device name string specifying the device the function is defining, redefining, or deleting. - - - >An MS-DOS path that will implement this device. If parameter has the - flag specified, is used as is. - - - The controllable aspects of the DefineDosDevice function, flags which will be combined with the - default. - - - - Deletes an MS-DOS device name. - An MS-DOS device name specifying the device to delete. - - - Deletes an MS-DOS device name. - An MS-DOS device name string specifying the device to delete. - - A pointer to a path string that will implement this device. The string is an MS-DOS path string unless the - flag is specified, in which case this string is a path string. - - - - Deletes an MS-DOS device name. - An MS-DOS device name string specifying the device to delete. - - A pointer to a path string that will implement this device. The string is an MS-DOS path string unless the - flag is specified, in which case this string is a path string. - - - Only delete MS-DOS device on an exact name match. If is , - must be the same path used to create the mapping. - - - - Deletes an MS-DOS device name. - An MS-DOS device name string specifying the device to delete. - - A pointer to a path string that will implement this device. The string is an MS-DOS path string unless the - flag is specified, in which case this string is a path string. - - - The controllable aspects of the DefineDosDevice function flags which will be combined with the - default. - - - Only delete MS-DOS device on an exact name match. If is , - must be the same path used to create the mapping. - - - - Retrieves a list of all existing MS-DOS device names. - An with one or more existing MS-DOS device names. - - - Retrieves a list of all existing MS-DOS device names. - - (Optional, default: ) An MS-DOS device name string specifying the target of the query. This parameter can be - "sort". In that case a sorted list of all existing MS-DOS device names is returned. This parameter can be . - In that case, the function will store a list of all existing MS-DOS device names into the buffer. - - An with or more existing MS-DOS device names. - - - - Retrieves information about MS-DOS device names. The function can obtain the current mapping for a particular MS-DOS device name. - The function can also obtain a list of all existing MS-DOS device names. - - - An MS-DOS device name string, or part of, specifying the target of the query. This parameter can be . In that - case, the QueryDosDevice function will store a list of all existing MS-DOS device names into the buffer. - - - (Optional, default: ) If options[0] = a sorted list will be returned. - - An with one or more existing MS-DOS device names. - - - Gets the name of the file system, such as NTFS or FAT32. - Use DriveFormat to determine what formatting a drive uses. - - A path to a drive. For example: "C:\", "\\server\share", or "\\?\Volume{c0580d5e-2ad6-11dc-9924-806e6f6e6963}\". - - The name of the file system on the specified drive or on failure or if not available. - - - Gets the drive letter from an MS-DOS device name. For example: "\Device\HarddiskVolume2" returns "C:\". - An MS-DOS device name. - The drive letter from an MS-DOS device name. - - - - Determines, based on the root of the current directory, whether a disk drive is a removable, fixed, CD-ROM, RAM disk, or network - drive. - - A object. - - - Determines whether a disk drive is a removable, fixed, CD-ROM, RAM disk, or network drive. - A path to a drive. For example: "C:\", "\\server\share", or "\\?\Volume{c0580d5e-2ad6-11dc-9924-806e6f6e6963}\" - A object. - - - - Retrieves information about the amount of space that is available on a disk volume, which is the total amount of space, the total - amount of free space, and the total amount of free space available to the user that is associated with the calling thread. - - The calling application must have FILE_LIST_DIRECTORY access rights for this directory. - - A path to a drive. For example: "C:\", "\\server\share", or "\\?\Volume{c0580d5e-2ad6-11dc-9924-806e6f6e6963}\". - - A class instance. - - - - Retrieves information about the amount of space that is available on a disk volume, which is the total amount of space, the total - amount of free space, and the total amount of free space available to the user that is associated with the calling thread. - - The calling application must have FILE_LIST_DIRECTORY access rights for this directory. - - A path to a drive. For example: "C:\", "\\server\share", or "\\?\Volume{c0580d5e-2ad6-11dc-9924-806e6f6e6963}\". - - - gets both size- and disk cluster information. Get only disk cluster information, - Get only size information. - - A class instance. - - - Gets a value indicating whether a drive is ready. - - A path to a drive. For example: "C:\", "\\server\share", or "\\?\Volume{c0580d5e-2ad6-11dc-9924-806e6f6e6963}\". - - if is ready; otherwise, . - - - Deletes the label of the file system volume that is the root of the current directory. - - - - Deletes the label of a file system volume. - - The root directory of a file system volume. This is the volume the function will remove the label. - - - Deletes a Drive letter or mounted folder. - Deleting a mounted folder does not cause the underlying directory to be deleted. - - If the parameter is a directory that is not a mounted folder, the function does nothing. The - directory is not deleted. - - - It's not an error to attempt to unmount a volume from a volume mount point when there is no volume actually mounted at that volume - mount point. - - The Drive letter or mounted folder to be deleted. For example, X:\ or Y:\MountX\. - - - - Returns an enumerable collection of of all mounted folders (volume mount points) on the specified volume. - - - - A containing the volume . - An enumerable collection of of all volume mount points on the specified volume. - - - - Returns an enumerable collection of drive letters and mounted folder paths for the specified volume. - - - - A volume path: \\?\Volume{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}\. - An enumerable collection of containing the path names for the specified volume. - - - Returns an enumerable collection of volumes on the computer. - An enumerable collection of volume names on the computer. - - - - Get the unique volume name for the given path. - - - - A path string. Both absolute and relative file and directory names, for example "..", is acceptable in this path. If you specify a - relative file or directory name without a volume qualifier, GetUniqueVolumeNameForPath returns the Drive letter of the current - volume. - - - Returns the unique volume name in the form: "\\?\Volume{GUID}\", - or on error or if unavailable. - - - - Retrieves the Win32 Device name from the Volume name. - - Name of the Volume. - - The Win32 Device name from the Volume name (for example: "\Device\HarddiskVolume2"), or on error or if - unavailable. - - - - Gets the shortest display name for the specified . - This method basically returns the shortest string returned by - A volume path: \\?\Volume{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}\. - - The shortest display name for the specified volume found, or if no display names were found. - - - - - Retrieves a volume path for the volume that is associated with the specified volume mount point (drive letter, - volume GUID path, or mounted folder). - - - - The path of a mounted folder (for example, "Y:\MountX\") or a drive letter (for example, "X:\"). - - The unique volume name of the form: "\\?\Volume{GUID}\". - - - - Tranlates DosDevicePath to a Volume GUID. For example: "\Device\HarddiskVolumeX\path\filename.ext" can translate to: "\path\ - filename.ext" or: "\\?\Volume{GUID}\path\filename.ext". - - A DosDevicePath, for example: \Device\HarddiskVolumeX\path\filename.ext. - A translated dos path. - - - Retrieves information about the file system and volume associated with the specified root file or directorystream. - A path that contains the root directory. - A instance describing the volume associatied with the specified root directory. - - - Retrieves information about the file system and volume associated with the specified root file or directorystream. - An instance to a handle. - A instance describing the volume associatied with the specified root directory. - - - Retrieve the label of a file system volume. - - A path to a volume. For example: "C:\", "\\server\share", or "\\?\Volume{c0580d5e-2ad6-11dc-9924-806e6f6e6963}\". - - - The the label of the file system volume. This function can return string.Empty since a volume label is generally not - mandatory. - - - - Retrieves the volume mount point where the specified path is mounted. - - The path to the volume, for example: "C:\Windows". - - Returns the nearest volume root path for a given directory. - The volume path name, for example: "C:\Windows" returns: "C:\". - - - - Determines whether the volume of two file system objects is the same. - The first filesystem ojbect with full path information. - The second file system object with full path information. - if both filesytem objects reside on the same volume, otherwise. - - - Determines whether the specified volume name is a defined volume on the current computer. - - A path to a volume. For example: "C:\", "\\server\share", or "\\?\Volume{c0580d5e-2ad6-11dc-9924-806e6f6e6963}\". - - on success, otherwise. - - - Sets the label of the file system volume that is the root of the current directory. - - A name for the volume. - - - Sets the label of a file system volume. - - A path to a volume. For example: "C:\", "\\server\share", or "\\?\Volume{c0580d5e-2ad6-11dc-9924-806e6f6e6963}\" - If this parameter is , the function uses the current drive. - - - A name for the volume. - If this parameter is , the function deletes any existing label - from the specified volume and does not assign a new label. - - - - Associates a volume with a Drive letter or a directory on another volume. - - - - The user-mode path to be associated with the volume. This may be a Drive letter (for example, "X:\") - or a directory on another volume (for example, "Y:\MountX\"). - - A containing the volume . - - - Defines, redefines, or deletes MS-DOS device names. - - - defines a new MS-DOS device. deletes a previously defined MS-DOS device. - - - An MS-DOS device name string specifying the device the function is defining, redefining, or deleting. - - - A pointer to a path string that will implement this device. The string is an MS-DOS path string unless the - flag is specified, in which case this string is a path string. - - - The controllable aspects of the DefineDosDevice function, flags which will be combined with the - default. - - - Only delete MS-DOS device on an exact name match. If is , - must be the same path used to create the mapping. - - - on success, otherwise. - - - Deletes a Drive letter or mounted folder. - - It's not an error to attempt to unmount a volume from a volume mount point when there is no volume actually mounted at that volume mount point. - Deleting a mounted folder does not cause the underlying directory to be deleted. - - - The Drive letter or mounted folder to be deleted. For example, X:\ or Y:\MountX\. - - suppress any Exception that might be thrown as a result from a failure, such as unavailable resources. - - If completed successfully returns , otherwise the last error number. - - - Contains information about a filesystem Volume. - - - Initializes a VolumeInfo instance. - - - A valid drive path or drive letter. This can be either uppercase or lowercase, 'a' to 'z' or a network share in the format: \\server\share. - - - Initializes a VolumeInfo instance. - A valid drive path or drive letter. This can be either uppercase or lowercase, 'a' to 'z' or a network share in the format: "\\server\share". - Refreshes the state of the object. - suppress any Exception that might be thrown as a result from a failure, such as unavailable resources. - - - Initializes a VolumeInfo instance. - An instance to a handle. - - - Initializes a VolumeInfo instance. - An instance to a handle. - Refreshes the state of the object. - suppress any Exception that might be thrown as a result from a failure, such as unavailable resources. - - - Refreshes the state of the object. - - - Returns the full path of the volume. - A string that represents this instance. - - - The specified volume supports preserved case of file names when it places a name on disk. - - - The specified volume supports case-sensitive file names. - - - The specified volume supports file-based compression. - - - Gets the name of the file system, for example, the FAT file system or the NTFS file system. - The name of the file system. - - - The full path to the volume. - - - The volume GUID. - - - Gets the maximum length of a file name component that the file system supports. - The maximum length of a file name component that the file system supports. - - - Gets the label of the volume. - The label of the volume. - This property is the label assigned to the volume, such "MyDrive" - - - The specified volume supports named streams. - - - The specified volume preserves and enforces access control lists (ACL). - - - The specified volume is read-only. - - - The specified volume supports a single sequential write. - - - Gets the volume serial number that the operating system assigns when a hard disk is formatted. - The volume serial number that the operating system assigns when a hard disk is formatted. - - - The specified volume supports the Encrypted File System (EFS). - - - The specified volume supports extended attributes. - - - The specified volume supports hard links. - - - The specified volume supports object identifiers. - - - The file system supports open by FileID. - - - The specified volume supports remote storage. (This property does not appear on MSDN) - - - The specified volume supports re-parse points. - - - The specified volume supports sparse files. - - - The specified volume supports transactions. - - - The specified volume supports update sequence number (USN) journals. - - - The specified volume supports Unicode in file names as they appear on disk. - - - The specified volume is a compressed volume, for example, a DoubleSpace volume. - - - The specified volume supports disk quotas. - - - Contains information about a Distributed File System (DFS) root or link. This class cannot be inherited. - This structure contains the name, status, GUID, time-out, number of targets, and information about each target of the root or link. - - - - Initializes a new instance of the class which acts as a wrapper for a DFS root or link target. - - - Initializes a new instance of the class, which acts as a wrapper for a DFS root or link target. - An initialized instance. - - - Returns the Universal Naming Convention (UNC) path of the DFS root or link. - A string that represents this instance. - - - The instance of the DFS root or link. - - - The comment of the DFS root or link. - - - The Universal Naming Convention (UNC) path of the DFS root or link. - - - Specifies the GUID of the DFS root or link. - - - The collection of DFS targets of the DFS root or link. - - - An enum that specifies a set of bit flags that describe the DFS root or link. - - - Specifies the time-out, in seconds, of the DFS root or link. - - - Specifies a set of flags that describe specific properties of a DFS namespace, root, or link. - - - For domain-based DFS namespaces, this member specifies the size of the corresponding Active Directory data blob, in bytes. - For stand-alone DFS namespaces, this field specifies the size of the metadata stored in the registry, - including the key names and value names, in addition to the specific data items associated with them. This field is valid for DFS roots only. - - - - Pointer to a SECURITY_DESCRIPTOR structure that specifies a self-relative security descriptor to be associated with the DFS link's reparse point. - This field is valid for DFS links only. - - - - Contains information about a DFS root or link target in a DFS namespace or from the cache maintained by the DFS client. - This class cannot be inherited. - - - - Initializes a new instance of the class, which acts as a wrapper for a DFS root or link target. - - - Initializes a new instance of the class, which acts as a wrapper for a DFS root or link target. - An initialized instance. - - - The share name of the DFS root target or link target. - A string that represents this instance. - - - The server name of the DFS root target or link target. - - - The share name of the DFS root target or link target. - - - An enum of the DFS root target or link target. - - - Contains a DFS target's priority class and rank. - - - Specifies the priority rank value of the target. The default value is 0, which indicates the highest priority rank within a priority class. - - - A set of bit flags that describe specific properties of a DFS namespace, root, or link. - - - No property flag. - - - DFS_PROPERTY_FLAG_INSITE_REFERRALS - - Scope: Domain roots, stand-alone roots, and links. - If this flag is set at the DFS root, it applies to all links; otherwise, the value of this flag is considered for each individual link. - - - When this flag is set, a DFS referral response from a DFS server for a DFS root or link with the "INSITE" option enabled contains only - those targets which are in the same site as the DFS client requesting the referral. - Targets in the two global priority classes are always returned, regardless of their site location. - - - - - DFS_PROPERTY_FLAG_ROOT_SCALABILITY - - Scope: The entire DFS namespace for a domain-based DFS namespace only. - - - By default, a DFS root target server polls the PDS to detect changes to the DFS metadata. - To prevent heavy server load on the PDC, root scalability can be enabled for the DFS namespace. - Setting this flag will cause the DFS server to poll the nearest domain controller instead of the PDC for DFS metadata changes for the common namespace. - Note that any changes made to the metadata must still occur on the PDC, however. - - - - - DFS_PROPERTY_FLAG_SITE_COSTING - - Scope: The entire DFS namespace for both domain-based and stand-alone DFS namespaces. - - - By default, targets returned in a referral response from a DFS server to a DFS client for a DFS root or link - consists of two groups: targets in the same site as the client, and targets outside the site. - - - If site-costing is enabled for the Active Directory, the response can have more than two groups, - with each group containing targets with the same site cost for the specific DFS client requesting the referral. - The groups are ordered by increasing site cost. For more information about how site-costing is used to prioritize targets. - - - - - DFS_PROPERTY_FLAG_TARGET_FAILBACK - - Scope: Domain-based DFS roots, stand-alone DFS roots, and DFS links. - If this flag is set at the DFS root, it applies to all links; otherwise, the value of this flag is considered for each individual link. - - - When this flag is set, optimal target failback is enabled for V4 DFS clients, - allowing them to fail back to an optimal target after failing over to a non-optimal one. - The target failback setting is provided to the DFS client in a V4 referral response by a DFS server. - - - - - DFS_PROPERTY_FLAG_CLUSTER_ENABLED - Scope: Stand-alone DFS roots and links only. - The DFS root is clustered to provide high availability for storage failover. - - - - DFS_PROPERTY_FLAG_ABDE - Scope: Domain-based DFS roots and stand-alone DFS roots. - When this flag is set, Access-Based Directory Enumeration (ABDE) mode support is enabled on the entire DFS root target share of the DFS namespace. - - - - Defines the set of possible DFS target priority class settings. - - - The priority class is not valid. - - - The middle or "normal" site cost priority class for a DFS target. - - - The highest priority class for a DFS target. Targets assigned this class receive global preference. - - - The highest site cost priority class for a DFS target. Targets assigned this class receive the most preference among targets of the same site cost for a given DFS client. - - - The lowest site cost priority class for a DFS target. Targets assigned this class receive the least preference among targets of the same site cost for a given DFS client. - - - The lowest level of priority class for a DFS target. Targets assigned this class receive the least preference globally. - - - The information level. - - - No specific information level used. - - - Contains information about the shared resource, including the name and type of the resource, and a comment associated with the resource. - - - Contains information about the shared resource, including the name, type, and permissions of the resource, comments associated with the resource, - the maximum number of concurrent connections, the number of current connections, the local path for the resource, and a password for the current connection. - - - - Contains information about the shared resource, including the server name, name of the resource, type, and permissions, - the number of connections, and other pertinent information. - - - - Contains information about the shared resource. - - - NETRESOURCE structure. - ResourceUsage: A set of bit flags describing how the resource can be used. - - Note that this member can be specified only if the member is equal to . - - - RESOURCEUSAGE_CONNECTABLE - The resource is a connectable resource. - The name pointed to by the lpRemoteName member can be passed to the WNetAddConnection function to make a network connection. - - - - RESOURCEUSAGE_CONTAINER - The resource is a container resource. - The name pointed to by the lpRemoteName member can be passed to the WNetAddConnection function to make a network connection. - - - - RESOURCEUSAGE_NOLOCALDEVICE - The resource is not a local device. - - - - RESOURCEUSAGE_SIBLING - The resource is a sibling. - This value is not used by Windows. - - - - RESOURCEUSAGE_ATTACHED - The resource must be attached. - This value specifies that a function to enumerate this resource should fail - if the caller is not authenticated, even if the network permits enumeration without authentication. - - - - RESOURCEUSAGE_ALL - Setting this value is equivalent to setting: , , and . - - - - NETRESOURCE structure. - ResourceType: The type of resource. - - If a network provider cannot distinguish between - print and disk resources, it can enumerate all resources. - - - - - RESOURCETYPE_ANY - ResourceType: All resources. - - If a network provider cannot distinguish between print and disk resources, it can enumerate all resources. - This value cannot be combined with or . - - - - - RESOURCETYPE_DISK - All disk resources. - - - - RESOURCETYPE_PRINT - All print resources. - - - - NETRESOURCE structure. - ResourceScope: The scope of the enumeration. - - - - RESOURCE_CONNECTED - Enumerate all currently connected resources. - The function ignores the parameter. - - - - RESOURCE_GLOBALNET - Enumerate all resources on the network. - - - - RESOURCE_REMEMBERED - Enumerate all remembered (persistent) connections. - The function ignores the parameter. - - - - RESOURCE_RECENT - - - RESOURCE_CONTEXT - Enumerate only resources in the network context of the caller. Specify this value for a Network Neighborhood view. - The function ignores the parameter. - - - - The display options for the network object in a network browsing user interface. - - - RESOURCEDISPLAYTYPE_GENERIC - The method used to display the object does not matter. - - - - RESOURCEDISPLAYTYPE_DOMAIN - The object should be displayed as a domain. - - - - RESOURCEDISPLAYTYPE_SERVER - The object should be displayed as a server. - - - - RESOURCEDISPLAYTYPE_SHARE - The object should be displayed as a share - - - - RESOURCEDISPLAYTYPE_FILE - The object should be displayed as a file. - - - - RESOURCEDISPLAYTYPE_GROUP - The object should be displayed as a group. - - - - RESOURCEDISPLAYTYPE_NETWORK - The object should be displayed as a network. - - - - RESOURCEDISPLAYTYPE_ROOT - The object should be displayed as a logical root for the entire network. - - - - RESOURCEDISPLAYTYPE_SHAREADMIN - The object should be displayed as a administrative share. - - - - RESOURCEDISPLAYTYPE_DIRECTORY - The object should be displayed as a directory. - - - - RESOURCEDISPLAYTYPE_TREE - The object should be displayed as a tree. - - - - RESOURCEDISPLAYTYPE_NDSCONTAINER - The object should be displayed as a Netware Directory Service container. - - - - Used by function WNetUseConnection(); Set of bit flags describing the connection. This parameter can be any combination of the following values. - - - No Connect options are used. - - - This flag instructs the operating system to store the network resource connection. If this bit flag is set, the operating system automatically attempts to restore the connection when the user logs on. The system remembers only successful connections that redirect local devices. It does not remember connections that are unsuccessful or deviceless connections. - - - If this flag is set, the operating system may interact with the user for authentication purposes. - - - This flag instructs the system not to use any default settings for user names or passwords without offering the user the opportunity to supply an alternative. This flag is ignored unless is also set. - - - This flag forces the redirection of a local device when making the connection. - - - If this flag is set, and the operating system prompts for a credential, the credential should be saved by the credential manager. If the credential manager is disabled for the caller's logon session, or if the network provider does not support saving credentials, this flag is ignored. This flag is also ignored unless you set the "CommandLine" flag. - - - Contains the name and type (domain-based or stand-alone) of a DFS namespace. - Minimum supported client: Windows XP with SP1 [desktop apps only] - Minimum supported server: Windows Server 2003 [desktop apps only] - - - - - - DFS_VOLUME_FLAVOR_STANDALONE - Specifies a stand-alone DFS namespace. - - - - DFS_VOLUME_FLAVOR_AD_BLOB - Specifies a domain-based DFS namespace. - - - - DFS_VOLUME_FLAVORS bitmask (0x00000300) - Used to extract the DFS namespace flavor. - - - - The WNetCancelConnection function cancels an existing network connection. You can also call the function to remove remembered network connections that are not currently connected. - - If the function succeeds, the return value is - If the function fails, the return value is a system error code. - - - Minimum supported client: Windows 2000 Professional [desktop apps only] - Minimum supported server: Windows 2000 Server [desktop apps only] - - - - The WNetGetUniversalName function takes a drive-based path for a network resource and returns an information structure that contains a more universal form of the name. - - If the function succeeds, the return value is - If the function fails, the return value is a system error code. - - - Minimum supported client: Windows 2000 Professional [desktop apps only] - Minimum supported server: Windows 2000 Server [desktop apps only] - - - - The WNetUseConnection function creates a connection to a network resource. The function can redirect a local device to a network resource. - - If the function succeeds, the return value is - If the function fails, the return value is a system error code. - - - Minimum supported client: Windows 2000 Professional [desktop apps only] - Minimum supported server: Windows 2000 Server [desktop apps only] - - - - Lists all connections made to a shared resource on the server or all connections established from a particular computer. - - If the function succeeds, the return value is NERR_Success. - If the function fails, the return value is a system error code. - - - If there is more than one user using this connection, then it is possible to get more than one structure for the same connection, but with a different user name. - Administrator, Server or Print Operator, or Power User group membership is required to successfully execute the NetConnectionEnum function. - Minimum supported client: Windows XP [desktop apps only] - Minimum supported server: Windows Server 2003 [desktop apps only] - - - - Forces a resource to close. This function can be used when an error prevents closure by any other means. - - If the function succeeds, the return value is NERR_Success. - If the function fails, the return value is a system error code. - - - You should use NetFileClose with caution because it does not write data cached on the client system to the file before closing the file. - Only members of the Administrators or Server Operators local group can successfully execute the NetFileEnum function. - Minimum supported client: Windows XP [desktop apps only] - Minimum supported server: Windows Server 2003 [desktop apps only] - - - - Returns information about some or all open files on a server, depending on the parameters specified. - - If the function succeeds, the return value is NERR_Success. - If the function fails, the return value is a system error code. - - - Only members of the Administrators or Server Operators local group can successfully execute the NetFileEnum function. - Minimum supported client: Windows XP [desktop apps only] - Minimum supported server: Windows Server 2003 [desktop apps only] - - - - Retrieves information about each (hidden) Server Message Block (SMB) resource/share on a server. - - If the function succeeds, the return value is NERR_Success. - If the function fails, the return value is a system error code. - - - For interactive users (users who are logged on locally to the machine), no special group membership is required to execute the NetShareEnum function. - For non-interactive users, Administrator, Power User, Print Operator, or Server Operator group membership is required to successfully execute the NetShareEnum function at levels 2, 502, and 503. No special group membership is required for level 0 or level 1 calls. - This function applies only to Server Message Block (SMB) shares. - Windows Server 2003 and Windows XP: For all users, Administrator, Power User, Print Operator, or Server Operator group membership is required to successfully execute the NetShareEnum function at levels 2 and 502. - Minimum supported client: Windows XP [desktop apps only] - Minimum supported server: Windows Server 2003 [desktop apps only] - - - - Retrieves information about a particular Server Message Block (SMB) shared resource on a server. - - If the function succeeds, the return value is NERR_Success. - If the function fails, the return value is a system error code. - - - For interactive users (users who are logged on locally to the machine), no special group membership is required to execute the NetShareGetInfo function. - For non-interactive users, Administrator, Power User, Print Operator, or Server Operator group membership is required to successfully execute the NetShareGetInfo function at levels 2, 502, and 503. - This function applies only to Server Message Block (SMB) shares. - Windows Server 2003 and Windows XP: For all users, Administrator, Power User, Print Operator, or Server Operator group membership is required to successfully execute the NetShareGetInfo function at levels 2 and 502. - Minimum supported client: Windows XP [desktop apps only] - Minimum supported server: Windows Server 2003 [desktop apps only] - - - - The NetServerDiskEnum function retrieves a list of disk drives on a server. - - If the function succeeds, the return value is NERR_Success. - If the function fails, the return value is a system error code. - - - The function returns an array of three-character strings (a drive letter, a colon, and a terminating null character). - Only members of the Administrators or Server Operators local group can successfully execute the NetServerDiskEnum function on a remote computer. - Minimum supported client: Windows 2000 Professional [desktop apps only] - Minimum supported server: Windows 2000 Server [desktop apps only] - - - - Enumerates the Distributed File System (DFS) namespaces hosted on a server or DFS links of a namespace hosted by a server. - - If the function succeeds, the return value is NERR_Success. - If the function fails, the return value is a system error code. - - - No special group membership is required for using the NetDfsEnum function. - Minimum supported client: Windows Vista - Minimum supported server: Windows Server 2003 - - - - Retrieves information about a Distributed File System (DFS) root or link from the cache maintained by the DFS client. - - If the function succeeds, the return value is NERR_Success. - If the function fails, the return value is a system error code. - - - No special group membership is required for using the NetDfsGetClientInfo function. - Minimum supported client: Windows Vista - Minimum supported server: Windows Server 2003 - - - - Retrieves information about a specified Distributed File System (DFS) root or link in a DFS namespace. - - If the function succeeds, the return value is NERR_Success. - If the function fails, the return value is a system error code. - - - No special group membership is required for using the NetDfsGetInfo function. - Minimum supported client: Windows Vista - Minimum supported server: Windows Server 2003 - - - - A constant of type DWORD that is set to –1. This value is valid as an input parameter to any method in section 3.1.4 that takes a PreferedMaximumLength parameter. When specified as an input parameter, this value indicates that the method MUST allocate as much space as the data requires. - MSDN "2.2.2.2 MAX_PREFERRED_LENGTH": http://msdn.microsoft.com/en-us/library/cc247107.aspx - - - Contains the name, status, GUID, time-out, property flags, metadata size, DFS target information, link reparse point security descriptor, and a list of DFS targets for a root or link. - Minimum supported client: Windows Vista with SP1 - Minimum supported server: Windows Server 2008 - - - The Universal Naming Convention (UNC) path of a DFS root or link. - - - The comment associated with the DFS root or link. - - - A that specifies a set of bit flags that describe the DFS root or link. - - - Specifies the time-out, in seconds, of the DFS root or link. - - - Specifies the GUID of the DFS root or link. - - - Specifies a set of flags that describe specific properties of a DFS namespace, root, or link. - - - For domain-based DFS namespaces, this member specifies the size of the corresponding Active Directory data blob, in bytes. - For stand-alone DFS namespaces, this field specifies the size of the metadata stored in the registry, - including the key names and value names, in addition to the specific data items associated with them. - This field is valid for DFS roots only. - - - - This member is reserved for system use. - - - Pointer to a SECURITY_DESCRIPTOR structure that specifies a self-relative security descriptor to be associated with the DFS link's reparse point. - This field is valid for DFS links only. - - - - Specifies the number of DFS targets. - - - An array of structures. - - - Contains the priority class and rank of a specific DFS target. - Minimum supported client: Windows Vista - Minimum supported server: Windows Server 2008, Windows Server 2003 with SP1 - - - DFS_TARGET_PRIORITY_CLASS enumeration value that specifies the priority class of the target. - - - Specifies the priority rank value of the target. The default value is 0, which indicates the highest priority rank within a priority class. - - - This member is reserved and must be zero. - - - Contains information about a DFS target, including the DFS target server name and share name as well as the target's state and priority. - Minimum supported client: Windows Vista - Minimum supported server: Windows Server 2008, Windows Server 2003 with SP1 - - - State of the target. - - - The DFS root target or link target server name. - - - The DFS root target or link target share name. - - - DFS_TARGET_PRIORITY structure that contains a DFS target's priority class and rank. - - - Contains information about a network resource. - The NETRESOURCE structure is returned during an enumeration of network resources. - The NETRESOURCE structure is also specified when making or querying - a network connection with calls to various Windows Networking functions. - - - - The scope of the enumeration. - - - The type of resource - - - The display options for the network object in a network browsing user interface. - - - A set of bit flags describing how the resource can be used. - - - If the member is equal to or , - this member is a pointer to a -terminated character string that specifies the name of a local device. - This member is if the connection does not use a device. - - - - If the entry is a network resource, this member is a that specifies the remote network name. - If the entry is a current or persistent connection, member points to - the network name associated with the name pointed to by the member. - The can be characters in length, - and it must follow the network provider's naming conventions. - - - - A that contains a comment supplied by the network provider. - - - A that contains the name of the provider that owns the resource. - This member can be if the provider name is unknown. - - - - Contains the identifier and other pertinent information about files, devices, and pipes. - This structure is only for use with the NetFileEnum function. - Minimum supported client: Windows XP [desktop apps only] - Minimum supported server: Windows Server 2003 [desktop apps only] - - - The identification number assigned to the resource when it is opened. - - - The access permissions associated with the opening application. This member can be one or more of the following values. - - - The number of file locks on the file, device, or pipe. - - - The path of the opened resource. - - - Specifies which user (on servers that have user-level security) or which computer (on servers that have share-level security) opened the resource. - - - Contains the name of a domain-based Distributed File System (DFS) namespace. - This structure is only for use with the NetDfsEnum, NetDfsGetClientInfo, and NetDfsGetInfo functions. - Minimum supported client: Windows XP [desktop apps only] - Minimum supported server: Windows Server 2003 [desktop apps only] - - - The name of a domain-based DFS namespace. - - - Contains the name and type (domain-based or stand-alone) of a DFS namespace. - The DFS functions use the structure to enumerate DFS namespaces hosted on a machine. - Minimum supported client: Windows XP with SP1 [desktop apps only] - Minimum supported server: Windows Server 2003 [desktop apps only] - - - Value that specifies the type of the DFS namespace. This member can be one of the values. - - - The name of a DFS namespace. - This member can have one of the following two formats: - The first format is: \ServerName\DfsName - where ServerName is the name of the root target server that hosts the stand-alone DFS namespace and DfsName is the name of the DFS namespace. - The second format is: - \DomainName\DomDfsName - where DomainName is the name of the domain that hosts the domain-based DFS namespace and DomDfsname is the name of the DFS namespace. - - - - Contains path and name information for a network resource. - - - Identifies a network resource. - - - The name of a network connection. - - - The remaing path. - - - Contains the identification number of a connection, number of open files, connection time, number of users on the connection, and the type of connection. - Minimum supported client: Windows XP [desktop apps only] - Minimum supported server: Windows Server 2003 [desktop apps only] - - - Specifies a connection identification number. - - - A combination of values that specify the type of connection made from the local device name to the shared resource. - - - Specifies the number of files currently open as a result of the connection. - - - Specifies the number of users on the connection. - - - Specifies the number of seconds that the connection has been established. - - - If the server sharing the resource is running with user-level security, the UserName member describes which user made the connection. If the server is running with share-level security, coni1_username describes which computer (computername) made the connection. - Note that Windows does not support share-level security. - - - String that specifies either the share name of the server's shared resource or the computername of the client. The value of this member depends on which name was specified as the qualifier parameter to the NetConnectionEnum function. - - - Contains information about the shared resource. - This structure can be retrieved by calling the NetShareGetInfo function. - Minimum supported client: Windows XP [desktop apps only] - Minimum supported server: Windows Server 2003 [desktop apps only] - - - A bitmask of flags that specify information about the shared resource. - - - Contains information about the shared resource, including the name and type of the resource, and a comment associated with the resource. - Minimum supported client: Windows XP [desktop apps only] - Minimum supported server: Windows Server 2003 [desktop apps only] - - - The name of a shared resource. - - - The type of share. - - - An optional comment about the shared resource. - - - Contains information about the shared resource, including the name, type, and permissions of the resource, comments associated with the resource, - the maximum number of concurrent connections, the number of current connections, the local path for the resource, and a password for the current connection. - - Share information, NT, level 2, requires admin rights to work. - Minimum supported client: Windows XP [desktop apps only] - Minimum supported server: Windows Server 2003 [desktop apps only] - - - The name of a shared resource. - - - The type of share. - - - An optional comment about the shared resource. - - - The shared resource's permissions for servers running with share-level security. - Note that Windows does not support share-level security. This member is ignored on a server running user-level security. - - - The maximum number of concurrent connections that the shared resource can accommodate. - The number of connections is unlimited if the value specified in this member is –1. - - - The number of current connections to the resource. - - - The local path for the shared resource. - For disks, this member is the path being shared. For print queues, this member is the name of the print queue being shared. - - - The share's password (when the server is running with share-level security). - - - Contains information about the shared resource, including the server name, name of the resource, type, and permissions, - the number of connections, and other pertinent information. - - Minimum supported client: Windows XP [desktop apps only] - Minimum supported server: Windows Server 2003 [desktop apps only] - - - The name of a shared resource. - - - The type of share. - - - An optional comment about the shared resource. - - - The shared resource's permissions for servers running with share-level security. - Note that Windows does not support share-level security. This member is ignored on a server running user-level security. - - - The maximum number of concurrent connections that the shared resource can accommodate. - The number of connections is unlimited if the value specified in this member is –1. - - - The number of current connections to the resource. - - - The local path for the shared resource. - For disks, this member is the path being shared. For print queues, this member is the name of the print queue being shared. - - - The share's password (when the server is running with share-level security). - - - The DNS or NetBIOS name of the remote server on which the shared resource resides. - A value of "*" indicates no configured server name. - - - Reserved; must be zero. - - - Specifies the SECURITY_DESCRIPTOR associated with this share. - - - A set of bit flags that describe the storage state of the DFS root or link target. - - - No storage state. - - - DFS_STORAGE_STATE_OFFLINE - The DFS root or link target is offline. - - Windows Server 2003: The state of a root target cannot be set to DFS_STORAGE_STATE_OFFLINE. - - - DFS_STORAGE_STATE_ONLINE - The DFS root or link target is online. - - - - DFS_STORAGE_STATE_ACTIVE - The DFS root or link target is the active target. - - - - A set of bit flags that describe the state of the DFS root or link; - the state of the DFS namespace root cannot be changed. - One flag is set, and one DFS_VOLUME_FLAVOR flag is set. - - - - No volume state. - - - DFS_VOLUME_STATE_OK - The specified DFS root or link is in the normal state. - - - - DFS_VOLUME_STATE_INCONSISTENT - The internal DFS database is inconsistent with the specified DFS root or link. - Attempts to repair the inconsistency have failed. - - - - DFS_VOLUME_STATE_OFFLINE - The specified DFS root or link is offline or unavailable. - - - - DFS_VOLUME_STATE_ONLINE - The specified DFS root or link is available. - - - - DFS_VOLUME_FLAVOR_STANDALONE - The system sets this flag if the root is associated with a stand-alone DFS namespace. - - Windows XP: This value is not supported. - - - DFS_VOLUME_FLAVOR_AD_BLOB - The system sets this flag if the root is associated with a domain-based DFS namespace. - - Windows XP: This value is not supported. - - - A set of bit flags that describe the permissions for the shared resource's on servers running with share-level security. - Note that Windows does not support share-level security. This member is ignored on a server running user-level security. - - - No permissions. - - - ACCESS_READ - Permission to read data from a resource and, by default, to execute the resource. - - - - ACCESS_WRITE - Permission to write data to the resource. - - - - ACCESS_CREATE - Permission to create an instance of the resource (such as a file); data can be written to the resource as the resource is created. - - - - ACCESS_EXEC - Permission to execute the resource. - - - - ACCESS_DELETE - Permission to delete the resource. - - - - ACCESS_ATRIB - Permission to modify the resource's attributes, such as the date and time when a file was last modified. - - - - ACCESS_PERM - Permission to modify the permissions (read, write, create, execute, and delete) assigned to a resource for a user or application. - - - - ACCESS_ALL - Permission to read, write, create, execute, and delete resources, and to modify their attributes and permissions. - - - - Contains information about the shared resource. - - Minimum supported client: Windows XP [desktop apps only] - Minimum supported server: Windows Server 2003 [desktop apps only] - - - - No specific resource type used. - - - SHI1005_FLAGS_DFS - The specified share is present in a DFS tree structure. This flag cannot be set with NetShareSetInfo. - - - - SHI1005_FLAGS_DFS_ROOT - The specified share is the root volume in a DFS tree structure. This flag cannot be set with NetShareSetInfo. - - - - SHI1005_FLAGS_RESTRICT_EXCLUSIVE_OPENS - The specified share disallows exclusive file opens, where reads to an open file are disallowed. - - - - SHI1005_FLAGS_FORCE_SHARED_DELETE - Shared files in the specified share can be forcibly deleted. - - - - SHI1005_FLAGS_ALLOW_NAMESPACE_CACHING - Clients are allowed to cache the namespace of the specified share. - - - - SHI1005_FLAGS_ACCESS_BASED_DIRECTORY_ENUM - The server will filter directory entries based on the access permissions that the user on the client computer has for the server on which the files reside. - Only files for which the user has read access and directories for which the user has FILE_LIST_DIRECTORY access will be returned. If the user has SeBackupPrivilege, all available information will be returned. - - This flag is supported only on servers running Windows Server 2003 with SP1 or later. - - - SHI1005_FLAGS_FORCE_LEVELII_OPLOCK - Prevents exclusive caching modes that can cause delays for highly shared read-only data. - - This flag is supported only on servers running Windows Server 2008 R2 or later. - - - SHI1005_FLAGS_ENABLE_HASH - Enables server-side functionality needed for peer caching support. - Clients on high-latency or low-bandwidth connections can use alternate methods to retrieve data from peers if available, instead of sending requests to the server. - This is only supported on shares configured for manual caching (CSC_CACHE_MANUAL_REINT). - This flag is supported only on servers running Windows Server 2008 R2 or later. - - - SHI1005_FLAGS_ENABLE_CA (0X4000) - Enables server-side functionality needed for peer caching support. Clients on high-latency or low-bandwidth connections can use alternate methods to retrieve data from peers if available, instead of sending requests to the server. This is only supported on shares configured for manual caching (CSC_CACHE_MANUAL_REINT). - Windows 7, Windows Server 2008 R2, Windows Vista, Windows Server 2008, and Windows Server 2003: This flag is not supported. - - - The type of the shared resource. - MSDN: 2.2.2.4 Share Types - http://msdn.microsoft.com/en-us/library/cc247110.aspx - - - - Disk drive. - - - Print queue. - - - Communication device. - - - Interprocess communication (IPC). - - - A cluster share. - - - A Scale-Out cluster share. - - - A DFS share in a cluster. - - - Special share reserved for interprocess communication (IPC$) or remote administration of the server (ADMIN$). - Can also refer to administrative shares such as C$, D$, E$, and so forth. - - - - A temporary share that is not persisted for creation each time the file server initializes. - - - Retriev all known - - - Provides static methods to retrieve network resource information from a local- or remote host. - - - Enumerates open resources from the local host. - open resources from the local host. - - - - - Enumerates open resources from the specified host. - open resources from the specified . - - - The DNS or NetBIOS name of the remote server. refers to the local host. - - This parameter may be . Enumerates only resources that have the value of the basepath parameter as a prefix. - (A prefix is the portion of a path that comes before a backslash.) - - - This parameter may be . The name of the user or the name of the connection; If - does not begin with two backslashes ("\\") it indicates the name of the user. If begins with two - backslashes ("\\") it indicates the name of the connection. - - suppress any Exception that might be thrown as a result from a failure, such as unavailable resources. - - - >Enumerates open resources from the specified host. - open resources from the specified . - - - The DNS or NetBIOS name of the remote server. refers to the local host. - - This parameter may be . Enumerates only resources that have the value of the basepath parameter as a prefix. - (A prefix is the portion of a path that comes before a backslash.) - - - This parameter may be . The name of the user or the name of the connection; If - does not begin with two backslashes ("\\") it indicates the name of the user. If begins with two - backslashes ("\\") it indicates the name of the connection. - - suppress any Exception that might be thrown as a result from a failure, such as unavailable resources. - - - Enumerates drives from the local host. - drives from the local host. - - - - Enumerates local drives from the specified host. - drives from the specified host. - - The DNS or NetBIOS name of the remote server. refers to the local host. - - suppress any Exception that might be thrown as a result from a failure, - such as unavailable resources. - - - - Enumerates local drives from the specified host. - drives from the specified host. - - - The DNS or NetBIOS name of the remote server. refers to the local host. - - suppress any Exception that might be thrown as a result from a failure, - such as unavailable resources. - - - - Enumerates open connections from the local host. - connection information from the local host. - - - - - Enumerates open connections from the specified host. - connection information from the specified . - - - The DNS or NetBIOS name of the remote server. refers to the local host. - The name of the Server Message Block (SMB) share. - - suppress any Exception that might be thrown as a result from a failure, - such as unavailable resources. - - - - Enumerates Server Message Block (SMB) shares from the local host. - shares from the specified host. - This method also enumerates hidden shares. - - - Enumerates Server Message Block (SMB) shares from the local host. - shares from the specified host. - This method also enumerates hidden shares. - suppress any Exception that might be thrown as a result from a failure, such as unavailable resources. - - - Enumerates Server Message Block (SMB) shares from the local host. - shares from the specified host. - This method also enumerates hidden shares. - The type of the shared resource to retrieve. - suppress any Exception that might be thrown as a result from a failure, such as unavailable resources. - - - Enumerates Server Message Block (SMB) shares from the specified . - shares from the specified host. - This method also enumerates hidden shares. - The DNS or NetBIOS name of the specified host. - - - Enumerates Server Message Block (SMB) shares from the specified . - shares from the specified host. - This method also enumerates hidden shares. - The DNS or NetBIOS name of the specified host. - suppress any Exception that might be thrown as a result from a failure, such as unavailable resources. - - - Enumerates Server Message Block (SMB) shares from the specified . - shares from the specified host. - This method also enumerates hidden shares. - The DNS or NetBIOS name of the specified host. - The type of the shared resource to retrieve. - suppress any Exception that might be thrown as a result from a failure, such as unavailable resources. - - - Gets the host and share path name for the given . - The share in the format: \\host\share. - The host and share path. For example, if is: "\\SERVER001\C$\WINDOWS\System32", - its is returned as string[0] = "SERVER001" and string[1] = "\C$\WINDOWS\System32". - If the conversion from local path to UNC path fails, is returned. - - - - Retrieves information about the Server Message Block (SMB) share as defined on the specified host. - A class, or on failure or when not available, and is . - The share in the format: \\host\share. - to suppress any Exception that might be thrown as a result from a failure, such as unavailable resources. - - - Retrieves information about the Server Message Block (SMB) share as defined on the specified host. - A class, or on failure or when not available, and is . - One of the options. - The share in the format: \\host\share. - to suppress any Exception that might be thrown as a result from a failure, such as unavailable resources. - - - Retrieves information about the Server Message Block (SMB) share as defined on the specified host. - A class, or on failure or when not available, and is . - The DNS or NetBIOS name of the specified host. - The name of the Server Message Block (SMB) share. - to suppress any Exception that might be thrown as a result from a failure, such as unavailable resources. - - - Retrieves information about the Server Message Block (SMB) share as defined on the specified host. - A class, or on failure or when not available, and is . - One of the options. - A string that specifies the DNS or NetBIOS name of the specified . - A string that specifies the name of the Server Message Block (SMB) share. - to suppress any Exception that might be thrown as a result from a failure, such as unavailable resources. - - - Enumerates open connections from the specified host. - connection information from the specified . - - - The DNS or NetBIOS name of the remote server. refers to the local host. - The name of the Server Message Block (SMB) share. - suppress any Exception that might be thrown as a result from a failure, such as unavailable resources. - - - Enumerates Server Message Block (SMB) shares from a local or remote host. - shares from the specified host. - This method also enumerates hidden shares. - - - The DNS or NetBIOS name of the specified host. - The type of the shared resource to retrieve. - suppress any Exception that might be thrown as a result from a failure, such as unavailable resources. - - - Gets the structure of a Server Message Block (SMB) share. - A class, or on failure or when not available, and is . - - One of the options. - A string that specifies the DNS or NetBIOS name of the specified . - A string that specifies the name of the Server Message Block (SMB) share. - to suppress any Exception that might be thrown as a result from a failure, such as unavailable resources. - - - Enumerates the DFS Links from a DFS namespace. - of DFS namespaces. - - - - The Universal Naming Convention (UNC) path of a DFS root or link. - - - Enumerates the DFS namespaces from the local host. - of DFS Root namespaces from the local host. - - - - - Enumerates the DFS namespaces from a host. - of DFS Root namespaces from a host. - - - The DNS or NetBIOS name of a host. - suppress any Exception that might be thrown as a result from a failure, such as unavailable resources. - - - Enumerates the DFS namespaces from the domain. - of DFS Root namespaces from the domain. - - - - - Enumerates the DFS namespaces from a domain. - of DFS Root namespaces from a domain. - - - A domain name. - suppress any Exception that might be thrown as a result from a failure, such as unavailable resources. - - - Gets information about a DFS root or link from the cache maintained by the DFS client. - A instance. - - - The Universal Naming Convention (UNC) path of a DFS root or link. - - - Gets information about a DFS root or link from the cache maintained by the DFS client. - A instance. - - - The Universal Naming Convention (UNC) path of a DFS root or link. - The name of the DFS root target or link target server. - The name of the share corresponding to the DFS root target or link target. - - - Gets information about a specified DFS root or link in a DFS namespace. - A instance. - - - The Universal Naming Convention (UNC) path of a DFS root or link. - - - Enumerates the DFS namespaces from a host. - of DFS Root namespaces from a host. - - - - The DNS or NetBIOS name of a host. - suppress any Exception that might be thrown as a result from a failure, such as unavailable resources. - - - Enumerates the DFS namespaces from a domain. - of DFS Root namespaces from a domain. - - - - A domain name. - suppress any Exception that might be thrown as a result from a failure, such as unavailable resources. - - - Retrieves information about a specified DFS root or link in a DFS namespace. - A instance. - - - - - retrieves information about a Distributed File System (DFS) root or link from the cache maintained by the - DFS client. When retrieves information about a specified Distributed File System (DFS) root or link in a - DFS namespace. - - The Universal Naming Convention (UNC) path of a DFS root or link. - - The name of the DFS root target or link target server. If is , this - parameter is always . - - - The name of the share corresponding to the DFS root target or link target. If is - , this parameter is always . - - - - Creates a connection to a network resource. The function can redirect a local device to a network resource. - If is or string.Empty, returns the last available drive letter, otherwise. - - The name of a local device to be redirected, such as "F:". When is or - string.Empty, the last available drive letter will be used. Letters are assigned beginning with Z:, then Y: and so on. - - The network resource to connect to. The string can be up to MAX_PATH characters in length. - - - Creates a connection to a network resource. The function can redirect a local device to a network resource. - If is or string.Empty, returns the last available drive letter, null otherwise. - - The name of a local device to be redirected, such as "F:". When is or - string.Empty, the last available drive letter will be used. Letters are assigned beginning with Z:, then Y: and so on. - - The network resource to connect to. The string can be up to MAX_PATH characters in length. - - The user name for making the connection. If is , the function uses the default - user name. (The user context for the process provides the default user name) - - - The password to be used for making the network connection. If is , the function - uses the current default password associated with the user specified by . - - always pops-up an authentication dialog box. - successful network resource connections will be saved. - - When the operating system prompts for a credential, the credential should be saved by the credential manager when true. - - - - Creates a connection to a network resource. The function can redirect a local device to a network resource. - If is or string.Empty, returns the last available drive letter, null otherwise. - - The name of a local device to be redirected, such as "F:". When is or - string.Empty, the last available drive letter will be used. Letters are assigned beginning with Z:, then Y: and so on. - - The network resource to connect to. The string can be up to MAX_PATH characters in length. - - An instance of which provides credentials for password-based authentication schemes such as basic, - digest, NTLM, and Kerberos authentication. - - always pops-up an authentication dialog box. - successful network resource connections will be saved. - - When the operating system prompts for a credential, the credential should be saved by the credential manager when true. - - - - Creates a connection to a network resource. The function can redirect a local device to a network resource. - If is or string.Empty, returns the last available drive letter, null otherwise. - Handle to a window that the provider of network resources can use as an owner window for dialog boxes. - - The name of a local device to be redirected, such as "F:". When is or - string.Empty, the last available drive letter will be used. Letters are assigned beginning with Z:, then Y: and so on. - - The network resource to connect to. The string can be up to MAX_PATH characters in length. - - The user name for making the connection. If is , the function uses the default - user name. (The user context for the process provides the default user name) - - - The password to be used for making the network connection. If is , the function - uses the current default password associated with the user specified by . - - always pops-up an authentication dialog box. - successful network resource connections will be saved. - - When the operating system prompts for a credential, the credential should be saved by the credential manager when true. - - - - Creates a connection to a network resource. The function can redirect a local device to a network resource. - If is or string.Empty, returns the last available drive letter, null otherwise. - Handle to a window that the provider of network resources can use as an owner window for dialog boxes. - - The name of a local device to be redirected, such as "F:". When is or - string.Empty, the last available drive letter will be used. Letters are assigned beginning with Z:, then Y: and so on. - - The network resource to connect to. The string can be up to MAX_PATH characters in length. - - An instance of which provides credentials for password-based authentication schemes such as basic, - digest, NTLM, and Kerberos authentication. - - always pops-up an authentication dialog box. - successful network resource connections will be saved. - - When the operating system prompts for a credential, the credential should be saved by the credential manager when true. - - - - Creates a connection to a network resource. - - A network resource to connect to, for example: \\server or \\server\share. - - - Creates a connection to a network resource. - - A network resource to connect to, for example: \\server or \\server\share. - - The user name for making the connection. If is , the function uses the default - user name. (The user context for the process provides the default user name) - - - The password to be used for making the network connection. If is , the function - uses the current default password associated with the user specified by . - - always pops-up an authentication dialog box. - successful network resource connections will be saved. - - When the operating system prompts for a credential, the credential should be saved by the credential manager when true. - - - - Creates a connection to a network resource. - A network resource to connect to, for example: \\server or \\server\share. - An instance of which provides credentials for password-based authentication schemes such as basic, digest, NTLM, and Kerberos authentication. - always pops-up an authentication dialog box. - successful network resource connections will be saved. - When the operating system prompts for a credential, the credential should be saved by the credential manager when true. - - - - - Creates a connection to a network resource. - - Handle to a window that the provider of network resources can use as an owner window for dialog boxes. - A network resource to connect to, for example: \\server or \\server\share. - - The user name for making the connection. If is , the function uses the default - user name. (The user context for the process provides the default user name) - - - The password to be used for making the network connection. If is , the function - uses the current default password associated with the user specified by . - - always pops-up an authentication dialog box. - successful network resource connections will be saved. - When the operating system prompts for a credential, the credential should be saved by the credential manager when true. - - - Creates a connection to a network resource. - - Handle to a window that the provider of network resources can use as an owner window for dialog boxes. - A network resource to connect to, for example: \\server or \\server\share. - An instance of which provides credentials for password-based authentication schemes such as basic, digest, NTLM, and Kerberos authentication. - always pops-up an authentication dialog box. - successful network resource connections will be saved. - When the operating system prompts for a credential, the credential should be saved by the credential manager when true. - - - Cancels an existing network connection. You can also call the function to remove remembered network connections that are not currently connected. - The name of a local device to be disconnected, such as "F:". - - - Cancels an existing network connection. You can also call the function to remove remembered network connections that are not currently connected. - The name of a local device to be disconnected, such as "F:". - - Specifies whether the disconnection should occur if there are open files or jobs on the connection. - If this parameter is , the function fails if there are open files or jobs. - - successful removal of network resource connections will be saved. - - - Cancels an existing network connection. You can also call the function to remove remembered network connections that are not currently connected. - A network resource to disconnect from, for example: \\server or \\server\share. - - - Cancels an existing network connection. You can also call the function to remove remembered network connections that are not currently connected. - A network resource to disconnect from, for example: \\server or \\server\share. - - Specifies whether the disconnection should occur if there are open files or jobs on the connection. - If this parameter is , the function fails if there are open files or jobs. - - successful removal of network resource connections will be saved. - - - Connects to/disconnects from a network resource. The function can redirect a local device to a network resource. - If is or string.Empty, returns the last available drive letter, null otherwise. - - - The . - - - Return the host name in UNC format, for example: \\hostname. - The unc name. - - - Return the host name in UNC format, for example: \\hostname. - Name of the computer. - The unc name. - - - Structure is used to pass additional data to the Win32 function. - - - This method uses level to retieve full REMOTE_NAME_INFO structure. - A structure. - AlphaFS regards network drives created using SUBST.EXE as invalid. - - - - - The local path with drive name. - suppress any Exception that might be thrown as a result from a failure, such as unavailable resources. - - - Handle to a window that the provider of network resources can use as an owner window for dialog boxes. - - - The name of a local device to be redirected, such as "F:". When is or string.Empty, the last available drive letter will be used. Letters are assigned beginning with Z:, then Y: and so on. - - - A network resource to connect to/disconnect from, for example: \\server or \\server\share - - - A instance. Use either this or the combination of and . - - - The user name for making the connection. If is , the function uses the default user name. (The user context for the process provides the default user name) - - - The password to be used for making the network connection. If is , the function uses the current default password associated with the user specified by . - - - always pops-up an authentication dialog box. - - - successful network resource connections will be saved. - - - When the operating system prompts for a credential, the credential should be saved by the credential manager when true. - - - indicates that the operation concerns a drive mapping. - - - indicates that the operation needs to disconnect from the network resource, otherwise connect. - - - Used to create a temporary connection to a network resource that will be disconnected once this instance is disposed. - - - Creates a temporary connection to a network resource. The function can redirect a local device to a network resource, using the current user credentials. - The network resource to connect to. The string can be up to MAX_PATH characters in length. - - - Creates a temporary connection to a network resource. The function can redirect a local device to a network resource, using a user name and password. - The network resource to connect to. The string can be up to MAX_PATH characters in length. - - The user name for making the connection. If is , the function uses the default - user name. (The user context for the process provides the default user name) - - - The password to be used for making the network connection. If is , the function - uses the current default password associated with the user specified by . - - always pops-up an authentication dialog box. - - - Creates a temporary connection to a network resource. The function can redirect a local device to a network resource, can be supplied. - The network resource to connect to. The string can be up to MAX_PATH characters in length. - An instance of which provides credentials for password-based authentication schemes such as basic, digest, NTLM, and Kerberos authentication. - always pops-up an authentication dialog box. - - - class destructor. - - - Releases all resources used by the class. - - - Returns the last available drive letter used for this connection. - A string that represents this instance. - - - The last available drive letter used for this connection. - The last available drive letter used for this connection. - - - The path originally specified by the user. - The path originally specified by the user. - - - Contains the identification number of a connection, number of open files, connection time, number of users on the connection, and the type of connection. - - - Create a OpenConnectionInfo instance. - - - Returns the full path to the share. - A string that represents this instance. - - - The local or remote Host. - - - Specifies a connection identification number. - - - The type of share. - - - Specifies the number of files currently open as a result of the connection. - - - Specifies the number of users on the connection. - - - Specifies the number of seconds that the connection has been established. - - - If the server sharing the resource is running with user-level security, the UserName member describes which user made the connection. If the server is running with share-level security, coni1_username describes which computer (computername) made the connection. - - - String that specifies either the share name of the server's shared resource or the computername of the client. The value of this member depends on which name was specified as the qualifier parameter to the NetConnectionEnum function. - - - Contains the identification number and other pertinent information about files, devices, and pipes. This class cannot be inherited. - - - Create a OpenResourceInfo instance. - - - Forces the open resource to close. - You should this method with caution because it does not write data cached on the client system to the file before closing the file. - - - Returns the full path to the share. - A string that represents this instance. - - - The local or remote Host. - - - The identification number assigned to the resource when it is opened. - - - The path of the opened resource. - - - The access permissions associated with the opening application. This member can be one or more of the following values. - - - The number of file locks on the file, device, or pipe. - - - Specifies which user (on servers that have user-level security) or which computer (on servers that have share-level security) opened the resource. - - - Contains information about Server Message Block (SMB) shares. This class cannot be inherited. - - - Creates a instance. - A host to retrieve shares from. - One of the options. - A or instance. - - - Returns the full path to the share. - A string that represents this instance. - - - The number of current connections to the resource. - - - The instance associated with this share. - - - Returns the full UNC path to the share. - - - The maximum number of concurrent connections that the shared resource can accommodate. - The number of connections is unlimited if the value specified in this member is –1. - - - The name of a shared resource. - - - The share's password (when the server is running with share-level security). - - - The local path for the shared resource. - For disks, this member is the path being shared. For print queues, this member is the name of the print queue being shared. - - - The shared resource's permissions for servers running with share-level security. - Note that Windows does not support share-level security. This member is ignored on a server running user-level security. - - - An optional comment about the shared resource. - - - Specifies the SECURITY_DESCRIPTOR associated with this share. - - - A pointer to a string that specifies the DNS or NetBIOS name of the remote server on which the shared resource resides. - A value of "*" indicates no configured server name. - - - The type of share. - - - The type of share resource. - - - The structure level for the ShareInfo instance. - - - Static class providing access to information about the operating system under which the assembly is executing. - - - A set of flags that describe the named Windows versions. - The values of the enumeration are ordered. A later released operating system version has a higher number, so comparisons between named versions are meaningful. - - - A Windows version earlier than Windows 2000. - - - Windows 2000 (Server or Professional). - - - Windows XP. - - - Windows Server 2003. - - - Windows Vista. - - - Windows Server 2008. - - - Windows 7. - - - Windows Server 2008 R2. - - - Windows 8. - - - Windows Server 2012. - - - Windows 8.1. - - - Windows Server 2012 R2 - - - Windows 10 - - - Windows Server - - - A later version of Windows than currently installed. - - - A set of flags to indicate the current processor architecture for which the operating system is targeted and running. - - - PROCESSOR_ARCHITECTURE_INTEL - The system is running a 32-bit version of Windows. - - - - PROCESSOR_ARCHITECTURE_IA64 - The system is running on a Itanium processor. - - - - PROCESSOR_ARCHITECTURE_AMD64 - The system is running a 64-bit version of Windows. - - - - PROCESSOR_ARCHITECTURE_UNKNOWN - Unknown architecture. - - - - Gets a value indicating whether the operating system is a server operating system. - if the current operating system is a server operating system; otherwise, . - - - Gets a value indicating whether the current process is running under WOW64. - if the current process is running under WOW64; otherwise, . - - - Gets the numeric version of the operating system. - The numeric version of the operating system. - - - Gets the named version of the operating system. - The named version of the operating system. - - - Gets the processor architecture for which the operating system is targeted. - The processor architecture for which the operating system is targeted. - If running under WOW64 this will return a 32-bit processor. Use to determine if this is the case. - - - Gets the version of the service pack currently installed on the operating system. - The version of the service pack currently installed on the operating system. - Only the and fields are used. - - - Determines whether the operating system is of the specified version or later. - if the operating system is of the specified or later; otherwise, . - The lowest version for which to return true. - - - Determines whether the operating system is of the specified version or later, allowing specification of a minimum service pack that must be installed on the lowest version. - if the operating system matches the specified with the specified service pack, or if the operating system is of a later version; otherwise, . - The minimum required version. - The major version of the service pack that must be installed on the minimum required version to return true. This can be 0 to indicate that no service pack is required. - - - The RtlGetVersion routine returns version information about the currently running operating system. - RtlGetVersion returns STATUS_SUCCESS. - Available starting with Windows 2000. - - - Retrieves information about the current system to an application running under WOW64. - If the function is called from a 64-bit application, it is equivalent to the GetSystemInfo function. - - This function does not return a value. - To determine whether a Win32-based application is running under WOW64, call the function. - Minimum supported client: Windows XP [desktop apps | Windows Store apps] - Minimum supported server: Windows Server 2003 [desktop apps | Windows Store apps] - - - Determines whether the specified process is running under WOW64. - - If the function succeeds, the return value is a nonzero value. - If the function fails, the return value is zero. To get extended error information, call GetLastError. - - Minimum supported client: Windows Vista, Windows XP with SP2 [desktop apps only] - Minimum supported server: Windows Server 2008, Windows Server 2003 with SP1 [desktop apps only] - - - - A strongly-typed resource class, for looking up localized strings, etc. - - - - - Returns the cached ResourceManager instance used by this class. - - - - - Overrides the current thread's CurrentUICulture property for all - resource lookups using this strongly typed resource class. - - - - - Looks up a localized string similar to Buffer is not large enough for the requested operation.. - - - - - Looks up a localized string similar to Cannot create directory.. - - - - - Looks up a localized string similar to Cannot determine Copy or Move action.. - - - - - Looks up a localized string similar to Destination buffer not large enough for the requested operation.. - - - - - Looks up a localized string similar to The device is not ready.. - - - - - Looks up a localized string similar to Incorrectly implemented function attempting to generate exception from successful operation. - . - - - - - Looks up a localized string similar to The specified file is hidden: [{0}]. - - - - - Looks up a localized string similar to The file or directory already exists.. - - - - - Looks up a localized string similar to The handle is closed.. - - - - - Looks up a localized string similar to The handle is invalid.. - - - - - Looks up a localized string similar to The handle is invalid. Win32Error: [{0}]. - - - - - Looks up a localized string similar to Creating hard-links on non-NTFS partitions is not supported.. - - - - - Looks up a localized string similar to Illegal characters: [{0}] in path.. - - - - - Looks up a localized string similar to An attempt to set an invalid file attribute failed.. - - - - - Looks up a localized string similar to Invalid stream name.. - - - - - Looks up a localized string similar to Invalid Subpath. - - - - - Looks up a localized string similar to Invalid transaction request.. - - - - - Looks up a localized string similar to Count cannot be negative.. - - - - - Looks up a localized string similar to Destination offset cannot be negative.. - - - - - Looks up a localized string similar to Length cannot be negative.. - - - - - Looks up a localized string similar to Lock length cannot be negative.. - - - - - Looks up a localized string similar to Offset cannot be negative.. - - - - - Looks up a localized string similar to This stream does not support seeking.. - - - - - Looks up a localized string similar to The file or directory is not a reparse point.. - - - - - Looks up a localized string similar to Argument is not a valid Volume GUID.. - - - - - Looks up a localized string similar to Path is a zero-length string or contains only white space.. - - - - - Looks up a localized string similar to Privilege name cannot be empty.. - - - - - Looks up a localized string similar to Incomplete header read.. - - - - - Looks up a localized string similar to This method requires Windows Vista or higher.. - - - - - Looks up a localized string similar to Invalid security descriptor returned from system.. - - - - - Looks up a localized string similar to Source offset and length outside the bounds of the array. - - - - - Looks up a localized string similar to The target directory is a file, not a directory: [{0}]. - - - - - Looks up a localized string similar to The target file is a directory, not a file: [{0}]. - - - - - Looks up a localized string similar to Transaction already aborted.. - - - - - Looks up a localized string similar to Transaction already committed.. - - - - - Looks up a localized string similar to Invalid transaction object.. - - - - - Looks up a localized string similar to Transaction not active.. - - - - - Looks up a localized string similar to Transaction not requested.. - - - - - Looks up a localized string similar to Transactional conflict.. - - - - - Looks up a localized string similar to Network share path should match the format: \\server\share. - - - - - Looks up a localized string similar to Backup FileStream Unlock Position must not be negative.. - - - - - Looks up a localized string similar to The given path's format is not supported: [{0}]. - - - - Represents a block of native memory of a specified size allocated using the LocalAlloc function from Kernel32.dll. - - - Creates new instance with zero IntPtr. - - - Initializes a new instance of the class allocating the specified number of bytes of unmanaged memory. - The capacity. - - - Called when object is disposed or finalized. - - - Base class for classes representing a block of unmanaged memory. - - - Initializes a new instance of the specifying the allocated capacity of the memory block. - The capacity. - - - Gets the capacity. Only valid if this instance was created using a constructor that specifies the size, - it is not correct if this handle was returned by a native method using p/invoke. - - - - Copies data from a one-dimensional, managed 8-bit unsigned integer array to the unmanaged memory pointer referenced by this instance. - The one-dimensional array to copy from. - The zero-based index into the array where Copy should start. - The number of array elements to copy. - - - Copies data from an unmanaged memory pointer to a managed 8-bit unsigned integer array. - The array to copy to. - The zero-based index in the destination array where copying should start. - The number of array elements to copy. - - - Copies data from this unmanaged memory pointer to a managed 8-bit unsigned integer array. - The offset in the buffer to start copying from. - The array to copy to. - The zero-based index in the destination array where copying should start. - The number of array elements to copy. - - - Marshals data from a managed object to an unmanaged block of memory. - - - Marshals data from an unmanaged block of memory to a newly allocated managed object of the specified type. - A managed object containing the data pointed to by the ptr parameter. - - - Allocates a managed System.String and copies a specified number of characters from an unmanaged Unicode string into it. - A managed string that holds a copy of the unmanaged string if the value of the ptr parameter is not null; otherwise, this method returns null. - - - Allocates a managed System.String and copies all characters up to the first null character from an unmanaged Unicode string into it. - A managed string that holds a copy of the unmanaged string if the value of the ptr parameter is not null; otherwise, this method returns null. - - - Implements an ISO-3309 compliant 64-bit CRC hash algorithm. - - - Initializes a new instance of - - - Initializes a new instance of - The polynomial. - The seed. - - - - Initializes an implementation of the - class. - - - - When overridden in a derived class, routes data written to the object into the hash algorithm for computing the hash. - The input to compute the hash code for.. - The offset into the byte array from which to begin using data. - The number of bytes in the byte array to use as data. - - - - Finalizes the hash computation after the last data is processed by the cryptographic stream - object. - - - This method finalizes any partial computation and returns the correct hash value for the data - stream. - - - - Gets the size, in bits, of the computed hash code. - The size, in bits, of the computed hash code. - - - Calculates the hash. - The seed. - The table. - The buffer. - The start. - The size. - The calculated hash. - - - Int 64 to big endian bytes. - The value. - A byte[]. - - - Initializes the table. - The polynomial. - An ulong[]. - - - Creates a table. - The polynomial. - A new array of ulong. - - - Enum containing the supported hash types. - - - CRC-32 (Cyclic Redundancy Check) - - - CRC-64 ISO-3309 compliant. - - - MD5 (Message digest) - - - RIPEMD-160 is a 160-bit cryptographic hash function. It is intended for use as a replacement for the 128-bit hash functions MD4, MD5, and RIPEMD. - - - SHA-1 (Secure Hash Algorithm) - - - SHA-256 (Secure Hash Algorithm) - - - SHA-384 (Secure Hash Algorithm) - - - SHA-512 (Secure Hash Algorithm) - - - The ObjectType (SE_OBJECT_TYPE) enumeration contains values that correspond to the types of Windows objects that support security. - The functions, such as GetSecurityInfo and SetSecurityInfo, that set and retrieve the security information of an object, use these values to indicate the type of object. - - - - Unknown object type. - - - Indicates a file or directory. The name string that identifies a file or directory object can be in one of the following formats: - A relative path, such as FileName.dat or ..\FileName - An absolute path, such as FileName.dat, C:\DirectoryName\FileName.dat, or G:\RemoteDirectoryName\FileName.dat. - A UNC name, such as \\ComputerName\ShareName\FileName.dat. - - - - Indicates a Windows service. A service object can be a local service, such as ServiceName, or a remote service, such as \\ComputerName\ServiceName. - - - Indicates a printer. A printer object can be a local printer, such as PrinterName, or a remote printer, such as \\ComputerName\PrinterName. - - - Indicates a registry key. A registry key object can be in the local registry, such as CLASSES_ROOT\SomePath or in a remote registry, such as \\ComputerName\CLASSES_ROOT\SomePath. - The names of registry keys must use the following literal strings to identify the predefined registry keys: "CLASSES_ROOT", "CURRENT_USER", "MACHINE", and "USERS". - - - - Indicates a network share. A share object can be local, such as ShareName, or remote, such as \\ComputerName\ShareName. - - - Indicates a local kernel object. The GetSecurityInfo and SetSecurityInfo functions support all types of kernel objects. - The GetNamedSecurityInfo and SetNamedSecurityInfo functions work only with the following kernel objects: semaphore, event, mutex, waitable timer, and file mapping. - - - Indicates a window station or desktop object on the local computer. You cannot use GetNamedSecurityInfo and SetNamedSecurityInfo with these objects because the names of window stations or desktops are not unique. - - - Indicates a directory service object or a property set or property of a directory service object. - The name string for a directory service object must be in X.500 form, for example: CN=SomeObject,OU=ou2,OU=ou1,DC=DomainName,DC=CompanyName,DC=com,O=internet - - - Indicates a directory service object and all of its property sets and properties. - - - Indicates a provider-defined object. - - - Indicates a WMI object. - - - Indicates an object for a registry entry under WOW64. - - - The SECURITY_DESCRIPTOR_CONTROL data type is a set of bit flags that qualify the meaning of a security descriptor or its components. - Each security descriptor has a Control member that stores the SECURITY_DESCRIPTOR_CONTROL bits. - - - - - - SE_OWNER_DEFAULTED (0x0001) - Indicates an SD with a default owner security identifier (SID). You can use this bit to find all of the objects that have default owner permissions set. - - - SE_GROUP_DEFAULTED (0x0002) - Indicates an SD with a default group SID. You can use this bit to find all of the objects that have default group permissions set. - - - SE_DACL_PRESENT (0x0004) - Indicates an SD that has a discretionary access control list (DACL). If this flag is not set, or if this flag is set and the DACL is NULL, the SD allows full access to everyone. - - - SE_DACL_DEFAULTED (0x0008) - Indicates an SD with a default DACL. For example, if an object creator does not specify a DACL, the object receives the default DACL from the access token of the creator. This flag can affect how the system treats the DACL, with respect to access control entry (ACE) inheritance. The system ignores this flag if the SE_DACL_PRESENT flag is not set. - - - SE_SACL_PRESENT (0x0010) - Indicates an SD that has a system access control list (SACL). - - - SE_SACL_DEFAULTED (0x0020) - Indicates an SD with a default SACL. For example, if an object creator does not specify an SACL, the object receives the default SACL from the access token of the creator. This flag can affect how the system treats the SACL, with respect to ACE inheritance. The system ignores this flag if the SE_SACL_PRESENT flag is not set. - - - SE_DACL_AUTO_INHERIT_REQ (0x0100) - Requests that the provider for the object protected by the SD automatically propagate the DACL to existing child objects. If the provider supports automatic inheritance, it propagates the DACL to any existing child objects, and sets the SE_DACL_AUTO_INHERITED bit in the security descriptors of the object and its child objects. - - - SE_SACL_AUTO_INHERIT_REQ (0x0200) - Requests that the provider for the object protected by the SD automatically propagate the SACL to existing child objects. If the provider supports automatic inheritance, it propagates the SACL to any existing child objects, and sets the SE_SACL_AUTO_INHERITED bit in the SDs of the object and its child objects. - - - SE_DACL_AUTO_INHERITED (0x0400) - Windows 2000 only. Indicates an SD in which the DACL is set up to support automatic propagation of inheritable ACEs to existing child objects. The system sets this bit when it performs the automatic inheritance algorithm for the object and its existing child objects. This bit is not set in SDs for Windows NT versions 4.0 and earlier, which do not support automatic propagation of inheritable ACEs. - - - SE_SACL_AUTO_INHERITED (0x0800) - Windows 2000: Indicates an SD in which the SACL is set up to support automatic propagation of inheritable ACEs to existing child objects. The system sets this bit when it performs the automatic inheritance algorithm for the object and its existing child objects. This bit is not set in SDs for Windows NT versions 4.0 and earlier, which do not support automatic propagation of inheritable ACEs. - - - SE_DACL_PROTECTED (0x1000) - Windows 2000: Prevents the DACL of the SD from being modified by inheritable ACEs. - - - SE_SACL_PROTECTED (0x2000) - Windows 2000: Prevents the SACL of the SD from being modified by inheritable ACEs. - - - SE_RM_CONTROL_VALID (0x4000) - Indicates that the resource manager control is valid. - - - SE_SELF_RELATIVE (0x8000) - Indicates an SD in self-relative format with all of the security information in a contiguous block of memory. If this flag is not set, the SD is in absolute format. For more information, see Absolute and Self-Relative Security Descriptors. - - - The SECURITY_INFORMATION data type identifies the object-related security information being set or queried. - This security information includes: - The owner of an object; - The primary group of an object; - The discretionary access control list (DACL) of an object; - The system access control list (SACL) of an object; - - - An unsigned 32-bit integer specifies portions of a SECURITY_DESCRIPTOR by means of bit flags. - Individual bit values (combinable with the bitwise OR operation) are as shown in the following table. - - - - - - - OWNER_SECURITY_INFORMATION (0x00000001) - The owner identifier of the object is being referenced. - - - GROUP_SECURITY_INFORMATION (0x00000002) - The primary group identifier of the object is being referenced. - - - DACL_SECURITY_INFORMATION (0x00000004) - The DACL of the object is being referenced. - - - SACL_SECURITY_INFORMATION (0x00000008) - The SACL of the object is being referenced. - - - LABEL_SECURITY_INFORMATION (0x00000010) - The mandatory integrity label is being referenced. The mandatory integrity label is an ACE in the SACL of the object. - Windows Server 2003 and Windows XP: This bit flag is not available. - - - ATTRIBUTE_SECURITY_INFORMATION (0x00000020) - The resource properties of the object being referenced. - The resource properties are stored in SYSTEM_RESOURCE_ATTRIBUTE_ACE types in the SACL of the security descriptor. - - Windows Server 2008 R2, Windows 7, Windows Server 2008, Windows Vista, Windows Server 2003, and Windows XP: This bit flag is not available. - - - SCOPE_SECURITY_INFORMATION (0x00000040) - The Central Access Policy (CAP) identifier applicable on the object that is being referenced. - Each CAP identifier is stored in a SYSTEM_SCOPED_POLICY_ID_ACE type in the SACL of the SD. - - Windows Server 2008 R2, Windows 7, Windows Server 2008, Windows Vista, Windows Server 2003, and Windows XP: This bit flag is not available. - - - BACKUP_SECURITY_INFORMATION (0x00010000) - All parts of the security descriptor. This is useful for backup and restore software that needs to preserve the entire security descriptor. - Windows Server 2008 R2, Windows 7, Windows Server 2008, Windows Vista, Windows Server 2003, and Windows XP: This bit flag is not available. - - - UNPROTECTED_SACL_SECURITY_INFORMATION (0x10000000) - The SACL inherits ACEs from the parent object. - - - UNPROTECTED_DACL_SECURITY_INFORMATION (0x20000000) - The DACL inherits ACEs from the parent object. - - - PROTECTED_SACL_SECURITY_INFORMATION (0x40000000) - The SACL cannot inherit ACEs. - - - PROTECTED_DACL_SECURITY_INFORMATION (0x80000000) - The DACL cannot inherit access control entries (ACEs). - - - An IntPtr wrapper which can be used as the result of a Marshal.AllocHGlobal operation. - Calls Marshal.FreeHGlobal when disposed or finalized. - - - - Creates new instance with zero IntPtr. - - - Copies data from a one-dimensional, managed 8-bit unsigned integer array to the unmanaged memory pointer referenced by this instance. - The one-dimensional array to copy from. - The zero-based index into the array where Copy should start. - The number of array elements to copy. - - - Called when object is disposed or finalized. - - - The AdjustTokenPrivileges function enables or disables privileges in the specified access token. Enabling or disabling privileges in an access token requires TOKEN_ADJUST_PRIVILEGES access. - - If the function succeeds, the return value is nonzero. - To determine whether the function adjusted all of the specified privileges, call GetLastError. - - Minimum supported client: Windows XP [desktop apps only] - Minimum supported server: Windows Server 2003 [desktop apps only] - - - The LookupPrivilegeDisplayName function retrieves the display name that represents a specified privilege. - - If the function succeeds, the return value is nonzero. - If the function fails, it returns zero. To get extended error information, call GetLastError. - - Minimum supported client: Windows XP [desktop apps only] - Minimum supported server: Windows Server 2003 [desktop apps only] - - - The LookupPrivilegeValue function retrieves the locally unique identifier (LUID) used on a specified system to locally represent the specified privilege name. - - If the function succeeds, the function returns nonzero. - If the function fails, it returns zero. To get extended error information, call GetLastError. - - Minimum supported client: Windows XP [desktop apps only] - Minimum supported server: Windows Server 2003 [desktop apps only] - - - The GetNamedSecurityInfo function retrieves a copy of the security descriptor for an object specified by name. -   - - If the function succeeds, the return value is ERROR_SUCCESS. - If the function fails, the return value is a nonzero error code defined in WinError.h. - -   - - Minimum supported client: Windows XP [desktop apps only] - Minimum supported server: Windows Server 2003 [desktop apps only] - - - - - The GetSecurityInfo function retrieves a copy of the security descriptor for an object specified by a handle. - - If the function succeeds, the function returns nonzero. - If the function fails, it returns zero. To get extended error information, call GetLastError. - - Minimum supported client: Windows XP [desktop apps only] - Minimum supported server: Windows Server 2003 [desktop apps only] - - - The SetSecurityInfo function sets specified security information in the security descriptor of a specified object. - The caller identifies the object by a handle. - - If the function succeeds, the function returns ERROR_SUCCESS. - If the function fails, it returns a nonzero error code defined in WinError.h. - - Minimum supported client: Windows XP [desktop apps only] - Minimum supported server: Windows Server 2003 [desktop apps only] - - - The SetNamedSecurityInfo function sets specified security information in the security descriptor of a specified object. The caller identifies the object by name. -   - - If the function succeeds, the function returns ERROR_SUCCESS. - If the function fails, it returns a nonzero error code defined in WinError.h. - -   - - Minimum supported client: Windows XP [desktop apps only] - Minimum supported server: Windows Server 2003 [desktop apps only] - - - - - The GetSecurityDescriptorDacl function retrieves a pointer to the discretionary access control list (DACL) in a specified security descriptor. - - If the function succeeds, the function returns nonzero. - If the function fails, it returns zero. To get extended error information, call GetLastError. - - Minimum supported client: Windows XP [desktop apps only] - Minimum supported server: Windows Server 2003 [desktop apps only] - - - The GetSecurityDescriptorSacl function retrieves a pointer to the system access control list (SACL) in a specified security descriptor. - - If the function succeeds, the function returns nonzero. - If the function fails, it returns zero. To get extended error information, call GetLastError. - - Minimum supported client: Windows XP [desktop apps only] - Minimum supported server: Windows Server 2003 [desktop apps only] - - - The GetSecurityDescriptorGroup function retrieves the primary group information from a security descriptor. - - If the function succeeds, the function returns nonzero. - If the function fails, it returns zero. To get extended error information, call GetLastError. - - Minimum supported client: Windows XP [desktop apps only] - Minimum supported server: Windows Server 2003 [desktop apps only] - - - The GetSecurityDescriptorControl function retrieves a security descriptor control and revision information. - - If the function succeeds, the function returns nonzero. - If the function fails, it returns zero. To get extended error information, call GetLastError. - - Minimum supported client: Windows XP [desktop apps only] - Minimum supported server: Windows Server 2003 [desktop apps only] - - - The GetSecurityDescriptorOwner function retrieves the owner information from a security descriptor. - - If the function succeeds, the function returns nonzero. - If the function fails, it returns zero. To get extended error information, call GetLastError. - - Minimum supported client: Windows XP [desktop apps only] - Minimum supported server: Windows Server 2003 [desktop apps only] - - - The GetSecurityDescriptorLength function returns the length, in bytes, of a structurally valid security descriptor. The length includes the length of all associated structures. - - If the function succeeds, the function returns the length, in bytes, of the SECURITY_DESCRIPTOR structure. - If the SECURITY_DESCRIPTOR structure is not valid, the return value is undefined. - - Minimum supported client: Windows XP [desktop apps only] - Minimum supported server: Windows Server 2003 [desktop apps only] - - - Frees the specified local memory object and invalidates its handle. - - If the function succeeds, the return value is . - If the function fails, the return value is equal to a handle to the local memory object. To get extended error information, call GetLastError. - - SetLastError is set to . - - Note The local functions have greater overhead and provide fewer features than other memory management functions. - New applications should use the heap functions unless documentation states that a local function should be used. - For more information, see Global and Local Functions. - - Minimum supported client: Windows XP [desktop apps only] - Minimum supported server: Windows Server 2003 [desktop apps only] - - - Class used to represent the SECURITY_ATTRIBUES native Win32 structure. It provides initialization function from an object. - - - Marshals an ObjectSecurity instance to unmanaged memory. - A safe handle containing the marshalled security descriptor. - The security descriptor. - - - Implements a 32-bit CRC hash algorithm compatible with Zip etc. - - Crc32 should only be used for backward compatibility with older file formats - and algorithms. It is not secure enough for new applications. - If you need to call multiple times for the same data either use the HashAlgorithm - interface or remember that the result of one Compute call needs to be ~ (XOR) before - being passed in as the seed for the next Compute call. - - - - - Initializes a new instance of Crc32. - - - - Initializes a new instance of Crc32. - The polynomial. - The seed. - - - - Initializes an implementation of the - class. - - - - When overridden in a derived class, routes data written to the object into the hash algorithm for computing the hash. - The input to compute the hash code for.. - The offset into the byte array from which to begin using data. - The number of bytes in the byte array to use as data. - - - - Finalizes the hash computation after the last data is processed by the cryptographic stream - object. - - - This method finalizes any partial computation and returns the correct hash value for the data - stream. - - - - Gets the size, in bits, of the computed hash code. - The size, in bits, of the computed hash code. - - - Initializes the table. - The polynomial. - The table. - - - Calculates the hash. - The table. - The seed. - The buffer. - The start. - The size. - The calculated hash. - - - Int 32 to big endian bytes. - The second uint 3. - A byte[]. - - - Represents a privilege for an access token. The privileges available on the local machine are available as - static instances from this class. To create a representing a privilege on another system, - use the constructor specifying a system name together with one of these static instances. - - - - - Required to assign the primary token of a process. User Right: Replace a process-level token. - - - Required to generate audit-log entries. Give this privilege to secure servers. User Right: Generate security audits. - - - Required to perform backup operations. This privilege causes the system to grant all read access control to any file, regardless of the access control list (ACL) specified for the file. Any access request other than read is still evaluated with the ACL. User Right: Back up files and directories. - - - Required to receive notifications of changes to files or directories. This privilege also causes the system to skip all traversal access checks. It is enabled by default for all users. User Right: Bypass traverse checking. - - - Required to create named file mapping objects in the global namespace during Terminal Services sessions. This privilege is enabled by default for administrators, services, and the local system account. User Right: Create global objects. - Windows XP/2000: This privilege is not supported. Note that this value is supported starting with Windows Server 2003, Windows XP SP2, and Windows 2000 SP4. - - - Required to create a paging file. User Right: Create a pagefile. - - - Required to create a permanent object. User Right: Create permanent shared objects. - - - Required to create a symbolic link. User Right: Create symbolic links. - - - Required to create a primary token. User Right: Create a token object. - - - Required to debug and adjust the memory of a process owned by another account. User Right: Debug programs. - - - Required to mark user and computer accounts as trusted for delegation. User Right: Enable computer and user accounts to be trusted for delegation. - - - Required to impersonate. User Right: Impersonate a client after authentication. - Windows XP/2000: This privilege is not supported. Note that this value is supported starting with Windows Server 2003, Windows XP SP2, and Windows 2000 SP4. - - - Required to increase the base priority of a process. User Right: Increase scheduling priority. - - - Required to increase the quota assigned to a process. User Right: Adjust memory quotas for a process. - - - Required to allocate more memory for applications that run in the context of users. User Right: Increase a process working set. - - - Required to load or unload a device driver. User Right: Load and unload device drivers. - - - Required to lock physical pages in memory. User Right: Lock pages in memory. - - - Required to create a computer account. User Right: Add workstations to domain. - - - Required to enable volume management privileges. User Right: Manage the files on a volume. - - - Required to gather profiling information for a single process. User Right: Profile single process. - - - Required to modify the mandatory integrity level of an object. User Right: Modify an object label. - - - Required to shut down a system using a network request. User Right: Force shutdown from a remote system. - - - Required to perform restore operations. This privilege causes the system to grant all write access control to any file, regardless of the ACL specified for the file. Any access request other than write is still evaluated with the ACL. Additionally, this privilege enables you to set any valid user or group SID as the owner of a file. User Right: Restore files and directories. - - - Required to perform a number of security-related functions, such as controlling and viewing audit messages. This privilege identifies its holder as a security operator. User Right: Manage auditing and security log. - - - Required to shut down a local system. User Right: Shut down the system. - - - Required for a domain controller to use the LDAP directory synchronization services. This privilege enables the holder to read all objects and properties in the directory, regardless of the protection on the objects and properties. By default, it is assigned to the Administrator and LocalSystem accounts on domain controllers. User Right: Synchronize directory service data. - - - Required to modify the nonvolatile RAM of systems that use this type of memory to store configuration information. User Right: Modify firmware environment values. - - - Required to gather profiling information for the entire system. User Right: Profile system performance. - - - Required to modify the system time. User Right: Change the system time. - - - Required to take ownership of an object without being granted discretionary access. This privilege allows the owner value to be set only to those values that the holder may legitimately assign as the owner of an object. User Right: Take ownership of files or other objects. - - - This privilege identifies its holder as part of the trusted computer base. Some trusted protected subsystems are granted this privilege. User Right: Act as part of the operating system. - - - Required to adjust the time zone associated with the computer's internal clock. User Right: Change the time zone. - - - Required to access Credential Manager as a trusted caller. User Right: Access Credential Manager as a trusted caller. - - - Required to undock a laptop. User Right: Remove computer from docking station. - - - Required to read unsolicited input from a terminal device. User Right: Not applicable. - - - Create a new representing the specified privilege on the specified system. - Name of the system. - The privilege to copy the privilege name from. - - - Gets the system name identifying this privilege. - The system name identifying this privilege. - - - Retrieves the display name that represents this privilege. - The display name that represents this privilege. - - - Retrieves the locally unique identifier (LUID) used on to represent this privilege (on the system from which it originates). - the locally unique identifier (LUID) used on to represent this privilege (on the system from which it originates). - - - Indicates whether the current object is equal to another object of the same type. - An object to compare with this object. - if the current object is equal to the parameter; otherwise, . - - - Determines whether the specified is equal to the current . - The to compare with the current . - if the specified is equal to the current ; otherwise, . - - - - Serves as a hash function for a particular type. - A hash code for the current Object. - - - Returns the system name for this privilege. - This is equivalent to . - A that represents the current . - - - Initializes a new instance of the class, representing a privilege with the specified name on the local system. - The name. - - - Used to enable one or more privileges. The privileges specified will be enabled during the lifetime of the instance. Users create an instance of this object in a using statement to ensure that it is properly disposed when the elevated privileges are no longer needed. - - - Initializes a new instance of the class. - This will enable the privileges specified (unless already enabled), and ensure that they are disabled again when - the object is disposed. (Any privileges already enabled will not be disabled). - - The privilege to enable. - Additional privileges to enable. - - - Makes sure any privileges enabled by this instance are disabled. - - - Gets the enabled privileges. Note that this might not contain all privileges specified to the constructor. Only the privileges actually enabled by this instance is returned. - The enabled privileges. - - - - This object is used to enable a specific privilege for the currently running process during its lifetime. - It should be disposed as soon as the elevated privilege is no longer needed. - For more information see the documentation on AdjustTokenPrivileges on MSDN. - - - - Initializes a new instance of the class and enabling the specified privilege for the currently running process. - The name of the privilege. - - - - Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. - In this case the privilege previously enabled will be disabled. - - - - Adjusts the privilege. - the privilege will be enabled, otherwise disabled. - - - Use this to translate error codes into HRESULTs like 0x80070006 for ERROR_INVALID_HANDLE. - - - (0) The operation completed successfully. - - - (0) The operation completed successfully. - - - (1) Incorrect function. - - - (2) The system cannot find the file specified. - - - (3) The system cannot find the path specified. - - - (5) Access is denied. - - - (15) The system cannot find the drive specified. - - - (17) The system cannot move the file to a different disk drive. - - - (18) There are no more files. - - - (21) The device is not ready. - - - (25) The drive cannot locate a specific area or track on the disk. - - - (32) The process cannot access the file because it is being used by another process. - - - (33) The process cannot access the file because another process has locked a portion of the file. - - - (38) Reached the end of the file. - - - (53) The network path was not found. - - - (65) Network access is denied. - - - (67) The network name cannot be found. - - - (80) The file exists. - - - (87) The parameter is incorrect. - - - (122) The data area passed to a system call is too small. - - - (123) The filename, directory name, or volume label syntax is incorrect. - - - (143) The system cannot join or substitute a drive to or for a directory on the same drive. - - - (145) The directory is not empty. - - - (158) The segment is already unlocked. - - - (183) Cannot create a file when that file already exists. - - - (203) The system could not find the environment option that was entered. - - - (234) More data is available. - - - (267) The directory name is invalid. - - - (995) The I/O operation has been aborted because of either a thread exit or an application request. - - - (997) Overlapped I/O operation is in progress. - - - (1200) The specified device name is invalid. - - - (1208) An extended error has occurred. - - - (1222) The network is not present or not started. - - - (1235) The request was aborted. - - - (1641) The requested operation completed successfully. - The system will be restarted so the changes can take effect. - - - - (1783) The stub received bad data. - - - (3010) The requested operation is successful. - Changes will not be effective until the system is rebooted. - - - - (3011) The requested operation is successful. - Changes will not be effective until the service is restarted. - - - - (4390) The file or directory is not a reparse point. - - - (6009) The specified file is read only. - - - (6012) Recovery policy configured for this system contains invalid recovery certificate. - - - (6700) The transaction handle associated with this operation is not valid. - - - (6701) The requested operation was made in the context - of a transaction that is no longer active. - - - - (6702) The requested operation is not valid - on the Transaction object in its current state. - - - - (6703) The caller has called a response API, but the response is not expected - because the TM did not issue the corresponding request to the caller. - - - - (6704) It is too late to perform the requested operation, - since the Transaction has already been aborted. - - - - (6705) It is too late to perform the requested operation, - since the Transaction has already been committed. - - - - (6800) The function attempted to use a name - that is reserved for use by another transaction. - - - - (6805) The remote server or share does not support transacted file operations. - - - (0) The operation completed successfully. - - - (0) The operation completed successfully. - - - (2250) The network connection could not be found. - - - (2310) This shared resource does not exist. - - - (2314) There is not an open file with that identification number. - - - (0) The operation completed successfully. - - - Gets an attribute on an enum field value. - The description belonging to the enum option, as a string - One of the enum types. - - - Indicates whether a specified string is null, empty, or consists only of white-space characters. - if the parameter is null or , or if consists exclusively of white-space characters. - The string to test. - - - Converts a number of type T to string, suffixed with a unit size. - - - Calculates a percentage value. - - - - - - diff --git a/NTFSSecurityTest/bin/Debug/Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll b/NTFSSecurityTest/bin/Debug/Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll deleted file mode 100644 index 53ba39246acd391120d512ff20a6b86c5679b8c5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 98448 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 diff --git a/NTFSSecurityTest/bin/Debug/Microsoft.VisualStudio.QualityTools.UnitTestFramework.xml b/NTFSSecurityTest/bin/Debug/Microsoft.VisualStudio.QualityTools.UnitTestFramework.xml deleted file mode 100644 index 63e7047..0000000 --- a/NTFSSecurityTest/bin/Debug/Microsoft.VisualStudio.QualityTools.UnitTestFramework.xml +++ /dev/null @@ -1,2504 +0,0 @@ - - - - Microsoft.VisualStudio.QualityTools.UnitTestFramework - - - - Provides data for the event. - - - Provides data for the event. - - - Gets a value that indicates whether the Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll assembly was not successfully initialized because of an exception. - true if the assembly failed because of an exception; otherwise, false. - - - Provides data for the event. - - - Provides data for the event. - - - Gets a value that indicates whether the class that has the has not initialized because of an exception. - true if the class that has the has not initialized because of an exception; otherwise, false. - - - Provides data for the event. - - - Provides data for the event. - - - Gets a value that indicates whether the test method that has the applied has failed to be initialized because of an exception. - true if the test method that has the applied has not been initialized because of an exception; otherwise, false. - - - Identifies a method that contains code to be used after all tests in the assembly have run and to free resources obtained by the assembly. This class cannot be inherited. - - - Initializes a new instance of the class. - - - Identifies a method that contains code to be used before all tests in the assembly have run and to allocate resources obtained by the assembly. This class cannot be inherited. - - - Initializes a new instance of the class. - - - Verifies conditions in unit tests using true/false propositions. - - - Verifies that two specified doubles are equal, or within the specified accuracy of each other. The assertion fails if they are not within the specified accuracy of each other. - The first double to compare. This is the double the unit test expects. - The second double to compare. This is the double the unit test produced. - The required accuracy. The assertion will fail only if is different from by more than . - - is different from by more than . - - - Verifies that two specified doubles are equal, or within the specified accuracy of each other. The assertion fails if they are not within the specified accuracy of each other. Displays a message if the assertion fails. - The first double to compare. This is the double the unit test expects. - The second double to compare. This is the double the unit test produced. - The required accuracy. The assertion will fail only if is different from by more than . - A message to display if the assertion fails. This message can be seen in the unit test results. - - is different from by more than . - - - Verifies that two specified doubles are equal, or within the specified accuracy of each other. The assertion fails if they are not within the specified accuracy of each other. Displays a message if the assertion fails, and applies the specified formatting to it. - The first double to compare. This is the double the unit tests expects. - The second double to compare. This is the double the unit test produced. - The required accuracy. The assertion will fail only if is different from by more than . - A message to display if the assertion fails. This message can be seen in the unit test results. - An array of parameters to use when formatting . - - is different from by more than . - - - Verifies that two specified objects are equal. The assertion fails if the objects are not equal. - The first object to compare. This is the object the unit test expects. - The second object to compare. This is the object the unit test produced. - - is not equal to . - - - Verifies that two specified objects are equal. The assertion fails if the objects are not equal. Displays a message if the assertion fails. - The first object to compare. This is the object the unit test expects. - The second object to compare. This is the object the unit test produced. - A message to display if the assertion fails. This message can be seen in the unit test results. - - is not equal to . - - - Verifies that two specified objects are equal. The assertion fails if the objects are not equal. Displays a message if the assertion fails, and applies the specified formatting to it. - The first object to compare. This is the object the unit test expects. - The second object to compare. This is the object the unit test produced. - A message to display if the assertion fails. This message can be seen in the unit test results. - An array of parameters to use when formatting . - - is not equal to . - - - Verifies that two specified singles are equal, or within the specified accuracy of each other. The assertion fails if they are not within the specified accuracy of each other. - The first single to compare. This is the single the unit test expects. - The second single to compare. This is the single the unit test produced. - The required accuracy. The assertion will fail only if is different from by more than . - - is not equal to . - - - Verifies that two specified singles are equal, or within the specified accuracy of each other. The assertion fails if they are not within the specified accuracy of each other. Displays a message if the assertion fails. - The first single to compare. This is the single the unit test expects. - The second single to compare. This is the single the unit test produced. - The required accuracy. The assertion will fail only if is different from by more than . - A message to display if the assertion fails. This message can be seen in the unit test results. - - is not equal to . - - - Verifies that two specified singles are equal, or within the specified accuracy of each other. The assertion fails if they are not within the specified accuracy of each other. Displays a message if the assertion fails, and applies the specified formatting to it. - The first single to compare. This is the single the unit test expects. - The second single to compare. This is the single the unit test produced. - The required accuracy. The assertion will fail only if is different from by more than . - A message to display if the assertion fails. This message can be seen in the unit test results. - An array of parameters to use when formatting . - - is different from by more than . - - - Verifies that two specified strings are equal, ignoring case or not as specified. The assertion fails if they are not equal. - The first string to compare. This is the string the unit test expects. - The second string to compare. This is the string the unit test produced. - A Boolean value that indicates a case-sensitive or insensitive comparison. true indicates a case-insensitive comparison. - - is not equal to . - - - Verifies that two specified strings are equal, ignoring case or not as specified, and using the culture info specified. The assertion fails if they are not equal. - The first string to compare. This is the string the unit test expects. - The second string to compare. This is the string the unit test produced. - A Boolean value that indicates a case-sensitive or insensitive comparison. true indicates a case-insensitive comparison. - A object that supplies culture-specific comparison information. - - is not equal to . - - - Verifies that two specified strings are equal, ignoring case or not as specified, and using the culture info specified. The assertion fails if they are not equal. Displays a message if the assertion fails. - The first string to compare. This is the string the unit test expects. - The second string to compare. This is the string the unit test produced. - A Boolean value that indicates a case-sensitive or insensitive comparison. true indicates a case-insensitive comparison. - A object that supplies culture-specific comparison information. - A message to display if the assertion fails. This message can be seen in the unit test results. - - is not equal to . - - - Verifies that two specified strings are equal, ignoring case or not as specified, and using the culture info specified. The assertion fails if they are not equal. Displays a message if the assertion fails, and applies the specified formatting to it. - The first string to compare. This is the string the unit test expects. - The second string to compare. This is the string the unit test produced. - A Boolean value that indicates a case-sensitive or insensitive comparison. true indicates a case-insensitive comparison. - A object that supplies culture-specific comparison information. - A message to display if the assertion fails. This message can be seen in the unit test results. - An array of parameters to use when formatting . - - is not equal to . - - - Verifies that two specified strings are equal, ignoring case or not as specified. The assertion fails if they are not equal. Displays a message if the assertion fails. - The first string to compare. This is the string the unit test expects. - The second string to compare. This is the string the unit test produced. - A Boolean value that indicates a case-sensitive or insensitive comparison. true indicates a case-insensitive comparison. - A message to display if the assertion fails. This message can be seen in the unit test results. - - is not equal to . - - - Verifies that two specified strings are equal, ignoring case or not as specified. The assertion fails if they are not equal. Displays a message if the assertion fails, and applies the specified formatting to it. - The first string to compare. This is the string the unit test expects. - The second string to compare. This is the string the unit test produced. - A Boolean value that indicates a case-sensitive or insensitive comparison. true indicates a case-insensitive comparison. - A message to display if the assertion fails. This message can be seen in the unit test results. - An array of parameters to use when formatting . - - is not equal to . - - - Verifies that two specified generic type data are equal by using the equality operator. The assertion fails if they are not equal. - The first generic type data to compare. This is the generic type data the unit test expects. - The second generic type data to compare. This is the generic type data the unit test produced. - - - is not equal to . - - - Verifies that two specified generic type data are equal by using the equality operator. The assertion fails if they are not equal. Displays a message if the assertion fails. - The first generic type data to compare. This is the generic type data the unit test expects. - The second generic type data to compare. This is the generic type data the unit test produced. - A message to display if the assertion fails. This message can be seen in the unit test results. - - - is not equal to . - - - Verifies that two specified generic type data are equal by using the equality operator. The assertion fails if they are not equal. Displays a message if the assertion fails, and applies the specified formatting to it. - The first generic type data to compare. This is the generic type data the unit test expects. - The second generic type data to compare. This is the generic type data the unit test produced. - A message to display if the assertion fails. This message can be seen in the unit test results. - An array of parameters to use when formatting . - - - is not equal to . - - - Verifies that two specified doubles are not equal, and not within the specified accuracy of each other. The assertion fails if they are equal or within the specified accuracy of each other. - The first double to compare. This is the double the unit test expects not to match . - The second double to compare. This is the double the unit test produced. - The required inaccuracy. The assertion fails only if is equal to or different from it by less than . - - is equal to or different from it by less than . - - - Verifies that two specified doubles are not equal, and not within the specified accuracy of each other. The assertion fails if they are equal or within the specified accuracy of each other. Displays a message if the assertion fails. - The first double to compare. This is the double the unit test expects not to match . - The second double to compare. This is the double the unit test produced. - The required inaccuracy. The assertion fails only if is equal to or different from it by less than . - A message to display if the assertion fails. This message can be seen in the unit test results. - - is equal to or different from it by less than . - - - Verifies that two specified doubles are not equal, and not within the specified accuracy of each other. The assertion fails if they are equal or within the specified accuracy of each other. Displays a message if the assertion fails, and applies the specified formatting to it. - The first double to compare. This is the double the unit test expects not to match . - The second double to compare. This is the double the unit test produced. - The required inaccuracy. The assertion will fail only if is equal to or different from it by less than . - A message to display if the assertion fails. This message can be seen in the unit test results. - An array of parameters to use when formatting . - - is equal to or different from it by less than . - - - Verifies that two specified objects are not equal. The assertion fails if the objects are equal. - The first object to compare. This is the object the unit test expects not to match . - The second object to compare. This is the object the unit test produced. - - is equal to . - - - Verifies that two specified objects are not equal. The assertion fails if the objects are equal. Displays a message if the assertion fails. - The first object to compare. This is the object the unit test expects not to match . - The second object to compare. This is the object the unit test produced. - A message to display if the assertion fails. This message can be seen in the unit test results. - - is equal to . - - - Verifies that two specified objects are not equal. The assertion fails if the objects are equal. Displays a message if the assertion fails, and applies the specified formatting to it. - The first object to compare. This is the object the unit test expects not to match . - The second object to compare. This is the object the unit test produced. - A message to display if the assertion fails. This message can be seen in the unit test results. - An array of parameters to use when formatting . - - is equal to . - - - Verifies that two specified singles are not equal, and not within the specified accuracy of each other. The assertion fails if they are equal or within the specified accuracy of each other. - The first single to compare. This is the single the unit test expects. - The second single to compare. This is the single the unit test produced. - The required inaccuracy. The assertion will fail only if is equal to or different from it by less than . - - is equal to or different from it by less than . - - - Verifies that two specified singles are not equal, and not within the specified accuracy of each other. The assertion fails if they are equal or within the specified accuracy of each other. Displays a message if the assertion fails. - The first single to compare. This is the single the unit test expects. - The second single to compare. This is the single the unit test produced. - The required inaccuracy. The assertion will fail only if is equal to or different from it by less than . - A message to display if the assertion fails. This message can be seen in the unit test results. - - is equal to or different from it by less than . - - - Verifies that two specified singles are not equal, and not within the specified accuracy of each other. The assertion fails if they are equal or within the specified accuracy of each other. Displays a message if the assertion fails, and applies the specified formatting to it. - The first single to compare. This is the single the unit test expects not to match . - The second single to compare. This is the single the unit test produced. - The required inaccuracy. The assertion will fail only if is equal to or different from it by less than . - A message to display if the assertion fails. This message can be seen in the unit test results. - An array of parameters to use when formatting . - - is equal to or different from it by less than . - - - Verifies that two specified strings are not equal, ignoring case or not as specified. The assertion fails if they are equal. - The first string to compare. This is the string the unit test expects not to match . - The second string to compare. This is the string the unit test produced. - A Boolean value that indicates a case-sensitive or insensitive comparison. true indicates a case-insensitive comparison. - - is equal to . - - - Verifies that two specified strings are not equal, ignoring case or not as specified, and using the culture info specified. The assertion fails if they are equal. - The first string to compare. This is the string the unit test expects not to match . - The second string to compare. This is the string the unit test produced. - A Boolean value that indicates a case-sensitive or insensitive comparison. true indicates a case-insensitive comparison. - A object that supplies culture-specific comparison information. - - is equal to . - - - Verifies that two specified strings are not equal, ignoring case or not as specified, and using the culture info specified. The assertion fails if they are equal. Displays a message if the assertion fails. - The first string to compare. This is the string the unit test expects not to match . - The second string to compare. This is the string the unit test produced. - A Boolean value that indicates a case-sensitive or insensitive comparison. true indicates a case-insensitive comparison. - A object that supplies culture-specific comparison information. - A message to display if the assertion fails. This message can be seen in the unit test results. - - is equal to . - - - Verifies that two specified strings are not equal, ignoring case or not as specified, and using the culture info specified. The assertion fails if they are equal. Displays a message if the assertion fails, and applies the specified formatting to it. - The first string to compare. This is the string the unit test expects not to match . - The second string to compare. This is the string the unit test produced. - A Boolean value that indicates a case-sensitive or insensitive comparison. true indicates a case-insensitive comparison. - A object that supplies culture-specific comparison information. - A message to display if the assertion fails. This message can be seen in the unit test results. - An array of parameters to use when formatting . - - is equal to . - - - Verifies that two specified strings are not equal, ignoring case or not as specified. The assertion fails if they are equal. Displays a message if the assertion fails. - The first string to compare. This is the string the unit test expects not to match . - The second string to compare. This is the string the unit test produced. - A Boolean value that indicates a case-sensitive or insensitive comparison. true indicates a case-insensitive comparison. - A message to display if the assertion fails. This message can be seen in the unit test results. - - is equal to . - - - Verifies that two specified strings are not equal, ignoring case or not as specified. The assertion fails if they are equal. Displays a message if the assertion fails, and applies the specified formatting to it. - The first string to compare. This is the string the unit test expects not to match . - The second string to compare. This is the string the unit test produced. - A Boolean value that indicates a case-sensitive or insensitive comparison. true indicates a case-insensitive comparison. - A message to display if the assertion fails. This message can be seen in the unit test results. - An array of parameters to use when formatting . - - is equal to . - - - Verifies that two specified generic type data are not equal. The assertion fails if they are equal. - The first generic type data to compare. This is the generic type data the unit test expects not to match . - The second generic type data to compare. This is the generic type data the unit test produced. - - - is equal to . - - - Verifies that two specified generic type data are not equal. The assertion fails if they are equal. Displays a message if the assertion fails. - The first generic type data to compare. This is the generic type data the unit test expects not to match . - The second generic type data to compare. This is the generic type data the unit test produced. - A message to display if the assertion fails. This message can be seen in the unit test results. - - - is equal to . - - - Verifies that two specified generic type data are not equal. The assertion fails if they are equal. Displays a message if the assertion fails, and applies the specified formatting to it. - The first generic type data to compare. This is the generic type data the unit test expects not to match . - The second generic type data to compare. This is the generic type data the unit test produced. - A message to display if the assertion fails. This message can be seen in the unit test results. - An array of parameters to use when formatting . - - - is equal to . - - - Verifies that two specified object variables refer to different objects. The assertion fails if they refer to the same object. - The first object to compare. This is the object the unit test expects not to match . - The second object to compare. This is the object the unit test produced. - - refers to the same object as . - - - Verifies that two specified object variables refer to different objects. The assertion fails if they refer to the same object. Displays a message if the assertion fails. - The first object to compare. This is the object the unit test expects not to match . - The second object to compare. This is the object the unit test produced. - A message to display if the assertion fails. This message can be seen in the unit test results. - - refers to the same object as . - - - Verifies that two specified object variables refer to different objects. The assertion fails if they refer to the same object. Displays a message if the assertion fails, and applies the specified formatting to it. - The first object to compare. This is the object the unit test expects not to match . - The second object to compare. This is the object the unit test produced. - A message to display if the assertion fails. This message can be seen in the unit test results. - An array of parameters to use when formatting . - - refers to the same object as . - - - Verifies that two specified object variables refer to the same object. The assertion fails if they refer to different objects. - The first object to compare. This is the object the unit test expects. - The second object to compare. This is the object the unit test produced. - - does not refer to the same object as . - - - Verifies that two specified object variables refer to the same object. The assertion fails if they refer to different objects. Displays a message if the assertion fails. - The first object to compare. This is the object the unit test expects. - The second object to compare. This is the object the unit test produced. - A message to display if the assertion fails. This message can be seen in the unit test results. - - does not refer to the same object as . - - - Verifies that two specified object variables refer to the same object. The assertion fails if they refer to different objects. Displays a message if the assertion fails, and applies the specified formatting to it. - The first object to compare. This is the object the unit test expects. - The second object to compare. This is the object the unit test produced. - A message to display if the assertion fails. This message can be seen in the unit test results. - An array of parameters to use when formatting . - - does not refer to the same object as . - - - Determines whether two objects are equal. - An object that can be cast to an instance. - An object that can be cast to an instance. - - - Fails the assertion without checking any conditions. - Always thrown. - - - Fails the assertion without checking any conditions. Displays a message. - A message to display. This message can be seen in the unit test results. - Always thrown. - - - Fails the assertion without checking any conditions. Displays a message, and applies the specified formatting to it. - A message to display. This message can be seen in the unit test results. - An array of parameters to use when formatting . - Always thrown. - - - Indicates that the assertion cannot be verified. - Always thrown. - - - Indicates that the assertion can not be verified. Displays a message. - A message to display. This message can be seen in the unit test results. - Always thrown. - - - Indicates that an assertion can not be verified. Displays a message, and applies the specified formatting to it. - A message to display. This message can be seen in the unit test results. - An array of parameters to use when formatting . - Always thrown. - - - Verifies that the specified condition is false. The assertion fails if the condition is true. - The condition to verify is false. - - evaluates to true. - - - Verifies that the specified condition is false. The assertion fails if the condition is true. Displays a message if the assertion fails. - The condition to verify is false. - A message to display if the assertion fails. This message can be seen in the unit test results. - - evaluates to true. - - - Verifies that the specified condition is false. The assertion fails if the condition is true. Displays a message if the assertion fails, and applies the specified formatting to it. - The condition to verify is false. - A message to display if the assertion fails. This message can be seen in the unit test results. - An array of parameters to use when formatting . - - evaluates to true. - - - Verifies that the specified object is an instance of the specified type. The assertion fails if the type is not found in the inheritance hierarchy of the object. - The object to verify is of . - The type expected to be found in the inheritance hierarchy of . - - is null or is not found in the inheritance hierarchy of . - - - Verifies that the specified object is an instance of the specified type. The assertion fails if the type is not found in the inheritance hierarchy of the object. Displays a message if the assertion fails. - The object to verify is of . - The type expected to be found in the inheritance hierarchy of . - A message to display if the assertion fails. This message can be seen in the unit test results. - - is null or is not found in the inheritance hierarchy of . - - - Verifies that the specified object is an instance of the specified type. The assertion fails if the type is not found in the inheritance hierarchy of the object. Displays a message if the assertion fails, and applies the specified formatting to it. - The object to verify is of . - The type expected to be found in the inheritance hierarchy of . - A message to display if the assertion fails. This message can be seen in the unit test results. - An array of parameters to use when formatting . - - is null or is not found in the inheritance hierarchy of . - - - Verifies that the specified object is not an instance of the specified type. The assertion fails if the type is found in the inheritance hierarchy of the object. - The object to verify is not of . - The type that should not be found in the inheritance hierarchy of . - - is not null and is found in the inheritance hierarchy of . - - - Verifies that the specified object is not an instance of the specified type. The assertion fails if the type is found in the inheritance hierarchy of the object. Displays a message if the assertion fails. - The object to verify is not of . - The type that should not be found in the inheritance hierarchy of . - A message to display if the assertion fails. This message can be seen in the unit test results. - - is not null and is found in the inheritance hierarchy of . - - - Verifies that the specified object is not an instance of the specified type. The assertion fails if the type is found in the inheritance hierarchy of the object. Displays a message if the assertion fails, and applies the specified formatting to it. - The object to verify is not of . - The type that should not be found in the inheritance hierarchy of . - A message to display if the assertion fails. This message can be seen in the unit test results. - An array of parameters to use when formatting . - - is not null and is found in the inheritance hierarchy of . - - - Verifies that the specified object is not null. The assertion fails if it is null. - The object to verify is not null. - - is null. - - - Verifies that the specified object is not null. The assertion fails if it is null. Displays a message if the assertion fails. - The object to verify is not null. - A message to display if the assertion fails. This message can be seen in the unit test results. - - is null. - - - Verifies that the specified object is not null. The assertion fails if it is null. Displays a message if the assertion fails, and applies the specified formatting to it. - The object to verify is not null. - A message to display if the assertion fails. This message can be seen in the unit test results. - An array of parameters to use when formatting . - - is null. - - - Verifies that the specified object is null. The assertion fails if it is not null. - The object to verify is null. - - is not null. - - - Verifies that the specified object is null. The assertion fails if it is not null. Displays a message if the assertion fails. - The object to verify is null. - A message to display if the assertion fails. This message can be seen in the unit test results. - - is not null. - - - Verifies that the specified object is null. The assertion fails if it is not null. Displays a message if the assertion fails, and applies the specified formatting to it. - The object to verify is null. - A message to display if the assertion fails. This message can be seen in the unit test results. - An array of parameters to use when formatting . - - is not null. - - - Verifies that the specified condition is true. The assertion fails if the condition is false. - The condition to verify is true. - - evaluates to false. - - - Verifies that the specified condition is true. The assertion fails if the condition is false. Displays a message if the assertion fails. - The condition to verify is true. - A message to display if the assertion fails. This message can be seen in the unit test results. - - evaluates to false. - - - Verifies that the specified condition is true. The assertion fails if the condition is false. Displays a message if the assertion fails, and applies the specified formatting to it. - The condition to verify is true. - A message to display if the assertion fails. This message can be seen in the unit test results. - An array of parameters to use when formatting . - - evaluates to false. - - - In a string, replaces null characters ('\0') with "\\0". - The converted string with null characters replaced by "\\0". - The string in which to search for and replace null characters. - - - Used to indicate failure for a test. - - - Initializes a new instance of the class. - - - Initializes a new instance of the class with serialized data. - The that holds the serialized object data about the exception being thrown. - The that contains contextual information about the source or destination. - - is null. - The class name is null or is zero (0). - - - Initializes a new instance of the class that uses with a specified error message. - The message that describes the error. - - - Initializes a new instance of the class with a specified error message and a reference to the inner exception that is the cause of this exception. - The error message that explains the reason for the exception. - The exception that is the cause of the current exception. If the parameter is not null, the current exception is raised in a catch block that handles the inner exception. - - - Used to indicate that a test is not yet implemented. - - - Initializes a new instance of the class. - - - Initializes a new instance of the class with serialized data. - The that holds the serialized object data about the exception being thrown. - The that contains contextual information about the source or destination. - - parameter is null. - The class name is null. - - - Initializes a new instance of the class with a specified error message. - The message that describes the error. - - - Initializes a new instance of the class with a specified error message and a reference to the inner exception that is the cause of this exception. - The error message that explains the reason for the exception. - The exception that is the cause of the current exception. If the parameter is not null, the current exception is raised in a catch block that handles the inner exception. - - - This class is used by the publicize method to help test private types. - - - Initializes a new instance of the class. - Object to store at initialization. - - - Initializes a new instance of the class. - Type to store at initialization. - - - The name of the static method in derived classes. - - - Determines whether the specified Object is equal to the current Object. - true if the specified Object is equal to the current Object; otherwise, false. - The Object to compare with the current Object. - - - Returns the hash code for this instance. - A 32-bit signed integer hash code. - - - Used for dynamically restoring of arrays of private types. - The delegate for the AttachShadow method. - The type, potentially an array or pointer. - - - Static function that will be used with for deep array copy with unshadowing the real target objects. - If is a shadow, returns the underlying target ; otherwise returns . - - - Returns the target for a potential shadow class. - Returns the target for a potential shadow class. If the passed type is not a shadow type, it returns the same type. - The type to examine. - - - The stored in this instance. - - - Returns a object that represents an array of the specified type, with the specified number of dimensions. - A object that represents an array of the specified type, with the specified number of dimensions. - The element type for the array. - The number of dimensions for the array. - - - Returns a object that represents the specified type when it is passed as a ref parameter. - A object that represents the current type when it is passed as a ref parameter. - The element type. - - - Returns a object that represents a pointer to the specified type. - A object that represents a pointer to the specified type. - The element type. - - - Dummy method used to transfer the arrays of the same . This is the failsafe implementation of the delegate used for arrays of the same type. - Returns the object. - The source object. - - - Gets the target object. - The stored object. - - - Returns a that represents the current object. - A that represents the current object. - - - Performs a deep copy of an array of one into a similar array of different . - An array with the same characteristics (rank and dimension limitations) as the original array. - The source array. - The type of the target array. - The method which performs the conversion between the elements of the arrays. - - - Delegate used for deep copying of arrays. Converts the source element of an array into the target element. - The target element of the deep copy. - The source element to deep copy. - - - Provides data for the event. - - - Provides data for the event. - - - Provides data for the event. - - - Provides data for the event. - - - Provides data for the event. - - - Provides data for the event. - - - Identifies a method that contains code to be used after all the tests in the test class have run and to free resources obtained by the test class. This class cannot be inherited. - - - Initializes a new instance of the class. - - - Identifies a method that contains code that must be used before any of the tests in the test class have run and to allocate resources to be used by the test class. This class cannot be inherited. - - - Initializes a new instance of the class. - - - Verifies true/false propositions associated with collections in unit tests. - - - Verifies that all elements in the specified collection are instances of the specified type. The assertion fails if for any element the type is not found in its inheritance hierarchy. - The collection to verify. - The type expected to be found in the inheritance hierarchy of every element in . - An element in is null or is not found in the inheritance hierarchy of all elements in . - - - Verifies that all elements in the specified collection are instances of the specified type. The assertion fails if there exists one element in the collection for which the specified type is not found in its inheritance hierarchy. Displays a message if the assertion fails. - The collection to verify. - The type expected to be found in the inheritance hierarchy of every element in . - A message to display if the assertion fails. This message can be seen in the unit test results. - An element in is null or is not found in the inheritance hierarchy of all elements in . - - - Verifies that all elements in the specified collection are instances of the specified type. The assertion fails if there exists one element in the collection for which the specified type is not found in its inheritance hierarchy. Displays a message if the assertion fails, and applies the specified formatting to it. - The collection to verify. - The type expected to be found in the inheritance hierarchy of every element in . - A message to display if the assertion fails. This message can be seen in the unit test results. - An array of parameters to use when formatting . - An element in is null or is not found in the inheritance hierarchy of all elements in . - - - Verifies that all items in the specified collection are not null. The assertion fails if any element is null. - The collection in which to search for elements that are null. - An element which is null is found in . - - - Verifies that all items in the specified collection are not null. The assertion fails if any element is null. Displays a message if the assertion fails. - The collection in which to search for elements that are null. - A message to display if the assertion fails. This message can be seen in the unit test results. - An element which is null is found in . - - - Verifies that all items in the specified collection are not null. The assertion fails if any element is null. Displays a message if the assertion fails, and applies the specified formatting to it. - The collection in which to search for elements that are null. - A message to display if the assertion fails. This message can be seen in the unit test results. - An array of parameters to use when formatting . - An element which is null is found in . - - - Verifies that all items in the specified collection are unique. The assertion fails if any two elements in the collection are equal. - The collection in which to search for duplicate elements. - Two or more equal elements are found in . - - - Verifies that all items in the specified collection are unique. The assertion fails if any two elements in the collection are equal. Displays a message if the assertion fails. - The collection in which to search for duplicate elements. - A message to display if the assertion fails. This message can be seen in the unit test results. - Two or more equal elements are found in . - - - Verifies that all items in the specified collection are unique. The assertion fails if any two elements in the collection are equal. Displays a message if the assertion fails, and applies the specified formatting to it. - The collection in which to search for duplicate elements. - A message to display if the assertion fails. This message can be seen in the unit test results. - An array of parameters to use when formatting . - Two or more equal elements are found in . - - - Verifies that two specified collections are equal. The assertion fails if the collections are not equal. - The first collection to compare. This is the collection the unit test expects. - The second collection to compare. This is the collection the unit test produced. - - is not equal to . - - - Verifies that two specified collections are equal, using the specified method to compare the values of elements. The assertion fails if the collections are not equal. - The first collection to compare. This is the collection the unit test expects. - The second collection to compare. This is the collection the unit test produced. - The compare implementation to use when comparing elements of the collection. - - is not equal to . - - - Verifies that two specified collections are equal, using the specified method to compare the values of elements. The assertion fails if the collections are not equal. Displays a message if the assertion fails. - The first collection to compare. This is the collection the unit test expects. - The second collection to compare. This is the collection the unit test produced. - The compare implementation to use when comparing elements of the collection. - A message to display if the assertion fails. This message can be seen in the unit test results. - - is not equal to . - - - Verifies that two specified collections are equal, using the specified method to compare the values of elements. The assertion fails if the collections are not equal. Displays a message if the assertion fails, and applies the specified formatting to it. - The first collection to compare. This is the collection the unit test expects. - The second collection to compare. This is the collection the unit test produced. - The compare implementation to use when comparing elements of the collection. - A message to display if the assertion fails. This message can be seen in the unit test results. - An array of parameters to use when formatting . - - is not equal to . - - - Verifies that two specified collections are equal. The assertion fails if the collections are not equal. Displays a message if the assertion fails. - The first collection to compare. This is the collection the unit test expects. - The second collection to compare. This is the collection the unit test produced. - A message to display if the assertion fails. This message can be seen in the unit test results. - - is not equal to . - - - Verifies that two specified collections are equal. The assertion fails if the collections are not equal. Displays a message if the assertion fails, and applies the specified formatting to it. - The first collection to compare. This is the collection the unit test expects. - The second collection to compare. This is the collection the unit test produced. - A message to display if the assertion fails. This message can be seen in the unit test results. - An array of parameters to use when formatting . - - is not equal to . - - - Verifies that two specified collections are equivalent. The assertion fails if the collections are not equivalent. - The first collection to compare. This contains the elements the unit test expects. - The second collection to compare. This is the collection the unit test produced. - An element was found in one of the collections but not in the other. - - - Verifies that two specified collections are equivalent. The assertion fails if the collections are not equivalent. Displays a message if the assertion fails. - The first collection to compare. This contains the elements the unit test expects. - The second collection to compare. This is the collection the unit test produced. - A message to display if the assertion fails. This message can be seen in the unit test results. - An element was found in one of the collections but not in the other. - - - Verifies that two specified collections are equivalent. The assertion fails if the collections are not equivalent. Displays a message if the assertion fails, and applies the specified formatting to it. - The first collection to compare. This contains the elements the unit test expects. - The second collection to compare. This is the collection the unit test produced. - A message to display if the assertion fails. This message can be seen in the unit test results. - An array of parameters to use when formatting . - An element was found in one of the collections but not the other. - - - Verifies that two specified collections are not equal. The assertion fails if the collections are equal. - The first collection to compare. This is the collection that the unit test does not expect to match . - The second collection to compare. This is the collection the unit test produced. - - is equal to . - - - Verifies that two specified collections are not equal, using the specified method to compare the values of elements. The assertion fails if the collections are equal. - The first collection to compare. This is the collection that the unit test does not expect to match . - The second collection to compare. This is the collection the unit test produced. - The compare implementation to use when comparing elements of the collection. - - is equal to . - - - Verifies that two specified collections are not equal, using the specified method to compare the values of elements. The assertion fails if the collections are equal. Displays a message if the assertion fails. - The first collection to compare. This is the collection that the unit test does not expect to match . - The second collection to compare. This is the collection the unit test produced. - The compare implementation to use when comparing elements of the collection. - A message to display if the assertion fails. This message can be seen in the unit test results. - - is equal to . - - - Verifies that two specified collections are not equal, using the specified method to compare the values of elements. The assertion fails if the collections are equal. Displays a message if the assertion fails, and applies the specified formatting to it. - The first collection to compare. This is the collection that the unit test does not expect to match . - The second collection to compare. This is the collection the unit test produced. - The compare implementation to use when comparing elements of the collection. - A message to display if the assertion fails. This message can be seen in the unit test results. - An array of parameters to use when formatting . - - is equal to . - - - Verifies that two specified collections are not equal. The assertion fails if the collections are equal. Displays a message if the assertion fails. - The first collection to compare. This is the collection that the unit test does not expect to match . - The second collection to compare. This is the collection the unit test produced. - A message to display if the assertion fails. This message can be seen in the unit test results. - - is equal to . - - - Verifies that two specified collections are not equal. The assertion fails if the collections are equal. Displays a message if the assertion fails, and applies the specified formatting to it. - The first collection to compare. This is the collection that the unit test does not expect to match . - The second collection to compare. This is the collection the unit test produced. - A message to display if the assertion fails. This message can be seen in the unit test results. - An array of parameters to use when formatting . - - is equal to . - - - Verifies that two specified collections are not equivalent. The assertion fails if the collections are equivalent. - The first collection to compare. This contains the elements the unit test expects to be different from the actual collection. - The second collection to compare. This is the collection the unit test produced. - The two collections contain the same elements, including the same number of duplicate occurrences of each element. - - - Verifies that two specified collections are not equivalent. The assertion fails if the collections are equivalent. Displays a message if the assertion fails. - The first collection to compare. This contains the elements the unit test expects to be different from the actual collection. - The second collection to compare. This is the collection the unit test produced. - A message to display if the assertion fails. This message can be seen in the unit test results. - The two collections contain the same elements, including the same number of duplicate occurrences of each element. - - - Verifies that two specified collections are not equivalent. The assertion fails if the collections are equivalent. Displays a message if the assertion fails, and applies the specified formatting to it. - The first collection to compare. This contains the elements the unit test expects to be different from the actual collection. - The second collection to compare. This is the collection the unit test produced. - A message to display if the assertion fails. This message can be seen in the unit test results. - An array of parameters to use when formatting . - The two collections contain the same elements, including the same number of duplicate occurrences of each element. - - - Verifies that the specified collection contains the specified element. The assertion fails if the element is not found in the collection. - The collection in which to search for the element. - The element that is expected to be in the collection. - - is not found in . - - - Verifies that the specified collection contains the specified element. The assertion fails if the element is not found in the collection. Displays a message if the assertion fails. - The collection in which to search for the element. - The element that is expected to be in the collection. - A message to display if the assertion fails. This message can be seen in the unit test results. - - is not found in . - - - Verifies that the specified collection contains the specified element. The assertion fails if the element is not found in the collection. Displays a message if the assertion fails, and applies the specified formatting to it. - The collection in which to search for the element. - The element that is expected to be in the collection. - A message to display if the assertion fails. This message can be seen in the unit test results. - An array of parameters to use when formatting . - - is not found in . - - - Verifies that the specified collection does not contain the specified element. The assertion fails if the element is found in the collection. - The collection in which to search for the element. - The element that is not expected to be in the collection. - - is found in . - - - Verifies that the specified collection does not contain the specified element. The assertion fails if the element is found in the collection. Displays a message if the assertion fails. - The collection in which to search for the element. - The element that is not expected to be in the collection. - A message to display if the assertion fails. This message can be seen in the unit test results. - - is found in . - - - Verifies that the specified collection does not contain the specified element. The assertion fails if the element is found in the collection. Displays a message if the assertion fails, and applies the specified formatting to it. - The collection in which to search for the element. - The element that is not expected to be in the collection. - A message to display if the assertion fails. This message can be seen in the unit test results. - An array of parameters to use when formatting . - - is found in . - - - Verifies that the first collection is not a subset of the second collection. - The collection not expected to be a subset of . - The collection not expected to be a superset of . - All elements in are found in  and are found in sufficient quantity. - - - Verifies that the first collection is not a subset of the second collection. Displays a message if the assertion fails. - The collection not expected to be a subset of . - The collection not expected to be a superset of . - A message to display if the assertion fails. This message can be seen in the unit test results. - All elements in are found in  and are found in sufficient quantity. - - - Verifies that the first collection is not a subset of the second collection. Displays a message if the assertion fails, and applies the specified formatting to it. - The collection not expected to be a subset of . - The collection not expected to be a superset of . - A message to display if the assertion fails. This message can be seen in the unit test results. - An array of parameters to use when formatting . - All elements in are found in  and are found in sufficient quantity. - - - Verifies that the first collection is a subset of the second collection. - The collection expected to be a subset of . - The collection expected to be a superset of . - An element in is not found in  or an element in is not found in in sufficient quantity. - - - Verifies that the first collection is a subset of the second collection. Displays a message if the assertion fails. - The collection expected to be a subset of . - The collection expected to be a superset of . - A message to display if the assertion fails. This message can be seen in the unit test results. - An element in is not found in or an element in is not found in in sufficient quantity. - - - Verifies that the first collection is a subset of the second collection. Displays a message if the assertion fails, and applies the specified formatting to it. - The collection expected to be a subset of . - The collection expected to be a superset of . - A message to display if the assertion fails. This message can be seen in the unit test results. - An array of parameters to use when formatting . - An element in is not found in or an element in is not found in in sufficient quantity. - - - Represents the project iteration to which this test corresponds. This class cannot be inherited. - - - Initializes a new instance of the class. - A string that identifies the corresponding project iteration. - - - Gets the iteration identifier for the test. - An iteration identifier. - - - Represents the node in the team project hierarchy to which this test corresponds. - - - Initializes a new instance of the class. - A string that identifies the corresponding project feature. - - - Gets the project feature identifier for the test. - A project feature identifier. - - - Specifies constants that indicate how data rows are accessed in data-driven testing. - - - Rows are returned in a random order. - - - Rows are returned in a sequential order. - - - Provides data source-specific information for data-driven testing. This class cannot be inherited. - - - Initializes a new instance of the class. This instance will be initialized with a data provider and connection string associated with the setting name. - The name of a data source found in the <microsoft.visualstudio.qualitytools> section in the app.config file. - - - Initializes a new instance of the class. This instance will be initialized with a connection string and table name. - Data provider-specific connection string. - The name of the data table. - - - Initializes a new instance of the class. This instance will be initialized with a data provider, connection string, data table and data access method to access the data source. - Invariant data provider name, such as System.Data.SqlClient. - A data provider-specific connection string. - The name of the data table. - Specifies the order to access data. It takes a . - - - Gets a value representing the connection string for the data source. - The connection string used to access the data source. - - - Gets the method used to access the data source. - One of the values. If the is not initialized, this will return the default value . - - - Gets a value indicating the setting name used to identify data source connection information stored in a configuration file. - The name of a data source found in the <microsoft.visualstudio.qualitytools> section in the app.config file. - - - Represents the default data access method. This field is read-only. - - - Represents the default data provider name. This field is read-only. - - - Gets a value representing the data provider of the data source. - The data provider name. If a data provider was not designated at object initialization, the default provider of System.Data.OleDb will be returned. - - - Gets a value indicating the table name providing data. - The table name providing data for the test. - - - Represents a data source element as an XML tag within a configuration file. - - - Initializes a new instance of the class. - - - Gets or sets the connection string setting element in the <connectionStrings> section in the app.config file. - A connection string. - - - Gets or sets the data source access method element in the app.config file. - The data source access method. - - - Gets or sets the table name setting element in the app.config file. - A table name. - - - Gets or sets the data source name setting element in the app.config file. - A data source name. - - - Represents an XML element that contains a collection of child objects. - - - Initializes a new instance of the class. - - - Adds a data source element to . - The to add to the collection. - - - Removes all data source element objects from the collection. - - - Gets or sets a at the specified index location. - A object. - The location of the . - - - Gets a identified by name. - A object, or null if the key does not exist. - The name of the to return. - - - Removes a from the collection. - The element to remove from the collection. - - - Removes a from the collection. - The name of the element to remove. - - - Specify a file or directory that should be deployed along with the assemblies before running a test. Attach this attribute to a test class or test method. You can use multiple instances. This attribute is not inherited. - - - Specifies an item to be deployed before a test run starts. - The file or directory to deploy. The path is relative to the build output directory. The item will be copied to the same directory as the deployed test assemblies. - - - Specifies an item to be deployed before a test run starts. - The relative or absolute path to the file or directory to deploy. The path is relative to the build output directory. The item will be copied to the same directory as the deployed test assemblies. - The path of the directory to which the items are to be copied. It can be either absolute or relative to the deployment directory. All files and directories identified by will be copied to this directory. - - - Gets the path of the directory to which the item is copied. - The directory under the deployment directory that will contain the deployed files and directories. - - - Gets the path of the source file or folder to be copied. - The path to the file or directory to copy. - - - Used to specify the description of the test. This class cannot be inherited. - - - Initializes a new instance of the class. - A short explanation of the test. - - - Gets the description of the test. - The test description. - - - Indicates that an exception is expected during test method execution. This class cannot be inherited. - - - Initializes a new instance of the class with an expected exception. - An expected type of exception to be thrown by a method. - - - Initializes a new instance of the class with and expected exception type and a message that describes the exception. - An expected type of exception to be thrown by a method. - - - - Gets the expected exception type. - A object. - - - This is a base class for attributes that specify to expect an exception from a unit test. - - - Initializes a new instance of the class. - - - Initializes a new instance of the class. - If the test fails because an exception was not thrown, this message is included in the test result. - - - - Throws the exception again if it is an or an . - The exception to throw if it is an assertion exception. - - - - The exception that is thrown by the unit test. - - - This class is a placeholder for use with generics. It helps you test generic types by letting you pass non-specific type arguments. - - - Initializes a new instance of the class. This constructor initializes the property to a random value. - - - Initializes a new instance of the class. This constructor initializes the property to a user specified value. - The initial value for the property. - - - Creates a new that is a copy of the current instance. - A new that is a copy of the current instance. - - - Compares the current instance with another object of the same type and returns an integer that indicates whether the current instance precedes, follows, or occurs in the same position in the sort order as the other object. - A 32-bit signed integer that indicates the relative order of the objects being compared. The return value has these meanings:Less than zeroThis instance is less than .ZeroThis instance is equal to .Greater than zeroThis instance is greater than . - A to compare with the current instance. - - is not of type . - - - Gets or sets the Data property for this instance. - - - Determines whether the specified object is equal to the current object. - true if the specified object is equal to the current object; otherwise, false. - The object to compare with the current object. - - - Returns an enumerator whose length is derived from the property. - An enumerator whose length is derived from the property. - - - Returns the hash code for this object. - A 32-bit signed integer hash code for this object. - - - Specifies the type of host on which the associated unit test will run. This class cannot be inherited. - - - Initializes a new instance of the class. This is instantiated by using an argument that specifies the type of host on which this unit test will run. - The type of host on which this unit test will run. - - - Initializes a new instance of the class. This is instantiated by using an argument that specifies the type of host on which this unit test will run, and custom data for the host adapter. - The type of host on which this unit test will run. - Custom data for the host adapter. - - - Gets custom data for the host adapter. - Custom data for the host adapter. - - - Gets a value that represents the type of host. - A value that represents the type of host. - - - Indicates that a specific test should not be run. This class cannot be inherited. - - - Initializes a new instance of the class. - - - The exception that is thrown to indicate an internal failure for a test. - - - Initializes a new instance of the class without arguments. - - - Initializes a new instance of the class with serialized data. - The that holds the serialized object data about the exception being thrown. - The that contains contextual information about the source or destination. - - is null - The class name is null - - - Initializes a new instance of the class with a specified error message. - The error message string. - - - Initializes a new instance of the class with a specified error message and a reference to the inner exception that is the cause of this exception. - The error message that explains the reason for the exception. - The exception that is the cause of the current exception. - - - Interface to invoke the test method body. - - - Invokes a test method by using the provided parameters. - The result of the test method invocation. - Optional parameter that is passed to the invoker. - - - Occurs when a test is stopped before it is completed. - - - Used to specify the person responsible for maintaining, running, and/or debugging the test. This class cannot be inherited. - - - Initializes a new instance of the class that uses an owner name. - The owner of the test. - - - Gets the owner of the test. - The owner of the test. - - - Used to specify the priority of a unit test. This class cannot be inherited. - - - Initializes a new instance of the class that has a priority value. - An integer that represents the priority value for the test. - - - Gets the priority value. - An integer that represents the priority value for the test. - - - Allows test code to call methods and properties on the code under test that would be inaccessible because they are not public. - - - Initializes a new instance of the class that creates the wrapper for the specified object. - The object to wrap. - - is null - - - Initializes a new instance of the class that creates the wrapper for the specified object. - The object to wrap. - The wrapped object type. - - is null - - - Initializes a new instance of the class that creates the wrapper for the specified object. - The object to wrap. This serves as starting point to reach the private members. - The dereferencing string that points to the object to be retrieved. This takes the form of "objectX.objectY.objectZ". - - is a zero-length string - - is null or is null - - - Initializes a new instance of the class. This creates the object of the specified type and wraps it in the private object. - Name of the assembly that contains the type. - Fully qualified name of the type. - Arguments to pass to the constructor of the object. - - or is null. - - - Initializes a new instance of the class. This creates an object of the specified type and wraps it in the private object. - Name of the assembly that contains the type. - Fully qualified name of the type. - An array of objects representing the number, order, and type of the parameters for constructing the object. - The arguments to define the object. - - or is null. - - is multidimensional.-or-A constructor cannot be found to match the parameters specified in . - - - Initializes a new instance of the class that creates the wrapper for the specified object. - The wrapped object type. - The arguments to define the object. - - is null. - - is not a RuntimeType. - - cannot be a .-or-Creation of , , and types is not supported. - The constructor being called throws an exception. - - is a COM object but the class identifier used to obtain the type is invalid, or the identified class is not registered. - - is not a valid type. - No matching public constructor was found to match the and . - - - Initializes a new instance of the class. - The wrapped object type. - An array of objects representing the number, order, and type of the parameters for constructing the object. - The arguments to define the object. - - is null. - - is multidimensional.-or-A constructor cannot be found to match the parameters specified in . - - - Returns a value that indicates whether two private objects are encapsulating the same target object. - true if the objects are equal; otherwise, false. - The object to compare. - - - Gets the array element by using an array of subscripts for each dimension. - An object that represents the array element. - The variable name of array to get. - An array that represents the location of the element to get. - - is null. - - - Gets the array element by using an array of subscripts for each dimension. - An object representing the array element. - The variable name of array to get. - An array representing the location of the element to get. - - is null. - - - Gets a value from a named field, based on the name. - The value set for the field. - The name of the private field to get. - - is null or empty. - - - Gets a value from a named field, based on the name and lookup mask. - The value set for the field. - The name of the private field to get. - - is null or empty. - - - Gets a value of a wrapped field or property based on the name. - The value set for the field or property. - The name of the private field or property to get. - - - Gets a value of a wrapped field or property based on the name. - The value set for the field or property. - The name of the private field or property to get. - - - Gets the hash code of the wrapped object. - An integer that represents the hash code of the wrapped object. - - - Gets a property for a wrapped object identified by name. - An object that contains the value of the property identified by . - The name of property to get. - An array that contains the arguments to pass to the member to invoke. - - is null or empty. - - - Gets a property for a wrapped object identified by name with binding flags. - An object that contains the value of the property identified by . - The name of property to get. - An array that contains the arguments to pass to the member to invoke. - - is null or empty. - - - Gets an indexed property for a wrapped object identified by name. - An object that contains the value of the property identified by . - The name of property to get. - An array of objects that represents the number, order, and type of the parameters for the indexed property to get. - An array that contains the arguments to pass to the member to invoke. - - is null or empty. - - - Gets a property for a wrapped object identified by name. - An object that contains the value of the property identified by . - The name of property to get. - An array of objects representing the number, order, and type of the parameters for the indexed property to get. - An array that contains the arguments to pass to the member to invoke. - - is null or empty. - - - Used to access the members of the private object. - An object that represents the return value of a private member. - The name of the member to invoke. - Any arguments that the member requires. - - - Used to access the members of the private object. - An object that represents the return value of the invoked member. - The name of the member to invoke. - Any arguments that the member requires. - The object that represents the globalization locale to use, which might be necessary for locale-specific conversions, such as converting a numeric String to a Double.-or-null to use the current thread's . - - - Used to access the members of the private object. - An object that represents the return value of a private member. - The name of the member to invoke. - Any arguments that the member requires. - - - Used to access the members of the private object. - An object representing the return value of the invoked member. - The name of the member to invoke. - Any arguments that the member requires. - The object that represents the globalization locale to use, which might be necessary for locale-specific conversions, such as converting a numeric String to a Double.-or-null to use the current thread's . - - - Used to access the members of the private object. - An object that represents the return value of the invoked member. - The name of the member to invoke. - An array of objects that represents the number, order, and type of the parameters for the method to access.-or-An empty array of the type (that is, Type[] types = new Type[0]) to get a method that takes no parameters. - Any arguments that the member requires. - - - Used to access the members of the private object. - An object representing the return value of the invoked member. - The name of the member to invoke. - An array of objects that represents the number, order, and type of the parameters for the method to access.-or-An empty array of the type (that is, Type[] types = new Type[0]) to get a method that takes no parameters. - Any arguments that the member requires. - The object that represents the globalization locale to use, which might be necessary for locale-specific conversions, such as converting a numeric String to a Double.-or-null to use the current thread's . - - - Used to access generic members of a private object. - The name of the member to invoke. - An array of objects that represents the number, order, and type of the parameters for the method to access.-or-An empty array of the type (that is, Type[] types = new Type[0]) to get a method that takes no parameters. - Any arguments that the member requires. - The object that represents the globalization locale to use, which might be necessary for locale-specific conversions, such as converting a numeric String to a Double.-or-null to use the current thread's . - An array of type arguments to use when invoking a generic method. - - - Used to access the methods of the private object. - An object that represents the return value of the invoked method. - The name of the member to invoke. - An array of objects that represents the number, order, and type of the parameters for the method to access.-or-An empty array of the type (that is, Type[] types = new Type[0]) to get a method that takes no parameters. - Any arguments that the member requires. - - - Used to access the members of the private object. - An object representing the return value of the invoked member. - The name of the member to invoke. - An array of objects that represents the number, order, and type of the parameters for the method to access.-or-An empty array of the type (that is, Type[] types = new Type[0]) to get a method that takes no parameters. - Any arguments that the member requires. - The object that represents the globalization locale to use, which might be necessary for locale-specific conversions, such as converting a numeric String to a Double.-or-null to use the current thread's . - - - Used to access generic members of a private object. - The name of the member to invoke. - An array of objects that represents the number, order, and type of the parameters for the method to access.-or-An empty array of the type (that is, Type[] types = new Type[0]) to get a method that takes no parameters. - Any arguments that the member requires. - An array of type arguments to use when invoking a generic method. - - - Gets the type of the underlying object. - A object. - - - Sets the array element by using an array of subscripts for each dimension. - The variable name of array to set. - The value to assign to the array element. - An array that represents the location of the element to set. - - - Sets the array element by using an array of subscripts for each dimension. - The variable name of array to set. - The value to assign to the array element. - An array that represents the location of the element to set. - - - Sets a value for the field of the wrapped object, identified by name. - The name of the field to set a value. - The value to set. - - is null or empty. - - - Sets a value for the field of the wrapped object, identified by name. - The name of the field to set a value. - The value to set. - - is null or empty. - - - Sets a value of a wrapped field or property based on the name. - The name of the private field or property to set. - The value to set for . - - - Sets a value of a wrapped field or property based on the name. - The name of the private field or property to set. - The value to set for . - - - Sets a property for a wrapped object identified by name. - The name of property to invoke. - The value to set the property identified by . - An array that contains the arguments to pass to the property to invoke. - - is null or empty. - - - Sets a property for a wrapped object identified by name with binding flags. - The name of property to invoke. - The value to set the property identified by . - An array that contains the arguments to pass to the property to invoke. - - is null or empty. - - - Sets an indexed property for a wrapped object identified by name. - The name of property to invoke. - The value to set the property identified by . - An array of objects that represents the number, order, and type of the parameters for the indexed property to get. - An array that contains the arguments to pass to the property to invoke. - - is null or empty. - - - Sets an indexed property for a wrapped object identified by name. - The name of property to invoke. - An array of objects that represents the number, order, and type of the parameters for the indexed property to get. - The value to set the property identified by . - An array that contains the arguments to pass to the property to invoke. - - is null or empty. - - - Gets or sets the wrapped object. - The wrapped object. - Try to set this property to null. - - - Represents the type of a private class that gives access to private static implementations. - - - Initializes a new instance of the class. - assembly name - fully qualified name of the type - - or is null or empty. - - - Initializes a new instance of the class with the type information. - The wrapped to create. - - is null. - - - Gets a static array element contained in the wrapped type. - An object that represents an element of at the location specified with . - The name of the array - An array of subscripts for identifying the element to get. - - - Gets a static array element contained in the wrapped type. - An object that represents an element of at the location specified with . - The name of the array - An array of subscripts for identifying the element to get. - - - Gets a static field contained in the wrapped type. - An object that represents the value of the static field. - The name of the static field. - - - Gets a static field contained in the wrapped type. - An object that represents the value of the static field. - The name of the static field. - - - Gets a value of a static field or property in a wrapped type based on the name. - The value set for the field or property. - The name of the static field or property to get. - - - Gets a value of a static field or property in a wrapped type based on the name. - The value set for the field or property. - The name of the static field or property to get. - - - Gets a static property contained in the wrapped type. - An object that represents the value of the static property. - The name of the static property. - An array that contains the arguments to pass to the member to invoke. - - - Gets a static property contained in the wrapped type. - An object that represents the value of the static property. - The name of the static property. - An array that contains the arguments to pass to the member to invoke. - - - Gets a static indexed property contained in the wrapped type. - An object that represents the value of the static indexed property. - The name of the static property. - An array of objects that represents the number, order, and type of the parameters for the indexed property to get.-or- An empty array of the type (that is, Type[] types = new Type[0]) to get a property that is not indexed. - An array that contains the arguments to pass to the member to invoke. - - - Invokes static methods on the . - An object that represents the invoked static method's return value, if any. - The name of the method to invoke. - Any array of arguments to pass - - is null. - - - Invokes static methods on the . - An object that represents the invoked static method's return value, if any. - The name of the method to invoke. - Any array of arguments to pass - The object that represents the globalization locale to use, which might be necessary for locale-specific conversions, such as converting a numeric String to a Double.-or-null to use the current thread's . - - is null. - - - Invokes static methods on the . - An object that represents the invoked static method's return value, if any. - The name of the method to invoke. - Any array of arguments to pass - - is null. - - - Invokes static methods on the . - An object representing the invoked static method's return value, if any. - The name of the method to invoke. - An array of arguments to pass. - The object that represents the globalization locale to use, which might be necessary for locale-specific conversions, such as converting a numeric String to a Double.-or-null to use the current thread's . - - is null. - - - Invokes static methods on the . - An object that represents the invoked static method's return value, if any. - The name of the method to invoke. - An array of objects that represents the number, order, and type of the parameters for the method.-or- An empty array of the type Type, that is, Type[] types = new Type[0] to get a method that takes no parameters. - An array of arguments to pass. - - is null. - - - Invokes static methods on the . - An object representing the invoked static method's return value, if any. - The name of the method to invoke. - An array of objects that represents the number, order, and type of the parameters for the method.-or- An empty array of the type Type, that is, Type[] types = new Type[0] to get a method that takes no parameters. - An array of arguments to pass. - The object that represents the globalization locale to use, which might be necessary for locale-specific conversions, such as converting a numeric String to a Double.-or-null to use the current thread's . - - is null. - - - Invokes static methods on the . - The name of the method to invoke. - An array of objects that represents the number, order, and type of the parameters for the method.-or- An empty array of the type Type, that is, Type[] types = new Type[0] to get a method that takes no parameters. - An array of arguments to pass. - The object that represents the globalization locale to use, which might be necessary for locale-specific conversions, such as converting a numeric String to a Double.-or-null to use the current thread's . - An array of type arguments to use when invoking a generic method. - - - Invokes static methods on the . - An object that represents the invoked static method's return value, if any. - The name of the method to invoke. - An array of objects that represents the number, order, and type of the parameters for the method.-or- An empty array of the type Type, that is, Type[] types = new Type[0] to get a method that takes no parameters. - An array of arguments to pass - - is null. - - - Invokes static methods on the . - An object that represents the invoked static method's return value, if any. - The name of the method to invoke. - An array of objects that represents the number, order, and type of the parameters for the method.-or- An empty array of the type Type, that is, Type[] types = new Type[0] to get a method that takes no parameters. - An array of arguments to pass. - The object that represents the globalization locale to use, which might be necessary for locale-specific conversions, such as converting a numeric String to a Double.-or-null to use the current thread's . - - is null. - - - Invokes static methods on the . - The name of the method to invoke. - An array of objects that represents the number, order, and type of the parameters for the method.-or- An empty array of the type Type, that is, Type[] types = new Type[0] to get a method that takes no parameters. - An array of arguments to pass. - An array of type arguments to use when invoking a generic method. - - - Gets the representing the . - A object. - - - Sets a static array element contained in the wrapped type. - The name of the array - The value to set the element identified by . - An array of subscripts for identifying the element to set. - - - Sets a static array element contained in the wrapped type. - The name of the array - The value to set the element identified by . - An array of subscripts for identifying the element to set. - - - Sets a static field contained in the wrapped type. - The name of the static field. - The value to set to the static field. - - - Sets a static field contained in the wrapped type. - The name of the static field. - The value to set to the static field. - - - Sets a static field or property contained in the wrapped type. - The name of the static field or property. - The value to set to the static field or property. - - - Sets a static field or property contained in the wrapped type. - The name of the static field or property. - The value to set to the static field or property. - - - Sets a static property contained in the wrapped type. - The name of the static property. - The value to set the static property. - An array that contains the arguments to pass to the member to invoke. - - - Sets a static property contained in the wrapped type. - The name of the static property. - The value to set the static property. - An array of objects that represents the number, order, and type of the parameters for the indexed property to set.-or-An empty array of the type , that is, Type[] types = new Type[0] to set a property that is not indexed. - An array that contains the arguments to pass to the member to invoke. - - - Sets a static property contained in the wrapped type. - The name of the static property. - The value to set the static property. - An array that contains the arguments to pass to the member to invoke. - - - Sets a static property contained in the wrapped type. - The name of the static property. - The value to set the static property. - An array of objects that represents the number, order, and type of the parameters for the indexed property to set.-or- An empty array of the type , that is, Type[] types = new Type[0] to set a property that is not indexed. - An array that contains the arguments to pass to the member to invoke. - - - Do not use this class. - - - - - Verifies true/false propositions associated with strings in unit tests. - - - Verifies that the first string contains the second string. This method is case sensitive. - The string that is expected to contain . - The string expected to occur within . - - is not found in . - - - Verifies that the first string contains the second string. Displays a message if the assertion fails. This method is case sensitive. - The string that is expected to contain . - The string expected to occur within . - A message to display if the assertion fails. This message can be seen in the unit test results. - - is not found in . - - - Verifies that the first string contains the second string. Displays a message if the assertion fails, and applies the specified formatting to it. This method is case sensitive. - The string that is expected to contain . - The string expected to occur within . - A message to display if the assertion fails. This message can be seen in the unit test results. - An array of parameters to use when formatting . - - is not found in . - - - Verifies that the specified string does not match the regular expression. - The string that is not expected to match . - The regular expression that is not expected to match. - - matches . - - - Verifies that the specified string does not match the regular expression. Displays a message if the assertion fails. - The string that is not expected to match . - The regular expression that is not expected to match. - A message to display if the assertion fails. This message can be seen in the unit test results. - - matches . - - - Verifies that the specified string does not match the regular expression. Displays a message if the assertion fails, and applies the specified formatting to it. - The string that is not expected to match . - The regular expression that is not expected to match. - A message to display if the assertion fails. This message can be seen in the unit test results. - An array of parameters to use when formatting . - - matches . - - - Verifies that the first string ends with the second string. This method is case sensitive. - The string that is expected to end with . - The string expected to be a suffix of . - - does not end with . - - - Verifies that the first string ends with the second string. Displays a message if the assertion fails. This method is case sensitive. - The string that is expected to end with . - The string expected to be a suffix of . - A message to display if the assertion fails. This message can be seen in the unit test results. - - does not end with . - - - Verifies that the first string ends with the second string. Displays a message if the assertion fails, and applies the specified formatting to it. This method is case sensitive. - The string that is expected to end with . - The string expected to be a suffix of . - A message to display if the assertion fails. This message can be seen in the unit test results. - An array of parameters to use when formatting . - - does not end with . - - - Verifies that the specified string matches the regular expression. - The string that is expected to match . - The regular expression that is expected to match. - - does not match . - - - Verifies that the specified string matches the regular expression. Displays a message if the assertion fails. - The string that is expected to match . - The regular expression that is expected to match. - A message to display if the assertion fails. This message can be seen in the unit test results. - - does not match . - - - Verifies that the specified string matches the regular expression. Displays a message if the assertion fails, and applies the specified formatting to it. - The string that is expected to match . - The regular expression that is expected to match. - A message to display if the assertion fails. This message can be seen in the unit test results. - An array of parameters to use when formatting . - - does not match . - - - Verifies that the first string begins with the second string. This method is case sensitive. - The string that is expected to begin with . - The string expected to be a prefix of . - - does not begin with . - - - Verifies that the first string begins with the second string. Displays a message if the assertion fails. This method is case sensitive. - The string that is expected to begin with . - The string expected to be a prefix of . - A message to display if the assertion fails. This message can be seen in the unit test results. - - does not begin with . - - - Verifies that the first string begins with the second string. Displays a message if the assertion fails, and applies the specified formatting to it. This method is case sensitive. - The string that is expected to begin with . - The string expected to be a prefix of . - A message to display if the assertion fails. This message can be seen in the unit test results. - An array of parameters to use when formatting . - - does not begin with . - - - Class that is used to specify the category of a unit test. - - - Initializes a new instance of the class by applying the supplied category to the test. - The test category to be applied. - - - Gets the test category that has been applied to the test. - Returns the test category that has been applied to the test. - - - Provides a base class for the Category attribute. - - - Initializes a new instance of the class. - - - Gets the test category that has been applied to the test. - The test category. - - - Used to identify classes that contain test methods. This class cannot be inherited. - - - Initializes a new instance of the class. - - - Activates a class so that it is recognized as a Unit Test extension class. - - - Initializes a new instance of the class. - - - Determines whether the test class extension object is equal to the provided test class extension object. - true if the two objects are equal; otherwise, false. - Test class extension object that is provided for comparison. - - - Gets the unique ID of the extension. - The unique ID of the extension. - - - Gets the TestTypeExtensionClientSide object. - The TestTypeExtensionClientSide object. - - - Returns the object. - The object. - - - Returns the hash code for the ID of the test class extension object. - The hash code. - - - Identifies a method that contains code that must be used after the test has run and to free resources obtained by all the tests in the test class. This class cannot be inherited. - - - Initializes a new instance of the class. - - - Provides access to a that represents the microsoft.visualstudio.testtools section in an app.config file. - - - Gets a object. - A object. - - - Provides access to data source configuration data. - - - Initializes a new instance of the class. - - - Gets a that contains data source configuration information. - A object. - - - Used to store information that is provided to unit tests. - - - Initializes a new instance of an object that derives from the class. - - - When overridden in a derived class, adds a file name to the list in TestResult.ResultFileNames. - The file name to add. - - - Represents the prefix for ASP.NET Development Server. - - - When overridden in a derived class, begins a timer with the specified name. - The name of the timer to begin. - - - You can use this property in a TestCleanup method to determine the outcome of a test that has run. - A that states the outcome of a test that has run. - - - When overridden in a derived class, gets the current data connection when the test is used for data driven testing. - A object. - - - When overridden in a derived class, gets the current data row when test is used for data driven testing. - A object. - - - Gets the directory for files deployed for the test run. This property typically contains a subdirectory of . - Returns the directory for files deployed for the test run. - An invalid value type is associated with the property of the test context. - - - When overridden in a derived class, ends a timer with the specified name. - The name of the timer to end. - - - Gets the fully-qualified name of the class that contains the test method that is currently running. - The fully-qualified name of the class that contains the test method that is currently running. - - - When overridden in a derived class, gets the test properties. - An object that contains key/value pairs that represent the test properties. - - - Gets the requested page. - A object. - An invalid value type is associated with the property of the test context. - - - Gets the top-level directory that contains test results and test result directories for the test run. This is typically a subdirectory of . - The top-level directory that contains test results and test result directories for the test run. - - - Gets the path to the test deployment directory. Deprecated. Use instead. - The path to the test deployment directory. - An invalid value type is associated with the property of the test context. - - - Gets the path to the test directory. Deprecated. Use instead. - The path to the test directory. - An invalid value type is associated with the property of the test context. - - - Gets the path to the test log directory. Deprecated. Use instead. - The path to the test log directory. - An invalid value type is associated with the property of the test context. - - - Gets the test name. - The test name. - An invalid value type is associated with the property of the test context. - - - Gets the directory for the test result files. - The directory for the test result files. - - - Gets the top-level directory for the test run that contains deployed files and result files. - The top-level directory for the test run that contains deployed files and result files. - An invalid value type is associated with the property of the test context. - - - Gets the top-level directory for the test run result files. This property typically contains a subdirectory of . - The top-level directory for the test run result files. - An invalid value type is associated with the property of the test context. - - - When overridden in a derived class, used to write trace messages while the test is running. - The string that contains the trace message. - Arguments to add to the trace message. - - - This class represents events that are related to test execution. - - - Initializes a new instance of the class. - - - Occurs after the assembly finishes cleanup. - - - Occurs after the assembly initializes. - - - Occurs after the class finishes cleanup. - - - Occurs after the class initializes. - - - Occurs after the test finishes cleanup. - - - Occurs after the test initializes. - - - Occurs before the assembly starts cleanup. - - - Occurs before the assembly starts initialization. - - - Occurs before the class starts cleanup. - - - Occurs before the class starts initialization. - - - Occurs before the test starts cleanup. - - - Occurs before the test starts initialization. - - - Occurs when a test is stopped before it is completed. - - - Gets the context of this test run. - The context of this test run. - - - Base class for events in the class. - - - Gets the instance of test class. Defined only in test methods. - The instance of test class. Defined only in test methods. - - - Gets the method that is called. - The method that is called. - - - Gets the test context of the user. - The test context of the user. - - - This class enables the customized execution of tests. - - - Initializes a new instance of the class. - - - Creates the Test Method Invoker. - Returns the test method invoker as defined by the interface. - The context. - - - Releases all resources used by the . - - - Before execution starts, this method is called to enable subscription to the Unit Test Events. - The . - - - Identifies the method to run before the test to allocate and configure resources needed by all tests in the test class. This class cannot be inherited. - - - Initializes a new instance of the class. - - - Used to identify test methods. This class cannot be inherited. - - - Initializes a new instance of the class. - - - Passed to the Unit Test Adapter to the TestExtensionExecution.CreateMethodInvoker. - - - Initializes a new instance of the class. - - - Gets the method of the test method invoker. - The method of the test method invoker. - - - Gets the test context. - The test context. - - - Gets the of the test method. - The of the test method. - - - The result that is returned by . - - - Initializes a new instance of the class. - - - Gets or sets the that is thrown in the invoker. - The that is thrown in the invoker. - - - Gets or sets the Unit Test Extension custom result. - The Unit Test Extension custom result. - - - Establishes a test specific property on a method. This class cannot be inherited. - - - Initializes a new instance of the class with values for the and properties. - The name of the test property. - The value of the test property. - - - Gets the name of the test property. - The name of the test property. - - - Gets the value of the test property. - The value of the test property. - - - Enumeration for time-outs that can be used with the class. - - - The maximum time-out amount. - - - Used to specify the time-out period of a unit test. - - - - Initializes a new instance of the class. - The time-out period of a unit test. This is measured in milliseconds. - - - Gets the time-out period for a unit test. - The time-out period for a unit test. This is measured in milliseconds. - - - This is the base class for unit test exceptions. - - - Initializes a new instance of the class. - - - Initializes a new instance of the class with serialized data. - The that holds the serialized object data about the exception being thrown. - The that contains contextual information about the source or destination. - The parameter is null. - The class name is null or is zero (0). - - - Initializes a new instance of the class with a specified error. - The error message that explains the reason for the exception. - - - Initializes a new instance of the class with a specified error message and a reference to the inner exception that caused this exception. - The error message that explains the reason for the exception. - The exception that is the cause of the current exception. If the parameter is not null, the current exception is raised in a catch block that handles the inner exception. - - - Sets the with information about the exception. - The that holds the serialized object data about the exception being thrown. - The that contains contextual information about the source or destination. - The parameter is null. - - - Gets a message that describes the current exception. - A message describing the exception. - - - Use UnitTestOutcome to programmatically determine the outcome of a test that has run or is currently running. - - - - - - - - - The test failed. - - - An Assert. was raised. - - - The test is currently running. - - - The test passed. - - - - - - The outcome of the test is unknown. - - - Contains helper methods for Web service testing. - - - Redirects a Web service object to the ASP.NET Development Server instead of the resource that is defined in the provided Web reference. - true if a redirect occurred; otherwise, false. - An instance of the Web service type that is being tested. - The for this unit test. - A unique string that identifies an ASP.NET Development Server instance. This matches the name parameter of an AspNetDevelopmentServerAttribute on the test method. - - - Used to specify a work item associated with a test. - - - Initializes a new instance of the class with an identification number. - The ID of the work item. - - - Gets the ID of the work item. - The work item ID. - - - Specifies the settings that must be used for the ASP.NET Development Server for the test. This is primarily used for Web service unit tests. - - - Initializes a new instance of the class with the server name and the path to the Web application. - The name of the ASP.NET Development Server. This name must be unique for all specified on a single test. - The path to the Web application. This can also include environmental variables. - - - Initializes a new instance of the class with the server name, the path to the Web application, and the Web application root. - The name of the server. - The path to the Web application. This can also include environment variables like %TEMPDIR%\website1. - The Web application root. - - - Gets the name of the ASP.NET Development Server. - The name of the ASP.NET Development Server. - - - Gets the path to the Web application. - The path to the Web application. - - - Gets the Web application root. - The Web application root. - - - Specifies the settings to use when an ASP.NET Development Server is the host server for the test. This is used for ASP.NET unit tests. - - - Initializes a new instance of the class with the full path name. - The full path of the Web application. The path can include environment variables like %TEMPDIR%\website1. - - - Initializes a new instance of the class with the full path name and the Web application root. - The full path of the Web application. The path can include environment variables like %TEMPDIR%\website1. - The Web application root. - - - Gets the path of the Web application. - The path of the Web application. - - - Gets the Web application root. - The Web application root. - - - Specifies the user name and password for ASP.NET sites that require basic authentication or Windows authentication. This class cannot be inherited. - - - Initializes a new instance of the class with a user name and password needed to access the test Web site. - The user to authenticate. - The associated password for the user. - - - Initializes a new instance of the class with a user name, password and domain needed to access the test Web site. - The user to authenticate. - The associated password for the user. - The domain of the user. - - - Gets the user's domain. - The name of the user's domain. - - - Gets the user's password. - The user's password. - - - Gets the user's user name. - The user's user name. - - - Specifies the URL that should be requested to give context to the test. This class cannot be inherited. - - - Initializes a new instance of the class. - The URL to give context to the test. - - - Gets the URL that gives context to the test. - A URL string. - - - \ No newline at end of file diff --git a/NTFSSecurityTest/bin/Debug/NTFSSecurityTest.dll b/NTFSSecurityTest/bin/Debug/NTFSSecurityTest.dll deleted file mode 100644 index ab05ecf235da2c531e22956fc274e2aa629d1218..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8704 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 - - - -
- - - - - - d:\UnitTest - - - - \ No newline at end of file diff --git a/NTFSSecurityTest/bin/Debug/NTFSSecurityTest.pdb b/NTFSSecurityTest/bin/Debug/NTFSSecurityTest.pdb deleted file mode 100644 index a1c04e08d76da5b19bab6cddead489619b25bf3a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22016 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 diff --git a/NTFSSecurityTest/bin/Debug/Security2.dll b/NTFSSecurityTest/bin/Debug/Security2.dll deleted file mode 100644 index f8fafc44b6d2c287220ae99c945505812327381a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 54784 zcmb?^31D1R)&F_#&6b&DGLxi9+oWx}Pm{ECr$AehCTSZ;lQv5iD5TS5+D=I`VP;ag z5WZHhfU+u9K~|An1^f{C5I#kgKPn(93JO&C1O)*<^aI?m{D0@%``*lCf%^Fs=Dd5B zd+)jDo^$Vc_q~~{IqeFvh{%P{M;{SAfGhv275MSs0NBAv4+iPJyr(BWU^G8HxnoB> zRoS0RY)?jaRdz@F`V#5Nt+C4FKwo9Nud<=Fy>eHgCpM>`z&}kly|$64*|6x1h7UH_ zy}d$HDg(w`qGv$yDC&xLaINIB!5}1MQ|ZkF)?fbBf)6_Xv#9pdEXx09t{P<${=NG) zQLB^;dXEh;^k1bx`Jg@U7E#4e-pApUM7}J(5BTaVd`>#HCk=e{(*WSfShe23!F+93(P8EYeAv$EBVzMcWSO07 zRwaiJOjlwSgtg&py9F|BiIz59`A7;wQrZ{KHK`<5H!EEXe?4kA^;mbrk)s>Tnq?ms zwSZs1{3QIM-;7{+@%W4AXeoLz64j6{P1FEhf$T(VxDKteg zG8=;V)#Q`8vuFa^4ywM{GgNI=G4&PhhaDX<<#Szh6|RMlP0c_c`90R)Z&3s7a)_0c zK06P+N9LgU#Bl%t&wgf?9JTU&HRH(}f$r6wqn??ln}Vo60#j9E8oh}HzzV7-}X3qi!(ConAk>=%!W$s54BXmH%t_`>c4hUll4stg##q)wW39-$TXZguAtkUI385d-yigdf`PEhqXtl&$HgTOn1NE_1Qam* z4m1gsjABpNGd6J|H|h<0Kc-P%*jEz>dozuqD2;|aVQ=CjX|<{xBvB5-hjfK0E;%?bxSyrOtmFoMbV&wlwxA-fe~wLI6Zc{Fn_Pd(dJwG9`BT_ad2 z{C-bOIZTWm{Q<8vr0ME$VAX+@?;FYz`=b_pa$8eG%@NyDEVO0PAlgE#L9eWdgLd=v z#09)+;__Vuc{P5YrDw*6lGxDev*+amdtNZbdS2Wvo+KFGZP&}=qB6b@J&AhA!F>$nJ}9l=8D2~?Ap^>GuHeU4#UpOS!E z4G>GtMG#b0h>XR85}?w2Wx1M(S;nzkLl&j#3e9Ch4C5AHmEpCh*u4ZQ!7Nz|k_SnF ztm@NM=dvdxunTwy6kY)n4XBDmB!Q*cL&aWqF$e213VY#Kjo?LA0?eMEu~L0atOB)c zQvwN*zuKKdK=u#TV&U|aZG^oM)XK(Ch8MsSw}14}M@LG-ZnX&Jh4Zio=ILPd6l1jx z`?bB3bYqc$>12O&(L7woiM{QZEz&W|cE@fAyEBDDHACT4m_3*gWiL)X!)>9Xr6zZJ(4-8_UHg34{(5IUJP+*$aQ*G8~c zdIEa+_evAIR<@%4NPa(YxZg*x&kl9_UykDTr1qpjsyf7uVpsd~px{i7!Fd;Cpg)4}O4a)i;qeO5(xpjgZEM1&Cc65c>ikR#8s`8HHzt z?TeqqxUdn2$#y;L+e=4qy;GogdL|-0(uwMDQw~$Ll14gEOq{BmaA;lSgd^9ki}kY^1I?`GBl$I}m{=qBu$S{=_BGqDkF_t>`G4CNJJ~|zWQHM5 zX7R-}=;n)i(90J%S)N?og8^K{$*`rlOzssf1#Y8Wk^RY6*`jF=KIPduZ45vWVKEp`13q$C_mx0S|_k|S&34aN??(gk5)hI z)(wPn5~gy*4%UDn`RdqV`Dz3yR#vw9>*3id%!#GL#GT^wId-mL(t5Ow*mUy3qZX3F zsZLU;MvZ_|gUe)r)AZm9^7PO+;a5VO!#fEd$3AlGA$cq(zP0Qec22C-uP)O;oC$F? zF3E?lLOZxWhORj~>5wH!Z@HK}PW!Nm=cb7=N!7V&;yS1@gR1A`rj?bvoT(u>@`|S9 zhpZ_oM})wzHD$yc5qAee1O1=L5jlCmSwPNu8bKWE6w%2Mk&4>-{EImv2lMDTB6CN{ z5hai%M}*z514@Fbaztc(!*fJrd;emNh-@>HBdUe_U(FG5pGz1B>}}_WC0RaP8bKm} z-HvIT67U{m)8se-d8Rt2!C?d1*v~8O$DK(i|}FJ zVSIm9AJA9vv(KftX3n`36YO&-WjNbzxP!9CD?_#EFbU`>_D)UDIhW!FEy^R z(Z(>{^&AKv`Dzwloh^aJ`mmB_M0Vc@@4l(KY(-#WTSsl{M#$#qUZdJTAm!3^->Wio zlQ4doE%K4g=tAzfa8rf_zYuOMq$yA{Q0=A?b*Gu>f6gfVAo=7mtj_e~rt8qpT+p)) z3t4X*+OnEBv}LW#6jD6@AXhZ^GhJyiMmLt6ikrOza#J`!bsLB*l3!#VEyXC*!Crv8 zWtYNW#`MxjHPXWg1G=Wzts6q%t5(9UvW=Xo=Uo<`|1wogH232^%Z0;i zYfuUxoMIEC;Mjhi8Y6O|tXN_UlWxxsazwTR)X9=zY`6?&I!lHzEyFRX<}I=f^CL@S zc1&{2>3QYeg&)~~VT(}q89B3IZtfrE)?J9M#b^ULCi{CW*YrgC(UpC!;G%zkk6aIY zI}3t)q;ZUKbWA?(B-JUOIx3Qz`h1-#s6-*L5pAY60R-rXdj`=FGJTj>A$bdmtjKBL z&CV}!spi72>Ov4t2ho;F^+6w;yzHSOkKHG31Ppc5Bz+cpb@HK7k4&e<9;er^*KRQE z`KS7o6Cd=4n?pjxlsAwYF=G&2PZbZUGM^dXIFqm^z)o4`E%q^o3|A#7qMWUYj7`lb z=h3H_M2l4$mtfF-&k1GdMgTVfNG?)G=b>EO$xG^9X3&J)`lG|>jUE{BOMq^ z4J2pkj7w+IzZm7zm}trQIU1ZH8puIk@8~*k9-t12ywy{2LNf-qtewR^Js72hFM;J2 zNf$(lP?-H34sN_7onAwSCDUxP6ys3mgiAAOr7JNtj&+LtVSi0VH|C9OpW*;?3uK*O z!Hd-mFxLs^YYRcd(Je5tZc8p2u8cNRLAc=Kl*t$>2xWpA{IiSw^O?sZ@devE%NhxFQ&32j0xpPfkQm`(#=saBE)9la67i&(`j#x8R ztApEjqs)RYD`%`O9Y&XtQ}q(53178qR*q6LLsvDc=HMw@X(WkYASst+l}jV3EV?SQ z?k1nz>1P?vd1)lgvi8Fa@JEx|{jqXo_W5gM;27o389@#)PKY_!*3KPKl;zio>|uGT z9%n|*L>S}t%z{h&qFu*nI^XAy=tskj_4>r}f77L{kEDXgU`wL>P6 zb?=zi0ttTBW%B*CZfm^Ec?64}{eUmmcNCu=m|XyoTp!EH@mbwrdw4$j(PMA7$0#{I zW7a!(m|#>mURtw0=2R>e2zmo_ZVaa zOmjb9gy526kU`{bF0)LUq3Y=@&3kl?G!tBM>><)voXVlYdn4FFvd6lNJq+3K zU`xCUFd0>)dG&BxKc}~CxlGk<`}dW$tq zt{bf~xvph;X-D;H#&NAxeN``EIpA}dKdz%X!Z@y#EQjk@rk8b8hZx7z$9!B_J6=2R zB#}-QyNx|+Son0|zQ9`%Sb~#gGRJ8e=FmGnu;d+RXqIUj9@Kiv1519%G_H#TqD!7t zddCHpJZeh{mET+NjtwmNI#WSWvixY-TN+sMMW%93B8ztcYP@BEB?oOP`sOSdSNc9RRU8NhK*P=N0;wvr{BS;K0X*fEx97i)RWZ;XIvc*+%p%-=xa>9)%R?#*{{S*cUwVnu$${fy4%* z6z=xm;{k8M%Rj_uW)SXT%}SIiyCU1clAL=Co?KMk2*=oBGo$cz5j&v8*d!u$ahBKt zN32$h@uOD}D>X8$)jDD!Eyi{ev5$;NPNyLj8+mlM@R;#t2ad0yV%Sx11dq4n%o%iA zelqz(_TI?!5zo+c4uN~o%vw1O(NxEM zmio>8o4~2O7y;HLP+o4qPF}Xf50#iXwhNw$xdCykLmb~V{wQ8>$t6zgns^kCDe!JV zP6LxdU6Vp!ut(=KGO4m_QY9Gd)VVckyC&6w!IKEac&FRS0~m6bK(Kl8a_Uv`KGG!+ zY@W27{wmq{U;~29j-T5&Tu9g^vpEKaG>!*5T-(KL4u_$Q`-JUdHb=%#c1YMEW(UK; zA&s+RbyYG1yD(f> zmHk9DEpNCXgiN7rQO(KAY^9iKMYP*dv83beObkHs2gx}Z8y;_`+cHDqjp-j3Z#beD zCEjp%H+sA=b6C7Faag=DafEnd@`&*!jFI9^7$e0SGd?EXggtt^DfX!GrrD##n`Vy| zZ<;+?ylM7m@h0ri;!W2bE#7SQDDh^qM~OF^eT?zOPKJ2nT8KAxsbh+_J0+a#c)LTe zoOruMNXHy++=7lbZhBa}adV@_Th<=61p`Rz;Jx3;K}~G%&K?#8za$cez-;e%J8`KF znERQSUCG`v^?rz)P{kSFPhF3;8n8w)8k*%U+-6EfbF4Ob4 z0&7auowyeoaBy=!Q%fSfkiyZ#@mO#a=~?bWz0WEwI9<|_FwW9^iCw5M$co|wSTbA# zc>~cln)VqAa~{CD{|uDIEZr@6B7u$q$v<#v)rUs*o!5m{tV9B30#+#iu=5$N{Zu9S6Nre5FQsdZcBGO2sn3E72gc|1bl z{D}vgLmy3k^*<@E+xh0uew7bO9;^Gs*$GD1#O+(y1SJ>pmEt|Y4`Be)0)=xOUl}OB z2SvFT_Dk_9Nq6wnR0iVVQ#*dc@cSY+ALa>omHSHG!*VMUh14G%Y5fmKTX}n<@i>uGMwf(IctPEZx1xCw4tD|zi8ityM9FVmz%I9+j9%t z+*KN=_M2AX9Q3Il%yGThL+e3oVop6YRG{nOrYZAG&yqFhlq{Y0py^A`gnf`6Z-I?H zrHQ>D*^h=KAHlkypC8IJl*lwdUmRIV9r21lHKROD8YOSl%H&~$V_6EJ=s&>m%xk)v zu+|f%g!7w6F?V)cqeZ+rBc$XvQ7^HdhwZJIqKVE!zs>5QU%to znDPoE9_saQfBckB3Ls#j6+sHw&yu@EHD}Ir&cxIazqiq>>?izlp<`xF4Sr|Rem*Yz z>EO#*q!zMstGui>urK7a!G2?9@n?>}_h<1VL->47vL?gV@v7Dp98SXSssERW@0{}u z*4aughChsaz9D0R-wxB)o#`*LNZ^bWcHd^(T?!yRCJv%(L=?K^_lsD^?$w7Hg}Y#dAe-Khv>TAPV_eJky3fi)Rse z7LQfySf9mnLm%@jz87qXQYpYWuoEkS6r4F(tHyW;T$z&-&E)-9BkZq#Emx=&IS+n= z#AAI98;bx}tU4`M3dRt!y|?NK;%B#p#E_9T?r06E-^KN1Pz?hxHSq3(UMaNZ@y(b8PzvE@d zch$HKnv1yb`YIjqnUM;Z!}*Stfw|#jL#<^YT-({E(sb%?JVKSjsdsTK<;y=qm)PhL za0OVAKaKVVnS|iuizXEmf)G3_R?Fe$HtZuOh>9E)O??M}B^DV+76dJKR^| zl3zX1m-rkCcpXu+_iDwx5f3z&K|b{${Z~f~kic zx${{Q_Uh83E+j#CxUtft{$w*i>WdKEm-;LFRpd)t3D30(@gOvEH4t%SdP%>7uf{b4 z&aK}4tuo6ZNS{%q>J+DluhD*)Y3Q5RLYRU!a^K2-@%p&!ziOY>{)?Mxe`JNtL>;>> z4$bVkI2s?lZoSP!U0#bC5xJ*vU3o>!ZzZln4}p?=Z)xg!l=vmDyu=MCaVC!w))TPS z@tfgHO56xw^Z5WyuV0FbMeHjeVT$FUsxRy^2PR>qm~E9-8)XwC<5&|qGIxgVx)k4d zF2NT4HCWqzjm(4B$go0%T}NGf_cHqxzQvU=q7hDbl|~-CJG;zoRvn=Rxi!YU0aw#(NB0-oufS0xGt;3tT1=aTP9n@OF*9aqC1Z}Yg z7T=H8fLwBuFuPb|$sh8>+=>db^E9ctKo`a*ZUfz(H8*SoSFtDUmOR%_M1@Ep`k#@f z!q8LfgU$Hszw)daxif8MyOjEauF|%kyJQ_U#h@!vjyf2iD^kG)M9lE;ju9mVjSc9u4f~}}J;7#CbARhDF7kRx5p@=0P zH7$gBJ%26NN^Rqx(;Y6`66611r9ZuvQen_OjWR3>K2fMhd-bmL*wxZLpP ztL9Zxgc~xh%=dj>`Od+aJSHpgU0%CNJ?4H^PEAMy8j+HD?yp#5oG!4&So@}BHJR^A z+yU(?AGCGH3A#l-K6*hPdGtE$*2R6W(Q3tLl^~ge^Tj|VgA3#;9S!13GcaK3;G!(r zVlE>Qs^hvw+2HYlEBOpSVo?h%4dp!`><_rXOX*P>N5Vy&kI&zfEJHg%c!koKP#cP z8R=W~m$eUxnM=_B480FALFUTj?`_Z)Y14{SvWl_<%NBMx%P6m%R1?i`v(M zw606GE4npn2)fAj(nU6fPWZ%6OnGNO_HI0t{W?0cc5Y0416MUd_9c_QKdJZkA?Zj2 zr;KV_6S+l@+sd{WB4(ZD#|sQB8}Mea?nXDaaC)Vl)TlKFxiNKf8~pvfdmxcdRzY4P z7C{-`L|kj|IT4@L_?Y-WeX8CXxfjB|#5YCvj>x}fVJjo|WnoJq-^#+OBKK!u75wEU zr+IZ1opIsdCY-{)BHuOp9Z#YBd;-2ihE>p$dKm3T z@?e7ql&dZ~YF3?TnfqBTF`Zc$gnI5)b)KGk+@rlAo`B`YpZFfY;O~LMB_!wKI6_Vr zHutlX-!tjMO)>$PD>3+ZTgu&I5Ow)PknIt zBr=z&GJiktRqVepr@w%=5kV{+@vR^RM%DS%VL23Cl7?uh|K)peF~`Ut5bW?7zGKIl zUWD`c{{~hmztb?tMRWgKfb!Z+LEZ_ND%4c8R4otu&)_oU9bDzt5C;FkwI=;TTCeUh z&2yO`UveKrswu);$=uJF>QCul?*AX5ybmbflpTDN@iJ+t%>VM=xo_PtnI+PiZXMg2 zfA&?%exzte$G}+l@q`jlaS0qdqj?=`{x>w9t2sJ=<{v7}H$!tKD9u0A!d%JR&)6|& zK2~dfq`_{L)sf1oX;J%&$aFB(P@B8UsLfrK`uQFao3aO)IQv%}e1WHx|2>ach3%uN4-9|4#5W-{@{BL7spVOMtI4ZAPO#}IGdht0Q(ZMeVD;_YTwa7iab z5pSQv1(U<#h&N==DxmUxPCzkD1ynvt?3O03DxeBbV!!9=5>QM~Zi(zygt?NrpD}Yk zjurqt0(}Dgfbw1E!J}vb0mUt41(edOWKim#E3MlB#Rh_BGA-ko+?x|nqIn$$6jI?K znj>43fD+9)pqQXEN3JKrT*=(e*fD56R%@;T%2rz{tETOM;<<#{++9X(?n(s|5;YxA z+41xMW{E%9@x*=T;b#X8$CF}77uhVt6I&UEK+*@pT@zsGb(BXg_6z zfno4J?1{8{{+zjU7R^0={_#w4Q!n5}%kUlI^YFW9xV{a$O>Ivn<9*vxEb$7AcP{p` zsh#b#8N#^7p{c7nn;LNK1^xhTfTphKO(1WQf7nlr4JUtPQr<+Me=`>FgB0$40G}23 zECYf&1o|O9tj{C(AaCQdB)MtASmgIpHsE>|K85)3c8YG~gKF?wRd(a*$A|g&Hf0RI4l3!F-25U!t}mzOi4@2 z4@sNLXKgk-^iCnS_M3?e%SDs4|7WmFW$~&i4_UMJkN41*${C(l#PF3u?y;hPWd^19 zb0%`{?c;E(NY|D(;UMpGWvttl5{8#ckFOMPEnf-u^7(Rx^&y7U1q{zYJAV2_{)Od! zxCgvLg7k|5o{N0+7({E|0sO@*rraQ7?-j{!jpG(7BMgf$YdG-;@pz}n491F? zQZZF1RXpAgOBh}?hG+k0MGSWb=1nT186|AtcTH~RimB{Z;R5D9H-2knv4}`>@w6_M{_h55p03RrU*&iGyG10g*Vz0J^KRAHKZJL?#@dAUpvFFz&ywHO*e_&6 zj{rM>o37u<*dG-hULY%AyZnqXjP`tBf25z22O|j4J7|S5>`lP7iFJQYL4#Yl3|iOW z=xd6>p0#<(e~;&bu<6D@@U8+@2a8QNEMNh&%-9UUJ}ubqC?eQN@ZCCk17DV4$wPwu zgBA)lStN^$<$`@#uwtVY7|{=~(66HsV}%hwy>&PhdY#HN_E#+UuhT?e=YuyDt9Ttv z9fH+My-sWiuY=bh*e|8tbiu;N-o`VYk zI}4vdqIDpTt$os1E}Ml*Mx?(ta~bIUVJNtOkq(ngQ=FTMJm0*8#Xg zprYJY!F3M?Hv3&vG%*Tz^TZe+b6uLAH+3h<&lRvHN~@n$ajmceuYQ+}-QL2$p|Wq60c>jl0p@J|BIC}wVVfZ=zA@u{fVP z7Z?%vXMytp4Z1XPBmB14{XFDfo66<4N^W%9J}^ixq2)VGhW!FN4KBw#3_m3l12V|X zroRe!Nq}Sjy%6gVoyqHM!pG&Eh-(kUB)XMk0ptyO7BPsd*oj1B>=KXHPF@ZA7Xb}= ze{wU*?*bZlQ{qj)PaE$5o@R0spJRRic(cirdxc{6{x?wmnck10m(`)8sP(_^J!6L@ zGUGfiCDW|H`UBTYw*nse`dA;}T7%(d$}U8Y->6`?zntOwV*;SREAWOa$uAa<2lwzy zhKu139_lIw4E-C{SPxy`n+%F4%y3mP!~07aJ~b8*O1EK+^3bv}hR;+m+&h!utf>rd z7|$>qVR@gxC#T+o@)Umvn#_Z5px+Yi@$b{Pe3z8Z9K+?;h2ol^yhZJLB^c=wR!LxO zB@zTWOulL3a6f&!V28&30gvijbf3a}7X+pTT=bO2io@faF51L66{=!tu73Kcag^K_KioDe51ym@QnfXHI2Pr z_6+VsAJdq3YzWx18uNs1Ko0e;#s;S?4g@GPMKtsMbmmFG7HVwQA;qPvVU0>$)zV2A0E(yhRDOyhct^##VzB^ql8?hBMr z&veCW2!1v&k-q0(HwLCt{tTOUPoRc2I@n`@1@xMOJsns~Uz%x4{yMM>hd2uBuKZh| zf%u0$x%ckMy!_Rao@HZW^PA~DjfI0V^4HQ@oN=&ZICy;idb+~FR_AY~4;^f4{#M#i zZA+e;k2?(qyClDlLNzw;mi#o;YV6y=yYdI<1qXXLe?R&7;0OJEJNV=LgS5lJUdg|Z zo^!Cj=UuOXV#Ek5IFN-B<89eQANs zd$iyO^paqQByygj4>iV-^AwdVWXVH5j-02cQezxBPty{OapXKr4I1Ofd4@J?j3eh6 z+M%(^DSNCR(?uHN$oVndt}%|BAJbDBFIFcmq!pxZUZk@Gw~sWFb6=jjc>4$;fT z9}AwRlEq3F*7|v>(OB!455Q~C7+dgp+N?2Nm!7AqG&VTx4q#u?*gM64L%qioh7p;; z=V_Om@E!88C4NN%8vE2_fACjyp2pY`FVZ26y*N1(d@*OGeTlBnyz9zJgD=tT8oRZu z9N2vtd)YTR_%c1EvA_AMfW4rxxp|X=N9bLRHRn|U`%q&%zF$+t5@iV<->+%8UYWw*D?R7bO9uZ=V{sBPQf=P2K3(AWRU*TJS1&NeP^ zuiEKWMopX2O7&RK> zwS0-uEEq@5%EBc^kAt-oo?x6Sn6lD|#VfyaWyV^Cp-nTm%=oM3vDUSQu|Y|)*0qLTW87bzQKYdW zGrJ4xax`0ERA}Dj{Es{ zT4~(oVDZA0#IO{eI9xSLpzPz1$&H^VOQIkQ*WoP$E~dO>@=PfNgiKG=q%&4 zta@iT);%eIJb0`L&)Byj$AtzQ?9uYYp*;>p6(@)I?=G?A=POV3uL*t1!IqEN68emT zbw8&?Q+ zC8a0+SLlA@9>EUNtciaJJzz9+v!uFXf6(X`>@ap28do{kN1=y|hcq^2x;y-^ zK|NgWFfA{^DOipVK4OGo%sU^yruGHnksRLljV8_e4wZ(#Z$t&--re-5ae-j38ehSB z_L%XW#%d$uf#DGn{vD(hINyKFDA!nt$=G7SUd_9F#?-)L#&U%jYo=%O7SF7P#;k4&fo?>WJgF6dqJSeM6*o;dgZs=>NEZmi`;-ddN(jk7eyx;$^cSHV41_}X4)b)T++CJk<`&+Y$vQkc zjo%tr6XG`>uAR(J*WaHU3VCUsPt{^cZsC(8S%+h5^VlVotuDbREUnK$vDL9?t|X5| zbJfddWQ=d-g+h2gcr1@ywJ@Bn^dCC3iqK=X!|2|UY59{ZmXZ9|yj^^6*t%qj zhcL9)B~|7zj0Fk_@;d;P->S7##i<>wpRHt>UuAjh z>R}X?$(A3ztol{*s?4p~Yxr=wno~trWhFlvUA1{%g{_aR3D3AaIwhkh$|j1EH#Jwr zw#iZ116 zW4SM@v53syr1#&;SXBA2pW9dE;gYKT<)~$9ne1}5KU^sLAbwsBt=%R&X0~qHO6Y5J zAG4&^7TIUHY*MC-Jbf5_Ljm`-Wg<)7CA)(vCoo=%@KcZAE}X^O{{q(%NrR3P%6LGF ziZEX;x-F0QS(a4t23ZlVbq1_$(VgJtQk2E6lim+Wzw2eD)Oc0-6j1QjP5>?XK&)LU zJO00meNoU5dG!3WOkZdR z+VZR!#5OVIM@TLDPtlNL&`k%+xt+g3b1!`~#zZ^c75Qmmw_iZgqA$ZYTvRie28@L6`Q;o+k0yrxE9?2tz6V3y&TP2op>eWJkSL9yZQW=aa9J$6cZF~hjT@> zGT554&bj5^i)UUTamQtY6y**X^@}pzw5)9U!q)%@3X%$ z;ds2!^a?Wjc_LpSGSh^<36%A?m*9KyH-&4Mf0%FvU5)n70iD~wQhKa2k1PBFHJN-4 zbu~5O$-+8wdj5TYeBQLq76v#pyq;qKY|LhPKyK&fILSRIPkk>o9)guFHsWI!xDP_|ME551tSP6s?=|>5 z@)3jeWN-P4%dkG2c^)W*v(9%L*0&4s&XRS*RE7^$oag?Daa#F}?q0D{FWsMiFDMrl zKkg1&ch35OJ8u5C=;!Wn*3RM=-LtH5kyk-~sQ9;lKb`oF`&|0e%oph=#-PEFW9kC& zy=HcxQXU)S;V5O(50)79OQ$4Su?ii}GK3}lb zQ)gXQaHD&i*@P3`$&g&&o@_oc=AdVt#eJ=_c+~4G9`$7NMbPgsSC)K%W|~-EoCmE-bxv-fPUw!51`c!^CQ4NOt8FRt1ndOeUq;6MZBA= zr$TeQQEPt5LhsoqFZJ#PT;V+kxY~O$V2k%kzz*-#fTwxm*0qTDdD8nI;SXE9^UOpb z=DiB`_0(;O}9u8AnzC3)ZAP=x#V48wH6Yu}$`Sb9tree^~rLlkqXae8`GzIV? znhAIb)c{_ByI>Q(#`0IuVo<(BCjnkdwSYHLBj8u*6u{f574U1+0r{_s{5`Y@l>6vR zpN}3AJA4m1`{*&T#*@&~q#uanvr_jtsrz%GydZU7Lft%ijk*EfpdEm3(=Nbw(W6O! zgrtc#^BGPMI9uQ{KtDZXBz=DRp0OYBG2;TjCyh%1pE3>uK5N_n_?&S&;0wmRfG-&j z0={BA3iz7w6yO`i&jH^S?z;lt6ZjY72OLTKACkJ?le&+Y>@!cA>@!c9>@Cll>@Clk>=iGV>=iGWJX5cjlQD|d%o%wm zy)Ny)Ej_*~y}u`Y{YCmB>!;AcuviD5RRO!@TO2hZKogOj=SNIgY{Rh@M@@yrky2?@ zqvgrMoo3BNt%$V9)u z2i$C31-Qk!4Y0?07c%FHCI>8@#|uP3c-Vk4X7dDZeV^g9Y5q!2*$& z@=a3SGM4EF1l}m{dx|oi={E}ep1@ZGR#u2U0=Eb}peWOLq+0|Y5O|}&+UbunUEnJM zX$Dg&1=b4OBJhB~8wFO*WSLrlTLc~uc%!06-eN9(cIl3yEmGbh<<(}u|2#e~n+5(q z;`3*G+*W~q3_i2)xg4L*9)pLQ>=wnt<`NMt@Er4tc$J7tj}3r zw63#mu^zAl)X6u7_Mdas8L;BbVD9 zkl&|R;cj)G?vA>*xs&eQ?kn6kyB~5Jo>`t{o=(r{o~Y+S&z+uoJ&${S?0MbumdEEU z^Y(f_=e^o{gZCEiUEX`W_)ZM+b~pUL5ZUrLD!^Z$4I(2iq#5|OLj-yHY~=9s5gEs0 z$2<|g9Z-+2r>(;G&6@Fj@D{{ME3*H!h?8~LC)*Gy?bstb@f$w;knEzsNnw09EnEwD z#`p%nFXnOi=E5exW`VneGJ7mjDnn}kubbDzlV_p@cL6<1_~MrzV|=odCaRjqiJz_#W5EXmcx|N!_?_~hpu>&;eaolC&t#&|@p2U8}`QRYn z59!|ke*~>fyr+0R;M4SJz~}JYFazJ1x)9}GU>pY4$cs^a0pl=nAATv|ix`JVFJUb; z>1Fyn;1Qe?;JlH(2>2@QsSWxsK$Cuh?}6bRc|a52pSlk4EsWKq4>3xd#27aN<{P&F z9%tMJIM28P@C4&7z>|!x12!0UV~zU2I05sy-kb`!(VPx=ra2REi#ZE$t62@$W6lQL zW*&z%Y$qfaQZFPIQqo)in1Fto7!MoI7^UVq z^N9I(^BwCB_fOsLxl241o}`zISB+B(3>>Qb#;BiY;`+L=yMnL3GcKv(>zl?4CSTt& zrp`jN7!%An$gNz)B=cJl9>-+!(Q*sF6*kqR3Jdsj^He`yXPV2$FnyNU8L=Q=ZSE^! z`Pt?vIE8C4jx)cCert_So7{h`aiMu9+HoD=GbWBr`(F(@$N$d12fg=u8L<$v_P+)W9DjnNZ*WDdUrP>C1V|Bf~%eQuoC^OI#Pv?lV zudbU%>*tNw^9a=AyFiSix8;kvxcG@mj3hHeiFwpA(Ayi`+8f(4kD40$26n}gHddeL z?TvM(sUxATOP8m*y5`f$fxhl7^C{XLn@>$WvA%RXy|*p4EtZV+ zF{vZb9^cj9JEGOO)$PzJxi>QtBi68oKOef!r)??p>P%u=eEW_xDA^;*=C{YX2a?cf zK93S&bv-?q%9(zb_jGkFT0l#q-Q9_SzBEtP0w|B6E?&r{S%7!BooQT1YZ?{}ZOT?s zT7o*T&LXZkf6?NcW`V6q^uXzsQ)63OYg^Zv*0#p3hPsYAHb-lJtnbv=-o`!n{%~7U z2Q%tvRXwe2YHsXW)!5S5)>Pls)>zj-?HzS34Rvh|U2RRPR(G^3;;D_BR6#XeS6|=Q z-rm*F*wWP4pu1~n?dYm&ZtkjUZ*N-F!sN9bUF}^=ZfjiC)ZWq924Z{N8dPgpM_!P2I+(HJxj?i`EUmoB5{{l%R}(rB}9gwlq*nq9GRRuTS*v zZMP*>)HR^j^-cASjt0nbt{@1X*HXrxwXEoxob^b{pzNc#$0=frH2_*QMsxrV>2 zj>ch?Y&uuVF1I&!bgi#z?rbFHtm|xS+obXKO)d4S+ge+iPHQB4g4fioUE9>MN@VLX z+wg{xx8klX6lcD1ruI#5{K z*4oip-`Y&l%s1>u;xtxYhn`y3Hnw!twY0WuTGNW( z7!k*4>0Hy;#84a+B@*$YpY`EroJ69EP_!i$?b`OWOr;swrgo6goN;HTDeJU;WV|j zd6VM+9bJtrt(~h@cdco}%C(7hM|%fiU0t$6G(^);s_VxZ)+5CY=rks!?ya;d)tyN8 z#WcTp)A4ApL(~;mOX5Xa z3S7H>Ac?&%tpo|%jkK9H1C4#WSNBi~!XuEm4K=h8m|SO6CiX7mGb7ZJCfO(>@TA32 zc+pYl@r*m!gW)btax8{ z??6vXtF2|5>>&c*+IkM=ts%B8I?!vk)gJGmwfKFX?s$K+w>{RojR~t_>Beo_I5FBC zTN_L6ilFCn%nrkSbd@|9ov&$nM~~BTFK}+ovB!oi|x^EvDMMOp5EAL zv1Fn(xhCE>kZSFVu{H<+NTl%LadK|fJOCuIbtgLPG+~GqmxBSZ^#HtKSiaVk)4i zIl4D7kUlluhoR~j?T&HcN6HDZ)FEW#?Bv-bB{a-=ZPDQjU15k1I`Tv5h_v>BtxoEx zqHbtHI^tr;#MRN%j`~DTOsYxd+n7uyl0rI%6X6Uha}1mAj%8@Pb|I^aQEEptsY<)- z*47{>v7Yc!&=&1Ofmfq+tUZ?89ZS~jMy#-@vh#Rq;yapzm{1%~ytHkN@;@~)<#d{o zaZV9uZ8WD1$!vUAtYdG#L&3~OQ#MxLn{diIvRhk)pS+6pY6=X*EpS+5$#f*niuKtz zn~)Z5SXcsXJBcFN4R*BRM?9AukbeJHiBEtZljL2ZOdX#~q4+*OKo zNF!3Xr4*#URaQAEbK`nJ5j?i1KdyF!4)`E7C%U7(Yogsd;(ak>{{UI*Lwk3kAK@d= z?w@^*)^mO#rPgh7iFWtORriMI;#E7DP}Iy0nN3wnN;S1AOL6J)1zlZf?nG?Np-UT( zDaFXi5Kvy5PU0>$ogC;+4*;!?_REzw{MNqSy_qax1;UCXpzQitaXd$bG@6ShA=Z(M z!kjEGal&|CierQtVp|8cZ;vHcBopVz3ecWr^3vt=y1G(QRBJP)RZ%IH^b1&y3o^crA&s~KG5HvL|kUz-zs+t)_ZJ9MfhMV!9KRThVSX0is&vA*pnqK<7x z+m#YY&C9GYe9)$eSjv!@W)Zlt6*zcH?$r_q?_@f)A&%D7@H!H!)#lsT7pH#7G0-Pk zXDu;HYSUpgojkUFN38oS>fhF&4x2UY9%^4@ug@j44<*P@(%8y& z$=ve&in_n$0?q(-=^oTUN^cBnK}sDk&*7>mu>!%TV?7+Bb-g^q^p0H=bxQ1|I$wzO z@K%?71Fb1gG*<+batU#D>za|b&6Eje6`d;+$z43~EQ}A@u`aDhB#=S(5%QSc9^C3< zzRn)NU2glr&gR7SL?6|4_qN4$V{b&c=NzY~lKB4a`rbG^RqtTLSpW;-?h$KiyhnB$ zvbAdJ+Xg)}O^h@LcR2che|Vmp$wknDo-@v$_02Z-!*tu9vdHR|XHR!b_C{)IZOoMQ zO;k%F&5LskJA^F;5-;|NB-V=zm1h*3mAJ9YqSht1<2glNx^*Dkx=n6`GBvUmHMNA> z9jMcNcqz;T?K3sveMo*XsNHymqVLMiBZXCISk%8(>*GN?`r_5M2t znqljSBB9m$rc9-z%I*Dq*mhX)bVmZW(8!7s>`p5RyMQgy# zNUiMl(1^3-tB4hmWPdjwaY(rVp4yG%eXn59$8KG4KHE?WwfNksXg_sC&x*+@OKL~F zADcsBpr5u2)S5KM`_86%B+pbIOX@vr#Q83{2|K0Nw-kzzId@TM>rf$R=L{#a z*$q3i8CtD>hYGdayO>N&i9c_PL%q1%I`H%*W!;i-W<6X|c)z-2c}!-pP%J3w$T$Vt z*%Tqc2UVmG2l-G5e-|i@eKv_@jPIjs$Ku)q_Va^y9;agac3sxqLd_owDb-As*e{mq4lulD-L-2jF~Dm!cNL@9x-| z7!Fc^4OzADR174$fSp|Ih%q#lMX*=KhI6EYmOL_PKZT4kIHzMNJNZT? zxEsxGXNuhP+DlO!lp&9u=VVT_QX`~u=z)(Xk%!rKMjLi6mL)$tQPW-XqM4F|xZU<4 zrJeC|6v#L;3u`7kgprN%Sso4o_w@J1yW?3q?$8$OP*4qIFuCcHXB@aaNns1%haR}~ z?a8`NPpQWwBha_;p)SVl+|y~%EWFoo<}4x-XpRdw4yHD~N0sHKE``VIYH_Zsm-}Ls z&t(q$6)}}b#(4WuM7d+q308*c?1343W*SBY(w}`mEjisVqPi6uDmv04pJ`c=9EFM? z2fRYJvC*huZ(np*yj%7&WDhB7JbNJ8o1&cblYO@@jr}2oCknCtXp$cg*c(2t@4#?~ zl}4yK2Nq5^b;S0hk*#eX=#7FaH{>GEbDXuC@z#k`;cSX>Fzy)~KYkh~c zG;g4{RT4M$pzX0eHj>ap+!=C!W{(+jzpYQ-7U$C2&x-fU(XQAgB@V#b`;b7)#1`pn zXmzZ&AK5JN?gn-BD#v++PGMzzqBsbugaweF4yoZ1mWnK_Kj$_SX@xDuZlr5uFGiXa zm0MNZ^>d=C@3>SFNw}lf&TqVEbUR!)w$?{%jpSIc3pl)xXr9y(S}B`IzSH zG=)v`F=GF#QLtzIU$mJul22$ddogrYxvauWB$#LUuo-gc6YdLFGYXW|cqFI_wzJwxK_=l*{FV*`l2qZ&?K1Bzb{Q_LC8GK&D@QEVmPn*&HR1-x z>1jM!I7hC0UJ6uiIn>X0=6F=0y`Rtg`6Q0kV9Rd7>TLT9uhf}a6<&9lpzb2n-MUSS z@-a#-X#ibnN*c8g-+T)z?{FbJdSZLjk}QX1`p!HRMSI6L&B`CdrpoNMkc6h_FOYeA`~z4)#3FsZZ|hPban~ zqy0PfW~EbnoJE;+-%hxOkOhV5amS09=--R5=i^$=t5)Ky9JijzrLqY;Ep|G%H|qv$ zgj}-`yW(E9DXJv*exiUZSG=|3xL%gAKKO*fbXIJST6L>;tt=fJK6cApi9WTGIz%Xf z8$+1Zp*Z7kC~_lbYwS?j=j}HpDXtG$s42zo540v5clASI{F}5N-)0=dHyvl&!OdJ}RY8ZZCz_lhC0OUnq$2D9*^Okph*c zkFVXZgPIGL=P{%}V+va!ffCOgx6UKUZT&1z(7L-DvrSziSy#*)_XJq^c+{AS8uR(}f7CI?@w`Rx>BAQ) z*dATbxEoh0?uC}j>&3_tqCd@Q#C-FNcSB0eX&uV!-6{N6FZ11v5s-T$`kyDvVA!nVAGxQTRAgs!+-vaqYR5!*mQ-MFcw8jTvED+cC) zmI}5+u;3pC3^WkI!WLReic)M1G^JZASZKh2f&L*aQvZ-*p{@OV&wam=^v6H_N7~ta zXU@I%+;h)8_t&}i&fJm5GkDb7fdy>}2y#bzbe&#srzT$I%k_4|?Js%xw~a{>xdm7L z(9Nc9$&HV-E1@gb^YTo-KTcp+Ny13T0!S7IVV2<{tQ{CZK2ZfL&xm9Zl(-5%sPKcr zmW3@NqT;zFxTHAJB&p>4^9kjsk|sf%Ws{SWqL|B)nk(OMMw5B_%^;+jRM?~5}M7EIuRoG zxLb|f30HQbgijT^c{iW5L${ijuQl5>*S(1>rBQw`U(WXvn?#JqY6?-=g-SXF8%v_i zdHFPIaErCg?l6c7LtdMLq!&cCmEZ{!8D*JtKTN$r#*qgRrivss4pRe;mJK)M8Ba-q zO#vyo*J_YQ+1G8N3^MN zFOH;jQ^@T)k?Z8r$QOqiDNp;{pGqN^bsg6kPpYmwWtnuHem*)^<)h>C(b=f7e#;A6 zo^p>=Da-Oy-4`ZYEZmr_S_#42G-i&5PYHdgT1P}2QAp=gJ%w~E+dYMl2D#{Iq?08v z+`M`^?nIT^TAsG*d>R~nswN$Qy;R$JjJo)uIYeiYgbIi@$C6r<;cjJVh77H&RT24o zN_bxWAdG5O!ZX(=sVWB^y_-rGe1h zYISj)rr}Ft-NZjvqfF)@CW^IMw`%@flF6HSl0~^v8e9`eW0Jf?{QSQ{XcCj~&8jpF zm{4u&TdB;&Al4Aci-gKEr${vJBG>5wh+bacKdNO&gKNS2opqf4cesDCE6FIUY_Nj7pOQqf!DQ)v`FcG)IoN?Eh)Osp-bvV5T+`&phB-@z509M zHa`0baH`&C3s^pfOI@9kqLbf7Z{j^+QAq4UrBf8*XkfBV$(Ls(1QLWIOEq+OiC;0f z*RD&(tqx0buA8S(8u4#lblI({$$I7!39XTuUeC)9iYU#?_dN+M6&$8nO2MXXA>EK9 zdHJD|g;8YTAJUt&XtCYRQ8TIMU9yckg-?_sRBG~cb2`4FRjt=4L@5hA)fmx`$PIBX z$TIb?KvT^mk+@r3x0RQ#rWCAH%K0L|@6&H9@JHr4XYe(HuNypX@Pfg0iLN#aFI5g# z{-QUAEJhkp7RMN5@G*T`j5ll4C$eV5zfucKJ^mZ>`5lFxmw)9y{qYkA?%BHgoo8a1 z)Nv>f3Fvh?zEuT)VZe7@0D6lqP6as0i-H&6ET|ynAg3VK`*d+zU{;_M(A#w}AC3nD z1@IoAUZRZkc4Pe0kk|JV20)qmGF|*pc)hTo6qprg3pC@Gcwd&dfGr_kI+UckQc0^T z{XDPO8X|f_B&s3ysvlU|Hn&nEeO(})9K@3YJvm5^;nqGeUlr}g3QCKP7#<?5xD3F5`S7Wjj}`_RX0F<=5k$2SPvF7Ojn9$ysrC6W}&*mbh~k71wf z!Uo%c`$7H+8M2RJ=J90X6#;G;>r~e369d}4|1I;f_*d3t7=&9e`f3cyHQnfW(n^i4 zyH@8m!LQ&q$*)c5l6tOFAd58{V>A2@@>|AhKIxA$(450#Rm9!6h7kkFez{&3I4^KP z;9^v35OgoU6@JGV(71hr-;;_~3Opt7ErDkRP6|9P@PfdL0xzY0z%S2=>6*M=MHqFQ zi^%af!QOPjae`k*6sHB=j%roie_yG!gmf8HDsCJrZIO;WFbkN@M^-CF%K~2cg!~sZ z3Sd9ZYfx}Y867PyzLg3cN`hi;EFc8?NkSMt?{U6g#1QTl^9d|e%)V&CJbd85b0ePF z2oW}3m|aDa(yha3DawO{WM@anud_~E7JFZW0cXBtYyA#EjNZ|Ra~9`@L8wN-WfQlUo!nb#2lYf# zIELIrm3px*lbs2bK~1LIyijaRn_OU0)^U3Kksg2mk9&w#+>BNJ8JdC|Zk7f_y=SoE zBc5sj7$MR|gb@*Dk%>piiTGAG%eV_k-#KqiLM=D*^cz(KD$j{{)y?WQ>sBpiUB#7? znGp$cR&{=`nJ=SxY)@Jhv{;#S%a+Y13pHY^Ar>DqPxnPSB6FV~xX+t=ec)bKCKs_# z6&nE~n}JD3u2ViG@ZSgpC3j8%=CIPNAw8(yDT_ zQKeDj$MGEts*QXlYvlJf3uen$h`2BinV*JW^q$o~#@d*Q#abSQ8_Abvu>vtFK(+;% z!h#Skdv9Yil)ctBH&W@bJeyG&_^h_j)L6b^aBU)J)GV^K|a;d6AyI7!SNfNPFsT$O1pj%&_62{CL)`V%~0`bed7qD;W&+ z%a=YEyVH_*wh>_bd6a5c6loO&6-B~4ej5jzk*&-<&Y(eIQM~ouB8Tt&I|FA21(7>G zWyZS2R1gVS0LefY-T)KwS`>CrV7Uq?PeW2S>`XG{+n&hgQyeyFBaBL}2!)YdGLOqd zYgAK}wZT^muHicgsq5gBHK-%ybZuiG=WMVoUuLD77ZL`KdGS~>58sE-aq<9H#v*Hf z-IjHs9bxckMPawI&E{tNvEHI_d-jaV2?eh4tNZna^P$3VbC5t3*P?O z%k3{MA34ecb8S}D*{W?%@4WdI&W8zu8&_ubtlYPI=koSFhj#DUzWdO9hqv$f?DWd^ zLwokzvhuZ=mFb!3oqTH^S$FN2-mz_X-y{OP^+$f|9Hp>t zZr{6GF222Xa((`LU!OSn^EbZpP04%v=MLCD?t$A@jvnD@O`dXN>HYv)I1e0u_}GCv z?*78QzD5r8k?8|Gp$rKxFbw^699uc0gg=H?@!nAAY2odmdlb8IgpO6#+aG>(?m=F3 zIr5Ny=k@Smd+=5(Ceu0yAbiEe;>F?qb*(oUf(@-ibD*G$uHd^Q9 zJI61CtCqFwJIS~I z+s!gHI$*Z)8RBY-;^<&Woj!rnft2Dg{xq-g`!u>=yWlUmw0&{}IJ$kIZ5(aMXz5xD z*a6GrjX_%4lzE7y|2w#ADPPwTJhXA3AnrX-@H8W7XnR1{E~aFf!s#wu+{!63AtkD91wWh9^88T3Yt!gY{{quM$Qe+6 z%Yo;EoKzP$V<+6vNXTVkkj7gixf zBegQaM8hJrB%`9lLNhOAMQKH4{;;SY85S8C`M3OkzH>P{@A`tf%knFQfoH$(oHO&x zGtbOCb3NxwEGeoet1O#cl|Sm#Q750AKXK~V{L}js6tq6%=+RRnT*~~9hR0E~^B`S_ zqG9|#;65B0*!b=Nw?AuOQ2na$fok$0tt73!-#0dOpbZs4ggZNW_ub~;yYDtL{sVtL zyc)<={^Jgm|A)80>*Vb2K7HeDqu;tnL%MApe)-DU6+axa`pR}IzWdA_xA>sCS9i$w z%K824Uh=^Y;0H(px!S+Fy3qd1uPoKY4^TD_h`JjM94Pm#+>`(6=e z^=WrZ`q5J@iZ{Qsbj$}@G5d+|O;!GHJah1=>qkF-O55>MR-FC7hBua1y?Ww)qQVb! zHk+#ak9z!HH+^RA#-6tyeQEzEqSt@=NcRW7_<>f;ejHxK>OX~zxNPgMAU&Sq1U|6e=* zb70$h-o851{*aNMYCmk$8MnW2p#6UUYDQC)|9!8G{?=p9zjjexdCNat_xzvwZo0Db zgbzUW_j?hWs{GGevE}FUW-fa8e^-^>ckjGZ$KKuV|LuOS+z)^PnyUQ2+qG!w%^i!j zWLo!Jxax0jEx7f#qVXSq?C>82{}@<)0dR(vqX&@621+@{rVhHx7LH zly5HX`~k@RelKEEwg01c96ayG*IoVFLBD@>>AHu1G3%MAZ{dEg+z)^PnyUQYSpAje zAD_}@*<-!e|LUF2XFm14wN>>zTK)l0(uY{YrYirpPyBW14O3qKQr=}7AD&%v`X`1w zyzZzEvD!W~S!=5D?{M`$il3c5wEMW99sW+MW#1Y5^yqCnKQv1E5ND*R%KwpFmtOt! zAC|l{dS^HPBS$KcerKzwp2rXWsSp&227!=&YUNFB;C#u z*PBNEdFHN6yI<^9@SdqBVc{TgVh@;~RtCC~nK+*?bRSN`m%7as5a)IZ11IB@>| zzrXmKto=_r{e@?T^!og-4ms@F9+lNkym-_T8=m|CWdDGOP6JO5u|GT>P|W_Jfq(zy z-+$4Aygl0UXVe)pE~rdbRL&S#Jg;PaNo7?QDw*HE-;AkM6$^^0D*F^wMp4ljGZq*=g;{)x9iRDCvnwk-AOEA@jB5=a z67_rgn{VW6oOrWgR%!X_XNmZxv-mbn z-lmYPDde!lIH6>gim-7ivL#q*Su{=?t}+$QPLC^`UtF3Vvv6<4sf5>D!z*ogHBPQ6 z={af-i)Q#AzWz5}yb90K|L{#gEE^}~_~P{ZDq821^z3v+dVW#5U*p9qal9(Bcr{M0 zpiNFKnO9z#uDvjFL2*gdlm(^f#!DKs%u2((_Cle!S2*rXFMCl@y0UWL32)dpne??f z_jPwKYDcY#XVm`m71;3IYi-xcd)~G4(-lopKWb$y^E{hS&hhi-rs*6DX?W^(nponJ zTJGw6#Jve+A6r^Dr|Eh}+fmN;JeyF?F|%igYlNl#8!%qyu>r#@yrhPjEAo%YF; zC&^%1Z8A-mo5cF{%O6!*SXpU?EOzu#d#j1Fme|C8`9&tp+D1`(tBGq@ZD#hA&$H82 zwT(WB($uxGHj{hG|D1GH4!syz{?E&QN_t+|HT$g3%#qDK){F`xO^#Uqkvg+m-Ha?P z{f{)9-KwY13iN+odqx%)|JSst!s6l_6{pEtRWdHiVODGJ^~u&ua-+!&PBM_x=RJ1kKdzwn7@q%T9qj|_oMd;;t!xi!+6NXosTF&+ zM2%i@skNrTJgl&us%Z2KV$8y#ba|E5(^y*bKO5iMrV}2lsDP|Rzm*q7(+-ZJd->hwkSJPtcodz? zyH%fOp|us)R&uSykx_Ib6uKU~bZ@awXKm@vtarjSPEoJzGW5*CDx`$TiBp*vno@{??F(5n3?L;UP6ep?W4LeE>iad+O2y8JZW zP0{W)jib3U0HXM!g-0E~bi+^z4yStF6BPet&sMipyHWig=kBFJ@6=X&*iNgqzpAim zLkg>VVOZ5;ANIL-C%02r)o+E>y)dlWsSmrd`!6;qtm>1(>RuSuv>mQX-mP)GU18Ox z6jt}buxg7vUD)rQ`Pr8hR&7*abuSF7_Uyyf4En(og;hIOSltW5$}ae@|L@P2+^Vp$ z9}25`Sz&48KJ1WhUH)l>RogdV!7!|BfDe1(IS))$SlI@J)x9w6c=3UxhpyjV_j`p^ zolsca3&U>1@54?QdCk8RR&7^dbuSDnyWzwB=)qK1g_RvqSltW5%BK0S3oE~$QCQhH zh1I<RuRDcGHLb=6wrHos>OQSltW5s*mttkN?^ct;AP-hr;S!7*;mehkfC*r#z&vvds#s zdtq4hH9qW(_nl_ioBAS!)x9vR`Vb%Xf%5hjiLd$=h1I<#20y)dl$O&|8kV^-a)uL-2JFST9ROJUW2Dy;5> zVYzg`H9!LtWi&AAMd@R|T|AHSzD1LJqPKhhGc!WJ{dI17QFKPsy!i{mUw`(i7yo?x zhT~hNo_J*4OvRZPjgI<(%_;llv~5gc^fY{$)5i2WHK0SBit>nW(>0w3*VjVc{e$rR zPjTr^txeZ#1rVr1)U56G;G^(YJRi1OlyCAfC5jA+pV^iiQ&CY?F{-SX%F=-_M2o^O zmBmqXG}jS1>-wxkRq3fE#pWK>GV5MB%8(u;%X;or!Bj)2rA}_8b5NZ)X_TwH`#5V{ zoF4>nFm+k!_&AC;so^?L<-;#-A5VxgnK-j8Ref)~culJ2wD{)ptt@YHe;s7YIZo;U z<|tYN$$cS?GSb->LFwpWP<7|efBAQY>Jfbj|4{HTa02)hQ0?@qU@7=DupC?uUJZT| ztN_0SUIT6bTSkXOt)s&zxZ}7IMV+FXpbWIg{XU-i$GI@aMhY+4w|2U~bCvts@ z1jc;_-uk%_l*~_qs)yeNJA%)EUBPET#d`siz4<@CxvkU znOnivz>kB!1Mdd6f}a3?4}KE-19%U(4ZIipBdCY5Uk5)2ir+)v8~8sjKlmk(gCLp5 zz#X713+a0VG#EM=>IJEM=0GPAQjP40s6Ccg*IP%Yxcf(eUES|N;AzlM=dY*}_dIjG zHKRz&J3Fq@u-8v8D7kiWtp%jMMXrs7C?6aIO?UnS@ctT5dpOhC;b&ZMwGHo9VuycE zb5#3@Sc1F4&Z$S0u^CoYI&D#T+S+3A$v}$h!*`2%w7tM?X7%w~&V91tTl;fneQX+h zRn97M$wFU}Qd%AG$S(Rk3^Ia7*oInnA9?tz&qHPIJoI@#8Q|;tGU-HV`hIh*OEc8l zX9@GRPg8muyP&jmQsF$*)u4V;Y1PeZKUZEoT>Wobo7L!k!sm4f%BzXe^m$$B(hT#u ziZqW3)AYwsnjo)!jId0dFV5##zaJpo?qRyNZcQnfGq#eGxdsp>;h)!#@ho|#&bpIY*}RL$+Fn=eh> z(kgY!w^K`Jrj{L%TJ}QfqYG2Fc1zvXF?HM1spVy<+q>BDP#;&W+g)C%K8bsfyq?|F zm200Oj^#yBW9qC=W3?JAPW_R0^bL7wpT?N07ZjFO8XfLHo*9H!SbyJ-v(5^1SX4Hz zys#pD-mELxp(m_#c~--9*{mIL<94YF(Mm>#h{Lwl`5-Rf+;LU&do^-z@NzRo9amU6 z*N*fW)z*v+lVwr58ea^BtWAsEy(m%<6`0f`dOkb85Hd|Se)Wq-MqQ$O`a#db+MqbG zO(74ateKd&LiKGz%R?NxB|NN6$t?$ZGdzTnLuh$)k9tJMCp@fui0Ox|3*}%v$M84? zM24s{X#3w`rvLSMvF$y#92AA&A(R}#x^irwKH2sdCvCcjuxnktWE^IAFb>N|zFy!_ zpvEp*b2=G6G8)7L7|aJ5Mw{`d!kvo04}O)CaDYRtCvq(r(~ZX87ylTC;~ky@_UF3l zz4%=U!o!Sfg)^PM5FCiV98|a}@O1nd%Lx}b{0KN0zs7P3cRP3n{yQAr>F_R)I+vl% zn{XPV4a5HhhmSaX6dca=r$F)h9ykL3vkt%S@CP96G_wU%xUJwQ{J(ejM~AP2=pgeh zsBq2VC>o1jwocf>VM}lv{^LM}>jt8;Om~MTI_wFa%XNJ(QsG8|6Y!tqaIC|#!AV@7 z0V>=~@I3s54$}^2gXeSoI#A(m0;k|tMG@9GycwK^|6WkxJ_}xe|9*!LID8PKY%|{g z748X;v15k0h{25xp8_x8I^%W|j`4a#UC8{}A>(x8-vVC7^}mDS_fPP0{BJw_x5IbA znOtv|vf(;{h4?!;JjP*Xu!!qj!D7(1!;5LRs*!f=eIzwtL^P6X>EN2KoW(U_C*l0H z>w;@O?hU~;A1>tQ!z~TMDTPs_aaC~5hnp8%^Ze9$yv#ms7|zGNItb_EmgKmWOTO^h zZPD`R_Bwj;Y0SyNFIPT7{ds;}5<55(F1AmO-Hervh-=h6<47fQFu&%4vgzc)*wib* z4){qib1Ya2wv6V{FKGVT4eALUZ~U^i>mb|j#;)WwC#s#Bml2;T6=8o&Iu)Sqs}8mS z84G1(>#<9j_TaT3?bqC=eQLgM=Iq!hGmpI3jh|mNxvHXf{=CYfvI?FI=$(Hd516oX zJgi@z0{!cqKZ=3(f{OI8`RN5ba8lYkfAWG^r6onItW7JsDm{PLtkX{~Jgw-ofqe(} zACN8>G?-SB%qwYk$?ra+%1TRhHdK#!oSo*#a7hv4*V_A|OA6=AFRQF7VITK|+}Ghz zoE|y9uyj#niKY-);ifF$aQ(bAVdj?N#-e%G<&xJvZ)Rk!LEfE^;`y-q zOy--c%wETjI++U+iTM#ndC%pNnOlv}Rq9aU`E@Rz?s^S0a4RgBzcK0lV>ju_X0Juo zQsOC&59jqnKd&KzalULjuuh_O7~U(dsxUg=2CupB(i+7CCRz$7UaIb4cpBA$G}lxw zMPuL3E@2bYmn+Y%Za3@5@A#%T^P9Zt9&vRKsUoYM7if@$OESRk6uMaI*Dz3JAPfk!@1wh@H@%zJ1*ge9gS=sS1TXQ$;b^b^0#ARp}NQuz*ZnO*~lr>_}b1F zjxrdIw{5>xE34Y1w@-B68MPnbVGixu%rNvn+~|+_KxF%;*zNMzF?cE0<%T#O@dw38G`OHi3?ri`xCPvp_3z53c$-gxwd?{*upw^ke&;*v&SgDAdmc_$Ut( zL6!e`AUZc|1L(}G1=w_^FdrEW9h2~$$$i^L#HPQ%ORcG$vthdo?+ZcMHmwKr2Q~j6 z3(f$wE_4}a)3^lwlc5n=>8Q@wJ|IqXAJ!So0hI^M0hP`?5Yrva&*FPVBKKzQS(_av zHeY#v5t6&f@yj@Vi^0>mUIS{5cQc6I3{C}AX5`iQ$y0O-_sLVV6hx+I8OS^``Y5PD zrQ+WJDjxTu+wk8GE(dG%FdH3AgxW>jUCrsh8mOHU4x!QaFu(KFGH_wJs4ZE0oqJvK z6Qm=3eG*h1`&5$d_(VtIVQp{jb;$=Dj|ag+2>ZE&hi&t+9q22vwlq#`Y)h`GO~|cr zJec)nj=(Q{vvKW@%c8;2i=@#bffvT?n{=9 zkhPt$v7>mkwrth|^!pp|l1|oxs>6~+vVIf4^7k!J?eIx3AAA}-0sJnA4KdgY{2u<3 z!Dm6$ndiX4;0xd|@cW>Zxg$O=b2;*=&JRL%t#!9E^0&o0sJwmI?j(E*NN17c=0fB6 zJp-zOmO-na_0T402h;+C)e{;4&48+)d!V(@i_lgmqA_)Z20#;_V(5D4Zs<|ydFX(9 ze+@`Yemt|z1%FzV%DI8`^AAxO%%zDug*J(I4RG%x?>CO4jQlvRH$0l-SNl{w9S6Mw zd3OyzUWOR6>AXnd3iy2+#N4WxY#j?c8k!{iyehwyE!LS1<77*94o6PyL2Zt;tjs`g z3V4>gE*Y?cnepH>5c{rit6Ae0DvydU+2qGAMi+w1z>7fIjJf|qa60~L4|u1ECknqvp}tFi4Vyd zyU`lUD`#!)skF_GSmM6s+R=~=+d)2z#fO?0QJ&@Z8wSaVnQBJ?N zP^oquXn#f@|LuQNOn%L$*a>S()_M-1?Os^m+J7VVo&QOb*SOrL@w`hzeW!P=NMmLb zq~X_GM$;zbjLon=qeDrf!l$th)_eTCTzf}y$pnYrtx0>aPkTzbG+kKf-fq(PIhrQH ze!e5SYRf2gtulLm`UK8%sa*;+J`i@nD)eH^-J6+!#v0=wTLv*!!8+9q@s>N;@xYcF z9;blHBX*4OSSM$Dx)>Bc#k2a(Jr6mJcv6*6V;W)Id5Cyez2zPgp6PfD2Q?-f0orlO zC?kirO@8c=Pnb3baTWy9V+xa@xzI9b6|@1`-<-+$o8 zczTZaAlS7+#mztp@56*^^YvNhuJ^p3G}N9M9vZ5<-s0Nj7Fg!;d8nPxM zJ?t*c77_|~ng#Q>2jMUAX^ts1S{v!~HWXz(11Y=@wTG}`dq$vxRZY=v=}(Yy@f?GWV~b%q8&6EslW51iVt?>Db^`Bfe9?oagJb9%e> zuYS|)IMp7eZ%7+@8eVnVkRKOpaS5s~@NPTdD}CCH7<(waaO~m71?nrjdxJ35O_;_S zSFdCfz56q1tZ2eC{5~ypJ#l{_jfa{b4c~X$GS9t^QtbL&p~i|rJC@LikkMv5p}yOe zU2N7YBxq;@<`CyluCY&_(bPeBIH!-)W?NyUyd1V{;>ed-$m1#(w-i*p5gyJgEaV}3 zVRc_?&s66npIjMnBuBa9bv1}hi7E^)D^F{BNb!_R;%D_7vkzij$Zvt;a}6k&t_4*W z78-t5HqX!7qCcc8pPoQ5c4ry13R(xf2yKCOL5Cj9*aaE{HIe(bu{F~xQ!jy99` z$dI7@PvRW&gateiQ#%G&#c##&;Tk#y@O|HvLEkrKUU}6bc-FgbBW#`V0ksIZkF7n& zIW3VfHuB<)!ak)BeTJHEf$2N!nLu^M^e3ha2Y`0|d?Ni#PpBK6^%2P&*fo9Azf7i# zN}I5pB`KeygYwtIP&j`EWEH;^-iHaxK0KS@&oK0vTv0N= zsHD8GH2WOHG?tb6@I2Lm(!z={3(MISGOz1wRQbzB)a_?{A2-t#(g}p|?lJOsbeKoZ zk(Y7S!yTP(&_0^x<&`>HhfmCA^Ukwe%pr6NLAk! zFD?rE?l!8ZxR)%LzmJoL*K_1y6+&&K5-6;{uRLgdc>~v9vAtX!(_JV<*Gczlr2DgdobHYs>3*GbU)#s& z>ikCC{C%iIILISB;A8fbp0Fkd0*srQ;u}M zMY?VGQM%slZ*O7C_XyYT$oB;49_!N$p7D7Z8FgMmVf}sCIK^R)#Grm-8Q_Y2|ul8S!G`JnK6cs}UzhTAc-E)iF^h^rrn7f+8D?@FD{crUXiRXs3O{bFkI zEvY4)Q%lZEEqN|g!z)Q@ZCi0mEZKP_I!pWYq(P^n7`j9?JI+{$InkEsqbCdU&u=P zP!@{hXyS?c4rzbNr;WbP;<#tUqOoNa^K8F66M0{R6vv12bA@w)qN^yp){IJ3z71KA z@M8|ygZL;rPw-=5bFhW$eG_S;Xe07I>E)eP#tFod`E$76*fe!$NizHPy4C3@X>9O* ziZuW1)9h1Z9{g*_Sy<&!Y54iH9jC`hgVq>^`Hpc%FuzgV7izvOv}^KudhCRRhaD@& zNm+(GSWh!NSl7$+fXC6G-CI1DHMqkP9(K%|dwoIYsU(L`RaRJ64)!73_%t?SRf3s0 zUA`jXs59o-3rwBa`#^Y z@zP*F{IfyL2~`J91DApW!CS%8!P~$=;Bs&o(Us==05p}&gMG#VLWQjjhqWk!ao5# zADjqI0lAi$3Z4gE0gC@ja2ozX5PfH=!3)6}@FMUQa5^X*Uku(2UIKm!ycE0_ybP3X z;c0XWugn_!Md0&bG57(kqDS2BK)CgQ#a@Cqr70KDM zkpA_Y)e(^2TVG)A+p?Kh=U#8)SKQk81L1Ln3pdbUdwSTg+@w=G=FZ(-Dv&oOOeJ^- zSY_n5&l35v7Y{pr&duXm$77-6LFa=G#A9Gmf5gL%g>&<`!ST4!@wh4BQG32hJYJ)5 z#{84rl?(01V#i~N<3ag5Ic#~nNqF(FW7OO{mN_0Dbv$T~jz_i}cD$LJ$L)^C9gfGx z5+0{!>BEj4bMv^%@u04na`{BUqjo(}d9mZb+&r)urffg$cu>z>UTV*$>ODJl%*NiW zDgsXJbC>)5faCEwQ0-goODE?c(@8N$9d=~t-yPk^eIX9ip zfrojv_4}ZnZN)}pIQI}?BQl4B@N_ztHe?IbKK*Y!^ELvK=Dc0d^Lu@u?!h&^-=uE1 z-dyVibqT_Gdn4P@m9%_1@?%kP*2Y_VV{OUNS#{EmVRQHK*f~?5uye+?zm(+dgoFoe zF0$j%SpB1ME%}RWFz)A$$7V2(E7G&>{}O*|5Zz~va@UUre}n%x@PELb;1w}0qz2AT6!mr%DwhnvUF?5mT@xX zY{9isNbdg;SG?Z=4+Ew1w&1_;D=q4^Nh^-+_=fszo_}u++BCzuXwRCqMWed+Ch;Yo z9cR|o8>QC~l0)b4DNfe9^{zI#RZtB^WhJx@(mZlI)B@r2p#jhYXeP7}x*K{FdLG&W zy#uv_c>y#I(!A_?=pJY-^dhtsLd>WmQ~-^GilOVFd!V(D<_TLNHjko?PysX!nh70n zyVpQ-Zk^-aJHq~%an=Ia-<++wqJ z&Vr0AEuULhnl9thV(!UBy_nv9D}=D&enGBhIgbdQv7Asc|7uAXo-s-G80>ps+&hZ0 z`6gkq_961slr;V`sNbWe_85BRpewH6!69CQQeft?^_mY8*UY~`*#`Ck;zPkM^hkal zrumlDORY_#3pZ^LFl}453t=+ykBII|+TCa|!_jP_h1Bgw_p*Mgto+)9Y>=Ew!u8tX7 zAEw*L_crCquU}gjs=~%yYQg+{m303art3DJw3ncExf4=&A4b<#acu|Gjq9CGwq>OK z46#2qsLPx<)S<0PC8RniYRG$eTwa>BQ~Y+R!Z`DI2a+{>{Jxsb@5_a{q`%Lb;N%M4 z9X7Jkt(-Ju-Nea|5`QJGJot4J?e)mrXTkj4LfX@P+QI(T2ISQ91Pbf#OPAZZUe5I? zTz@dorSi!6_qrE0y!C?3KS zcwVI^EpiAFcsXqQ$<5<;j)zb@gmrmr);6RPvAM=pTTp%zkt)gzkwHkJHd-Vjo<7%U9%rm0*%4@n%{N| zK8&@OGu?RnBzNDw_t5LY*8kkPcpLtzUqb0Zs1g}Kk9;nxCgP#A}BZa%$h5HP67}r;V%&QnrmYDIU z=0A2kta;Nws4F4-TuO5!zg{v09d~3_HOSmQns~NMv?g|hxt5PL^lK-SqvFrk!613^mp3PAeS6!FWSm@H|V>!n`?@&$!8ZaGj4c36l-;YadtK!+@ zfXmC6gi*bM@!xoQK<=yDe7tfOUiQbkpAqjIA5ZVx4C48Bb*^)P!}NYmyeU4O#+$)6 z701jkoK>1GHfehvyBv=&?O(v-V$Z{*UHj$4kcS`la`w--q?528m?)ruN&9zb#ec%$ARjr)P`+ciIX~nSVVmnqYKQ*QjYwtTNb)c*J8PWXmG=SmnEp$1`9!R{0+OcEo)a496*(-iAG^;y$V z|8wK}jWuY@%AeYuOs(2>_#E;a{Ko`&{RDpI08v-2{WQ3K9={)kSidm5%yY=8%q@QG zvYLA~|8b(buJE~s>v9?cYpi_Phlv#x(0oCSUXECRQ>``f`{{A%M0r{|E=G~p7k?D`W1RUUSA}IdK zyROd!uLKLhtH95=`=0|#@jn78+z-Hc;7j0q@E4%?kh~k~+xb&lc9*mFM|StD@^y-8 z#`pDmR{6c*wZ<*y?VP?BBqy7caA`a*+=Wm^4GD6Y$fFF&IXtn2&~?c_Qv^*M7H)87@o{newJ{ElG21McF)UJyfL| zwDy}TUB6zLYwh&6X)!#6;vuv=bW+XEF(ijA&)hs1=NleE@eo=b_Stx~Rq?Rp zQu|yyZ6cW?(4QL~43W(E9vkY$;b+pn+4F8Q32$|q`#r%!h=cx>Rz~)07^tRvCfETS z4jv1R09zuB-Oud|f9)aLvn0N6(>KcGdO|fY(YMgnK`%qwp*C%}2Tg#Ap@q-^xBqGY zTbr!o)R@Mfy&my2?fP9Rles1PAFM|xuGXg+&qhAX?w#gUy!$?BKOCm*zuyzQmAI+W-|Es2 zb^im>-{k?epDObLIx|?#O`(x65cORwe zZOI5{%-oR3X}MpKc?cRoPRTI>#rMvS9wcM4BUgn!$UB8?q;;H2pkcBV6scBKO)l^HnqUUI41U z&^ptR;5GPF=GTJ9yX!r{h4`s*d`;4>zp<8P*4A$T&*eJ%*k)~gF{t&pC7{;UZw4E? zw(jTqw*St(Hn0r--I%rbu(rR>y*8k*Co0?TYz_fOfA@*)%@ffH$SO;cdg>tzBTtg%bmp2&_yUdLVKcQ zE^CTcCi6ktKj!AadZ^(c6c6D5p2``>D(XyDKBX_oVf(q-cXy~OE`a3jc07ctKSG^r z8OE1TZsZNSo`>zLa?8PbtdT<~IfR3F`sWN*U1zi6>Ur4yCO3~yIvzst5bBi8Nt`H} z%(Fh8hwV3V^Z1nGAruc`E;+32&pkh0>3G}+9s-Zgf_Cm{-)ZgTuy#B*k5!Jx1CGao z36JdOD6CDceIIsME)O{#p9haXjxQuU&Ng+;%VF(oZhd^w@pu@NJ|0PUWY<$`GjsF! zlH>7Z$K$btNA2?*s!P@e>V4$a346HT>l_cEbg6gU?Bt%>kzeOq!S59qv^CI1=oM%u z)CL3J6PgUog;qdopbgN=&@QMA3K{@SfXbm|(4){Z&{pUjC?6v^2$}|!Ld&34(0XVS zv>j^Rj_5n?pI&=HF-?C}Qdcx7c`EY%sr))l_UMKQFpVIoR7ldmH$$CMZv*g{Pd|H{= z%QL9oC3d=!E_OQ6Gs;pS`+Z56%Hp&5l6WO6oc4Tfc(1Ui)ZQeH;>z}g_w{^pG1nAV z%3=hlbpVZf+V{2Prt_#8f`{=+@N1l<@*BbL0?JQuz7WJ|i9c5y z#k>6d_Fmy9SutD24r;uhwU6E)?;JdrcaOxGuf&UK#q(i(`LSk|luh08lb)4S7^Wi4H>&1e zXuf9R%P_n@$9`{WVqv-Jnk~cdez|Kn%;)39r>1J+xMo#c z^J=Q*Q})?)Uq%HI8aL5``Fk`xUUPD)jK<8Ktt@_vMPi2=Cmw~_6LA{>g$ksuuI*bk$A41Kvb>Du!YM~U5d(MLS%Xxyl zK2DabJWozn%qy`kwYtLWD~+FDQdMF;Z#5-dS+<~}C_S-oe&L+7{l1RAh13)N;_dmV ztd+=RfnF-gi^Ry3we+UEhxf~;1Od3GdUQ9ud%zpB7*#u2z1<1prYkD+nc+lt4SCOy zuRooMADe!O^iYVozHB?D45Q$ju7E#rW@(1Q8f89n~JfqK+p9j_6S6*ljK zP+qSmpA+CO-kzWGszfdi_2}Lqp*XJ)XB=^Q5axsdwqE%*AI7=1WPbmCyZ~uF;e7pS z$a57=N3n)ieD65JdH!Ff7N2BzO>xg;wNT~8{oaE4dn~#+*U7c#I_5gBx#^;-h^f5Y zL%!BA*c3m{!|Q|dCW%d~;58uW$|}I*sMIi-L z>{`E-N6!kbMV@1b6Q5>vExr^%7T>ycu@SZ`&Q}`k;_9jK;!nmkFGi`wFU2*jQ#GSp zyPo89u4fPB&bDCw9*52goP4|0`Phnd+B9bSQNV_*E4jLmlI=~=o2x#Z<>cwC$rtWO z3+8VZr!3WIuQp0A+->7MFccyHDMIspul`04r27VtZdF!u!YM)fg_ zG^Z2=5je{zxCSFL9n2Yj5`vadNm}@ERB~8NiAOH>XToG+~9O~ zk`i)`^H+KCKwICVM(k;*tW-X4!cX5&vE%O8jKP%z<{`RX%D^4v=A6iB)@_ak592y* z&a9hZqch6GaiH2^K6nDC^|VvKuK4?a-M}GWcW?rTeatXEWVhXZH=`$8&MIHxm~(2x z$y|s3RPcI`X+&l**cZGR6#u0lLj?0(4a~iHRs`A2xi*FSj0^uc7yb(%#hrN=M17gH z;OXEK?*4bcLHIXU_FzZ{(Lm@qbG{#_CT7vZtqP1@w1=~N2NVAsNW8^&yurrs)pv`P7u83dt+C^6zAMUaIgJBmxZhLAw|-6q z4+f`!hlBLd8FfGxft|qV;PD`9uso|~<|5{MM3>^H49xppW`guFw|xXG<$4BGy{ZA{ z;a5GQf6goiuLeKn?tdJtz<(!L39bYea7^P@;6nVr1{MA_huc8$RsA8Y%-i5~U`$4C z0C{f8tRL5w=gH_;&mxV0^c}Kk&~!-O3M+w*glJJXTNYC&fnx&yB+5cz4r8^q4{u2D z_2GQ3ooeEGeGek-*ZRqp#L4(u?b$ygMw>JGUII4bI=V4>M>iRnre)xv;77p@Ai6T| zOt>BFg8vSXHg48;dx0zPpA4eIOm7e!W@y`H&6PH6)=g=fX6=)Y>=`r>+$!2R-ea{U+J?ur0>*}nR?njx_~-6&HS!?|BihQPvKgl zQQ_fc7V7n^cQ5E(kEFgzId+U4Cu4bRVe%cJ2atmx(Su-fa5X4>eI9HFVv{oY;2Kc+ z_#!C#`v|D~J_^#-O}?q~=DjJ@dA*C%*w3}#9C!aJ@GJOB!N)=BX7n{M1NwUXb^NN= z-vB8)^ZpddPVY;(1)e4xam{;Bz6ySiaNh=>1D^t40G|fG4|31E@8ntVMf_IZ(zWWX z-kmRdbOv+^G!wdvkY1OvA1Xn0;Ibd5fmr**FT168BlQWc+4q3ia@0FgYTr+V{@fTn zPUZrKa!qYh?#IZda@Yj60Ds0OokMtRd5)%1)K!x{`uf*_@{us1*QM3 z;056CL7Q*o@p!KI{LMgitP;-VPxY`?-q8qS$Ix*yK9}86dz9M-U;X@};cuTmZIAy? z_>Tp*gC~LXMMnNVgOYm(I0pPHNS`5_YWAW2240PSC#dp%3tR#2qUoxDl)ZV@6J45TJ%0k~Sx$6lp5a7C<{3__7d?}ydLaGugH&#( zx!-zbQ}4ynJIeI!Kb`A7j@Vv@sw4TvZ*^F}eYHP*OTMRDk1pPC6TsCi~fbH?CPA~+^oB`@At#rwF$$Y<&{@ayxU(%Nywe{83 zN7dKtIyscMcAOn2<8Rr}0!WT|s*#I1S*9(1<_V7f6_IpD*_m&h*)eZy#=nYpB(y_6 zaEt{Fk8a?>_`8FLfyaY~gN!juJ=eE(WLH#8PF$1ZRM! zgY=ORW0A~E@C;D)W(YVBWNeZt1J4AjK%UEVc{l<6h-7m|LbB$*Eu4%0Z0Hndgb8EA z$#3I?@3)a2?RdBLo1&o}+fbKV5#|W61BiZ*LGPy#ot*5EJn!1pWWp4;qkcdup$*W> z&@QMAjchtp4y}V;gqp*&Gc*~R3$1|GK%1a#&^yrn=$eyhe~tiqWt?oTcgrvn-7#uL z?Q=Lk=APr!987UnLkjQ1)Mwp4T+^@5n!DyX^;)+>4(bteIrpp&OP`X>&t-i+C%Zb- zl6&4^PxDUo`3#;{XvoE1^8@nO2|9A{Idxz?o_)}7^~c}bY&_)5L+r$K8Hx$^1f)%h|YxN9w#zqga-Y@eo^ zS2s3~slj$#z^AvurMELk?+()YO;e>u<+XL)t}pv{-iJE<80r1w=%793Sa4}~zE*}SkkQ!c+gy&W#SQ9*hiC%qGy7MUj7#ObX($R-q~ zcPHsxStmW&x}C^2o$w0l@B8&D#`sB7Lm}!?T{*tbyAWtIjLnSwbb7IS4P8=0QkgFs z9^RI;%d@hEb>S{#{gRh;FV60TW#a3APj|UXmo7AMca!cn_i?(-H4wsu`TYdx{%9Yk zd%a6H%gHtEgqFx z{6=cY{i&Lvshc~bZplmC@}tz!J5tL&o%-k^*?s>WJ`M#L$2)Zr_Zj5-6_ZADiCyNi z?S8X89UdynofntQT24OKFo_Z$A6M5mb6xLH)Xe?Yj%Nqf$CcQKz?N0uKf$fThu3E( zCF2q!oaFbsSHt@St{u%ZQ1Z%7%CwINd6&$Yt2dH$Me8*6Jln9~nrj_37Z$8Ndx!4Sa6A(TFZmWO?V zm3VB1>{zUJ-bNQWcFnR2wq~%m*Pe-|Y@|#jo=021=*=HtU5a zfRpf_2%Zm~1Wo~aftQ25!37}e1LoaTeZZE4ZpnJAUEk1r6|Oitht+$!HMiA!skBz1 z`EOrng8A*|_1h^-JNAps{8aIgA=;us#`*jqtI1zqQ2Oo%GGsLQBJZrz+x4IUAhMf% z4P-a_8fSrnxIPACIBM1~&H&HGPo2$-1BZb#LE3Ys2xMO)Qw)v(WxPj%*Msmf@8}u@ zF2)Z}vyLfm6Yk zz-i#i;055%zzf0c;6>nH!0F(d;KktIz)L_|F8)3E-MAW-iPjjkCZ{z;zxSc{-`~&m z4$#pCJMjht`E9tmWhfqnIe4r#acX(YO?asMeVL>4$d12rw+q%;OuLu~s$CRW=ce0nd_oz#lga1%)F4z++0Z#_60(*m{AZ2LwJt#x7 z?_ukAM|@t7V~iYDrt`Auv*fa4?bwWS6(^MIYWS;aSAdd7a#6?4{)y^!71wEt+D9?< zn0c95n_CD{2ctzGbRT-Mw6!iDSpywQ{xL+KZ6f4e*s*H-gQ;4F4s!9r$fNv<9k} zUdLKL*It`q`)hvPQ?_I(_w6^cRUcHR>^MGmow}2Bl)t+`T zybOFAoC$sxECQbau@&YWQrHBuzk@9>?~a-WexLj0;19q`koIEw!5@JO@&6dS4%`IN zhRnO9GT=-2mw?!Av(NN%a2ftzfVY90!P~)Kfh)jYgLi?ifS&+g1@8g>2mB1U1*EQ+ zeV0|>@9=*P+zLJf{sCMA{x3*5n0=Ekfv@AY?MwR)qGP$LJ?^uiG0-v4Rl)Cbg5L_G zcXKL?uKV9Y|66hWZ-tlN^Yp(J*Z)?S2`-GT``@~6e@kA~zc$nnJD-TP_h4Kv{x)}Y z=MD0v%YO!237swd3x3(C9bgxCy&L#f{3n6%&h&TJ2ZDdYKMdRns*Z`z1n}?pr-E;R z8UyM2Ebt%rOTb+q_S#%mUHB*do4~ihTitc+n|bfN%JdzsuX5K{ga5*>GW$39Rd=2G zZQeWj1Q^9p=2>^0dKj@!o}s>(y(#LANtb$J_Nb^2W{(P8nCsHtL4-$EvqzOeQIbCo zJecd6&v33FqqPd{S=l;rEul5R=!M;V(EUE0-^!J)pUUqA?stEFE7!U{h~M;_=C{JA z#_IYoeq$xf?=k$QS1`Xv@LR1zVTSNqxzq3A{QiRbt#qX&UDtkDO=44aA+w!}#b#cn zFg+oSCFS(qRQ=TZQB_s6@6`#^zE^KhdN>u-{#OBbB&d3TF3g^g_Pd7T*FM(>kaH@g z@8w*o*(1_^)fBFa&xN4&tu6w!Z&e6#t}JsUm=9hBYHx~u+l0RX?1ukFPF6@Goecza#$=F?wr9sRmzwe*7^v~yFi>Y(^j#&Ltx+GWeX7e81XP$y zAnj>sYKQD7}aQ#BAYwjRE*Fh&kT}=7YM$L0RpFPL~k5&Qg zjv~*{XlMph1+9SAKpUaW&`#*kj+6;B2$}#DL(8Gn(0XVSv=w>>YD0zT35|wkKntN2 z(4){Z&=zPH)aGcyL8GA=Pz|&a+5o)_wK&GgdEoDdR|Cz-n%@_jDZ_)KuSp#3I`3l` z7<0?53F@ZSdK9+>Hx%B73BS>xZ#pZiUneh8Q*&-EYm54+btmx-?^V)KiT@z3Gd77H zg6?!O=p3i)Vi?}6M^#m%3mNqIbtuJ^eNbOH;&dy&(vr+!T=j(wT3;f3J4k%wBs=?X z8fr%IQSmJY$7iOlk8e3Eb<1E(vgNJ*Y%LzEqd3uTH?FT%ARIh1`bpn!<}fsQGsdPl zoACk7HPf2=vXgy5(lh=3v7qdI7w}v#ADjrn+ngEc4$5jB56%Hk0F`I@95WU?3A`5n z$>0)@KE{ms`hXwDPhVrkcKyJ6@uN>OmXjQ7@SleND4s2A@ ze*@-KV{2p&G`B{EL+aWZwWW-sbvSpGGJtNo6q`>F9--k0iM z{(Tj%A!jC3zx*0}58~RicK;6e8MMY+dRU1LHtmHTe17*gRQdb&)2w%yzb#M#c0cc~ zmahGeEH19yl^f~5{gkx#D&i@w53l}Ktmva$jb%NwC~ew6z0UJsKMo~6eUmxs(uUvh z@u?B&SXF1d+{=t{VosvOoTH!0JMNJ8mwN-@M-yLheRwbTae>^G#kFIV@cLfohi75y z=4YJ-IJjvR%-;dzXJkF{vz)w?5?^tBc%L7}2wCMIJN+Wz_3W?4FOwX9jn^bX7(P7L z;N#78@k)bu&GryaW!8}A<6ODN?cf>rNDYra5?7ytvcj@oqXcp1SulSYljMD(9=g&u zi;9V_xIVletLA6xs#1)V?_I>1NgV1x^!Xs)(pP>~oFemBwq&*P)_?EP<=dQPi`(T* zh$q-*ZGC-TsYZ(n^UU}wZ)-jB{3xriK1BjUd1DThZ%IPYO>psT1DzWzzTio)4i7DZctJ*$Pz!%^Ou`y2L#Fdu?9zC2{p7 zcq5&ClFe%or{c^jnO9Poe>4lr)Sul^T<^}HOi!eRl=^NNZ^ifLe+FScbp^eC$ zX~Fzu9-sHadY0)>>cl2U@qHZWKno!HuB+|w=I=1Vw_+h?&+W|C)pqEm9Xu4@$5FoYEVZ5q?#lH}j+g3+cyIL?&ijo=uP6Lgi1|r$7N~T*tAp(^5`8AIp)gAJfZ--^@fMy`#Aqs{aCoh<{uyE6MPTZ*P-JBU3%M4FCCI6sYh)| zHpbi6xSgHHcpV;!5tl146~+EO3mtx{o;s`|k#*E^#rJW1-C>&@DZBkZHlP2AUa zJQQB?Gc>E4KFct+-Kp(~8gdqPBsx_YsDFr0j<1fZ2gcPGr81w)Tl~>j|9_rZ!dr*p zuwD1S2+G;njr~0eKF>Kh->-h_J%q17itpnn&(pZJ3Q}M3(;&~v`-wrB)wS1(x7o$} zLl94W-0tGp{M5f6b9!p#`Z3mJ;%bej#K-TE8Ns=hR4#sxMlbJpz0ApeM}ANAxWRQO zK1_Yud40yClB=QZ(X>f7HkUCM5C5#kLS-CB*O<65@!ux?QIfa9?vFBH=mZu&%LXyaDGwRe=l-x z^Xk`bHoNr0ypALNK0f{3yd%FcdG^mcOmm%7nCJ1NdAd(C$g_Wm;oj!gr~QmeJIwDn zq&>=~9pu-i-I%=kIy_VZI$YR3&m}#5?4v(VM7lL$x+?we6Itmu{$2jL()M}RSsJ-8?~_UU^I_V1`7Zxl>HFu!baqFM3_qg--vfg zDLvUrpGK8SLwf_>O(D#4O_;{!9Ql|^8oz6TG`vmF9;sYt|E7_~-+UT-@$6)-GV2k)tn`zI-2K-$bxyV z7Q@vHeYA$U=KUZHSu!>F>0iv*Ak4mbZU__T&g$sBFt)PW^E#_3lkw(UjrHG)f0FZe zG-n}|kC~9&bB)dZD_*Qm?Y<|~%H#uGXINe}XPnf>b;U3Jvv!r?x8^lY4xJa82X!>$ z&th*RjNJ>3lRZ`C-|LI{gGr|+sQE-M5FMJcNz&KJ_!Yi4sNvfwAYrkS_W7Fvkb9gU zvS+g?XQR*lAY)6-fy{Gh13`PXsWhakBR(`PPUL zZZP~+?yNzZ=MaX1(wmU7Hu<59jbGi@Fs{q|vJRIaFXp+iQ{8=dnDC4fwFYg@lrcAV z@()JVcAP0g6SxkPh?VbIZ;=!^qCK-^e}=lJ|&b&Ya0&r+$4DjnUYKB>Pq?*LL;oq!)6CVy(H zlkf}aV@!B#u<;jzYQxBB+HfVvaMhguSNI$8i~n7q+BRV1Zp{v7_H&W<8y%_a`*Jo< zt^;+zmi=gheVkT&+nYuhyT8P95d2oY4}vHsaL*GrP{XM z-B#Nk-r>I81B%Ulkm4N)?SSNH!-jWg2hpp^tHRQzGindgv1H>~CLfeeX-h_TBSG0c zwFBu)I;Z{_ozr%Vt|j{wT$k*NK-MMA^Ocf)IsR_o?V#+H&5PPUS8-N%IwL+2S_ zT9l1yl4<+0tFrsDtLRuY&$JEMQ^|HZNEl=P2xIJ@%5Nyw&jQZ`&jm+-s*jYZDL3x9 z@=%WJmc{PMLD#d(U=4BYoXxmiBz3$H@eT5qbstjb)s55#dG$RW- z0X!bWewqGd5-8ht9ykP?4BE1&+n3mKu=PiMiS_&P*g;&oUtn#K@%92Q;`%9|t`~sQ@s9>C0WSnE1uq6K1G&Z?xqXgJ;b-Ef%@`Y0 z2;PE!7Pu6|UYWDU*ejR6d#P99_(Ix|P17?NlTDqodG*&X1WmJxz zvNP`!wdJ+DKB&sb?AuS+e^N)HY8r*!@u{{Td(|AGjvLpCG$cFq$;eDl)1Hyr=}`7F z9r-#im%w(-JT~j+;@27S?`V|`6hG>v(M3DM$J#>GS>;XolTDOPh@Vj{L@%c9Qd*|Y zz;iMBjPmhc>97J+{A->6X0R*wRR?H^=KMIk%=1AC_axUTS@SMK+C%2=_+{7r3Ccdb z4N@;N%@CM+nbEobe2{0POgcP!WX5iKH!t-~R_=c8 ze%ceMx;EirBU@WIwB?C=FPG|%U6+ozZuAy4 z1Chr#)g#nq`bxC{`R#ii^d+h($-5%#8nJzDIG=DK57j~O5Gv0?`_2mcMXEQsCOPbS zuYGq$KK|YDkbcBtcr*fAK815y(-JxCI&N+`sINv2q2v(up$-&aanHrtdO7S`Y;HM1 z9+E?T>0v6Zzl@gddDykp+;X62BZp9O2v4Slp28`aQS2so9(Ij1w;Ul4$szxElaE5| zXi>t$u6yP#+asJDLiB0IJ(8ji`n&)u@8z&-n7Mh#KB#Pk;vuwe5xIuLqulad7?7CuZIW)c%5254`+S;YBuFXw&*tNmjJg}>V zhfq9(_PcA@b=|J<<>n!KC^>}UA*?IMIIi1uI{SUSeEgv;r%y39S2k2-iw!lrjs;sX z8nEqqXwrtK5yq~`#m0t<-$9Vlk<)lo{aL=_*VXZptyQnu9c)Rh@qG2JWp5wE!>+~U zmR0sxyk(CitL(Az-P7>AB;o1#sh!((x7=-`H}RxD*=e(qNd?X%V5Vb{=d z^C)mU`Z^x{5+1eRX%i2-9%kP$kdHsClczZz13}t{vA0$~s7gVFy=P;&=^)ch9^AwXYm+`0npfhI-+vU%F9T{<1A3+Ju2a0%X}x- zD6eR?21B^f>Tqy9)dAt!s334XTUs1J0d0d(8!Bc`XfiYxS^=$rHbL8%WzZ^U z1N1Vq18UKgFwi)t99jmgfi^;0pj}W$8bSdy8JY{#Kr5k*&}L{C)P_bf0Ga^Jgcd@} zq1DiOXcM#@YR*6<9~uNrhUP*w&`M|>^dhti`fqW~5ybDOT z_6aXCAHC6+fy}Gn8nT}GG`#BW0sA%UEhaTHzHq|%`>jSG29B+j8+odnA42oGm0Ci|#wVtP4j*~Ceig*?u8ai@Sv zLwGnAGUPFi>sI%*@1s$j9}3A`Kpe?&q2qNCs4>WN!^_H}cb~0I_53W3W^1BTk>Hug0G!t3~Er(V^>!D51R;a0*WcO{b z*fDkH-uQUuMqVch-c;*Gv_a-*S#9unmxlUO?|7$2UiT(Q!`m_6&fE9|z!s!&noq-? zcesX+uN99goL{UH*$uH{%2QoC=J)(Ixb{zXoVb>xJ;tX!C0&{>tV}mmy1t#*GK#6C z)`jilZ}j)7XF_%1!sE@n$Bwdny|!f#o3$Wu3G4Mg9FJX&2Rg_okIcPkbM{?Utr=vwG;U@pFWaNlD@d?^JVpB$3~JVlGJ9{h@c4Q2v+G&`tTvZu0d$e~!r4gL??9I6ho> zzBt!2{Qrrwjnhm9vd@5AO5U!llQ&*xFtM=mss{B3($Vhv13h0W7wU8d;janPZR9rq za;59fMvQPa?+kD&Dc5#DQ@Gyx2;1KD43DZ0LkBonXTFbU#b_KWz7@PQ&N-4@OeBdjFU`L*esa+f42} z^njoAz);5Ifi8_Xl-`r0Z!#U0^q;ow=jPGN@eoQ6Li^_C+O=@rspjfvoYZaA0ln8n zt~YV$cg!LWkFYimx)#^&3I0tK9@L<}~~4!@xUSxVv4r&wyugeI+;?Y{_n%9V_aaUcDf_ z!&UE?>`Dl~AEbSH|NduvXRae_rAUW6nz61ew*rH@md`$r!i%pTdtM^N;1p{+1=WIz zkPnT3rbAWGa%eTQ0eS`633Wta1<+_IZXY_CE^kA3xN@Bkq{pQ^dCe`(@#Xr4w|J~1 zfRCrJrjH+4T0Xb1G+j2oq_U4$H|nEPah2w!{)7p~i}e{3gyV`_&n@-B?!i{FCib!- zJ+Dk(rLEwj0wb>}EGaFVWgfuo<7{gfws1k!+>hA)X_P*hJZ520y1c5SY(6~w^JQUp z^ZjS;$=+guv(lYiS;?BXeO@<=Q|CM8W~|}ubr{Y+vp4De#?bV+(!cDGx?la)SOl9B z#qD|KFq4ThYvRn7xccS}B;f6J4fo}=X6(yN<7l-jxo|&Od1H+xqdtZ9ZT2Nmuvr(! z?qNTzO;lUP1}+&7vOG*1(_BnvC3J2_?M(LRL1-D&JFA`CDZ`0VbD2S%HwMF8Iq+v+ zYC!eHpJ^ZM5;{0Yu#omY(~T?4`frZ&{Hjx)$1)dJ<>=ikc+BxUg6BQ-e2sr5Ams6) zix|pL1dlS$L-UXvXX`^AZK&&Vp&Z5VxW@C49J}H1Ch>YeHs7)4md1%?NB5g+nE}*m zAJ*nCPSUFzcCcI15MP^*+L;X!~Hafe}>&&d1*$*7~x!-!iD7+6-AG_Zaw%(R?J)Z4DHg6kc z$Lh}0eBO&)eQ8M;@8*#ATYcV5y|sC7$n#0kpJest$G5w5LLJW~%w0YmH^*ik8niV3 z6k5a9DV28J{CYX`?k2e~za@mf-^-!=+P*NS9DAdK9WL!q2Un8z8lSe&fnG0`GwBA+ z+xDab&AIC8;40);=jAXu*u5N$(ScuU+3M0x1}X?rO4?8Qw55Yat_$SKv#;lR_mf-) z3+C@U(*04GZX?zOa;53##~WOlZ0RPBF;(7HpJpTW6_j4suCCYM1gCkJcV!C01=Hlt z4xh&l>ecx9vk8Yjnzh}CoI~Lw9zLFbp1glBrVO7=ZpiwD(~+^4{#kh69y>bQ{Vy*( zSdRSd8z8?1XwT=Fce6)6p7QlP*C%tm3ZC5^KaG{8mjOY(3M@J;OuATe zL;F6sx?%0pjJ*6a2&^*kX+A@m8c%*INRvzTPE#tWZ<xw1K(>)u^W{3F`cuWmJ>j-(``AFuoQS%EXw=Q#T* zSt^iYyqCjv6G7#+^?Eh(Ki`6VTH^VzDx)o2@5%LU@VU?N&|E~#m9czcn*3bE$C*K# z?u6;aLWt^+;&5q?aaOoE-wxs^k9$hz85ieVjFnG^`A5z;D*svanJZVFyc{*?D#qrXMQy*QNcWbBk)=o;tm&aOH9$JI& zu9EV&%gGy!E~(UXGc1sLJ+GfFV{FDRM#e9idgVCwrZyaR0+0V>cQVZ+qLUks%P>vgr;}>2IuRk-;39Y!+OzJWB%(ml+ z9FLQx;?+VQ%@xHmF9MtY$xbhcV9lz}z%yir~TuZy}u5NB`X z_zLkQ$D80#$gU&g-m~bydWZBOR2L+)XGXe2`K;S}9(K;2`x~4Tt>Gcmm_=xLh(ql+ zIPH8qw;Zgk8XiK)A+$XDGoCmtk;BfVbIZZLh~XiW974-O90n#l?3_5a9E{rx5254` zS{}9E;FM17d^WcnjN=Rsq2v(e%8Q+s#*yzhnh~}Dk~_ii5UMH*bA6N4&M|Ax&4oOA zIvzs06rD%T*yl|2WX43JkC|MzbH-SEX~yO8cbfa%i#QsppA0H5y+O%y3P@cs`%~!I z>`%4iYk_usTHga23yn5@)uC~ao&Uwjd{Sd#=~Avg{8SGIxOB9CCA|y;El)kad3wT6 z`)GDP7VEoN#?h>jeYC-jpZ2pf+|d4(Or-X;B>ymwdTREqP6E%uPhQPA?vdbV{E&Ih za11yWKcsw^=T^@F7vrA@E&(Tjw}F$v&w^9I`$6<*zS(gB_$~Ywf=_@Kfg8Y!!S8^V zf^UPDfi}O?Je=Qyw9m0>PqT*lqVFK}aj4(+Id|<+Si%Vy zx}U+X^gaPzga4D@wctu{5qKZ?5%3Z42Jp+E!aokuf0*yGWx#d#g}(rG|Ci4HzhE`j zw}I4;%>M(aADMUDea>Z?@O&dogO18)ZTMp$$U$hU#m$)T--9|g59EdKq$Tk-Ra zF1?>3b2fMfc#gZzS>Nbm_|F4B4o-Gh>FzIZ{w3g@+^+%e0zU=b4c_DKe-2c7-vrT7 z=35{-%4`Jh0iOat4ZaMbv&=6*h5t2(?lP}{)ceeD9MTb)`zcV@c^Pc93e?N+9{_uR z4}!;oy07=ip4so= zcc!#p_<4CQ--A5q_rxE@w@Yk%FVAJWmB+XF%|x*C=vZ~xxHkNK(f$4+dZpN+he6+7 zTj8fIWSBlgkAkwvDxY@Xm+?9Kj`H_y@DLEY z>(ad_v1#IA=iIq@JneXV*YS8J;c;OW4?Bm>&Eq-8<9Wy9g@niSEFN|~oSO$_X7chw z$Kyu{kJ`LUBQJKI8dEo{I|vx(e!t{+ylmn|(a%7Y@6SQ?rPwy7pDE~B@1m%E?pwU= zTrxNBUlCWj{cY}a{4>i8GH-u4yyf}0R992iQq190QgVvG>~zFD<_5a_Rv0eo&CM!%aFJB zyW5i2&dYMk`!D!P7ykxZfRaP)>RtSjH{xvg|8MVn;H#>xe1C2TF<{U{L7`#|7%C`2 z{t<#jn?Qolf`9Q3ZLCCck!XaF1cg>R7sVDVv^b?R*ufd}VXLjq!+F^1ROeyGj@n`$ zyy}d0Xh)~`M*DCI9c-ne?fb61);{;#lY1|hKX&HL$D==1?pbT?z4qE`uf5NIu{Qw~ zdyAk^dk64a>@9|hy#t|QFV8<@vGKdhdGFUb%-|>@9!{1sb(izBelN4u^`p z^4(Ff_e0RAz4HB0v3Dd?{43ub75}oP$YQTPtDfoKPlxsrdx6;S>k|H9+X+^WW3C2| zgPq_FF!XHJ*x+i=4K{&o;8pMr7OY+GtWv+6Z}8V)yCkUDqHX>LGG)Hbqqq*6t*!n#?5kF<WTaCzHm7|*@pZMAbMWbUyp5$oWt%(_Acw{)AL9@hjCucY?kBaAW>7)U9_^S zXytc`Zl7OtM`h6+KQCIfuISEB6@C8rqR;>CRG7HyqZW&L^t*Sf_{iCJIAd>OQCS1ED-K8(yQz7Bi8 zqxkS)d_Np{k@fu1b{$|^#D@!(+|bb$f&vBYB2Mk4*?*&|mSKNDB zqGRo4v-_jYV*Te4?EaCr`@$oCPo(cljcx4{zs}bDmHiyr3ASz!IvA6L%CXhS+}|5L zr>Hq7`#H1|tqh?uFA3E$GS4Y$PRVWueslAyP_aX(mT_iK#l4fhEt(&)pNHeTge!w1 zO?S>>BvjT=@-1_rz6>4j+3gr*We62JgvRZV`#E$xCfwLWOunfbY_FSIDUj*WojVa)Z@*>Dz%f#)87guu&>DWX8l7eI z<4}&OQxf+g_bDi4q}q(mH`)&6=r`336}dj>WPUF*DtS!9cH`%6au z*yvZFQ`vt%ROFby-1$4^6i3Mgjxt`|`Mjs0BKLi06MBDV^an9_Vy_ zzi#wRqrZUSgB0ssC&zl$od;w+>nP8^I?B4!ofnjIIa1zeC_YP_X_W7Ay5I87q))K_ ze5lAZLud1Qn$a0X<=oCi>~DjL+SQ6}dlxUdC?;6rpmCN9di< zxzMjcMefg`SMd8UjNWJTekgsL`VLg&z6-sY-%lFdZuDvBC)xk^P?7rylvr@*fQ0^& z{eBgC4Zq(uxr5M8^ZU0(e`oaf(E02iTBPL-hqm*Z8v`6Y&FDxdVn@GRdEL$|`?A>=-SlGABLcpmr^ep91+wxtU?h_k?YPDq~rkmpFoxZl4*ZX3{fH(@<5 z$Gkji3}jn^J|X4K7fU@o{1(2%YB{u*-?By|FQtY-Z-LGQZ8Gx z&XvgD8Lji;TNcZ=caFABzkZ(W8so10YUTV(ESKEv>pX%ry0lT&y1rf8t&VfT8r(Q3 zdC=FvTGyI&)a~+hj%BWqZKx9W?<(y2v9I&;be)HD%p7mqCadS9NIiE_&%gM3-iNmN zW5^MaIzLaH2YsE9w#jkNW^61bS&6)tIpux4|H=2kqQCp;CrWEhBw=Gnf53e$wA= zAILt*`Ldmg&T&w>%gv{_!_B8054dadr$Gm?a@6@l=BCPwc}T}iLXH{S7M+JU)^_%B zEa9%jR=Toe&buk23>^phzBef(TE>}HMiumAcw@pcCS{bNF`j-$O0nAJIc1z3 zmXUtnrua$YG5b0FbFB->rXajvq~uu9-3Ub9%N(oczho{g=)N-Qma!&N zk|4g$@aI0Wz5jz;R`OkR!nPgZ^ETq6T=i~ug=e1AJ|6jJeZ6u{J5ulA%*#@*`bocS z)+7#Ki>{^kyJRQ(!Zt>3W7OL$I}U68k*%%%{QWkoADM9DSf)hc%GEDz%~Jo7wAr6q zu9gJM7H#th)cHF5;%)Zd7dxDFWVZJDx;Ixx zv0w6A_JwWL^XM7ZM~+o{H)W|GTS~ZQ8LvM)kAJjv`|&$e787i8?CrOcsGIAF8Fl-2 z6CG{6-sc;v-l)%6AC%Na>y5;;f1deh>-RBMZgX+8e%4^T8DR>lr6q} z+t+8Qn{yB)l1uqtj|a0nLw&Su_s3}mtbWPwexv_OKyN^K~etgu+!i_DO2U%m6$oW#&j-&X-S+*GQ^~!he zd5-qD1ZmbnQKYZ=B_8=LV}UIu41Mk{5h^M{(^cTfP2x zvXn)NY@A~cx6`TjXTIJeJf5^VEnf6`nSb7Kz12xQ;l?pm$#~{>=UeKGf8#8C7L;}W z(T;y_M~4OThR_Q4F7pz(uhQ9Z883IaIr^ow(2C}+E}1I^RBVv8P>z)0^$J;|M&C7) z?HzU}1yvPST<+dvGhue;;-zBZv3Re+Xgf#2IwB0U>6cecy`b^hYrB>#Xz%K+rd|5% zZd9gyfqsK}H|>3w1*Y`fX7iKC%ha7IpJctP?*sevp{|*;&JlgdU$VrLDUtQ=0688# zBf-_)Q$;bwy+JuBER_Q^CE<@++F53W2^jM4|u7!}*)n5+t#Nc|a)_@=&{ zNWGI-Syi<1-xGI~Chlk|T15hn_V3HqzfI`)Z8ZJ+w6!6~oo}2Ui_zZ*no#yS;*Xi^ z+W?psgB@0u_*eYG8kQ#O*1kYrttmDM4kwRF9MWEw&r8Y^+`68Q+r75%Xz~?7&qO|f z!^DO|wQD!FKS&u(hjRy}D? zLFWT#5UC+Be&rK0b3q;2)=O9Ao8 z>`2?h&$-&>^&U69>mz!9NT1BbK-u()vi>~=pR6pqy&Xvj1UF&Hg`* zv`u_Milx=MMe~caJIeF9z?Ub^oPx|VR-WV+{>;#c=NFl`vXv>ZbvW;iu-J0%SR=MB zOMI><^~1!`1E%L`t)krxdVv4*YUZWW3kY8{v8d6 z^IlJDhnq(esk_LLE6*%id0Elzow^?M^Io}JcxJmqiTn2~+VB7ll|DRF{uqf5b^y`$ zI+7@(+8yFfvhZ5%!Lk;NM|w z5PANL$?Mu`JhJNn_hAHgo4nXBYn{yUleO$}bCl#G!DWT4dBiX1NnA=FRPlFWe4;n8 zvN5r8UQude$?fYB^8Y^;-Lagz_oZClH+>i&Ta6O;@7a_y72^)oH;1z}@wSPbMdg_` zY?g_VP5kLMuJM)JckZkoz+`r@T)o%;*)fW6zO&Ox^b$lB*cM`Ti@__7@7>Mro zbIi2Eh)e0qbi3|Kq@I=t$ZS_PmB@Cn68G=9=uP0-ojno^yVYZ)V9BZTAG)eOrO;?!*2n$`F08bEtMdj!q>y z((W()2eo^XomjeF8gJV~+P$N|c6VXFd{a#Hy^fD#SkeA=Ibth2hawLNei3Q2jJc?M z{5VDQW}_#*D&>Tk#G?3D)|t8VWV{wM_9;yAp^p(s#p&bJ{fU*|%gmEqVgy@s>{sKn zI+)L5SJ*f-$tC#;S<2hI1 zUx4hj{5Q#-VV1EjerBMTq~1#K|H@yN+T87vmzq5Vo^z}S; z;AdxtP_aX3wr`#8&tpfl46#FgXZzOaZ>bFj{hy8fbYkk?vU|H+R5GrK|joTqPMX%ST zzXK)tQ^ulfOvCQJFs3DUUl_T=l||a+-lR+1eMv*eGIF1i*fbaDwK@IPsg%LtSa_eA z+yizTzbmc0QC8k)D0RqrFUr;LU`x62Z=LEjx$L%%L08KD2vp*bl;&(5>&m>QpRLkH zz5bRxSCE^W|Hy%EY_R6RHn|^bLfBp@L$9S}FJq#WQEg?^gk@xYA5^c4Wxw}rl9kZ_ zWn8%X!_G$ABTlBhBBD|gz9i!)485ab>s@cf4 zgk_wVVTWFa(r=w2mXUvFSQ!^WrN4p#y!6Yk>!Fg5#9qos&4J38zR2hmP$};!``rPR@tTCnnCpegxal+g z=b$406)0wg08IU*X^qGLy|mn5WY zcduV`?8q3D`A^26_=G7sMH}5%!bUl#YQB_j$;&tF)At@OLQ$`2B;554(W9L3d-CLd zSN8Ex4pUtlWzG>Fi|=L5#c$51)Z_S7Q1LC}&iQscRCBKS@M3<84=;y$AB!)q<2Q#o zsT-lvCh@Jb=@zK8X*pE#L<%Zxx(h0KVGEQxQx8I=yoaGO=D!1#vA!KT4*CP=+0Y+C zWejVatFJ3qCCRsn<(ne1X@8tUJ1zq9o+D|M*xvx;y-4z|DF2O-kMaBR9CGpQOWeDzij0cCrClN?c>`a{+Q<1F>r-M`EmZt1e0Wa& zW6(N&YdeSH6EYRsDR@uYcblUecf0*Q-o%fIVqK#&@weDWe~0gwkbEOHPKHXndD|NK zEpn1m#74;}^pDFa}{c3v9}c(wO4YE*ef|l?41dfnrA`9-cLZq-q}#GmmHB2doO~Dy~Obm*;|P*E6v{9 zC`bIucnF4yk!+VyuKam9^aQB*m+|DDuahxHZb~su+T~I zY-6Shi9?N-xJ>3)5r62p^MpH(E`A~h%Qr#YwuJiS&u(Z5RN60N1zTNi>V=9Q$RjCY z)$xf*_pYvwLT_fj^rz@GL&-BKeCwXcx*qx&e$!_6Y!+>H&t_4llc#L=uC6aYQ~ZAq zbS3m_&^w@8psS$jA4Vyg=9o>4IkFp@#eCjL8>{W8wbcjF1aq@)+< zEjO+x^Y%`DSMvJ?qdidZ4YA|)-w7QB|MSq%&~HN-o2e(DBKH)OGE;v8C10oBhB9VT z2cc&{e+wN49YCAThRSoml~CRfw4)yAFCfv;q2IC}Y#b+!Uye7d*zM?a=pcRd6QW*S`mzo-+9_QxND=fa}&QWw%_S-z6yCg=bLcnkSh5tu`7Kb8}_=k zRzjm~9mQ{%D$q;$MvZq_$NAss zc$a$hTw+4V-V?il{SGJ#tquBnsT1&@QB z;9W43pl$+JgH>P?cn-V@$_UabFdKA$wO|X_0rr405?~dW4LZPDum$V@dq5c-RRv~) z4zLz{u>IjY@O!oo4Vt*WoA_>HftM_n<2Bw($mA#V?NgPul3eBYy~ME4H3OBt#RM$B zA2NCmlZyPl=0i#!AO_@j(&!kYlZav2|5YG#ot1yC(bf^VKS6v7|FL084`QeMe#+#o zG5Q2?D*I0-aS0tlYzcjU@hP-oq|$jz(DHj7i9qOxN~0`!pB^Zzhw=TFW5mzw`yFn=#Ke-1MHE6jhB%zyLDf0Itqa^Ew5y=CRhF@IfZe!9o} z^t82WUZv_?YJR$=NPj~`=7V|ddlMO_2J4tI8+-39uqbrQg@%zn>D~!%DI>qew z-vW5k?0(4NFv)x*cJ3-uI){al{2pa=3}ae;AGC4tg3NeBgU#W5jt(}jVKQ6U6 z9AW;NWAgV|URvtMxzYXBua6pCYP81aV-}}NEk8YK^T0au<9#-6R+xV)Z2!99YTrvX zKF&8kO``Lq|6d!S^lppCC(OQ9i|@BAZ?3R>bf1ljH9o(Z+*2ku%jAYwTvrU!@-H<% z9yC8ZV&k&L;`2`P*HVkC$Bgc>dTz7+eAL?ilKJ_0D{qdq^8st;=@u84TEE|G^dXDO zf!6**v?49lOlV71oZ2tQ`Zb9e0}jb1cu+n4SAA?jAMz zg0*Xw*)z+=@gVc}E^F@ylYh+e`BPS&zvt~~YyX|rKclQ)f9m~U?H_3QjWl=Z`%mbV`=dmb_W%&~skb(+fG zZF!`^>_}Q%=rv)^3t4_zI!fiAFn>K}aX8HUak|y}n%TAA{5{a(c8!%g$@jap^IU7+ zSFL?XYtOybo;!WH^;-Wc)(=maA8KrTth9b@wRZp1+Woq-Tx) z*E!by5f(=^7S9#qwY(Q>+^jJ=$J#r^{Qj8P`Mmk}9`kR7)qCl2TFxko%NlFn8f*7B z^H-Q!{|ANhLZ`t_0*UGum zXoa=!8nf#?tM5@O@1XhhZnNh$ZgRY zf1UaNO`C`AwsxF*w#u!s^2S*lK5g?$g~?ageD9qEYv-sa-_0O{Q46}Z{$H%|Pt+PDzTCtY5%l!6)`R!8cze$!KMp!%Evhmw# zSirK%*>`R*emRkQlW&TRqID5?cXQk1B)}CGFr|(-o-EH(5qvMR;WbK_| z^mVK6QKPpRon`bI^Y=XS=OFXT71pm6=9hcTPq&#L2@B`{K^C8bY&_07SNFG@pN<%5RdI9KV{Tm#=sHF)1y7rj`#M)%A$7A4^LsjbB>CJ~sH2vU0^xb1RexC zz{_ACco)cZZTaSs^xY*u-od*F^nnyu3*=i#&w&@gUhobm#th;lkayIM1@&MykoUuP zfNp@{!3MAyJPaNOJHc*n0LaPoGB6xe0eKJ4R4^0F1@l1{SPoW!^+3M0CGSVy0bT}s zKxr}U0F_`oXap_b60ivLfwiEjggU@fupG#{Nj8B8!FI3%ybSh%cfnBdN+lQ%8bJ$? z^P7vnMz95J1+Rj=;2ls*@6)kC2j~X3g4JLH*bJTlyFoR%VJesj=7Ra43#YvK)*AV?hVl3?2rLgPmYEcmo^& z5=3QSIH&^EK)$Cs7t9A;U^!R?)`LypL9iX{0DHhbAm4B;CBF{^m0&z*1TEka&;}NP z6j%#3g00|5@Emv%>;=W-#<8FtTn#!vH@FpS0Gq+X;BoK_*a_YM2Y_6pF9X9t6{rTQ zfLwQZ5Nre6!47Z<1HKKc1slN@uob)rW;1_W4LX3F<6aFmfX(1x@C?`q-T((ca1!-` zDo_pN+10sVKIj6=!78vGYy$Fq#%*9b*a7x{ec)Xn*N)o2BG3oq=AgA;BiI7Af>*&_ z@D31RGOsH(9UrLflm%(s=iGjIxms>r zl`-88xzAkdoyz>D^`>9C=j&6R=_IA?snPD#tk8Z<7e`%Jby9lL!_c1Gvo_O8y)xUs2uN%x!lb?NaW>(pWT!t%v8qth|7 zeQ^h`ukm9<`KCv1@%ij(#>g;vnC|jr*IkxenCwX|UJz}!@=Y(2S6)=TF5b~J^TMtr z*R^-0eWg6pp)j8VSK%1yis)S4*RyOvp9Ge-Q)Nsyl4BYN#&y#=%5yq3)#MnT`?luM zQJ(3LU%bwftfez;OxL44(~0Dnde+jzg1Jj(E$+LduO}_9`%RuW^ZE5bC(j4QyO;Dv zeXaXVo*45sjbsg;%O>TS&ZKl55`!NO=J2|(i;~Onu=lU-SNS^THJ?{y|EXEx_*9*b zYO0A%FS{sAB5}FH$zJbXgqkfbm2Y~)rEl|0=Act~(MDIYy*C+)W#ySpM`oKx z1hW<|=t!i+T%#AYt%e`QJ9Ei>kr*pZ8XUGpR zpR{9-&sA@P@~ng8zUo&+vmC=tV?;Sa~-+Ew|%$M$@IVO zGug0yy0~Yc%4}{^=psvOoz3w*Xbh1I@_}7D9>~n(>ig(87Ds^OEGbqn=BDrl5=SZ|~ zmM&wecHbWKF|0h(VNm#b zhq2ADGj?$>r@)zn4Cwd^l<`NQ%-OsCv(NJnHolH;>bC)wLO zr@i+^c7=XXzS`Xp>9Yf&UjO4L<(UqB=6%ye4$-VC76 zyyWGlI(he^@Ckd!r{`F!oo+s_B^IOd6*+ufVKJYK^pW_s zBFOIZP(Ct8i7&PM{^Lq{+JS7l5$vZmhabTh}K?lW29EZV0hIA3JOjQHXN^TmQlAFZZrmG2*y z%F{X)MEd9%rz3IDUq^YSgYW$Kq48Evm1nSR8Fa$V+x z*xE|>nQY`7+uqPtVvyV({V0IX6Dni6jM=cC2l#gS6MO!QR64%o`cBvvj9;(&MyTu0 zf2EJ4eZ4AU^|q&V<(iN7W5mDqQhl$hGNyZ7dOW<5*3Eb!zSmQ}>5)IYy&VI6o&8^C z?{!tibP0C9rr6_jGheRmb(Cj1j7+c7#@g)!S@ULD?GIBcRor`Ni0Auk&4yg8}kAe!e?#&n6p88*+>)32Gjmn3^` z>g??$;q_kY^5(3?oqe6|bkt?Z-X+U=79{7iFK)kH-XNGBBU+A?PpnR}@^7Wz3NBv; zE@v$y%gd3W_m`GoWfRX0R<>NQ z%Bg-WOPaDpMALpvdHQ_lZ~u1Hj@_y=g8g4Go8pfV>n|ymyYsGhjoVUH@UwdmyYsGCvv`` zlyRR+M|q~hdcwz3%IWlz4heWjUsF3$fUNz0X;yV`bsc{2_yL|^4hpT6|%mvv+z`YLDojHRnP`!KL?r|9)Hm9;V$TfQAKrt_2$#*xaIKI6&jPh}o2 zL|^4hpE=6w4`m)NL|^4hzay8qUSNAf`VNrmaFoavJXd_Em}vgpfN zAafm~`%OMF9~KYw^8MFJ$}^qFd?@!&4Rq&u`s*mqbRy$h?yXY0BFCRuj_*~@^dsYY z(J)_UetnfQ{m8M-Zl^DP$vjB%bA<9uFEU5Ud(yS7+4YofdW>T~w?60eq&^ou{_}O= z_*K5?F@C+C+}ovo(nAS9lX^RqZ+eVdzpi;Qs%IbT^E%2i9mc9ZKCd6{>x%d^wsue% z(`B4`JLMiS>(8v`1e9-jj89)@^$4$*`<#HvsP3f5+EeaJ8yH&?>pqi>tUZTvpITg2 z_n9nX&aYGD{oip}-Dk3lFYo8wPB!~F2IZMfWQ@(_S)YM9*0#zs9mbd+$2*)(|MjEp zH+jaFw`=N1se`y0oq=-ACjOB!pCIw6k2#gK zG8j+3|7D$YlFLu|uT`I9YosJ?^!=1_x|zpMx=-toXCA%mo-DGu&tz$rmzC?%C&l7Q z_n9pAd)bGx$m%|mB?ov}X)EuJ%(z~w`JvdHQ_lcjBb?8&_hr|9u>)_ZW2 zZ+f)T$B4A)lsxx3oMP+R>PUOV-T_(KFu?jp-f!Z|7ugbL7r85zgOsN}nuL#hTV9Ro zWVueJeA6RO`ns;BEm~LqIY@b?Lyq+EzBAOxoEvq&$#5?CP%*eg|d_^-OW^|v*Hjoc}J>t`ZjQKq0;Z#O-tI3a1-Qz5V+*ds0 zdRHv>i|%pO&kYgXnQnjVTzgDcWz1&sg0FY2)0KHKcm7uy(bjiWK z@1-rJ+TM)ofx6%18IN8b$0FbVoRjW1dB&t)`!90xZoXe2*90OnYPibrxlv`Uj7Wan z7uKnBf4(wQ*2-YKdONy^J#D93cVsJqHtI2m%32xi=`s$uGNkQ?E<$ z^J|+N*L+n*b=!$uKX0vax-OqO&tFSJ7K;3^QiJnhgkJk+4PCj!zr~6FS9W&`OCzsFB3*RrBqk6GpMdg`JWc@On^;d>pvK+IhjOj8~yqz1UGaRly5Hm(W4`|@Sx*+{$koa-9mbWfW24jQf4)lh zn>^#lueHlqGZtq%U*%?DxmZ{mj%Ag#G8j|7j18`ge%FP<66B(eAD1d?WiY;c8H-r^ z75Bd`l(h_%)iUJ%3SUN*JolZa3{qoghss(Rj5%M1d`G*`GE~;eU<~>)b{|F=Dr;ph z7JV7}Sc?^Ehss(Rj7wie@kxc3p|Vy62Tm8W z9f?boGyTYXE6>B;x$a`EK;w_H5=o*bz;Ykl%oX}>eb5xbd!=R?MzPY+q?pcv7e?3(}r3Kx3jstSHrQa3Z^z>a@+t50FN?nascZm9$gWVk0 z$#$6a`KS--T51}q>l;{|=$5~I=eTz?iR9I+({s1apVtbXm#7U|YiHE7R8MIssGhoD zBgZ$gy-WLY*W;h*NH5=NgWAUW=DNw#rm24Z_Dl?B5_7Wcpprw^6OZ)z>gLJKt&>@w z%9g*bbAx9r&d27>8NN+9GscXTNi!N7S~y5JWSupEocoe(J2-UvbYx9#nNmNwvDLE0 zq1ttxdk34;ace<7;RG$t`vDEz>MH<*(zc!>GeO zhjQ5*tEHx~VMa@Rqm8OVwWU7T&b1=h@gEc{2-Hg`8Y11_c<*%b5=&*vH%i9;}HH%xm$V@vSQe*v$`r65j z^0<-P^4B@py<1TPXM)`AO4k|5uoI?Uu;AKj<#DO5_7&5++IxHJ8hEgKa`WVdDb>y9 z+5Gi42CJQwyff_>)n5}d)HSp;Gg)iF`RlI^nyk@J7U=Vg_UHIU{RJJ@Ud#KQTN-Mn zO`6tN$U5>P!Q1uDcJ;{&-?C0oJq;H$%q zcsNWZ8m84Wv`lZQE->#+2v%wJg~vnQ`fGyb#>ovcrq>skL(UG~u==~8<_g=xcfOJf zmhrI8irNV-hfJ7##jKW~wXUUkdTXPsXU_fW3HuWPCyv-=yMN`M&hRfOPxhDD9=`Z} zjb{q)>O8!TJiKmr9Ok$!UgquWpE9YYxlyNrL)1|l zTvDV(uBL*5>u^V1wbN(RG*4?SXl|Yw9(&KFy4>~X)g^u6i3dj03#it{#v0PS4)6Sa zn;yJjfjEC?fyd_5mGJ&k>yUUGrgBW_9TDfr_cPYzC{wk)H|PApKzy)|okY z&G00SWsB>56`pTHoVOV<1aCi>h$KZV_2k!-V z7v$g_&vmLRbMWLF1+u=9EpF$%@N(H%L(cTE8`oP2?-VVvUzvXj&&O_D?^&*6`9*h} z_b$AO9AyqEPtP53y%F&I+!5!E&Z9RWkKW`wdeigh&4!n&4cFx1EryrNpR4ldeKim7 z>v?$Jfye)Di~HGvMX&XLTN4GdzFJIkSCy z?;W1ElN20ol5TIv!@D^T?{;|OtfY9E-^!!+ojkn1g?De(GP~USyGiG6E0HhM+a@{k zdKQDEWw*t7OW@_wyE&&G--U(eedhJ00`b{h@cj6T^S+Wt?=SM`$$Q9i)hF*K&sE=3 z@Nk>k;Cz$aejEO;NcHC~+e6^#5` zjxsA)Ffg^aEv`2*5AUozyxKgx^Wo|GI2|`qx%B&$d3a0m@Z{a;xyrl`UW030|N8zR z4^O@)nM-eaPF~;rE8zJ!D-HVYx2kDh-~D&y;oS`nbKDl!lXtzJlY{qTcs|#~_5KAO zVVJedgYdl1;(8~+@G&3foe9skZ&0j#6XE%B6z4TY%8c`7<>7rYPkjsF-D2&Fm-$n8 z2XgRsai2l1HvAOc$8+eN#r*}-bMS7+!+Qi?uKJ#UH!Me)Kgy%`lRSFAgy&--?w0{f z#J+FiyrJ;^GKVeSgE!ocAL4pHVPcf)-?C-$_)aoO(6^msakz=Nd|T4TOPu%HJbER3 z>(93#u6HWDT=ks^ugY>{T<^kB>3kjMCE;CVmdANd!ux0r-f!S}TYQcc(F7PUI^Fg- zuMA!;z2WeD+v9rU^5{*1=i46Fn^%=?dz^O*Jm2;>??>=_+cSAR!Jsi|JIna~yx$Uh zQT{{lK4LrKye4?Q?Q!00cz>Ql?-%fXoP+limE|h)`8>Rr^6*~E!+R?a?_eI@z_W7O zS&@f#I=qu4sMz8@n>aRiKQzHRTh;pM-2m_09K1h;M>E_OukR^%H92_y3eU%GrXJ^C z;C;&UID`y0Y1SvlrRVNAuN_{gNymAedGxyT=q-oG;f34cWv+(j+Ysm7lZW?Bcz&%I z*V~>)PrfsotG<8E!}~XQKIY@~{XP%xcml%D9dW%g;N`NVIuEZIUQrHzPKW2$ogC(e zoAmp~;rYIe^DfJyH!qJ~J3QZpc$q!$d<@2UFTnHu zXvpQ?Kv-x8ZqzmdDm-@51x`jPr`e=hizOUUof>W8itec)yBs#4l&S^L~u; z&V}b~kMpL&^J}6w?^1Yv9L0Ip!z+`@+5Ea!{uWz$;dxu)yp{00Epgs@c;1#c?*Vw; zmN@Ub@Rm#EZ2nkJ{uW#6&gI)o@`EkT`#C&6{yY^q(fbWNpO@mi<0jsA^ z4%`+mb1polmaM$b!ke9g_bj~X9K7GaTc3mXg^B608MkF4ys{j6Tj2R)wYc6-;C(EI z-Uy5wY&_q`@>6_$COqG#ah|-(q&$aSD?A^UalI?y`TBg^`1rJQ&f@gE^x>zHf%da^%P0oo2Sgd7p$w zm2S)A1;Ll$?Kd8Wp5Z1gPEAg)r8v9{H{m@3?^N64>y@9vdj{TX)<^#QspmZ~B?!J} zJPyCYO?F-X(R6(rMunU3Ho)`saX1ui39cZ1E5fS`uPDmgT@(y)b%~T-mHQsDr8cSi zeL_dMY?44@0CUC=a_))5ZUwP@GI?zn`SMh*RgB>Iq0=}gd^+dI&Il^`63A$-!c+xg zSXZ7EjHUJR-$4G;zYhQ3m0Sc8yjsG2+e}_haZRmz5N%-q{tCN)N6XuxmkmS)$af?r zGI9P1_yzbnIz!O89J!hNE#LjkxBV4Nj~`I)UHB`BzSJv-)+zP=2>$f*+OFtL_Vl(j zcihyuSiUOP&O2V)c-`xbeM`FAE}A>za)0@^&Hqu`=5GZH|M08{3wn>R$n@)yQGf14D*fq zuGLYP(*MTTBR47SysUoA=i+|P*ZI3?c)add8E3)F;>(9_ZGW3W)`Wg0dDby= z{pBlqdC^f}87||MHlfNrPnIoQz!kdA5i8%Z6#<6ZfID}(Q%^c%ia}UWJ z<1%B93LKNt`%U`3hmT3==^%2C0UYBp3r!wJ9FJ-9qtjuSda?|HG_QYt2zkdkqzm;! zW{$`-hc)c)e)+p!%2HpT|HvO~vbfi6bmVX4{TKds!-Sf|8!f-SO8oK0DX;9_y8eaM zEjJ8Z|F_S4>GQje=a^x3=i(dPeUcLwx8KB5-V=L!7ED}}Z0|_+T*t>wZ`2(N`Lsaq z#0BTIEprS0_KXF8hb{OQ_bu%0wR?iw{2#S#x5&pJ+c-Ml)2A+KTop%CqSJNrN}K%I zDYJVre8@ls=uua3jEhqrbm>y*sEsp^@({`*cR-SK2P8*bY>#~!yv_gN`|y}}w6lY6 zlybLtkN@hfTizYD(UDl_b?<{s?`W54poe!C925J~<+k;!$fcq8qo#DFzAuis*V0ui zxrNUt9BW^ti|r^cjN|IyX+-llY4hi1Kx{SelX*DF1IHt*(S7R&yl{guvVMW~|A}$$?>GpZkU!v#&05l*24I!y z|2!t?C!C7fU2~*NxtPMWDtE)e_TT^e;Q9Nx8o-w1;(_qw0)kvr84cv3_z(FKrg30xe$0J%9YTcVvoPbg=&zZz7wG} z*n1lEbMWP2>21i5g7#64zrect(mH;9u;GCVK_xhdZyKRzaNSL)Y!A{eJ8@$hfBzvc zmU>>MzIU-@H?bq{W-X`NM}o(}d^&9pHp%-eD+!++$j?N+6y8qu74!F4^vZ~%N@A;# z{qk)1PUMzzJy^<+@(%D@-aRefjeH0GM&j*p>YPu=ZD4HdCho?I%v62WN`j>xOacvH zGH3)-fQ0&op{D}5e{=-+5I7CUdy!5Dr+_m+B^U)pgEK)D7z1QToCU^$ao}ul4v=>Y zoC_v^i9ntassZv&CCqovbyY#ffRBK)fcQ}EcQ_lI1Ed|?RuOPpLcpy8?!EB^J zs0DQZ*ShP=4baIz;*4+$&I4R-b5i|_ym{@ z|WS}-59gX_Qo&;gQQA-Ena z0-fLna3kmfH-W`q3Frn(K@aE!eP9{58QcPvgB9R2;IrUXa2xm>_#==4E5YsH4zLQ` z2|f?L09J!F;4bh*uokQXUjknS>%raNkHJ^K2JltzC*V)PMsN@K8u&A?3ET_*9Q*~? z4DJK>gZ~D$fCs?W!8gEz;34o$@GbB#cm(_<`0rpVcoh5<_#a>!cno|SdIhhPVI0sIL3FR&Br0{!m3aUF diff --git a/NTFSSecurityTest/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache b/NTFSSecurityTest/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache deleted file mode 100644 index 6709ddac8d74dcd6884b602118a5f95faca8fdb9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6659 zcmeHMTT>f16t=l27($9EB?OXm(@EPT_3YT($qWxE#;vCfLv2GJSPzkRWuvgW@<>|1 zWq9jT|3rU5r$4bhXV+ftv@@}1clP&S*s+j@ zovI40LEY4)x`J>WnD28`R;X++9d|1SHO2H67*Q{I!xxg}S)D>CioVh?zVp#VhTq)X zC^8o{eavq*@$8!ZVlTsmc`AKnn0YRlt%c-FO*9=%WtmZFA8b>7pe7nu6k|;(>JTBE z)udz%uC#2OcSym+G{X?if}xASxZq{_O4WPe^Ftn`Z?TmXx@0dc=hhY$S$1`;nz?Hn_jIVeh(oozVZG<( zlF2?qdx4^OH}%5!J;zj+H&7p-y}(c(pxt_LR+GqsQ-dHzQ$tuBMgepnk$M0EzD7`_ zP>iA&12IY-f=rNc5c$(mn>oEL1Cc(al36j?wal%}O3WcMM~mi?IiKlJ&^F!NJUJte zz|!x@jkng00s?ADAhOcR10k-76D!Zup%zVRt5PT%Z4zVUmUG$cTBs{CJCIzrF8!zg zIkZIWBlNBX4YUD_v;wTD#FTK4Vv2lDkxZM~2Q2j&&TIn2)60YJWCGD7NE%v9VGARk zpAk-vOrn8ytIwf4wtR51B?`9&_Jw$YUrEnU3p{ znXtr8SQ-}xSA<|ju-ElSK_X$=VJ1Ol!GYIx2e59C*k~Z;R+(uH6i}IvQG^9D2QL4> z<%d=c$W)9laWP(kYTR$b zJ=TS8o`V~wC$ov^zht4OFTvA(FFnDg7{Vi}|6=XGSi71+cAJ-mhx$IG?w%UnSNu0N zvVRoaB|**KL-EGBo?7?wX1qnaHO21*?z_GCUCtu*sv{#Q15UlplSYDu_lo2Nh@GAs zxM^e?p^vYiFjRm$!6b6QkRTdR=sZazhu5@eWQ+KukuiqMEL+$P@ zGl|~v5i78~&ZVuP4uEYs)^52{u|hVmQ^Z$!d_THP?L*pNihKjMCr^LmzQ!vrybCMB z#ylh6f`0b2a`Ww8>x{gD`tA_i*I;SS$?i0Cl4v5wUdn+FDn5Rv#j_*ef7{jdK-^v}@vhPXQRFLrpK7ytkO diff --git a/NTFSSecurityTest/obj/Debug/NTFSSecurityTest.csproj.FileListAbsolute.txt b/NTFSSecurityTest/obj/Debug/NTFSSecurityTest.csproj.FileListAbsolute.txt deleted file mode 100644 index ddc7379..0000000 --- a/NTFSSecurityTest/obj/Debug/NTFSSecurityTest.csproj.FileListAbsolute.txt +++ /dev/null @@ -1,26 +0,0 @@ -C:\VS\fssecurity\NTFSSecurity\NTFSSecurityTest\bin\Debug\NTFSSecurityTest.dll.config -C:\VS\fssecurity\NTFSSecurity\NTFSSecurityTest\bin\Debug\NTFSSecurityTest.dll -C:\VS\fssecurity\NTFSSecurity\NTFSSecurityTest\bin\Debug\NTFSSecurityTest.pdb -C:\VS\fssecurity\NTFSSecurity\NTFSSecurityTest\bin\Debug\Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll -C:\VS\fssecurity\NTFSSecurity\NTFSSecurityTest\bin\Debug\Security2.dll -C:\VS\fssecurity\NTFSSecurity\NTFSSecurityTest\bin\Debug\AlphaFS.dll -C:\VS\fssecurity\NTFSSecurity\NTFSSecurityTest\bin\Debug\Security2.pdb -C:\VS\fssecurity\NTFSSecurity\NTFSSecurityTest\bin\Debug\Microsoft.VisualStudio.QualityTools.UnitTestFramework.xml -C:\VS\fssecurity\NTFSSecurity\NTFSSecurityTest\bin\Debug\AlphaFS.pdb -C:\VS\fssecurity\NTFSSecurity\NTFSSecurityTest\bin\Debug\AlphaFS.xml -C:\VS\fssecurity\NTFSSecurity\NTFSSecurityTest\obj\Debug\NTFSSecurityTest.csprojResolveAssemblyReference.cache -C:\VS\fssecurity\NTFSSecurity\NTFSSecurityTest\obj\Debug\NTFSSecurityTest.dll -C:\VS\fssecurity\NTFSSecurity\NTFSSecurityTest\obj\Debug\NTFSSecurityTest.pdb -C:\Users\Administrator\Desktop\NTFSSecurity\NTFSSecurityTest\bin\Debug\NTFSSecurityTest.dll.config -C:\Users\Administrator\Desktop\NTFSSecurity\NTFSSecurityTest\bin\Debug\NTFSSecurityTest.dll -C:\Users\Administrator\Desktop\NTFSSecurity\NTFSSecurityTest\bin\Debug\NTFSSecurityTest.pdb -C:\Users\Administrator\Desktop\NTFSSecurity\NTFSSecurityTest\bin\Debug\Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll -C:\Users\Administrator\Desktop\NTFSSecurity\NTFSSecurityTest\bin\Debug\Security2.dll -C:\Users\Administrator\Desktop\NTFSSecurity\NTFSSecurityTest\bin\Debug\AlphaFS.dll -C:\Users\Administrator\Desktop\NTFSSecurity\NTFSSecurityTest\bin\Debug\Security2.pdb -C:\Users\Administrator\Desktop\NTFSSecurity\NTFSSecurityTest\bin\Debug\Microsoft.VisualStudio.QualityTools.UnitTestFramework.xml -C:\Users\Administrator\Desktop\NTFSSecurity\NTFSSecurityTest\bin\Debug\AlphaFS.pdb -C:\Users\Administrator\Desktop\NTFSSecurity\NTFSSecurityTest\bin\Debug\AlphaFS.xml -C:\Users\Administrator\Desktop\NTFSSecurity\NTFSSecurityTest\obj\Debug\NTFSSecurityTest.csprojResolveAssemblyReference.cache -C:\Users\Administrator\Desktop\NTFSSecurity\NTFSSecurityTest\obj\Debug\NTFSSecurityTest.dll -C:\Users\Administrator\Desktop\NTFSSecurity\NTFSSecurityTest\obj\Debug\NTFSSecurityTest.pdb diff --git a/NTFSSecurityTest/obj/Debug/NTFSSecurityTest.csprojResolveAssemblyReference.cache b/NTFSSecurityTest/obj/Debug/NTFSSecurityTest.csprojResolveAssemblyReference.cache deleted file mode 100644 index 647deebd33e49f0d836ba7f95f15518cf4e10fe6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15192 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 diff --git a/NTFSSecurityTest/obj/Debug/NTFSSecurityTest.dll b/NTFSSecurityTest/obj/Debug/NTFSSecurityTest.dll deleted file mode 100644 index ab05ecf235da2c531e22956fc274e2aa629d1218..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8704 zcmeHMdyHIV6+d@gyPcM0yKSK_%I%ZwYuIOB3hcXG+TAXlY1c|g_s-1S-AiZg9qzr; zc3Z?H3QCEQf6x<UA2p*YM5%*&ZL^RvU=jO%i=41(*xZ^JCrc}w(GBhfw%Lt zOr5DT5G@2H=25TTgkKfkHhhU{WgPP2W`Zw9G!6uGzQQzg7mM;=`PWC8gzFC*iFWd! z4Rhy2OumMQW`TBQ1JUBiyi4IKQFR5s8u+#fJmKnxUEp2w0l<^F`f&r3OC=gg*p8h6 zCb6|)zza1g5Rlsvww|*f$g$E8zHCdyx8iCe>Zm|vsB&I$acm)q(!ffh>}(=MsQ)>b z)1c5ys6l@=-2oVhucg=;n$r-XE5rxrAsdW>g{jBgWsnt->wR+AS^zq&Sr)3t`eU%i z!JK3Di&z@73XQYXHL%4tw+11G>XDVWbrnGU5`d3EG%|&V6^?{#1XyscW+7Mx-VFR> zQL)N4fpYq0Q`zJ>7+305_OO%zqK?NyN7+ZrS`MUs1ps;TgqWuvI?DDfq;!(-DiLO1 zP@C-QqQ+T%vh8awV*3br(N%=t#p$`0+$G=}3Aw~Pr=6ncVoqF&Sj+Mpo%)Le16ht8 z8ApXp@HedkmSy`Q>)YpfI;$^Yf4DSRUf;^~D05^bWTpHJcro$)g5EKk=Eh@lMRV1f zUA{RFub&{lwj38PzJ)rBU*UinkH@Ta`0>&%!+I3zTE8YPsmImi>+wA6VL8xig}`&EBlXup4$-o>Pw^ab-f@?C`S5H8>r;yG4&9g5#Qxwa0rBpMRU4b6?4fuN#ufQwOZ%kLoiG=4vc#a*6s zZNnUKSYlQU(S7(`zB@?|Va!|C@~yjjyYTxs@TV}7!jWV}$uCzZRP+bXbMD6OGG;TSDc9*M?jP}v0dM>-ja z(*@-uEST^Tr=MV4LvMyoK(aY@EK*17sgG*tE#*YGhB^Ub^hLTH@`V_~l~IPjr(=LW zj2wgRG3dtWpRgRG2f|Eus#xYp$kZV3CwSWA9XMpQlv;W_`f9Wnx!_MNEsD*I-GYq7 z&>HTcmq6PaeFdw?|xWA_X8xQ~5Su-AR;Il=Y4D?<{qM7``9wU-u1CxB9|eWyWF$6Rj_qF_PTh;`q-Q* zmVC&^{wBQhJ~k+NvsQRk-VyK3KBkDjJ|DYUuu&iD7MrJhEG;%)_p!f=&Dxco%`3%b zkB9l0=X$?2JcIP8g0n`ha7^HxfH72y z9$kp~^rTR37MP&{P!7-$K!-l1bkb3J4e%3mW2l$z#kiLq5cnl}B$T0tF+Ph3 zUsKN0X+TmKssh^t4hb9=cuL?|f#(HMNaO{!`S82+b7e@z;{s0!JS*_LKnjbNz&3$H z0>=fO5_neND$L!cLv%acNnb;SD=4^~u{QyK8h%UgFd(0(74+CBMaI283jzOXK^u+) z2!5ZTA;BinjtLsCkb9oq2s6s|Wgxshfj84hx*55{Wfk^!-&WLePRi=d>ZWVBW4rWW z-PX;F-o)H~%e{m^rf5Ud-R#4DVzD+Z; zIi0zT_1IS4r?8XuOvZv}zn0gD+0TUPAS)5Vby-R`$c&e(KJ zEuE`SKoENj$CyBCcN{&R&W)uEw^FprOQ1iiJzB07*(nPgq`o(efWLrz2X|TdM9?f`A^4`EipEHZjBD9|^5biE8QO?xVf8XjX+mC8OZ1wq zZd-+R6$&p(i!1&Iy-O4(`rr_NP?6s1? z&3t-J1r-4Vn+4aP9}KUIn5(SM$-D^_IGyt31oIS2rRL2~(jzq7Y?3Nd=PWZeXqZ`) zVz9ws51vsVja(Wfx~88}q*6OhZYjKL+ey2q7o)wj52vKP_@<~E&p5O!sn}yy0UL&ZRL2UwLjYjZWh298_4Z>k+13pc1J~{pJ;lXzojrE>h z@Qqb3&HM3X6j2qWI;@fs#bEYqMr#;^qH0K~sbOl}Sfom+s}5HQXEA8tEUqS{Zu~C% z;d!ub{4)`i>WVSYw7Ps1e#T~xACIX@UA}G%*4boeafD!(ZRHu<#-PYRgEAgNVD_pg z$5LHgtAvy#w1mQO1Q%CoVpXBKVqHGU_G_vr6oMPA`pF~v_AF>Qe^2!jH|+oT?APL3 z!ZCyytJ6ZU8l0Ih#(^tR&4YTXsaE{Au}k>zE)}|B(AEmrtxJ8wYa=)|QxzZOXdWH{ zr_=-Ckpb703e}Z%67{)9Rkf+15$}grE3{(6#@1|0!?3n~xOGEjeT$aKtWR&+(7e8J zQ@TZKY#H9%tm9S6EVyaJivfIy`V?B6=d1g`76V zH_KesQcE0Fq~+<|!Xu8~kEU;->(t-?w@wYb@tX>K)~TI1uN7_mI#VyYww7C`4iwYq z2itXQF9&qW!TS%qPR?%G7wn0gez}7G7leQ<#;Tk{{?Fls@~&i8a>uK$uGxMc z?f6#1_vbH3yz+Tov`*MSlW_L6XY+<>IG7m1+J|TkxK?3bTxU1~5(zikqN4zPl zL?N5@0{S0-bNzSy9BP8cDvzdK!T$t2&i+oz?#ku*G{f{x{kkqk1Lj^>2^;*1>Vxb5 zA_M&9iwL*T_{8aO(v0zNyB7`*b31~fvbV) zfX}n z@$PTZ7-p-9oG(H*;=Pkn^4A3m4rL^c!h|^a%+P}vlaRm_mI~FdvVFu z9&l_}E6=qNZ)_S$UxM#>kmqc*NzL(Dg-YDhp;cFY!!PXAg84)X-kpkl5 zjE>;c!x2uUsq`qChKe&u15PJs+jwiv`7GPdDyk_)+op>`n$xx)AzwE$MFYM zz!`nL(&SXG8}bbQIJnGo1k(bktF4oud3vt-s&y^X%rGdsyRw;FrYE0RR0}JdqJQhZ?1sd6h4~=FEjPANm{8?Sh_JPUh2PDf5AFc#HeE1am zKKAqWwLnz+SEJ>}+W+m_=3&jYC+lK=Z2HHwF+{e!_~QJlx0#mj*ZyeQjN}Vn(tJ!K zg<;>Ch2>FU^4Rl9Vu7gf&lxcs|9oe4%K1rB#W6LHV1cprKZ0>aLDHKyu37Sv(_XCJ z)@Js+|LYYGJ-hts2mbVj7pk`{aqknqa`y+TdtR*m;e2D>9M}BAzf7HW`1mN`4>YjbCo_@`ml_$M%Mo|TRCR;t_qp0emx~l(v{ok*1A>YTJWs5u3=2F>Q$I|Xi z>Hc&spY6vS+)eq+K*#F#6>V*)uEA_Ne_P2*dn%XjXzot+=aF(vswb6A^>?M} z8J$aZ<&5cC+%af@J4=AO1-L)olglY^_>w1ZT7a`2n9&yaxD;;9W(HE(d^(luXiMeu z>HdwmB&wR;*q_Q$>*G>-pa`B*a8%cWpC-L-y>OcUgP_Mi@4(Bc5o}U|luu-dol*GB0hw zyi5!8B5Ew0U<kI( zf7`r!&iIO_zq@M#<5!s`Qx9H=&Ov-0E9yyNW!zM-pG*aC1)%Gt?EQ#inCh7Qg?OC0 zAge2Tpflf#$Ho6mxe#JG)PJ}#*I8inGvZ5tp7EJ@wn-SdH%OVuqm>DPN|2Vxx+SG< zyDgY8@6tlRF}~xqT28X73w{>)k7Cb=GX4&XO9eLut+nlFZ{jnc+yYgAZ42YU-wj@E z&M?&&d6UfPMlqbNW4;YSj2VJ)HaOS(36D`%f-w_m)I)6=Vj#`xaSr(D$T!Ploa-@W zBi`91=Iuq@r-2yGfXsOFMRO3(<3Nuw5+PxKjX4Xv0n`HO2C+|X2kiung`pPU_|$&7 zSCX#`vSIMYm*bsnV4C~Wd9bPGlxoWD05Pwo*PGeZYgg%oa`FS|++b&4TYj)Rok?;n z(4NWk<&tXw!Z*yfkexx9w%c;~)TX4aEt0L-bbnWRptDbX#D6g^fHfJ!{zfT|zsqF& zZL`W7v(TowAI!h;t$4Ia%WsCFx%SNJ&P}PdJPO}P1#La|Ax|qZQC9O$Hwo)6;h!ug zVn0O5S?;m;C)!v2Q*4Tpze4nGK>-X2`|Ezt=i|@d(dxZAlOINPtNV6jssaY(Rc54h zSDUND=Xllt-xGfsFIIO|ye-`wnB3~!3Z3_WD69FWM%X-;?mnURe$sUwYcJJ#0(3qF z3R|56dzY#0#suUygAx!{nUU06ZGAomBLaN15AfyjSy6fyyZ158H|(dbZ@aa^Yf@&? zmuTm{_);xX+jn*Q(yp$|U_TrO{YEY19tKfP^UjdAh3SgpDeuKjNE@rIcAV-Io)hRj z33bb;-a#7&s$1Rv2)#Ezp0b)>bw|>O>8}1@on46;b9SIR=FvFEIsU;Biyu=*>b7J( z=~UM0|1fl)1`NupjP_3?dHqk+xLP58Yzmw$1MQ{(>x1~?s&`=X2-U6b9nkyNAY!Q8 zNb0UO-zvJFsfvSRo{8^O-PPtpx4&;`e5uXGadCqXmWu|8AJB3Gn?)3TTxCBiWmh>B z>@U_`@d@zBCH-vmU|(N*Z#HvlZu#b})IdI+>1Sq+^D1E62_lBdX?vj=eP2sw>yK}I z&(b;9`K1Ofa1k(-`tVNZK2>!O>_+vO=~&j?(B1k$ZKwTG-U45mEjvD6%eyj_U)h=K zU6$!iU7ODLE*s3^a3s%T7Qe=51jeHvVyK+jY9z+xRWdFg#pK2i>W;lad~Kln73u!Y z>}@MD*-cT}yS6?E-3Ne09F-kO{nhqcCtCH*g^t-@>~Z1+)xSOCmKM>f+kUzWdba?F z7%Hc_W9a*SN}oty&;B3A_aFZ}<@StIVyij7YTLBP;7izAxgYG?;!i}?t-1e}&OWT8 z(%sG*Nyp|m+=jYU0gE^)tMxmf<51SFi=}U2LubQ#9J9aJ!^MB2`ez1i@F#^%Yug^J z&~*=pa++7ytf9WxFANa$M69>9KW!16L!XQ1`2IlWBe?sw2m9OifC$W%VnD3bVMH|G=3Ch>H%en|FIye4tgkUyphj(tdcN1%IP`zZBo8#DrE7l<}c*^$(rXI>jX%RxM^x)PiLKE|}$C%euo zaO`0cDDYg8XHT5tu%0Mf0uGl~SOL!Swee;GT;BUYmw{S9&4zI-XC-JWh~?-R1ojL5 z+zvj*mV@zLNFW~Lu22t-J}kJ`0q?>Ryl0S3JmzNz@e+`u-ZR1JR?Y$Entv9!)3Y9U zi%RfbMmq6kgENG9=RuBmbHO9&aA- ziuJt|X>KnY^Lt!$FMqy?x!dZu2pr?aT;y@CF44*DH)HUVE`)VNds+;XRe=4`lBRG0 z_+=ie13E1(!E<}SnBUigcvlGCGH~=8oQRvkY;g29vDpgXT~dPQ_GB@?zYFo21@9_w zOpoSjaPIe8Jl@5?D{TX}Pm0#BRq)n;Q@?A#sb8DNTRNl-+@2@q_atE(Tq}6%zjTHQH=8_8>G*N$_LyHwhdSLX7+Jx<#95%98}wMKp;KvJ zU2E4I(RjBB-bVy)i{O2%1n**BNBT3jwvG90r7daQpMvc&!jILG={aE|rQddx+@E9y!-x9*GCH6UJ1Xv@z- zj(A@H9|!(LaQIE0@r#bLfmiGGWBa=GTXdhhU+^9PXTSZj$7w9VaO<#WjIRpD*92pS z$0)6rTN}mvJRjEUVZrzYILG5R!Qp4kw>(x8>Q(fKw3Az_MB{x|@OBE`BZBumk4OJg zis#l1(Rhyu-s6I|OYolXc$@=jyv?Yeo5!Q^ejs>H3EtC!x7*{<|2VvZz+zjo-5H(( zJqy|k+7FtBgjx{q^9DflqdP&r2K@yz8DnWKXeDR^=uXgspyxoZfT}RyXM#kHORg>ID@*J3-Ha4uY!U&<(T_Gyu8>vI} zBL9f+uSkCS7v}$s{%k-tFr9Fdtq!w*!Q7YMoPIzU;L0foYy(O%?8ziI4`aQwSzW* z`aqjOcY?No9t3?G1V3-~fSw1@-@XRg4>|-IhvKGy5}@-zji4qF?@K#Cy`Vg(0NM(= zAM`NjQ4qh0cn(A#{R)VF`b`kO8KJ*E3q+sY0Jnip+-kq29*`lZ)*DjC9cJqA6mC1YSVwsUgh#te`6^v97gZIZJJ)$pR6~pBf4ESPg z$LB0YpohORaz5XsiyVA%Qrd!dl@;bFmzo$FTE5FKI1NP{-Wgh)qg*g5j>|7N@cC*B z-rrT2BVY6>hRZ7$mi5iBVc^nxcq_>%n!WJvGq`0f(swDfy*PZ@DDmK@-D^7 z208>o-Iwk1i9Gy-+JW~NC1oFBoVvV%0e_)(;9Www4iPY37nfgf;4?;Jz;ecZvzCy` z$IMyRsU4Wc^LL&%GnA+CTwTx9%hPy9KF5g-k>lEkXMqgmay+{pPHr#K&U9i!c=z6;nH~a$TMe#5R+@XTgTVMU^bk$nR`z+pSvDI(C+hUA#*;Sp9g8+J(w%wZ+kS3 z7-NridTJ;M-sQs~mg}?EWgpG&L+-TEDCbF58A;Ia;nH zSXO1;ltt}s%(dm^sUN7fUnJ*}L;WMQ$eHE!7hibM(iKYydBIajbgMUT6wBIZ$ms*h zc;j1)r)^v)O`C~G+SG;8G%OALckaf7Y3^?FN|6fNjCI-yS~yJFGl)+NllC&=X9sD- z;yH3u-(VWggojJx`EFDiPjn_x7?#nt;@=gHL*Hf4IC6LT!<$DdVCZy4^sl;(3w)T~ zV*kd?82wv1sk*JJ{b5C2m|!dKo{Q=K$EPFx{~v#aUNtT0{+pWndorempSb5tO)lG2 z)0^t-PGxWG%XHo3B6`w&sa(x*{l#2*_&@WrWuAZ{j`l}+r=r3WKy1Ks(P0^Q0s=o` zgQjCIfkmIYl(-8VYgrpk!v7S7t}+2ygF0h5YCeiOk~2JrxSik~LUX}+M^L~7@I3Z& zoE!LUFD-Q*h-R4sqJKFTM6=N^R)MhHux6rpG0$-MXni8fr-^yz^-d7y;CF%OOWzHe t2I73fJ3h{dXMuQkz_myM#P!2W5SwEbXe=C?1=yxzVax(!78sot_z(LFom&6^ diff --git a/NTFSSecurityTest/obj/Debug/TemporaryGeneratedFile_036C0B5B-1481-4323-8D20-8F5ADCB23D92.cs b/NTFSSecurityTest/obj/Debug/TemporaryGeneratedFile_036C0B5B-1481-4323-8D20-8F5ADCB23D92.cs deleted file mode 100644 index e69de29..0000000 diff --git a/NTFSSecurityTest/obj/Debug/TemporaryGeneratedFile_5937a670-0e60-4077-877b-f7221da3dda1.cs b/NTFSSecurityTest/obj/Debug/TemporaryGeneratedFile_5937a670-0e60-4077-877b-f7221da3dda1.cs deleted file mode 100644 index e69de29..0000000 diff --git a/NTFSSecurityTest/obj/Debug/TemporaryGeneratedFile_E7A71F73-0F8D-4B9B-B56E-8E70B10BC5D3.cs b/NTFSSecurityTest/obj/Debug/TemporaryGeneratedFile_E7A71F73-0F8D-4B9B-B56E-8E70B10BC5D3.cs deleted file mode 100644 index e69de29..0000000 diff --git a/PrivilegeControl/PrivilegeControl.cs b/PrivilegeControl/PrivilegeControl.cs deleted file mode 100644 index 58e376b..0000000 --- a/PrivilegeControl/PrivilegeControl.cs +++ /dev/null @@ -1,71 +0,0 @@ -using System; -using System.Security.AccessControl; -using ProcessPrivileges; -using System.Diagnostics; - -namespace Security2 -{ - public class AdjustPriviledgeException : Exception - { - public AdjustPriviledgeException(string message) - : base(message) - { } - } - - public class PrivilegeControl - { - private Process p; - - public PrivilegeControl() - { - p = Process.GetCurrentProcess(); - } - - public PrivilegeAndAttributesCollection GetPrivileges() - { - return p.GetPrivileges(); - } - - public AdjustPrivilegeResult EnablePrivilege(Privilege privilege) - { - if (p.GetPrivilegeState(privilege) == PrivilegeState.Disabled) - { - AdjustPrivilegeResult result = p.EnablePrivilege(privilege); - return result; - } - else if (p.GetPrivilegeState(privilege) == PrivilegeState.Removed) - { - throw new PrivilegeNotHeldException(privilege.ToString()); - } - else if (p.GetPrivilegeState(privilege) == PrivilegeState.Enabled) - { - throw new AdjustPriviledgeException("Priviledge already enabled"); - } - else - { - throw new AdjustPriviledgeException("Unknown Error"); - } - } - - public AdjustPrivilegeResult DisablePrivilege(Privilege privilege) - { - if (p.GetPrivilegeState(privilege) == PrivilegeState.Enabled) - { - AdjustPrivilegeResult result = p.DisablePrivilege(privilege); - return result; - } - else if (p.GetPrivilegeState(privilege) == PrivilegeState.Removed) - { - throw new PrivilegeNotHeldException(privilege.ToString()); - } - else if (p.GetPrivilegeState(privilege) == PrivilegeState.Disabled) - { - throw new AdjustPriviledgeException("Priviledge already disabled"); - } - else - { - throw new AdjustPriviledgeException("Unknown Error"); - } - } - } -} diff --git a/PrivilegeControl/PrivilegeControl.csproj b/PrivilegeControl/PrivilegeControl.csproj deleted file mode 100644 index 43e7561..0000000 --- a/PrivilegeControl/PrivilegeControl.csproj +++ /dev/null @@ -1,65 +0,0 @@ - - - - Debug - AnyCPU - 8.0.30703 - 2.0 - {01EAB41B-B2CE-49FE-AB5A-0F0FF0A9A7EE} - Library - Properties - PrivilegeControl - PrivilegeControl - v3.5 - 512 - Client - SAK - SAK - SAK - SAK - - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - false - - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - - - - - - - - - - - - - - - - {410CAEE5-D287-4A18-9B38-BB87397D218D} - ProcessPrivileges - - - - - \ No newline at end of file diff --git a/PrivilegeControl/PrivilegeControl.csproj.vspscc b/PrivilegeControl/PrivilegeControl.csproj.vspscc deleted file mode 100644 index b6d3289..0000000 --- a/PrivilegeControl/PrivilegeControl.csproj.vspscc +++ /dev/null @@ -1,10 +0,0 @@ -"" -{ -"FILE_VERSION" = "9237" -"ENLISTMENT_CHOICE" = "NEVER" -"PROJECT_FILE_RELATIVE_PATH" = "" -"NUMBER_OF_EXCLUDED_FILES" = "0" -"ORIGINAL_PROJECT_FILE_PATH" = "" -"NUMBER_OF_NESTED_PROJECTS" = "0" -"SOURCE_CONTROL_SETTINGS_PROVIDER" = "PROVIDER" -} diff --git a/PrivilegeControl/Properties/AssemblyInfo.cs b/PrivilegeControl/Properties/AssemblyInfo.cs deleted file mode 100644 index d86c591..0000000 --- a/PrivilegeControl/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,36 +0,0 @@ -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("PrivilegeControl")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("Microsoft")] -[assembly: AssemblyProduct("PrivilegeControl")] -[assembly: AssemblyCopyright("Copyright © Microsoft 2011")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("a8bb93b7-f0f5-47a1-b552-819b653bb3b8")] - -// 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")] diff --git a/PrivilegeControl/bin/Debug/PrivilegeControl.dll b/PrivilegeControl/bin/Debug/PrivilegeControl.dll deleted file mode 100644 index 65804f3723e2d93fe94192ca25b05a84c0697805..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5120 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 diff --git a/PrivilegeControl/bin/Debug/ProcessPrivileges.dll b/PrivilegeControl/bin/Debug/ProcessPrivileges.dll deleted file mode 100644 index b65247a723e2854ad8a158b443fcb490854d1dce..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24064 zcmeHvdw3jImFKDIR`pXYRktL|PqiO09ZMFnEyp%d64{b$E0O$?{7RhIt?rWCcB`vh z-Lfq^HVT2f17t}8e2KvcNgxbN0tv$-@DU)e!^bN#1U7sdvR=X_fz2#rb_TL6U&8c!v2IkOlaGUC=)E}qH7yEhNSN6oa+T3sDn zI)6OW z`2l9-|K)E7WfDFK$lc6^38IgcgfPMRoF)pR`1?H39G7+>-|>>_!tDpXv7%jT(KuQJ zKCuk|buv~*Z(#C?6YXoY3RVi3=r)0ZhHD3|iccrp)oK}86O61YoyNto_TZ}cbP}zr zK&7~c?TQcUrcxDcS&rtH6DdM{=OEVRp$M9xy-up9A>o6{!DiBy5KXCTJWt)M%DUNY zs`v;)(&1He22n8Byg)M>Q3z2~NkC~$J*$NMErPB9TK(dD(#)CQSo-r9Lt2YZGiL#z z7t{noN?Saux|sq?NI`6<6rk2s6ynjcjwkVrIRX6>LDpXTU?$`%%tq^QLv`~O(gL62 zRxz*cJ$?$Imk59>R(0}SDC<=w!Xy~ebggAR`CZyv(7^o(a1@q-+nmR`5CvxJst)+h zdSgD_xAYNz0dlpNznOHu*h{0MU_w~x6!n~~$LQ6lXU2(7f)@2ey=UuLkEqvsf(1vt zo)fH&?mclDUx8p$v70o6)rKhf?%?K$CUhKCqG|$aY7J+VSe0JY5~f5P^um0AW4_}o zKc+zoZ3){W1|1xKitW4!1fkSCr1y*Fc4n zi-4b8EUah{j1nuwx>N@yYhugOOz;Lt3pbM=`grL$`hx~K6=3mTupuN8Ye+*Rz^)p^ z1W9NyZ}T=8S=irn?5yGr*H3*2}j zI6R4FRtnK$cjb4;vFd1bq6JmD?~ZrFd*b#3yJCT7S);^KZWPpmiB=R2#6k_RNHYhW z9?=5@@N-ogz8+@ohZyJqJ%r|@M`rAbMZm{FTcg)3{l4yxd0(uCwYYD4iornkyxK&6 z=T)jPc+4v=y@E-_pQeR82Z9qEEhuC11}|!`V9dOUnH!{wW>^@$i!@q$%g9XY#xgR? zdZLWXwq7bDbF3LkNx)pIzl_YYZY?8C0qe^ZSkU@K1s1Y&wIrh{Y+X@-Ra@_^z#`Tc zDzF;spDM6gYo@0xMYnn?u&6a&fyJyxE3i82Hx*dDRpTv7X|TE~uo+gS0&BGHs=#Ji zU#-AqSua&!v#q&RWtnrV%@x>O>v#n=&-#1?)@1#l0*hP!y8@eUt*aXja zIJ=#lExv9rSBkU6*E3v%eck9H?CY5>!oHs6BJAtgF2cT^<09ZX8; zv8$VcF2=5I3b`1&x+&~p?CPd!7h_j9MO=(s-BjaZ?CPdk7h_j9=`O~uZi>1XySgdn zV(jXsIu~PCH`TisySk}lD|U5L$yn^_rjoVT)lDUHv8$U(_F`8zl?=wNZYo)fUENeN z8N0fvWHWYkQ~>8j@hvvc3?P{tC~lUOYp zE}4xz?O)M9v~~9w_2k1C(nU*WEI#=V3THJWQd(gRcrKdYngmv_<`7m^&P~Fr@8wZT zdQy#D$s_s69WaAxVvP?j_Bo`O7S+x+2%Yy9vjbo^rxkZ%nqX&ci20gpNUzd;P4QEt z`>^z4rPsY!di}b8>HpA>ZD6GgF4n9M@l3m1$`FoaREq_ofwK)5gDM-Bc?DNOD^7{t zv-iz6-+VFTZ}It^CEMBEkg4gg9(w0RpH|Xmere}L>(oRi8iMFKfqHnCum^hRFusvE z>2CE&48$AM5^IH7FpmjiaY9g!y`QT+W)}z|hMF&i#HK_75u*vk=1`AwCuTQGQD>aM zPUaXHwVN(4Gq>b8Q zf;B@vq;|_+<*`g@7rW4Qv)dG^Lwoz9CSY9+imKc*6m|ANh4WPSnG$`3Yp?%_lz% zs?3Z>P&li>Lt5b~)Lt~fH3<)R67XJgnEcfZ$e%6_=-#_yRp^ab)&k0vU4lngM$A-B@1ictQr5!Y+)=7k^ z4H8elm=Dp#gNDyaeC!hi>9I=RqWYinGQ{O3I`gJ&vmJ%4kUhcHC~V^r_qwFDMoA0+ z!#M;3IG*6oQr-*`yT>5R8HMT&N@ds887CQQ(rMAk3A$l0kTanEg%5@ zJ!%5u(Ks?(g{RiTFH`CjIp0DCbVyXWE!m#n<#Wnpd(LysDZJ;5(q232C^)ZdOV$tb z8FD-cI9THhd8&SHJ=}gy{Y7YBFYO!mHp=c+McAZb>a4x9PK^`H z7Pq?#ixXt)7vevxJDw8{aJ+j@Jjmh7_QKkQc%uf<_c+&zJ6*c?Nj=W&B|67|J$|8A znnz*)Va$_6M{s)**dN`&@Hn~cq&i+{>{|oU7DFNIpRm2H3l5C-=D3}wmGl?FnbzLZ zn3j|yp|pjsY}uZ%AZF`QPebzz)$=fy?_hAY0nwqFJJ8A*i%QsY>^63Pn7_-R@CvM~ zJY=9NfXd2hYsq%O0f!Lh=jw=H2#Qm8xLYA2XeWp#KE>vqx=&y?KJPx^`T+Y0_r)?q z3En@XZN>hMvOUzN;a2$-03n*D223BaW@Z%Uj!8SGKKMz6uEL5@Z3} zF+mod#C;}wFG4Ua94K0u+(>~ro`D_j$CkZt`vC20v+va{+_1eDT~Qu*8v<Q>Chf@r> zxXc%?-%v&5aa)&%XmObPU~4|>*J?DnD!{NI$ndcLi;);DuHm+y@Yh#s)D&Py0{>0m zEdswH@JqsToBx%FM*9W6B$S^9wuUu&NoV*IiYpr3Ebv}|KdAoas74?3ajmBQ0{ynd zcA}U6T+Q%cfT2Y<~(OFjS{eR{AnTLN@X&_=iKUM36~TKZ0I<9Ay6cA`G7po-5IdMptOBM1nL|`#b2f zQzU=8n&}^jJQdXFPvB%bzRCc0R%il?@^@-Z)$|Ca0J~i~RdX#Rc%=gNJqL@BGQXDI zRecI0Phi(!&OZX{0Tu;D)EYfia}TxRt}SB$w7Z9vIat`w*meg?)iSo*!M>?8wig&w zpxdQx)WLMA8wbXE{vyKteGHf%ShISn<^j5o76|4?y9el$gVlQ(`y{X%!1*BRdguXQ z0bsL)^8x6_pn%7l4pJ`&4C6z^bmDcV2@B2ZJoG1+7Q}0p?SZHa&;BMo2C2( zDL><3%5y5iEkb!jD8CbUqrgSNzemddO?Yk>{@)4x;{v}g^n(KD3g=IR{(_VTrQ9p! zH-)EDDD$MeLg4=rnLgpkN$o>ISt*pqgmSl(?*acZIvAT7T1Fp=Ed)FkYXMwYvl8%M zYpw_>bV|Dt@Q2DKz^62ZU)HyVH0|H0A+%%SI^Pb!L&}a4<@WH^pm?JUPgOJA5@WbK z#PBy7!+lb_R46&&|5=dfpOx}&eO&&7w5n3L{JPF?U4-Gcg?^t%STCFpO6_|^+HvXe zVWCIsnEwW$bPN9`fp3TomkQ5^r1tAlP6-?nX^TbL^Wb+!`U&MaNV`|y&j8ExA<*YW z8Q!Zf{F%VJ^`R2awXtE)&-fVrR^aD^VyH~{Mh!!+&afuR@JfZ@L80uI@&-RsGQr`J z%;o+Apmc;8zD^AN5r&@$GW?Rl@M?i;g!3Aq|0%@uR{>r9uk+c>Gsf;IIoN!q3@{ogEQ-3PXP1K zEe=-j+#jllk}FR85@@mQa5X zs-?#rY?kjILprTqXmb{8o)1N7|02N}?}(fU#b^(wTy$gOO_5&%yIZhlXpgoJd+K*f zb+3i$>G_Jf85F<{Z@2sB&)2^E$e-1TLM+sBIGwIn976{KG zJR@;9qv1K!DcCdg$)G~>C@ByQqk#Ww;jJ{` z)N!0`qx(x(K0HXT0<*pOt?&-|vtT#*PpIDy@1i>7Yw)IjW9^TDwK&)xd_M)&C)mCI z7h=x?+wWkn0=t@S5$t<(NPVBOhn{h;`)VIk_s|=Hy{z0wP4dEvZLoZ+9nuB zWEEXU`vtROVlREnuJgA>u2=Wc*@r% z5qaOs;k|UJU^eHzNu2v=gTr|_y%ydF9eMBK3=+?G&Qs=Em3~~~^0=*#;A34mQtQ%f zIWEPP$vif{LeGhuf6$p?m!Fb;e-thAd|7I3t?V9|;`VOK?2jNsM0=L3#8ui`qd=33 z{R%SWdaOZJG~4e%rt1%tIe(><%gwNhI+X6Plw$=G0aIWE6&-G)aw5i^) z`CU%ivo_B^!V4;Oh`%b!3qmaa^=gKnRv0c5kM|=_KY_a&L7co#;C2+pq7GPvlM9#U z0|t>h-4v;%H3HWP>=n3G;BJ9Qff>MhIwa+Bfj0={9{^|3ZvYj#Rn}5nxhZln%>;xl z0@nx()6vLP$b0kAYiO(To9I6JKg4rs5!zN^iS3Tv0=O~!K~P2&9GXQ6&*Mt@MfheWG)pt+Nu0o>sn~d^C7k8I;;V zq3?0zf5i6(CGC`dt2e86DQav$9i$HjZ-G8+y*?=qN-uo^vveq!R~4mQyI#Fj*27zg z*TLONXXtC{A?4NBcTnyReP7K|N9-Eh0r1j)Q6u<%0WeH6JQ19YRs+`2HGqwD8{i!J zDqx&m16)M&y%C(5_5ilft$=OxS-^Js?|`c*QWb$``T;xXBw#mv6>uZ{8nBOQvz6hmhDd2t@1kBQLz&t$!SfpP99;JvsLf6w8zzI44_ z@D}=8z&q%l06$E%0Y816HUK_NeSm*25SdAbJh1=0{1|Yx@>9SL<$1tP<(Gin%C7)7Dz5NP_jbF3#F*==#DCX0GyE8_ec{ z+>b{OembpG0Y0Pz0Y9VE0DexX1AJVW3HTLd9^luNg@8{h3BYHRrGS60EC>9dvI_87 zseMl1^8#N`IzT_8tOa~k^m$G6`MqfSFA96)4bkn-3VVc9_J~(ykN8#AHmtHoYE||~ zoys0*RM{hQRQ5<*WsfXU*&_*+J<_7GN7_{ONW01&S*@~1I#l*Zr^+7bR@oyPRrW}q z${yLGvPTA0_Q)=kJ+en-kL**|2N9p@Re<}|bg&gSf%^ijSZAxNTag1c04}7JfX#F{ z;0oFScqx4ouuI@oLLZ>-f^v;eQUVXs%b*mfHqwfBRpv&zl)r)Gl)xJWo>p$8g^@D? zyHxJ?Q|j%2-x0Xa!{xN+Q-BkmCjd`-nE$kt9}@c0Qa&S)yv!39*y&|y`vgu1JT35P zfoB9#74yUeb_(1la6;f|foBBb)-pKPQeCJA*JfM;xUR)z;5vj$qh30JJ30LVw+h@2 zsM57kP6{*x-YW1;fp-bKN8rZ=o)Y+gz=s7sD)93Hzaa2S0>2^fTY#(SGORH7;f~Yu znBUFHyOqn8k0_5RUr~OdjHwgq2h`it52^R6_o)x6pH`n#zp2KstJYza$a|-z%l7rIc$7&4O0B3+z6||4@?aL{A_T994@HIf=F*<_1w?_Rq^{Dqz z(iYiq`I^0Zm+ft%jzQDD?|S)=L+H&F4J((-c4rECvtS5)1#?Q16?>Oa$Mh`AsJACK zHfmVOp{%iwu|s3YqJwNRlIhL4?0A=%%^Im<#>@$a&0jPv#`-daBEHwA53kKrH+0xJ(e{tr=3=& zXmqdbq77Yim|O1MOTD?2Wh4v6)-kh~q|rjkw6d8Yv`f*zc%f*Fww9GGv~DnRhLuS{ z{6Ql(U=#`%LT?(%9vCYW%lJSsnM)_F^tQ~%{$ha@2TPi^See6_tTAFhq0Df`NZWFD zWUS&?GMhP;WQ+9V*jQ-{r(hR`#)}4I92(15AWs$TkkhuG(y-E~d3busYqMGNh+EZX zj+nWD3<8V3#3iW3sTn3-A5Xh*8{IvIh+qll)LwF_;=EqqcF% zxMQR;VZi8uJBx^k5n~v(uB@^Bxy3T4uNcgXPGav*<{)H;nME{LiebL1&D zokZ##%^Oz1%&{`A-yQFi@d2aT7#bU?By7*6&D6n4ianx%@zEhOn@RO$a?{jqz+;eP zwzAbWBbyvDCXsAG;$PL)%p}6VcrLYe#K=t{@}kg_JDjo1+~|}_C-w|$ zG?|-H)t^l5&*Tg!ZH`q+w3m)bJ+|ix>}M=hSnl#;lX~ykpUjOIo6KTnc)YSrA3~-d zhPNhB-SMu&`UY+j%ipB>0V6dwnU*g(vb=~>FJ>7w0bY${+S;o{#lk_`FeJ>1!STGa zlpxTvysA2^U0LiQP8o{;^R2hc(K5yMrNo{?Op13aDMem$om#|P!6`a^cCftdbqCuo z>l!(3!E9cSCBa$OonWCp)2s}>P03M%pkv9pLMX^qAjKRr*h>ko1XQ_9IIAP3s6m^s zM3B2ykZe>uZhLVomwK|sVVPG#+PNP~XnEs7*;!d=OVN@|dMs5O1KFJl<|rb>u-L=c z$|mjE)IF9*9AW*TinVC+!i(Jm)s@4wDS68{oH54=HkLDv*acn%zz?Kidy`$2x}XV+ zYsn4?q3N|nJjoq`aaMj4X@Z-j%XOhe-xnL=g~4XctdI+PtB%oHnGOJpmVHn3nF zEKBJ*S~POJBbP}oH~W1D7M^J0OrH1Va^?DLa->j3?a_+> zUU!d5siGdlOmZlb#RNoeMJt&qmK(cDA|lgpZ@FR%7LttQ7+9*xWS76o%#T}~VU(-7 z`UY4Pbe5~2Zb{-dIBP8{IbP;03mMHPa}^cNTxKyCg{^bB*}zyHu~8^&&tZwfgi7;f z?ye&hY?C6S=O`8$1Oo5*G7+XuI-6*xF64HxK7;%-bBw1$F0~)4t&{;a54$sDa6dNt zG?sGADm#HC2`}lX&&Z7w_Y==orzk5(Z*JJc`poWh$d-XAz0Y9UK;B3p-AvipD72n3ftiv_A5L<* z-I@k+&`G%kan{$;dRP!D=d=>ZW>$>di%roP3GvopE5f;okrtgC1KQ=y$RQoMHUZH% zB?YksY({)%a*)XDML7rI70VfE$(dB-{h`9Uwgh`;Ifq^%|3hg<;@9$P}%o(J%i&7zKG_W4aGOgZR0ildM0x`2rf||@C zwwLmFY^z%Ku}Bg#$LO4+*~RSz7RURFy>FNqDd(Nh1js*5&C~Ak1Z?pXJ$L>nN@% zAV4ZAa3qsmE?dsQ3#GuV;IlJ88Ak>6oN32RE9$4@jRnfPsat{iGbzg~n8U?Z@jz?& zh*zL<@~Q&y;cilFmqTPSxzxpE@<`=TuCxcpSW605kjqls452_y{)haiKUp|fAiimk zEkF;+;Y%BP$y@HEZ7pw+rMmLWEZEM$nbQpr%sq!_d(1hxJIK@}r7N2(6wX;!Y-)e< zXo=mX2)e!39tt5=_`L35SYn-$o4BD46El;{+WDj9RAa)W*PAYe@$*@A(t!q!7Ngi> zvzyr~yRGRYioKCwjpN0vbg!d){vkQ^P|wj!(J_UyLpe)sdfm87m=bWXC^j<89_NhY z%%h5fk(+kAry*HEy2dQrBPf<5tc#CBWfbcwH&)SaYtkm|Hjr?3I@3h2f~Ds6*;Dq^B*6*#%%&TlTKna8sB0Q zc_l|LxWzFpW5N9=q`kQ!*7kywaolhZXEbR?lUpa{`%@KjbvmN#7)am>6_s)u#m+c5 zxwg-GFo%2WgTD$m7jz}_Nt_(V$;|JSIpmaKBc4%=O?N1C4dYHL>KV<0l|PpbkU?v4 z2fIKS8lfDX@mMI0QWD=V6q$4o94`GZ>axH`aM66b?HKOMX7H59ZaIl#A#<#QtQ4e- z;d#(BJnv?nE<86%q8FCC34InJaTxu-HNOSUB=~UtfJP<_0n1LuzrvPZ=HCKN?q}E; z%QStgJhzPjd$3hZ&V%1VR4|`y=V`RQf_v!&N6Hy>0XX}c zzioaKH5?t&`f}NH?YCk~90AGc#w9kM+T%{}Td*rzcZ68xw9(kiHGSYsB4WEmufw1q zWpc_Dv0dWj$n6K$sPr-IC?vxAAvJ|4W*vA&rSQ+hNZuk=BA5fQaDlX}Dx0%*CVSxix?hjiHnVegwKs z)21XDTPe6W`lsP~7x&Ls3i8eq5f0zm_Ij}`ZyY+MU~RVGTUdIH%gOrj$aq%pD#fysVYelZt8D*iMk!HK*@9=E{|jo;~jcS z3lBQ|T`gmq))Nv*gBZz}Gp;mNU-nuWanA8*$L?E3lC0_5!N)Pdvtt@N$m+v9ynfhg zAFl!22hZKS#MCtH0&zTnyWD;`h?e)h=X3dk_gr=A=O3l$ZQGt9Pn;BQTv7a00D3(a zBMekuTvha>ZfNz-jdK|su*&;fLK>(`~qlnL^ckA7LfKFAP z<0ZvE2R|e5`+Z)$L&bkc>{azRN?JtZ=(i_1P^pO(XtxtTb3WVrxwgjHes&g8nyFETd_4-s*4S-l5 zJ%oN{_(JH#wSj-GN00kq3D#y@#aOGL4Vu;}tn0*&lzFhwxH^yg-XO+~VMe#lL8pF< zJGywG5pA5|^Gjnr9&H4p z&8tSk5$?BMpSTP5LW@RdR8puyFEtcYN?bLQ+UW6_wW`wyqpxT*PpJ-;Wka=EMVZSZ z6&@aGJWvwKL7`|qsHF4A8xcp*Fb7kDOLbBctz*I>&F4||MKC!8_1l*xoMP!mpiK+S_Mat6fGnWxCL0OX9II zbDC`Tb8`iWl*$Hgoob2fcamw%;ZeL*q9rDK`#ej6=PysQWYIoE&P6diiIkUi|Woy!eA3CavMuo~V?($-g?mkM|Ld}$RjZOK zQ!6i7wq`}U(YAU`R2htT`5|>+{a7|DcN!HWg#G{$R6D!$JEe$SK(gxAMH_=sC#jl8 zL%OD^UJaN>Lw2L-aa@aVC2+OiYQxozs{>aj_y<{{B#JQvy{sQypsu z$|ARFkyP<;7wHK(reO4la6QgIN{jH`Arf#IBfhI}1kn4cF`js7B;Eu!07x)cU*l8v6cqgIsoC?oQ%_9W`e0U)dAN=K{sB^zPUb=0M-(l}pD1`@& zS%Y78Da7#zDL#z%@A&zt+)#|?41UiB&!^%=Gk%C)_iBk7^1!Yo?mPpDn^xSC7t`<; zA)Qx+3UM_+4wn9m8cQN@6AgOw&UM^G`=a5IvB@&Un9P}t!)j_#rSE#nxW*% zRhP71vUF8)^@^qK!^@W~9a_0^<|DkPi7E z@p2|T@t{k8Ym!$w{)KJ$5Uv5DZ3Eo{SHAw_FP^&N-B&)C`RMZQs~+y)R$cGe!_UMD zd)B5$GdbK1##;lXwFmDA94wmoJ(~vC54f{`k7LcUG56qkGFb7#*SU4A`ScJg^#8$U zi&a+g0GH!syt3r}JxQCkx68D;vv}Nr=ee@x8HPMb=Gr$ef(+g!{`&b3V*y1Rf<1X+ zvPv?K2s7#&I`eJBwF@;J*ihY1hqoQY9mo&&0`?%~9l*h4Gw$Q#^;^L8_FrA4Z+L%q zmggo`eenBA-}oCB@?nuYPb)v&Kom&jrxEM1SM$A2K7heMwG9?fd6^4~*}D$3f?u+`hYJKV#u`CTb3$6(=9#c>g?( zQu*FJMJ zFE2J6hsW@uG^pv%n-0!(3g+eL2t5YEsh@f8O}kJ_$+$_GUCV_IbN`B;e)?0J4v=3m1*#eqAz|v!I5Ks z24zf}oqjngc}#AEGiH0>os4b0_{naOMl5msm92E){%IHgOqMg%OH+NcTH4q*uz0-u k%!#A@?b^Ba`0Mw-g9Y-)ebCMI%l{qv`fC^e;Vkg~0N_4i|7fvvl{!r^RzvZxJrwS>d59US=|<3iI0`qB^tgkiz%-QB^v zcXu=QU4K5l7RXiqCwA5U$G5_>N_I=pxbU*__b$=YZq8eqUV3EB*g1FC-&RsScf%A< zsx&wC^HIUJ3&&?iMQL3ZhmHku^?!|nasRJ-l_(n@I;HH&X+8^d)qg(A93JsI7hZVw z_j^9qZ|#C$>-qm!@Qo)b=KlR}e*NQqYtOd#N8WMMr}`~=uHU1hgJ5T`*^llRG^M7obU3)`m^#Et4s}{fd((fPIdepY>J+$_gKcr4Rf5tJtK0GXVXqU3H>VN(E z4WDip-FWV8*UtX8i=KM$&(}58tUk0Yb9m&wv+BQe>hd2~Pgs8RKd+p7|1TRREc)s6 z#rGW^7Cf{|*;(};4*b>A=lA_ZLywIkudlmv)MJ;u{k88N+Lk#ya^G3?|N6jf4?lUv zrDx0^{m{_g{`S1zTy(`f|8jU(@X#)0XVw4Xr%pWX?;ii!m}_qR-z&fP?0HL1Sywdt z(6-Fsk^9c7|CfIE^U))hKlPb6UpW1opTEE6h&BJW`iqB$1rO~~c2@oGe(fjcH&358 zyLrs~jrV?ITFv97?{z&qIE0$U;-hV5JwAl8-j&q@u)qgzeDH=g@~8IT&y2}c7pIcV zsj6vpOY0l!Q!ULkEltf;<;m35Elta+=2y;Kupn96+FakVvg(57rrKmGbwP9e^7@A4 z;v`HB4NbK*Ey=oh$)!!rD~oDVK~Ouns?|uW$&gs*BsR7zN~OHSWme*{w8R=OacLy+ zz_J+Sc3NZIw3e3U`h~46$&_+>U>S|_T+>)rlOgv&^J|P;v7#l}n5u7T?3An;k;x2^ z2bxRQ1}YkB7B(cCJJFuWw8T!zV@A!-XliIk*0x~TPRw&g8>r3DaG+%{RW}O-4av^P zuo1T;5_e#^n^r4-P}y{Kvaz#rSYt%CNMvW_GV%bO(v`gLQ)L|QyzqMPE_W?-9w+Gj zjEk)VzRq>PyyzaTH}Z(>ZD1ky4+8SS=ENOw3jl?SEZXC5zdd3;Y{Ut_EDkrJy1Jj9NUX-U8bmDJOo__>>Rh&CWj zv`UN9%95UTZSPweL@UdRR%vlsS=iG)*Kqkz(W(YStF$<+YQfX?xcj|#MXTBotd-+jd2jl#y>v>R%GEs)6zF;oand{8>0OgU?|A5U<Yl&rP<>s!1)G(Nt%;;fK)c z+VG%I?acSL?M|=yy$_tlODy(!jgeCaY+tYM0(CaRDHfT(XQJ<`ovg3Kwc#h6K0h)_ z;bioE&+DsfTEHBb$b)+g#29tS<`vQAXomrihNfv+6c=?SbH4 z;6dPHz{i4n2S)^b@W6e7DS@sfPkh$bgpm(Yl@$XD!<@Vm!AEdk2=2pZ*bfT}dl}Ym z?N7Wbl~X$rzU*!}j|y@(1yJ;G2vL{DUbEebveMWQGjee?v1~EB|pBXE_;D z!LsYwU~7}pGVEddV(xs*bTZBb%dXUilQB9&hV55j)ZgOynCE272cLnA^CKCb%8+6E zNNC1P$TG^p`w7M#p9GI0?UG2wl^HT@yAPxO5YNZuPR14Bk;u3*lF^hQ!?xuxn*GIP zEOatz!Gn=e7s;?TeTO);!}Wl|1s18D24ev17gPgZ0PX^w0JZ@;fxa~4F+e#`4Xgmx z0`~%2ffs={fxQKFQSTpiIbyYC9~hexzv!8J{8xTN>(k@o|FHC2peVh{N)?@(Y)m%S z*9OD$q@Ta=Di&n(@U#s<{}|1A^^MmkPw}`)7O{#`|KGp4Mh~$$K0Eh$(TzRtniTto zu{ZHMU-p=<()=gDw#(oVy{8!-6q?~0n?%Dldnh=#>8h0rWa>DYg=YTNy=PDWZBP&fZJNLNF+o1uw$D)cGC}q$cGm;x zlVsnF1--!<3yuknGkx5T169bgbsU=d7V8PX1;i^1fk&4^!79JT1^F(G3q=l30Kfjm z2W^ahCVm>Yko4)`lfV~)hlACiPX>P$Oqtu-z~Wm4#t*gK0LG`aeF=OD_{(6?-R$t+ zgGGM_SYygY@M!Qu;M2iB0^?iSo&_s^KLd;YH86Q?)0j0DY<>UPj31u`1_b8@b4ih% zW|%RhAKs~7uoRd~9FhqA=$!+}op5O|iE@>=__4$l0X2rVJYb|C^a;)|cJ_YItd5CS zJ@%q)4FO64t?jzP!LdMh#QHUdaWLF7J&VF{`d{)$=l{#=Q`+E*oE21lEx3hi@p;-o zG2dNYU$eNeDb-TXF3G4^{6(#eE%i&2j1Nnfv4`BeAlbaUo=qevkB<+2&$;M=Wb@Mc zl-URsjr#c1z4;Q_j>>3!gPA38pSAAu<(E%WP~Y`|zL;pva@lRK1GcI6 zQ`hIvjqgb`eFVC9Io%^|@y%c6V~O?-bnnyHM<+yt=9U^8LNgBbWo&4B(u^^_>?<@0 zCd9`F=7EWgUjIcrf?b|5^mm%wD>d;Z#K(tXbbq%4-DFK`ZtmIF3jPsX2-e(Q{e6RzJs_A*UbIJbF0nzRM|rh#f!uk0*y(u$ zth_Scb8Ccok&J5M?Kqt~ug^Id&%3<-lzZj%MQ|b5=k>px>~vmdlA4)UJHCdL!-lwB zUv+w315@9@Z=Ae7>?Zj&oyu#+$S@i^<1+ro$=C%}9^a2-EY6T&$GI@_S8*9fu@+VR z_5rKk9SyeYs@e=0cC5-RW2loc%*i-0l5tsv3_ITB-eWw&$tVIJK|aPtGR}!)R1a-Qio`Fd}9=x1;?G0QD)~fh3;FH1Efo-nm} z3P5{9tATaE7T|e6bNQp_AY*`XUpY1h#&ylsoU&&c(0UJyh=-bVfo! zdD}uieHPHVLuKv?e>n@NE%|c~16=#oc;`a}?ea<*r%9S(dR}8q0~>+Mno`NB3$MI# z-1sZUL9BVVWNib)?|I@rVQ>?1vXjM(DzD9wknp!t*6W6td~)oTb-`u^+(Nf-VyV~^FJwHU$N zN6yoAJ}E$M7?4c0DlCtPA|OZ|g4iS(a0s4Axwx zyzF(DweIO)pQk=NA@q6DoZQw?`rL)=r1^kCk&{Qgw)N*;$AZ0$`|&X#epck8 zJ`19LM_+Vh2u*poHSN}q`FgfLJGd@t)Bc&Y+IJ=GwdD|Nv+?>L;yNhR9R;H3k*@D{ z@cj2hXgr_9>`(o7v{sC_jePTi`1~+_CTO4b$H^jHa#=eZ#&5%k3K5 z&)e=(M<9I8BJ-CPkJ<7?P>vNeov5~^T6kEzZMX^o{`85 z8TrZ1JL&#xSe&l0W~rvmre1vg%-`EQngaTHH2Tf{M8b)Y_{Fi>@`ZS0*)&2N3hBgOsl)9HI;t!tSH&(0Sc)7Ld}Of?J&x%bdsVv zYfN72o-V4L+IotoFKbRNuWxEic_PuMzTz~^$(GjU#^^|$vCYi=w@Ik6Cp#uXo%SeVr7zz}{Kn z*RecDXBOt$hONA7Zn_>`@p)R`c1ViyuD;+;d@3EWYMUA9zE${k6HjlbNwt_w%!=k_ zy>BBM%-Me%bTi|_u<)X=eRx3=-KYKXf>o2qi{yD*T&f2`1i$yAYoZc0G-l;n=QqsB zq{tvCQ;$2b!diK$Xgy? ziTDh)(@c#ImLQz2*pUo_g-R zKlXU9=Wnq?mR~Mlofm`y!fA5H)oM#S!d35wtKSK4{A76JJ>gA9hBwV9xS=WtZ~9EZ zP1jhReqU*eYh$mHPah~-qSfU)D5^CtmhI2J1m!jRE}FB;1_~kn{2WQDv_4T_JZzJF zz5>=<;BUcpja(hAk0nFA`DEPeWPHuZ_`66(<~s$Z&*jO-txm>mPR8vyWN02e+U3K~ zximk022l71Cu1F$Y6^tazWnn^-S_AI4zTtqz78Jd(oX_&PM~c#_%84m@ZDgo+{Gu~ zAUV^)>$#r|-Uyxtz6We=rnA5o5~KF!&jQad_xAj+_WqCN4ZoQtu1`?NeQ{)GtugIf zDU9Y?^3}Txbr5_DJ*um3gVn$81FO!y16Fzd39NkyTGVc2udz{98$WWcwHuM)p_R!qxkAT|U3MCTMT~?c`Ab1SDA=i(y zRiZwKk86_#+C$q^@DGFFrcZ;F-z&i{5MK@c3HWO8OW;#sVQuYvWf>33jRZU@u?=-rC;7{P=xK|#Bfd9-r zdxgROfJcEp0FMFh22TWwZZeqaZ~KH0SY^cjw#@eBZQBW9Zrwh!1EN)j_vG`s<4ESz|-zp=UH@l z3|MWWFSrMo3D1qbj}GSkSmI@q!C=|o1h8ztenW;0bk;>S7zUONP6C&Mhl5qmBf#^) zBf;{GqtKHC%Qh+n??bg+1=e{NwfSQ34d8L$HQ*BPePF&^-nJQB3Vs|s0sJIba-ITD z!B=F1NGB9m0I1{`BEPAyOVd~fLQLn)#xYxKTIhyq8%#5uQ?S*FdH?_B1buym# zVeCoQfbF}4h&Fy?An#!G!}s>%ZM1$tEiefv!4IpKc$#b2A0J74f7aGz!AaVwHEE*_ z_I*?R+m63s;K${7|1Jy6@fbbd*!U;PLYv#zoBZ|;jx_KN{Jj9ZC$DfRu!fFsAMgb5 zGO!C60+HrtRX_`{7PuF98rTjXEEo(F1G9i707eVe16zRSfv#}yETHQ1^E7;r3G%@{ z^vC6>o=j5K^S`Gd60J|)pFO|7rf0pr{G9bN!Hx{}8lRtdGpqdjvv!vKbjIN*#C7jm zFh_H6uWw3$)p43d=I;RL7t!Xk?cGAePC&FiU2C89#JvL?P5g4lr!}WUqfG` zl*Kv_@HEZ*Oah2|Nr=R-cT^?IT;zVp%5QEAL` z(Zn{dC&%9Phix0Q@mXw7nKtJ2uhpc0(3^N4m=7eTFwr$pIi4A-JyenJQ{fe#r&avz z#E&5U=Lq|>li}MuZD-FmpGxoj6~cEieCuO;%3e-B;(cEc-s`%V`qcQZzV7==p=9*! zULLls?b*Jvcl*k)ePzL_mhP(Io`sGkSzr^^=7G)e3$SBG?q}Qcm;x|$;H0`; z12We$&$cfxQ-cbo4Ek0>nZc6xroi~<(9P=Y`y($CuW*Tz#~h^%vfwhXZ2BoM{W|zG zcsN+|wvpf}?ln)n9ITZC^KUapuLf&=TEpCEHn^61c(t}MbMqvaxL^?&F!CC~OSsp3 zv>x1>b%xFVC^x^;D%H>3=9qb#T|2f=@AH5$CQfrfh4@*%d%3q`K^Xa6wY_yBBs8N> z<)!(fm-!c%W^b^hsl4(%idQ=%kH#*He`d{cEqIutlYK;YDtHC>7@ii`atz?T1X)Ra z%%AzT->y*HX!7spoXW5D_qp@ij$Gw;6`y#Ypk2V@%)NT z`Tacj7*25PZ+ScoX=OVA0VZv|k#_ht?^yHiB)tpP=2Ab3NX~`7-Nll=b6bG!~o; z#RD=T;bCOz@)5A|E?siwTe$BJeiW>g&cA^R!T*P*Q4M~A`x=LRzgyz&8^KSK-UR+W z__N@rz+VDC4gNA%dTs_w&h6m;0N>@}*Mt9)`wie{z}O@B0r)ZS55bRve*}IG{4Dq< zV9EP`;Q!)&JD9Y#SHaJNUkAScei!^x@GkI+;N4*Hv933JHrglqZ{lrT7n17N=%+dx zkHE%5SmT{-(uUzz2GRqM_O>Tp@cR5K<6E7`ef240>`r-RbjB`ls1t18c1&z z{XlxI>QX_z$Jb#o_jdeApTknyA0a}*WPGFgEN!a2H>=0q#JtVD((RZMMq>>{jNZN3 zN?D6}%JB|yYVUtmBH;o+d;4^wU@$NSC&;YCk z)&WldT_J6O?p*r$MxnF$=ybB?GKs35(R?H0`)}Kz6Rl70=p4uBztEZgeVWHohQ2^S zAZsu$b7w65`9pt3z@GsbX{hXS+;~8hn z_%Oiu3Nu%1JDzm;lA&O{fEg2y1)s(}^KQlwyU*E2Uo|4weWr7xJ}#ZMOu63?I1w3Y zDurO#O}fYjdrfv+9u9^^dxdTC@1wxhkCk$l*5~(IeV-4k`AuDHqo2MB^ujPBfUaEChX+u-EQbLlra{g=7?X?`mDw;bQUyYlyN za%VgKe|GxnsRPk3b@}>*qyMJE>}{L$vz-1P_;NXUHBMh|`i$iK#>okto>v_G2B)XS z$-CUiAL;lmb9C>za=q`$^Q4pig41`iF#FaQxqJ@$Wmn zCtZ3U$Nz%Uztq|FQCE(Cb^NVP|1~auXE{91(cR(rhB|zP)Ax##-|ldQ!#6v7OmK4F zckz!pT<_!#b^0%Maz{G7k2(H}T{-j|fd9ca9bW11aZb+rj_yWhr+E%nIJ%#?{7&%Y zaP&;BjNA~t1>{xx4*F)2{BbN4nsg$3dXxsO5B?G{8U)WVe|1gp@}*4jvjgdcikAE% z%8zx*jw-t3oW=Wy$ieX6J#w%wD1IGW(Ij}wb4o>)v6KTc@qwYn2UWZ*z?#l$HR8nAXlyy+HTLledrgvdU_l0=*!adYVWz| zZM>sDGfl5E!94^2-bPx!jW3?Krw6K0b6^j2run^R%?(XN*PoB21x(+j%Hw{Zdk#O) zJ+N(S9D|E*yBheq=V)6t-qGVXhPk#*Q{?H!o-dL3HgD4{UkSb=;zLh|d?wxT;WIp+ z#;ZiI=ff?p&!#&*{DtSMq91p}XVV=YKEwMcoxxA&z-*2WzImON#_{4iJn!ax;I%Z4 z7a!t%tHwN|H#(!6;aVe~V(A<|KE?BI-ba2*=lJn4emp2+oXpg(Gs1QZv1yK{Ce5R7 zk>%sDX^v-Mx?c3IU?z_p0=zDp?)Ylcd^~6Ckk6(&zPdDD+g|u=y5mcx`83f@1be=e z(L31lrAg0c z(=A_V+~2_$?!`}rzHVdwwUBa!9r!z&ZuJ$%^sO^|`P-{acYOF)-!AliSD5bukCefe z)6zNq*t|@0|4jb0->_+phqmN>v*z$&j+cA9E}QQ7@UNav-yG?P&!#)R*!-*vpJVdq zUSjcjY`mk#mwG*VMHAY`mkVu06fx&OOwB^o^33J#4(Ar;dG{Z8P-w=Lt65@x|&|>&qS;_ywEp z_+oSNTWE_ayZtqtbU(52j-LAU{cNY9&*Oj1e9Vrumd^2K)ptRT`Y!N3q&DqOH3k%P zFg`>)br`lQ9P$?6i}v^ES~ ziUQ5cd`tgb7n7OxtCsD|f&7}Zd+_-Mo-qu5)uJ;#%Uwivn$E$TmM2YTPV%Mce8+%1 zd^(?zFE2W4QJsfx3I+FP-LmtkXXgX+@ag$D|4qo`t87h@z_UgZdIXiN?vgR1vQ^&) z)xNeucACEFnU7E3>Qvah+hcp>?``aH<~tp_E;eJEjrD)`_!-cmXc1x^YI87S`h-a{ zXJ~>$@Ur#XDSmGfdBfsT?5eQKjPv%||IMW<>-RB(vgzd|9KE{$;$*9h6NfsVFO%z>s1>$2tcE>(Qm~EDHCoGwWwngVO0UE6UESVBV+D zv94nS?WZYdKX~uDqPoi{U;3LIMN_8M2Gc60SDaZq(`KM!{R8#RhY9=Z&NJ|f)nfmnJ(RF$FYG^y!qqiZGPw#X1cR4cc^6ou4L!dG$cpK_k{qWk}<3fo% zfmb7k1Yf;E=LQ<+e=F$kW4Jc^^k9WSz;Wj4^{oc+r{gv-IN0h2f-jJVDC>^7gFcoD zO3F&lJhP;9x})t_&++Cr7(}`g*t?!RH)$qRoOxz(#Uy4_Hgv3SK&0>aebVPjYQISt zj2~ZIKCPs}Iz{+9*45uUGf}QKQ?R|4ZEyWJm{u}#=EUg}rso|u^nGPN?q`oF`fl=I zWrmQQrjG>lw@G`X={v{y(ngWSe-pB0>bu0J=SkDIg!9SNH-ht}wUg%OJlXm-l9q4G z)VFkVkF|4Kx0B}Q3yENEY>b}Us^5|0zX{oC`hB>3Y5LtaUk}-Q`aL)A>$21IJ8k*+ z^!saL^W;Upt9ELhH2q%MDS6WLJ7_w0q>!1HIj#C`o1gRa4Cch_GN)DFVDs~@>@-9lz&J$GCB~w?oG%c%YY*~~_@on#BemA&kS+nVh%lrufm>Q7B?-Q|UveEoR*}*A5vQa<5)_ib;XIQ7UsiA@2 z;^d<}ovh5*X$iU-lAS8Krj{R%OPMbY9R%r76Ee+4TPK>gsNa0BHNA_)R;^hp_6BSI z#ga$g$S|`4ErVE6vFC5+8ILjcAH#JmnCV2IGpI~?%(_DJp0g1yJqp_{RfD&LlPzp={csya=l9O$D6rlHH^lb&RFLM@nDsVP%4loUv0Za$VfeK(I ba4s+lm<@DRsO&63U2?iC&}D%`&I11*u3Q>& diff --git a/PrivilegeControl/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache b/PrivilegeControl/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache deleted file mode 100644 index 4ed377a0e7c488f89b37cee0f879de160e3425a7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6906 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 diff --git a/PrivilegeControl/obj/Debug/PrivilegeControl.dll b/PrivilegeControl/obj/Debug/PrivilegeControl.dll deleted file mode 100644 index 65804f3723e2d93fe94192ca25b05a84c0697805..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5120 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 diff --git a/ProcessPrivileges/AccessTokenHandle.cs b/ProcessPrivileges/AccessTokenHandle.cs deleted file mode 100644 index 515ef20..0000000 --- a/ProcessPrivileges/AccessTokenHandle.cs +++ /dev/null @@ -1,40 +0,0 @@ -// -// Copyright © Nick Lowe 2009 -// -// Nick Lowe -// nick@int-r.net -// http://processprivileges.codeplex.com/ - -namespace ProcessPrivileges -{ - using System.ComponentModel; - using System.Runtime.ConstrainedExecution; - using System.Runtime.InteropServices; - using Microsoft.Win32.SafeHandles; - - /// Handle to an access token. - public sealed class AccessTokenHandle : SafeHandleZeroOrMinusOneIsInvalid - { - internal AccessTokenHandle(ProcessHandle processHandle, TokenAccessRights tokenAccessRights) - : base(true) - { - if (!NativeMethods.OpenProcessToken(processHandle, tokenAccessRights, ref handle)) - { - throw new Win32Exception(Marshal.GetLastWin32Error()); - } - } - - /// Releases the handle. - /// Value indicating if the handle released successfully. - [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)] - protected override bool ReleaseHandle() - { - if (!NativeMethods.CloseHandle(handle)) - { - throw new Win32Exception(Marshal.GetLastWin32Error()); - } - - return true; - } - } -} \ No newline at end of file diff --git a/ProcessPrivileges/AllocatedMemory.cs b/ProcessPrivileges/AllocatedMemory.cs deleted file mode 100644 index e1915d0..0000000 --- a/ProcessPrivileges/AllocatedMemory.cs +++ /dev/null @@ -1,54 +0,0 @@ -// -// Copyright © Nick Lowe 2009 -// -// Nick Lowe -// nick@int-r.net -// http://processprivileges.codeplex.com/ - -namespace ProcessPrivileges -{ - using System; - using System.Diagnostics.CodeAnalysis; - using System.Runtime.InteropServices; - - internal sealed class AllocatedMemory : IDisposable - { - [SuppressMessage("Microsoft.Reliability", - "CA2006:UseSafeHandleToEncapsulateNativeResources", - Justification = "Not pointing to a native resource.")] - private IntPtr pointer; - - internal AllocatedMemory(int bytesRequired) - { - this.pointer = Marshal.AllocHGlobal(bytesRequired); - } - - ~AllocatedMemory() - { - this.InternalDispose(); - } - - internal IntPtr Pointer - { - get - { - return this.pointer; - } - } - - public void Dispose() - { - this.InternalDispose(); - GC.SuppressFinalize(this); - } - - private void InternalDispose() - { - if (this.pointer != IntPtr.Zero) - { - Marshal.FreeHGlobal(this.pointer); - this.pointer = IntPtr.Zero; - } - } - } -} \ No newline at end of file diff --git a/ProcessPrivileges/Enums.cs b/ProcessPrivileges/Enums.cs deleted file mode 100644 index 6a92038..0000000 --- a/ProcessPrivileges/Enums.cs +++ /dev/null @@ -1,154 +0,0 @@ -// -// Copyright © Nick Lowe 2009 -// -// Nick Lowe -// nick@int-r.net -// http://processprivileges.codeplex.com/ - -namespace ProcessPrivileges -{ - using System.Diagnostics.CodeAnalysis; - - /// Result from a privilege adjustment. - public enum AdjustPrivilegeResult - { - /// Privilege not modified. - None, - - /// Privilege modified. - PrivilegeModified - } - - /// Privilege determining the type of system operations that can be performed. - public enum Privilege - { - /// Privilege to replace a process-level token. - AssignPrimaryToken, - - /// Privilege to generate security audits. - Audit, - - /// Privilege to backup files and directories. - Backup, - - /// Privilege to bypass traverse checking. - ChangeNotify, - - /// Privilege to create global objects. - CreateGlobal, - - /// Privilege to create a pagefile. - CreatePageFile, - - /// Privilege to create permanent shared objects. - CreatePermanent, - - /// Privilege to create symbolic links. - CreateSymbolicLink, - - /// Privilege to create a token object. - CreateToken, - - /// Privilege to debug programs. - Debug, - - /// Privilege to enable computer and user accounts to be trusted for delegation. - EnableDelegation, - - /// Privilege to impersonate a client after authentication. - Impersonate, - - /// Privilege to increase scheduling priority. - IncreaseBasePriority, - - /// Privilege to adjust memory quotas for a process. - IncreaseQuota, - - /// Privilege to increase a process working set. - IncreaseWorkingSet, - - /// Privilege to load and unload device drivers. - LoadDriver, - - /// Privilege to lock pages in memory. - LockMemory, - - /// Privilege to add workstations to domain. - MachineAccount, - - /// Privilege to manage the files on a volume. - ManageVolume, - - /// Privilege to profile single process. - ProfileSingleProcess, - - /// Privilege to modify an object label. - [SuppressMessage( - "Microsoft.Naming", - "CA1704:IdentifiersShouldBeSpelledCorrectly", - Justification = "Spelling is correct.", - MessageId = "Relabel")] - Relabel, - - /// Privilege to force shutdown from a remote system. - RemoteShutdown, - - /// Privilege to restore files and directories. - Restore, - - /// Privilege to manage auditing and security log. - Security, - - /// Privilege to shut down the system. - Shutdown, - - /// Privilege to synchronize directory service data. - SyncAgent, - - /// Privilege to modify firmware environment values. - SystemEnvironment, - - /// Privilege to profile system performance. - SystemProfile, - - /// Privilege to change the system time. - SystemTime, - - /// Privilege to take ownership of files or other objects. - TakeOwnership, - - /// Privilege to act as part of the operating system. - TrustedComputerBase, - - /// Privilege to change the time zone. - TimeZone, - - /// Privilege to access Credential Manager as a trusted caller. - TrustedCredentialManagerAccess, - - /// Privilege to remove computer from docking station. - Undock, - - /// Privilege to read unsolicited input from a terminal device. - UnsolicitedInput - } - - /// State of a , derived from . - public enum PrivilegeState - { - /// - /// Privilege is disabled. - /// - Disabled, - - /// - /// Privilege is enabled. - /// - Enabled, - - /// - /// Privilege is removed. - /// - Removed - } -} \ No newline at end of file diff --git a/ProcessPrivileges/NativeEnums.cs b/ProcessPrivileges/NativeEnums.cs deleted file mode 100644 index 11edaa9..0000000 --- a/ProcessPrivileges/NativeEnums.cs +++ /dev/null @@ -1,180 +0,0 @@ -// -// Copyright © Nick Lowe 2009 -// -// Nick Lowe -// nick@int-r.net -// http://processprivileges.codeplex.com/ - -namespace ProcessPrivileges -{ - using System; - using System.Diagnostics.CodeAnalysis; - - /// - /// Privilege attributes that augment a with state information. - /// - /// - /// Use the following checks to interpret privilege attributes: - /// - /// // Privilege is disabled.
if (attributes == PrivilegeAttributes.Disabled) { /* ... */ }
- ///
- /// - /// // Privilege is enabled.
if ((attributes & PrivilegeAttributes.Enabled) == PrivilegeAttributes.Enabled) { /* ... */ }
- ///
- /// - /// // Privilege is removed.
if ((attributes & PrivilegeAttributes.Removed) == PrivilegeAttributes.Removed) { /* ... */ }
- ///
- /// To avoid having to work with a flags based enumerated type, use on attributes. - ///
- [Flags, - SuppressMessage( - "Microsoft.Design", - "CA1008:EnumsShouldHaveZeroValue", - Justification = "Native enum."), - SuppressMessage( - "Microsoft.Usage", - "CA2217:DoNotMarkEnumsWithFlags", - Justification = "Native enum.")] - public enum PrivilegeAttributes - { - /// Privilege is disabled. - Disabled = 0, - - /// Privilege is enabled by default. - EnabledByDefault = 1, - - /// Privilege is enabled. - Enabled = 2, - - /// Privilege is removed. - Removed = 4, - - /// Privilege used to gain access to an object or service. - UsedForAccess = -2147483648 - } - - /// Access rights for access tokens. - [Flags, - SuppressMessage( - "Microsoft.Design", - "CA1008:EnumsShouldHaveZeroValue", - Justification = "Native enum."), - SuppressMessage("Microsoft.Usage", - "CA2217:DoNotMarkEnumsWithFlags", - Justification = "Native enum.")] - public enum TokenAccessRights - { - /// Right to attach a primary token to a process. - AssignPrimary = 0, - - /// Right to duplicate an access token. - Duplicate = 1, - - /// Right to attach an impersonation access token to a process. - Impersonate = 4, - - /// Right to query an access token. - Query = 8, - - /// Right to query the source of an access token. - QuerySource = 16, - - /// Right to enable or disable the privileges in an access token. - AdjustPrivileges = 32, - - /// Right to adjust the attributes of the groups in an access token. - AdjustGroups = 64, - - /// Right to change the default owner, primary group, or DACL of an access token. - AdjustDefault = 128, - - /// Right to adjust the session ID of an access token. - AdjustSessionId = 256, - - /// Combines all possible access rights for a token. - AllAccess = AccessTypeMasks.StandardRightsRequired | - AssignPrimary | - Duplicate | - Impersonate | - Query | - QuerySource | - AdjustPrivileges | - AdjustGroups | - AdjustDefault | - AdjustSessionId, - - /// Combines the standard rights required to read with . - Read = AccessTypeMasks.StandardRightsRead | - Query, - - /// Combines the standard rights required to write with , and . - Write = AccessTypeMasks.StandardRightsWrite | - AdjustPrivileges | - AdjustGroups | - AdjustDefault, - - /// Combines the standard rights required to execute with . - Execute = AccessTypeMasks.StandardRightsExecute | - Impersonate - } - - [Flags] - internal enum AccessTypeMasks - { - Delete = 65536, - - ReadControl = 131072, - - WriteDAC = 262144, - - WriteOwner = 524288, - - Synchronize = 1048576, - - StandardRightsRequired = 983040, - - StandardRightsRead = ReadControl, - - StandardRightsWrite = ReadControl, - - StandardRightsExecute = ReadControl, - - StandardRightsAll = 2031616, - - SpecificRightsAll = 65535 - } - - internal enum TokenInformationClass - { - None, - TokenUser, - TokenGroups, - TokenPrivileges, - TokenOwner, - TokenPrimaryGroup, - TokenDefaultDacl, - TokenSource, - TokenType, - TokenImpersonationLevel, - TokenStatistics, - TokenRestrictedSids, - TokenSessionId, - TokenGroupsAndPrivileges, - TokenSessionReference, - TokenSandBoxInert, - TokenAuditPolicy, - TokenOrigin, - TokenElevationType, - TokenLinkedToken, - TokenElevation, - TokenHasRestrictions, - TokenAccessInformation, - TokenVirtualizationAllowed, - TokenVirtualizationEnabled, - TokenIntegrityLevel, - TokenUIAccess, - TokenMandatoryPolicy, - TokenLogonSid, - MaxTokenInfoClass - } -} \ No newline at end of file diff --git a/ProcessPrivileges/NativeMethods.cs b/ProcessPrivileges/NativeMethods.cs deleted file mode 100644 index 71a9a56..0000000 --- a/ProcessPrivileges/NativeMethods.cs +++ /dev/null @@ -1,78 +0,0 @@ -// -// Copyright © Nick Lowe 2009 -// -// Nick Lowe -// nick@int-r.net -// http://processprivileges.codeplex.com/ - -namespace ProcessPrivileges -{ - using System; - using System.Runtime.ConstrainedExecution; - using System.Runtime.InteropServices; - using System.Security; - using System.Text; - - /// Static class containing Win32 native methods. - internal static class NativeMethods - { - internal const int ErrorInsufficientBuffer = 122; - - private const string AdvApi32 = "advapi32.dll"; - - private const string Kernel32 = "kernel32.dll"; - - [DllImport(AdvApi32, SetLastError = true), - SuppressUnmanagedCodeSecurity] - [return: MarshalAs(UnmanagedType.Bool)] - internal static extern bool AdjustTokenPrivileges( - [In] AccessTokenHandle accessTokenHandle, - [In, MarshalAs(UnmanagedType.Bool)] bool disableAllPrivileges, - [In] ref TokenPrivilege newState, - [In] int bufferLength, - [In, Out] ref TokenPrivilege previousState, - [In, Out] ref int returnLength); - - [DllImport(Kernel32, SetLastError = true), - ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail), - SuppressUnmanagedCodeSecurity] - [return: MarshalAs(UnmanagedType.Bool)] - internal static extern bool CloseHandle( - [In] IntPtr handle); - - [DllImport(AdvApi32, CharSet = CharSet.Unicode, SetLastError = true), - SuppressUnmanagedCodeSecurity] - [return: MarshalAs(UnmanagedType.Bool)] - internal static extern bool LookupPrivilegeName( - [In] string systemName, - [In] ref Luid luid, - [In, Out] StringBuilder name, - [In, Out] ref int nameLength); - - [DllImport(AdvApi32, CharSet = CharSet.Unicode, SetLastError = true), - SuppressUnmanagedCodeSecurity] - [return: MarshalAs(UnmanagedType.Bool)] - internal static extern bool LookupPrivilegeValue( - [In] string systemName, - [In] string name, - [In, Out] ref Luid luid); - - [DllImport(AdvApi32, SetLastError = true), - SuppressUnmanagedCodeSecurity] - [return: MarshalAs(UnmanagedType.Bool)] - internal static extern bool GetTokenInformation( - [In] AccessTokenHandle accessTokenHandle, - [In] TokenInformationClass tokenInformationClass, - [Out] IntPtr tokenInformation, - [In] int tokenInformationLength, - [In, Out] ref int returnLength); - - [DllImport(AdvApi32, SetLastError = true), - SuppressUnmanagedCodeSecurity] - [return: MarshalAs(UnmanagedType.Bool)] - internal static extern bool OpenProcessToken( - [In] ProcessHandle processHandle, - [In] TokenAccessRights desiredAccess, - [In, Out] ref IntPtr tokenHandle); - } -} \ No newline at end of file diff --git a/ProcessPrivileges/NativeStructs.cs b/ProcessPrivileges/NativeStructs.cs deleted file mode 100644 index 9e2446e..0000000 --- a/ProcessPrivileges/NativeStructs.cs +++ /dev/null @@ -1,35 +0,0 @@ -// -// Copyright © Nick Lowe 2009 -// -// Nick Lowe -// nick@int-r.net -// http://processprivileges.codeplex.com/ - -namespace ProcessPrivileges -{ - using System.Runtime.InteropServices; - - [StructLayout(LayoutKind.Sequential)] - internal struct Luid - { - internal int LowPart; - - internal int HighPart; - } - - [StructLayout(LayoutKind.Sequential)] - internal struct LuidAndAttributes - { - internal Luid Luid; - - internal PrivilegeAttributes Attributes; - } - - [StructLayout(LayoutKind.Sequential)] - internal struct TokenPrivilege - { - internal int PrivilegeCount; - - internal LuidAndAttributes Privilege; - } -} \ No newline at end of file diff --git a/ProcessPrivileges/PrivilegeAndAttributes.cs b/ProcessPrivileges/PrivilegeAndAttributes.cs deleted file mode 100644 index 065ade9..0000000 --- a/ProcessPrivileges/PrivilegeAndAttributes.cs +++ /dev/null @@ -1,102 +0,0 @@ -// -// Copyright © Nick Lowe 2009 -// -// Nick Lowe -// nick@int-r.net -// http://processprivileges.codeplex.com/ - -namespace ProcessPrivileges -{ - using System; - - /// Structure that links and together. - public struct PrivilegeAndAttributes : IEquatable - { - private readonly Privilege privilege; - - private readonly PrivilegeAttributes privilegeAttributes; - - internal PrivilegeAndAttributes(Privilege privilege, PrivilegeAttributes privilegeAttributes) - { - this.privilege = privilege; - this.privilegeAttributes = privilegeAttributes; - } - - /// Gets the privilege. - /// The privilege. - public Privilege Privilege - { - get - { - return this.privilege; - } - } - - /// Gets the privilege attributes. - /// The privilege attributes. - public PrivilegeAttributes PrivilegeAttributes - { - get - { - return this.privilegeAttributes; - } - } - - /// Gets the privilege state. - /// The privilege state. - /// Derived from . - public PrivilegeState PrivilegeState - { - get - { - return ProcessExtensions.GetPrivilegeState(this.privilegeAttributes); - } - } - - /// Compares two instances for equality. - /// First instance. - /// Second instance. - /// Value indicating equality of instances. - public static bool operator ==(PrivilegeAndAttributes first, PrivilegeAndAttributes second) - { - return first.Equals(second); - } - - /// Compares two instances for inequality. - /// First instance. - /// Second instance. - /// Value indicating inequality of instances. - public static bool operator !=(PrivilegeAndAttributes first, PrivilegeAndAttributes second) - { - return !first.Equals(second); - } - - /// Returns the hash code for this instance. - /// The hash code for this instance. - public override int GetHashCode() - { - return this.privilege.GetHashCode() ^ this.privilegeAttributes.GetHashCode(); - } - - /// Indicates whether this instance and a specified object are equal. - /// Another object to compare to. - /// Value indicating whether this instance and a specified object are equal. - public override bool Equals(object obj) - { - return obj is PrivilegeAttributes ? this.Equals((PrivilegeAttributes)obj) : false; - } - - /// Indicates whether this instance and another instance are equal. - /// Another instance to compare to. - /// Value indicating whether this instance and another instance are equal. - public bool Equals(PrivilegeAndAttributes other) - { - return this.privilege == other.Privilege && this.privilegeAttributes == other.PrivilegeAttributes; - } - - public override string ToString() - { - return privilege.ToString(); - } - } -} \ No newline at end of file diff --git a/ProcessPrivileges/PrivilegeAndAttributesCollection.cs b/ProcessPrivileges/PrivilegeAndAttributesCollection.cs deleted file mode 100644 index 8b46bac..0000000 --- a/ProcessPrivileges/PrivilegeAndAttributesCollection.cs +++ /dev/null @@ -1,49 +0,0 @@ -// -// Copyright © Nick Lowe 2009 -// -// Nick Lowe -// nick@int-r.net -// http://processprivileges.codeplex.com/ - -namespace ProcessPrivileges -{ - using System; - using System.Collections.Generic; - using System.Collections.ObjectModel; - using System.Linq; - using System.Text; - - /// Read-only collection of privilege and attributes. - [Serializable] - public sealed class PrivilegeAndAttributesCollection : ReadOnlyCollection - { - internal PrivilegeAndAttributesCollection(IList list) - : base(list) - { - } - - /// Returns a representation of the collection. - /// representation of the collection. - public override string ToString() - { - StringBuilder stringBuilder = new StringBuilder(); - int maxPrivilegeLength = this.Max(privilegeAndAttributes => privilegeAndAttributes.Privilege.ToString().Length); - foreach (PrivilegeAndAttributes privilegeAndAttributes in this) - { - stringBuilder.Append(privilegeAndAttributes.Privilege); - int paddingLength = maxPrivilegeLength - privilegeAndAttributes.Privilege.ToString().Length; - char[] padding = new char[paddingLength]; - for (int i = 0; i < paddingLength; i++) - { - padding[i] = ' '; - } - - stringBuilder.Append(padding); - stringBuilder.Append(" => "); - stringBuilder.AppendLine(privilegeAndAttributes.PrivilegeAttributes.ToString()); - } - - return stringBuilder.ToString(); - } - } -} \ No newline at end of file diff --git a/ProcessPrivileges/PrivilegeEnabler.cs b/ProcessPrivileges/PrivilegeEnabler.cs deleted file mode 100644 index d2e9cc5..0000000 --- a/ProcessPrivileges/PrivilegeEnabler.cs +++ /dev/null @@ -1,220 +0,0 @@ -// -// Copyright © Nick Lowe 2009 -// -// Nick Lowe -// nick@int-r.net -// http://processprivileges.codeplex.com/ - -namespace ProcessPrivileges -{ - using System; - using System.Collections.Generic; - using System.Diagnostics; - using System.Linq; - using System.Security.Permissions; - - /// Enables privileges on a process in a safe way, ensuring that they are returned to their original state when an operation that requires a privilege completes. - /// - /// - /// using System; - /// using System.Diagnostics; - /// using ProcessPrivileges; - /// - /// internal static class PrivilegeEnablerExample - /// { - /// public static void Main() - /// { - /// Process process = Process.GetCurrentProcess(); - /// - /// using (new PrivilegeEnabler(process, Privilege.TakeOwnership)) - /// { - /// // Privilege is enabled within the using block. - /// Console.WriteLine( - /// "{0} => {1}", - /// Privilege.TakeOwnership, - /// process.GetPrivilegeState(Privilege.TakeOwnership)); - /// } - /// - /// // Privilege is disabled outside the using block. - /// Console.WriteLine( - /// "{0} => {1}", - /// Privilege.TakeOwnership, - /// process.GetPrivilegeState(Privilege.TakeOwnership)); - /// } - /// } - /// - /// - /// - /// When disabled, privileges are enabled until the instance of the PrivilegeEnabler class is disposed. - /// If the privilege specified is already enabled, it is not modified and will not be disabled when the instance of the PrivilegeEnabler class is disposed. - /// If desired, multiple privileges can be specified in the constructor. - /// If using multiple instances on the same process, do not dispose of them out-of-order. Making use of a using statement, the recommended method, enforces this. - /// For more information on privileges, see: - ///
Privileges - /// Privilege Constants - /// - public sealed class PrivilegeEnabler : IDisposable - { - private static readonly Dictionary sharedPrivileges = - new Dictionary(); - - private static readonly Dictionary accessTokenHandles = - new Dictionary(); - - private AccessTokenHandle accessTokenHandle; - - private bool disposed; - - private bool ownsHandle; - - private Process process; - - /// Initializes a new instance of the PrivilegeEnabler class. - /// The for a on which privileges should be enabled. - /// Thrown when another instance exists and has not been disposed. - /// Requires the immediate caller to have FullTrust. - [PermissionSetAttribute(SecurityAction.LinkDemand, Name = "FullTrust")] - public PrivilegeEnabler(AccessTokenHandle accessTokenHandle) - { - this.accessTokenHandle = accessTokenHandle; - } - - /// Initializes a new instance of the PrivilegeEnabler class. - /// The on which privileges should be enabled. - /// Thrown when another instance exists and has not been disposed. - /// Requires the immediate caller to have FullTrust. - [PermissionSetAttribute(SecurityAction.LinkDemand, Name = "FullTrust")] - public PrivilegeEnabler(Process process) - { - lock (accessTokenHandles) - { - if (accessTokenHandles.ContainsKey(process)) - { - this.accessTokenHandle = accessTokenHandles[process]; - } - else - { - this.accessTokenHandle = - process.GetAccessTokenHandle(TokenAccessRights.AdjustPrivileges | TokenAccessRights.Query); - accessTokenHandles.Add(process, this.accessTokenHandle); - this.ownsHandle = true; - } - } - - this.process = process; - } - - /// Initializes a new instance of the PrivilegeEnabler class with the specified privileges to be enabled. - /// The for a on which privileges should be enabled. - /// The privileges to be enabled. - /// Thrown when an underlying Win32 function call does not succeed. - /// Requires the immediate caller to have FullTrust. - [PermissionSetAttribute(SecurityAction.LinkDemand, Name = "FullTrust")] - public PrivilegeEnabler(AccessTokenHandle accessTokenHandle, params Privilege[] privileges) - : this(accessTokenHandle) - { - foreach (Privilege privilege in privileges) - { - this.EnablePrivilege(privilege); - } - } - - /// Initializes a new instance of the PrivilegeEnabler class with the specified privileges to be enabled. - /// The on which privileges should be enabled. - /// The privileges to be enabled. - /// Thrown when an underlying Win32 function call does not succeed. - /// Requires the immediate caller to have FullTrust. - [PermissionSetAttribute(SecurityAction.LinkDemand, Name = "FullTrust")] - public PrivilegeEnabler(Process process, params Privilege[] privileges) - : this(process) - { - foreach (Privilege privilege in privileges) - { - this.EnablePrivilege(privilege); - } - } - - /// Finalizes an instance of the PrivilegeEnabler class. - ~PrivilegeEnabler() - { - this.InternalDispose(); - } - - /// Disposes of an instance of the PrivilegeEnabler class. - /// Thrown when an underlying Win32 function call does not succeed. - /// Requires the call stack to have FullTrust. - [PermissionSetAttribute(SecurityAction.Demand, Name = "FullTrust")] - public void Dispose() - { - this.InternalDispose(); - GC.SuppressFinalize(this); - } - - /// Enables the specified . - /// The to be enabled. - /// - /// Result from the privilege adjustment. - /// If the is already enabled, is returned. - /// If the is owned by another instance of the PrivilegeEnabler class, is returned. - /// If a is removed from a process, it cannot be enabled. - /// - /// - /// When disabled, privileges are enabled until the instance of the PrivilegeEnabler class is disposed. - /// If the privilege specified is already enabled, it is not modified and will not be disabled when the instance of the PrivilegeEnabler class is disposed. - /// - /// Thrown when an underlying Win32 function call does not succeed. - /// Requires the immediate caller to have FullTrust. - [PermissionSetAttribute(SecurityAction.LinkDemand, Name = "FullTrust")] - public AdjustPrivilegeResult EnablePrivilege(Privilege privilege) - { - lock (sharedPrivileges) - { - if (!sharedPrivileges.ContainsKey(privilege) && - this.accessTokenHandle.GetPrivilegeState(privilege) == PrivilegeState.Disabled && - this.accessTokenHandle.EnablePrivilege(privilege) == AdjustPrivilegeResult.PrivilegeModified) - { - sharedPrivileges.Add(privilege, this); - return AdjustPrivilegeResult.PrivilegeModified; - } - - return AdjustPrivilegeResult.None; - } - } - - [PermissionSetAttribute(SecurityAction.LinkDemand, Name = "FullTrust")] - private void InternalDispose() - { - if (!this.disposed) - { - lock (sharedPrivileges) - { - Privilege[] privileges = sharedPrivileges - .Where(keyValuePair => keyValuePair.Value == this) - .Select(keyValuePair => keyValuePair.Key) - .ToArray(); - - foreach (Privilege privilege in privileges) - { - this.accessTokenHandle.DisablePrivilege(privilege); - sharedPrivileges.Remove(privilege); - } - - if (this.ownsHandle) - { - this.accessTokenHandle.Dispose(); - lock (this.accessTokenHandle) - { - accessTokenHandles.Remove(this.process); - } - } - - this.accessTokenHandle = null; - this.ownsHandle = false; - this.process = null; - - this.disposed = true; - } - } - } - } -} \ No newline at end of file diff --git a/ProcessPrivileges/Privileges.cs b/ProcessPrivileges/Privileges.cs deleted file mode 100644 index d225dc5..0000000 --- a/ProcessPrivileges/Privileges.cs +++ /dev/null @@ -1,319 +0,0 @@ -// -// Copyright © Nick Lowe 2009 -// -// Nick Lowe -// nick@int-r.net -// http://processprivileges.codeplex.com/ - -namespace ProcessPrivileges -{ - using System; - using System.Collections.Generic; - using System.ComponentModel; - using System.Runtime.InteropServices; - using System.Text; - - internal static class Privileges - { - private const int PrivilegesCount = 35; - - private const string SeAssignPrimaryTokenPrivilege = "SeAssignPrimaryTokenPrivilege"; - private const string SeAuditPrivilege = "SeAuditPrivilege"; - private const string SeBackupPrivilege = "SeBackupPrivilege"; - private const string SeChangeNotifyPrivilege = "SeChangeNotifyPrivilege"; - private const string SeCreateGlobalPrivilege = "SeCreateGlobalPrivilege"; - private const string SeCreatePagefilePrivilege = "SeCreatePagefilePrivilege"; - private const string SeCreatePermanentPrivilege = "SeCreatePermanentPrivilege"; - private const string SeCreateSymbolicLinkPrivilege = "SeCreateSymbolicLinkPrivilege"; - private const string SeCreateTokenPrivilege = "SeCreateTokenPrivilege"; - private const string SeDebugPrivilege = "SeDebugPrivilege"; - private const string SeEnableDelegationPrivilege = "SeEnableDelegationPrivilege"; - private const string SeImpersonatePrivilege = "SeImpersonatePrivilege"; - private const string SeIncreaseBasePriorityPrivilege = "SeIncreaseBasePriorityPrivilege"; - private const string SeIncreaseQuotaPrivilege = "SeIncreaseQuotaPrivilege"; - private const string SeIncreaseWorkingSetPrivilege = "SeIncreaseWorkingSetPrivilege"; - private const string SeLoadDriverPrivilege = "SeLoadDriverPrivilege"; - private const string SeLockMemoryPrivilege = "SeLockMemoryPrivilege"; - private const string SeMachineAccountPrivilege = "SeMachineAccountPrivilege"; - private const string SeManageVolumePrivilege = "SeManageVolumePrivilege"; - private const string SeProfileSingleProcessPrivilege = "SeProfileSingleProcessPrivilege"; - private const string SeRelabelPrivilege = "SeRelabelPrivilege"; - private const string SeRemoteShutdownPrivilege = "SeRemoteShutdownPrivilege"; - private const string SeRestorePrivilege = "SeRestorePrivilege"; - private const string SeSecurityPrivilege = "SeSecurityPrivilege"; - private const string SeShutdownPrivilege = "SeShutdownPrivilege"; - private const string SeSyncAgentPrivilege = "SeSyncAgentPrivilege"; - private const string SeSystemEnvironmentPrivilege = "SeSystemEnvironmentPrivilege"; - private const string SeSystemProfilePrivilege = "SeSystemProfilePrivilege"; - private const string SeSystemTimePrivilege = "SeSystemtimePrivilege"; - private const string SeTakeOwnershipPrivilege = "SeTakeOwnershipPrivilege"; - private const string SeTcbPrivilege = "SeTcbPrivilege"; - private const string SeTimeZonePrivilege = "SeTimeZonePrivilege"; - private const string SeTrustedCredManAccessPrivilege = "SeTrustedCredManAccessPrivilege"; - private const string SeUndockPrivilege = "SeUndockPrivilege"; - private const string SeUnsolicitedInputPrivilege = "SeUnsolicitedInputPrivilege"; - - private static readonly Dictionary luidDictionary = - new Dictionary(PrivilegesCount); - - private static readonly Dictionary privilegeConstantsDictionary = - new Dictionary(PrivilegesCount) - { - { Privilege.AssignPrimaryToken, SeAssignPrimaryTokenPrivilege }, - { Privilege.Audit, SeAuditPrivilege }, - { Privilege.Backup, SeBackupPrivilege }, - { Privilege.ChangeNotify, SeChangeNotifyPrivilege }, - { Privilege.CreateGlobal, SeCreateGlobalPrivilege }, - { Privilege.CreatePageFile, SeCreatePagefilePrivilege }, - { Privilege.CreatePermanent, SeCreatePermanentPrivilege }, - { Privilege.CreateSymbolicLink, SeCreateSymbolicLinkPrivilege }, - { Privilege.CreateToken, SeCreateTokenPrivilege }, - { Privilege.Debug, SeDebugPrivilege }, - { Privilege.EnableDelegation, SeEnableDelegationPrivilege }, - { Privilege.Impersonate, SeImpersonatePrivilege }, - { Privilege.IncreaseBasePriority, SeIncreaseBasePriorityPrivilege }, - { Privilege.IncreaseQuota, SeIncreaseQuotaPrivilege }, - { Privilege.IncreaseWorkingSet, SeIncreaseWorkingSetPrivilege }, - { Privilege.LoadDriver, SeLoadDriverPrivilege }, - { Privilege.LockMemory, SeLockMemoryPrivilege }, - { Privilege.MachineAccount, SeMachineAccountPrivilege }, - { Privilege.ManageVolume, SeManageVolumePrivilege }, - { Privilege.ProfileSingleProcess, SeProfileSingleProcessPrivilege }, - { Privilege.Relabel, SeRelabelPrivilege }, - { Privilege.RemoteShutdown, SeRemoteShutdownPrivilege }, - { Privilege.Restore, SeRestorePrivilege }, - { Privilege.Security, SeSecurityPrivilege }, - { Privilege.Shutdown, SeShutdownPrivilege }, - { Privilege.SyncAgent, SeSyncAgentPrivilege }, - { Privilege.SystemEnvironment, SeSystemEnvironmentPrivilege }, - { Privilege.SystemProfile, SeSystemProfilePrivilege }, - { Privilege.SystemTime, SeSystemTimePrivilege }, - { Privilege.TakeOwnership, SeTakeOwnershipPrivilege }, - { Privilege.TrustedComputerBase, SeTcbPrivilege }, - { Privilege.TimeZone, SeTimeZonePrivilege }, - { Privilege.TrustedCredentialManagerAccess, SeTrustedCredManAccessPrivilege }, - { Privilege.Undock, SeUndockPrivilege }, - { Privilege.UnsolicitedInput, SeUnsolicitedInputPrivilege } - }; - - private static readonly Dictionary privilegesDictionary = - new Dictionary(PrivilegesCount) - { - { SeAssignPrimaryTokenPrivilege, Privilege.AssignPrimaryToken }, - { SeAuditPrivilege, Privilege.Audit }, - { SeBackupPrivilege, Privilege.Backup }, - { SeChangeNotifyPrivilege, Privilege.ChangeNotify }, - { SeCreateGlobalPrivilege, Privilege.CreateGlobal }, - { SeCreatePagefilePrivilege, Privilege.CreatePageFile }, - { SeCreatePermanentPrivilege, Privilege.CreatePermanent }, - { SeCreateSymbolicLinkPrivilege, Privilege.CreateSymbolicLink }, - { SeCreateTokenPrivilege, Privilege.CreateToken }, - { SeDebugPrivilege, Privilege.Debug }, - { SeEnableDelegationPrivilege, Privilege.EnableDelegation }, - { SeImpersonatePrivilege, Privilege.Impersonate }, - { SeIncreaseBasePriorityPrivilege, Privilege.IncreaseBasePriority }, - { SeIncreaseQuotaPrivilege, Privilege.IncreaseQuota }, - { SeIncreaseWorkingSetPrivilege, Privilege.IncreaseWorkingSet }, - { SeLoadDriverPrivilege, Privilege.LoadDriver }, - { SeLockMemoryPrivilege, Privilege.LockMemory }, - { SeMachineAccountPrivilege, Privilege.MachineAccount }, - { SeManageVolumePrivilege, Privilege.ManageVolume }, - { SeProfileSingleProcessPrivilege, Privilege.ProfileSingleProcess }, - { SeRelabelPrivilege, Privilege.Relabel }, - { SeRemoteShutdownPrivilege, Privilege.RemoteShutdown }, - { SeRestorePrivilege, Privilege.Restore }, - { SeSecurityPrivilege, Privilege.Security }, - { SeShutdownPrivilege, Privilege.Shutdown }, - { SeSyncAgentPrivilege, Privilege.SyncAgent }, - { SeSystemEnvironmentPrivilege, Privilege.SystemEnvironment }, - { SeSystemProfilePrivilege, Privilege.SystemProfile }, - { SeSystemTimePrivilege, Privilege.SystemTime }, - { SeTakeOwnershipPrivilege, Privilege.TakeOwnership }, - { SeTcbPrivilege, Privilege.TrustedComputerBase }, - { SeTimeZonePrivilege, Privilege.TimeZone }, - { SeTrustedCredManAccessPrivilege, Privilege.TrustedCredentialManagerAccess }, - { SeUndockPrivilege, Privilege.Undock }, - { SeUnsolicitedInputPrivilege, Privilege.UnsolicitedInput } - }; - - internal static AdjustPrivilegeResult DisablePrivilege(AccessTokenHandle accessTokenHandle, Privilege privilege) - { - return AdjustPrivilege(accessTokenHandle, privilege, PrivilegeAttributes.Disabled); - } - - internal static AdjustPrivilegeResult EnablePrivilege(AccessTokenHandle accessTokenHandle, Privilege privilege) - { - return AdjustPrivilege(accessTokenHandle, privilege, PrivilegeAttributes.Enabled); - } - - internal static AdjustPrivilegeResult RemovePrivilege(AccessTokenHandle accessTokenHandle, Privilege privilege) - { - return AdjustPrivilege(accessTokenHandle, privilege, PrivilegeAttributes.Removed); - } - - internal static PrivilegeAttributes GetPrivilegeAttributes(Privilege privilege, PrivilegeAndAttributesCollection privileges) - { - foreach (PrivilegeAndAttributes privilegeAndAttributes in privileges) - { - if (privilegeAndAttributes.Privilege == privilege) - { - return privilegeAndAttributes.PrivilegeAttributes; - } - } - - GetLuid(privilege); - - return PrivilegeAttributes.Removed; - } - - internal static PrivilegeAndAttributesCollection GetPrivileges(AccessTokenHandle accessTokenHandle) - { - LuidAndAttributes[] luidAndAttributesArray = GetTokenPrivileges(accessTokenHandle); - int length = luidAndAttributesArray.Length; - List privilegeAndAttributes = new List(length); - for (int i = 0; i < length; i++) - { - LuidAndAttributes luidAndAttributes = luidAndAttributesArray[i]; - string name = GetPrivilegeName(luidAndAttributes.Luid); - if (privilegesDictionary.ContainsKey(name)) - { - privilegeAndAttributes.Add(new PrivilegeAndAttributes( - privilegesDictionary[name], - luidAndAttributes.Attributes)); - } - } - - return new PrivilegeAndAttributesCollection(privilegeAndAttributes); - } - - private static AdjustPrivilegeResult AdjustPrivilege( - AccessTokenHandle accessTokenHandle, - Luid luid, - PrivilegeAttributes privilegeAttributes) - { - TokenPrivilege newState = new TokenPrivilege - { - PrivilegeCount = 1, - Privilege = new LuidAndAttributes - { - Attributes = privilegeAttributes, - Luid = luid - } - }; - TokenPrivilege previousState = new TokenPrivilege(); - int returnLength = 0; - - if (!NativeMethods.AdjustTokenPrivileges( - accessTokenHandle, - false, - ref newState, - Marshal.SizeOf(previousState), - ref previousState, - ref returnLength)) - { - throw new Win32Exception(Marshal.GetLastWin32Error()); - } - - return (AdjustPrivilegeResult)previousState.PrivilegeCount; - } - - private static AdjustPrivilegeResult AdjustPrivilege( - AccessTokenHandle accessTokenHandle, - Privilege privilege, - PrivilegeAttributes privilegeAttributes) - { - return AdjustPrivilege(accessTokenHandle, GetLuid(privilege), privilegeAttributes); - } - - private static Luid GetLuid(Privilege privilege) - { - if (luidDictionary.ContainsKey(privilege)) - { - return luidDictionary[privilege]; - } - - Luid luid = new Luid(); - if (!NativeMethods.LookupPrivilegeValue(String.Empty, privilegeConstantsDictionary[privilege], ref luid)) - { - throw new Win32Exception(Marshal.GetLastWin32Error()); - } - - luidDictionary.Add(privilege, luid); - return luid; - } - - private static string GetPrivilegeName(Luid luid) - { - StringBuilder nameBuilder = new StringBuilder(); - int nameLength = 0; - if (NativeMethods.LookupPrivilegeName(String.Empty, ref luid, nameBuilder, ref nameLength)) - { - return String.Empty; - } - - int lastWin32Error = Marshal.GetLastWin32Error(); - if (lastWin32Error != NativeMethods.ErrorInsufficientBuffer) - { - throw new Win32Exception(lastWin32Error); - } - - nameBuilder.EnsureCapacity(nameLength); - if (!NativeMethods.LookupPrivilegeName(String.Empty, ref luid, nameBuilder, ref nameLength)) - { - throw new Win32Exception(Marshal.GetLastWin32Error()); - } - - return nameBuilder.ToString(); - } - - private static LuidAndAttributes[] GetTokenPrivileges(AccessTokenHandle accessTokenHandle) - { - int tokenInformationLength = 0; - int returnLength = 0; - if (NativeMethods.GetTokenInformation( - accessTokenHandle, - TokenInformationClass.TokenPrivileges, - IntPtr.Zero, - tokenInformationLength, - ref returnLength)) - { - return new LuidAndAttributes[0]; - } - - int lastWin32Error = Marshal.GetLastWin32Error(); - if (lastWin32Error != NativeMethods.ErrorInsufficientBuffer) - { - throw new Win32Exception(lastWin32Error); - } - - tokenInformationLength = returnLength; - returnLength = 0; - - using (AllocatedMemory allocatedMemory = new AllocatedMemory(tokenInformationLength)) - { - if (!NativeMethods.GetTokenInformation( - accessTokenHandle, - TokenInformationClass.TokenPrivileges, - allocatedMemory.Pointer, - tokenInformationLength, - ref returnLength)) - { - throw new Win32Exception(Marshal.GetLastWin32Error()); - } - - int privilegeCount = Marshal.ReadInt32(allocatedMemory.Pointer); - LuidAndAttributes[] luidAndAttributes = new LuidAndAttributes[privilegeCount]; - long pointer = allocatedMemory.Pointer.ToInt64() + Marshal.SizeOf(privilegeCount); - Type type = typeof(LuidAndAttributes); - long size = Marshal.SizeOf(type); - for (int i = 0; i < privilegeCount; i++) - { - luidAndAttributes[i] = (LuidAndAttributes)Marshal.PtrToStructure(new IntPtr(pointer), type); - pointer += size; - } - - return luidAndAttributes; - } - } - } -} \ No newline at end of file diff --git a/ProcessPrivileges/ProcessExtensions.cs b/ProcessPrivileges/ProcessExtensions.cs deleted file mode 100644 index 5210580..0000000 --- a/ProcessPrivileges/ProcessExtensions.cs +++ /dev/null @@ -1,423 +0,0 @@ -// -// Copyright © Nick Lowe 2009 -// -// Nick Lowe -// nick@int-r.net -// http://processprivileges.codeplex.com/ - -namespace ProcessPrivileges -{ - using System.Diagnostics; - using System.Runtime.CompilerServices; - using System.Security.Permissions; - - /// Provides extension methods to the class, implementing the functionality necessary to query, enable, disable or remove privileges on a process. - /// - /// - /// using System; - /// using System.Diagnostics; - /// using System.Linq; - /// using ProcessPrivileges; - /// - /// internal static class ProcessPrivilegesExample - /// { - /// public static void Main() - /// { - /// // Get the current process. - /// Process process = Process.GetCurrentProcess(); - /// - /// // Get the privileges and associated attributes. - /// PrivilegeAndAttributesCollection privileges = process.GetPrivileges(); - /// - /// int maxPrivilegeLength = privileges.Max(privilege => privilege.Privilege.ToString().Length); - /// - /// foreach (PrivilegeAndAttributes privilegeAndAttributes in privileges) - /// { - /// // The privilege. - /// Privilege privilege = privilegeAndAttributes.Privilege; - /// - /// // The privilege state. - /// PrivilegeState privilegeState = privilegeAndAttributes.PrivilegeState; - /// - /// // Write out the privilege and its state. - /// Console.WriteLine( - /// "{0}{1} => {2}", - /// privilege, - /// GetPadding(privilege.ToString().Length, maxPrivilegeLength), - /// privilegeState); - /// } - /// - /// Console.WriteLine(); - /// - /// // Privileges can only be enabled on a process if they are disabled. - /// if (process.GetPrivilegeState(Privilege.TakeOwnership) == PrivilegeState.Disabled) - /// { - /// // Enable the TakeOwnership privilege on it. - /// AdjustPrivilegeResult result = process.EnablePrivilege(Privilege.TakeOwnership); - /// - /// // Get the state of the TakeOwnership privilege. - /// PrivilegeState takeOwnershipState = process.GetPrivilegeState(Privilege.TakeOwnership); - /// - /// // Write out the TakeOwnership privilege, its state and the result. - /// Console.WriteLine( - /// "{0}{1} => {2} ({3})", - /// Privilege.TakeOwnership, - /// GetPadding(Privilege.TakeOwnership.ToString().Length, maxPrivilegeLength), - /// takeOwnershipState, - /// result); - /// } - /// } - /// - /// private static string GetPadding(int length, int maxLength) - /// { - /// int paddingLength = maxLength - length; - /// char[] padding = new char[paddingLength]; - /// for (int i = 0; i < paddingLength; i++) - /// { - /// padding[i] = ' '; - /// } - /// - /// return new string(padding); - /// } - /// } - /// - /// - /// using System; - /// using System.Diagnostics; - /// using ProcessPrivileges; - /// - /// internal static class ReusingAccessTokenHandleExample - /// { - /// public static void Main() - /// { - /// // Access token handle reused within the using block. - /// using (AccessTokenHandle accessTokenHandle = - /// Process.GetCurrentProcess().GetAccessTokenHandle( - /// TokenAccessRights.AdjustPrivileges | TokenAccessRights.Query)) - /// { - /// // Enable privileges using the same access token handle. - /// AdjustPrivilegeResult backupResult = accessTokenHandle.EnablePrivilege(Privilege.Backup); - /// AdjustPrivilegeResult restoreResult = accessTokenHandle.EnablePrivilege(Privilege.Restore); - /// - /// Console.WriteLine( - /// "{0} => {1} ({2})", - /// Privilege.Backup, - /// accessTokenHandle.GetPrivilegeState(Privilege.Backup), - /// backupResult); - /// - /// Console.WriteLine( - /// "{0} => {1} ({2})", - /// Privilege.Restore, - /// accessTokenHandle.GetPrivilegeState(Privilege.Restore), - /// restoreResult); - /// } - /// } - /// } - /// - /// - /// - /// For more information on privileges, see: - /// Privileges - /// Privilege Constants - /// - public static class ProcessExtensions - { - /// Disables the specified on a . - /// The for a on which the operation should be performed. - /// The to be disabled. - /// - /// Result from the privilege adjustment. - /// If the is already disabled, is returned. - /// - /// Thrown when an underlying Win32 function call does not succeed. - /// Requires the immediate caller to have FullTrust. - /// The caller must have permission to query and adjust token privileges on the target process. - [MethodImpl(MethodImplOptions.Synchronized), - PermissionSetAttribute(SecurityAction.LinkDemand, Name = "FullTrust")] - public static AdjustPrivilegeResult DisablePrivilege(this AccessTokenHandle accessTokenHandle, Privilege privilege) - { - return Privileges.DisablePrivilege(accessTokenHandle, privilege); - } - - /// Disables the specified on a . - /// The on which the operation should be performed. - /// The to be disabled. - /// - /// Result from the privilege adjustment. - /// If the is already disabled, is returned. - /// - /// Thrown when an underlying Win32 function call does not succeed. - /// Requires the immediate caller to have FullTrust. - /// - /// If you are adjusting multiple privileges on a process, consider using with an access token handle for the process. - /// The caller must have permission to query and adjust token privileges on the target process. - /// - [MethodImpl(MethodImplOptions.Synchronized), - PermissionSetAttribute(SecurityAction.LinkDemand, Name = "FullTrust")] - public static AdjustPrivilegeResult DisablePrivilege(this Process process, Privilege privilege) - { - using (AccessTokenHandle accessTokenHandle = new AccessTokenHandle( - new ProcessHandle(process.Handle, false), - TokenAccessRights.AdjustPrivileges | TokenAccessRights.Query)) - { - return DisablePrivilege(accessTokenHandle, privilege); - } - } - - /// Enables the specified on a . - /// The for a on which the operation should be performed. - /// The to be enabled. - /// - /// Result from the privilege adjustment. - /// If the is already enabled, is returned. - /// - /// Thrown when an underlying Win32 function call does not succeed. - /// Requires the immediate caller to have FullTrust. - /// - /// Enabling a privilege allows a process to perform system-level actions that it could not previously. - /// Before enabling a privilege, many potentially dangerous, thoroughly verify that functions or operations in your code actually require them. - /// It is not normally appropriate to hold privileges for the lifetime of a process. Use sparingly; enable when needed, disable when not. - /// Consider using that enables privileges on a process in a safe way, ensuring that they are returned to their original state when an operation that requires a privilege completes. - /// The caller must have permission to query and adjust token privileges on the target process. - /// - [MethodImpl(MethodImplOptions.Synchronized), - PermissionSetAttribute(SecurityAction.LinkDemand, Name = "FullTrust")] - public static AdjustPrivilegeResult EnablePrivilege(this AccessTokenHandle accessTokenHandle, Privilege privilege) - { - return Privileges.EnablePrivilege(accessTokenHandle, privilege); - } - - /// Enables the specified on a . - /// The on which the operation should be performed. - /// The to be enabled. - /// - /// Result from the privilege adjustment. - /// If the is already enabled, is returned. - /// If a is removed from a process, it cannot be enabled. - /// - /// Thrown when an underlying Win32 function call does not succeed. - /// Requires the immediate caller to have FullTrust. - /// - /// Enabling a privilege allows a process to perform system-level actions that it could not previously. - /// Before enabling a privilege, many potentially dangerous, thoroughly verify that functions or operations in your code actually require them. - /// It is not normally appropriate to hold privileges for the lifetime of a process. Use sparingly; enable when needed, disable when not. - /// Consider using that enables privileges on a process in a safe way, ensuring that they are returned to their original state when an operation that requires a privilege completes. - /// If you are adjusting multiple privileges on a process, consider using with an access token handle for the process. - /// The caller must have permission to query and adjust token privileges on the target process. - /// - [MethodImpl(MethodImplOptions.Synchronized), - PermissionSetAttribute(SecurityAction.LinkDemand, Name = "FullTrust")] - public static AdjustPrivilegeResult EnablePrivilege(this Process process, Privilege privilege) - { - using (AccessTokenHandle accessTokenHandle = new AccessTokenHandle( - new ProcessHandle(process.Handle, false), - TokenAccessRights.AdjustPrivileges | TokenAccessRights.Query)) - { - return EnablePrivilege(accessTokenHandle, privilege); - } - } - - /// Gets an access token handle for a . - /// The on which an access token handle should be retrieved. - /// An access token handle for a with access rights. - /// Thrown when an underlying Win32 function call does not succeed. - /// Requires the immediate caller to have FullTrust. - /// - /// The caller must have permission to acquire an access token handle with all access rights. - /// - [MethodImpl(MethodImplOptions.Synchronized), - PermissionSetAttribute(SecurityAction.LinkDemand, Name = "FullTrust")] - public static AccessTokenHandle GetAccessTokenHandle(this Process process) - { - return GetAccessTokenHandle(process, TokenAccessRights.AllAccess); - } - - /// Gets an access token handle for a . - /// The on which an access token handle should be retrieved. - /// The desired access rights for the access token handle. - /// An access token handle for a . - /// Thrown when an underlying Win32 function call does not succeed. - /// Requires the immediate caller to have FullTrust. - /// - /// The caller must have permission to acquire an access token handle with the desired access rights. - /// To query permissions, the access token handle must have permission to query and adjust token privileges: - /// TokenAccessRights.Query - /// To enable, disable or remove a permission, the access token handle must have permission to query and adjust token privileges: - /// TokenAccessRights.AdjustPrivileges | TokenAccessRights.Query - /// - [MethodImpl(MethodImplOptions.Synchronized), - PermissionSetAttribute(SecurityAction.LinkDemand, Name = "FullTrust")] - public static AccessTokenHandle GetAccessTokenHandle(this Process process, TokenAccessRights tokenAccessRights) - { - return new AccessTokenHandle(new ProcessHandle(process.Handle, false), tokenAccessRights); - } - - /// Gets the attributes for a on a . - /// The for a on which the operation should be performed. - /// The on which the attributes should be retrieved. - /// The for a on a . - /// Thrown when an underlying Win32 function call does not succeed. - /// Requires the immediate caller to have FullTrust. - /// - /// Consider using as it avoids the need to work with a flags based enumerated type. - /// The caller must have permission to query token privileges on the target process. - /// - [MethodImpl(MethodImplOptions.Synchronized), - PermissionSetAttribute(SecurityAction.LinkDemand, Name = "FullTrust")] - public static PrivilegeAttributes GetPrivilegeAttributes(this AccessTokenHandle accessTokenHandle, Privilege privilege) - { - return Privileges.GetPrivilegeAttributes(privilege, GetPrivileges(accessTokenHandle)); - } - - /// Gets the attributes for a on a . - /// The on which the operation should be performed. - /// The on which the attributes should be retrieved. - /// The for a on a . - /// Thrown when an underlying Win32 function call does not succeed. - /// Requires the immediate caller to have FullTrust. - /// - /// Consider using as it avoids the need to work with a flags based enumerated type. - /// The caller must have permission to query token privileges on the target process. - /// - [MethodImpl(MethodImplOptions.Synchronized), - PermissionSetAttribute(SecurityAction.LinkDemand, Name = "FullTrust")] - public static PrivilegeAttributes GetPrivilegeAttributes(this Process process, Privilege privilege) - { - return Privileges.GetPrivilegeAttributes(privilege, GetPrivileges(process)); - } - - /// Gets the privileges and associated attributes from a . - /// The for a on which the operation should be performed. - /// The privileges associated with a process. - /// Thrown when an underlying Win32 function call does not succeed. - /// Requires the immediate caller to have FullTrust. - /// - /// Consider using on attributes within the collection as it avoids the need to work with a flags based enumerated type. - /// The caller must have permission to query token privileges on the target process. - /// - [MethodImpl(MethodImplOptions.Synchronized), - PermissionSetAttribute(SecurityAction.LinkDemand, Name = "FullTrust")] - public static PrivilegeAndAttributesCollection GetPrivileges(this AccessTokenHandle accessTokenHandle) - { - return Privileges.GetPrivileges(accessTokenHandle); - } - - /// Gets the privileges and associated attributes from a . - /// The on which the operation should be performed. - /// The privileges associated with a process. - /// Thrown when an underlying Win32 function call does not succeed. - /// Requires the immediate caller to have FullTrust. - /// - /// Consider using method on attributes within the collection as it avoids the need to work with a flags based enumerated type. - /// The caller must have permission to query token privileges on the target process. - /// - [MethodImpl(MethodImplOptions.Synchronized), - PermissionSetAttribute(SecurityAction.LinkDemand, Name = "FullTrust")] - public static PrivilegeAndAttributesCollection GetPrivileges(this Process process) - { - using (AccessTokenHandle accessTokenHandle = new AccessTokenHandle( - new ProcessHandle(process.Handle, false), - TokenAccessRights.Query)) - { - return Privileges.GetPrivileges(accessTokenHandle); - } - } - - /// Gets the state of a . - /// The for a on which the operation should be performed. - /// The that should be checked. - /// The of the . - /// Thrown when an underlying Win32 function call does not succeed. - /// Requires the immediate caller to have FullTrust. - /// - /// Derives to establish the of a . - /// The caller must have permission to query token privileges on the target process. - /// - [MethodImpl(MethodImplOptions.Synchronized), - PermissionSetAttribute(SecurityAction.LinkDemand, Name = "FullTrust")] - public static PrivilegeState GetPrivilegeState(this AccessTokenHandle accessTokenHandle, Privilege privilege) - { - return GetPrivilegeState(GetPrivilegeAttributes(accessTokenHandle, privilege)); - } - - /// Gets the state of a . - /// The on which the operation should be performed. - /// The that should be checked. - /// The of the . - /// Thrown when an underlying Win32 function call does not succeed. - /// Requires the immediate caller to have FullTrust. - /// - /// Derives to establish the of a . - /// The caller must have permission to query token privileges on the target process. - /// - [MethodImpl(MethodImplOptions.Synchronized), - PermissionSetAttribute(SecurityAction.LinkDemand, Name = "FullTrust")] - public static PrivilegeState GetPrivilegeState(this Process process, Privilege privilege) - { - return GetPrivilegeState(GetPrivilegeAttributes(process, privilege)); - } - - /// Gets the state of a . - /// The privilege attributes. - /// The of the . - /// Thrown when an underlying Win32 function call does not succeed. - /// Derives to establish the of a . - [MethodImpl(MethodImplOptions.Synchronized)] - public static PrivilegeState GetPrivilegeState(PrivilegeAttributes privilegeAttributes) - { - if ((privilegeAttributes & PrivilegeAttributes.Enabled) == PrivilegeAttributes.Enabled) - { - return PrivilegeState.Enabled; - } - - if ((privilegeAttributes & PrivilegeAttributes.Removed) == PrivilegeAttributes.Removed) - { - return PrivilegeState.Removed; - } - - return PrivilegeState.Disabled; - } - - /// Removes the specified from a . - /// The for a on which the operation should be performed. - /// The to be removed. - /// - /// Result from the privilege adjustment. - /// Once a privilege has been removed from a process, it cannot be restored afterwards. - /// - /// Thrown when an underlying Win32 function call does not succeed. - /// Requires the immediate caller to have FullTrust. - /// The caller must have permission to query and adjust token privileges on the target process. - [MethodImpl(MethodImplOptions.Synchronized), - PermissionSetAttribute(SecurityAction.LinkDemand, Name = "FullTrust")] - public static AdjustPrivilegeResult RemovePrivilege(this AccessTokenHandle accessTokenHandle, Privilege privilege) - { - return Privileges.RemovePrivilege(accessTokenHandle, privilege); - } - - /// Removes the specified from a . - /// The on which the operation should be performed. - /// The to be removed. - /// - /// Result from the privilege adjustment. - /// Once a privilege has been removed from a process, it cannot be restored afterwards. - /// - /// Thrown when an underlying Win32 function call does not succeed. - /// Requires the immediate caller to have FullTrust. - /// - /// If you are adjusting multiple privileges on a process, consider using with an access token handle for the process. - /// The caller must have permission to query and adjust token privileges on the target process. - /// - [MethodImpl(MethodImplOptions.Synchronized), - PermissionSetAttribute(SecurityAction.LinkDemand, Name = "FullTrust")] - public static AdjustPrivilegeResult RemovePrivilege(this Process process, Privilege privilege) - { - using (AccessTokenHandle accessTokenHandle = new AccessTokenHandle( - new ProcessHandle(process.Handle, false), - TokenAccessRights.AdjustPrivileges | TokenAccessRights.Query)) - { - return RemovePrivilege(accessTokenHandle, privilege); - } - } - } -} \ No newline at end of file diff --git a/ProcessPrivileges/ProcessHandle.cs b/ProcessPrivileges/ProcessHandle.cs deleted file mode 100644 index 639ee35..0000000 --- a/ProcessPrivileges/ProcessHandle.cs +++ /dev/null @@ -1,35 +0,0 @@ -// -// Copyright © Nick Lowe 2009 -// -// Nick Lowe -// nick@int-r.net -// http://processprivileges.codeplex.com/ - -namespace ProcessPrivileges -{ - using System; - using System.ComponentModel; - using System.Runtime.ConstrainedExecution; - using System.Runtime.InteropServices; - using Microsoft.Win32.SafeHandles; - - internal sealed class ProcessHandle : SafeHandleZeroOrMinusOneIsInvalid - { - internal ProcessHandle(IntPtr processHandle, bool ownsHandle) - : base(ownsHandle) - { - handle = processHandle; - } - - [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)] - protected override bool ReleaseHandle() - { - if (!NativeMethods.CloseHandle(handle)) - { - throw new Win32Exception(Marshal.GetLastWin32Error()); - } - - return true; - } - } -} \ No newline at end of file diff --git a/ProcessPrivileges/ProcessPrivileges.csproj b/ProcessPrivileges/ProcessPrivileges.csproj deleted file mode 100644 index 945192e..0000000 --- a/ProcessPrivileges/ProcessPrivileges.csproj +++ /dev/null @@ -1,79 +0,0 @@ - - - - Debug - AnyCPU - 9.0.30729 - 2.0 - {410CAEE5-D287-4A18-9B38-BB87397D218D} - Library - Properties - ProcessPrivileges - ProcessPrivileges - v3.5 - 512 - false - - - - - 3.5 - - SAK - SAK - SAK - SAK - Client - - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - AllRules.ruleset - false - - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - bin\Release\ProcessPrivileges.XML - true - AllRules.ruleset - - - - - 3.5 - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/ProcessPrivileges/ProcessPrivileges.csproj.vspscc b/ProcessPrivileges/ProcessPrivileges.csproj.vspscc deleted file mode 100644 index b6d3289..0000000 --- a/ProcessPrivileges/ProcessPrivileges.csproj.vspscc +++ /dev/null @@ -1,10 +0,0 @@ -"" -{ -"FILE_VERSION" = "9237" -"ENLISTMENT_CHOICE" = "NEVER" -"PROJECT_FILE_RELATIVE_PATH" = "" -"NUMBER_OF_EXCLUDED_FILES" = "0" -"ORIGINAL_PROJECT_FILE_PATH" = "" -"NUMBER_OF_NESTED_PROJECTS" = "0" -"SOURCE_CONTROL_SETTINGS_PROVIDER" = "PROVIDER" -} diff --git a/ProcessPrivileges/Properties/AssemblyInfo.cs b/ProcessPrivileges/Properties/AssemblyInfo.cs deleted file mode 100644 index 92f6777..0000000 --- a/ProcessPrivileges/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,45 +0,0 @@ -// -// Copyright © Nick Lowe 2009 -// -// Nick Lowe -// nick@int-r.net -// http://processprivileges.codeplex.com/ - -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("Process Privileges")] -[assembly: AssemblyDescription("Implements the functionality necessary to query, enable, disable or remove privileges on a process.")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("Process Privileges")] -[assembly: AssemblyCopyright("Copyright © Nick Lowe 2009")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("9ba57646-7a83-4f21-b555-92f1463c9f3e")] - -// 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.5.7.0")] -[assembly: AssemblyFileVersion("1.5.7.0")] - -[assembly: System.CLSCompliant(true)] diff --git a/ProcessPrivileges/bin/Debug/ProcessPrivileges.dll b/ProcessPrivileges/bin/Debug/ProcessPrivileges.dll deleted file mode 100644 index b65247a723e2854ad8a158b443fcb490854d1dce..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24064 zcmeHvdw3jImFKDIR`pXYRktL|PqiO09ZMFnEyp%d64{b$E0O$?{7RhIt?rWCcB`vh z-Lfq^HVT2f17t}8e2KvcNgxbN0tv$-@DU)e!^bN#1U7sdvR=X_fz2#rb_TL6U&8c!v2IkOlaGUC=)E}qH7yEhNSN6oa+T3sDn zI)6OW z`2l9-|K)E7WfDFK$lc6^38IgcgfPMRoF)pR`1?H39G7+>-|>>_!tDpXv7%jT(KuQJ zKCuk|buv~*Z(#C?6YXoY3RVi3=r)0ZhHD3|iccrp)oK}86O61YoyNto_TZ}cbP}zr zK&7~c?TQcUrcxDcS&rtH6DdM{=OEVRp$M9xy-up9A>o6{!DiBy5KXCTJWt)M%DUNY zs`v;)(&1He22n8Byg)M>Q3z2~NkC~$J*$NMErPB9TK(dD(#)CQSo-r9Lt2YZGiL#z z7t{noN?Saux|sq?NI`6<6rk2s6ynjcjwkVrIRX6>LDpXTU?$`%%tq^QLv`~O(gL62 zRxz*cJ$?$Imk59>R(0}SDC<=w!Xy~ebggAR`CZyv(7^o(a1@q-+nmR`5CvxJst)+h zdSgD_xAYNz0dlpNznOHu*h{0MU_w~x6!n~~$LQ6lXU2(7f)@2ey=UuLkEqvsf(1vt zo)fH&?mclDUx8p$v70o6)rKhf?%?K$CUhKCqG|$aY7J+VSe0JY5~f5P^um0AW4_}o zKc+zoZ3){W1|1xKitW4!1fkSCr1y*Fc4n zi-4b8EUah{j1nuwx>N@yYhugOOz;Lt3pbM=`grL$`hx~K6=3mTupuN8Ye+*Rz^)p^ z1W9NyZ}T=8S=irn?5yGr*H3*2}j zI6R4FRtnK$cjb4;vFd1bq6JmD?~ZrFd*b#3yJCT7S);^KZWPpmiB=R2#6k_RNHYhW z9?=5@@N-ogz8+@ohZyJqJ%r|@M`rAbMZm{FTcg)3{l4yxd0(uCwYYD4iornkyxK&6 z=T)jPc+4v=y@E-_pQeR82Z9qEEhuC11}|!`V9dOUnH!{wW>^@$i!@q$%g9XY#xgR? zdZLWXwq7bDbF3LkNx)pIzl_YYZY?8C0qe^ZSkU@K1s1Y&wIrh{Y+X@-Ra@_^z#`Tc zDzF;spDM6gYo@0xMYnn?u&6a&fyJyxE3i82Hx*dDRpTv7X|TE~uo+gS0&BGHs=#Ji zU#-AqSua&!v#q&RWtnrV%@x>O>v#n=&-#1?)@1#l0*hP!y8@eUt*aXja zIJ=#lExv9rSBkU6*E3v%eck9H?CY5>!oHs6BJAtgF2cT^<09ZX8; zv8$VcF2=5I3b`1&x+&~p?CPd!7h_j9MO=(s-BjaZ?CPdk7h_j9=`O~uZi>1XySgdn zV(jXsIu~PCH`TisySk}lD|U5L$yn^_rjoVT)lDUHv8$U(_F`8zl?=wNZYo)fUENeN z8N0fvWHWYkQ~>8j@hvvc3?P{tC~lUOYp zE}4xz?O)M9v~~9w_2k1C(nU*WEI#=V3THJWQd(gRcrKdYngmv_<`7m^&P~Fr@8wZT zdQy#D$s_s69WaAxVvP?j_Bo`O7S+x+2%Yy9vjbo^rxkZ%nqX&ci20gpNUzd;P4QEt z`>^z4rPsY!di}b8>HpA>ZD6GgF4n9M@l3m1$`FoaREq_ofwK)5gDM-Bc?DNOD^7{t zv-iz6-+VFTZ}It^CEMBEkg4gg9(w0RpH|Xmere}L>(oRi8iMFKfqHnCum^hRFusvE z>2CE&48$AM5^IH7FpmjiaY9g!y`QT+W)}z|hMF&i#HK_75u*vk=1`AwCuTQGQD>aM zPUaXHwVN(4Gq>b8Q zf;B@vq;|_+<*`g@7rW4Qv)dG^Lwoz9CSY9+imKc*6m|ANh4WPSnG$`3Yp?%_lz% zs?3Z>P&li>Lt5b~)Lt~fH3<)R67XJgnEcfZ$e%6_=-#_yRp^ab)&k0vU4lngM$A-B@1ictQr5!Y+)=7k^ z4H8elm=Dp#gNDyaeC!hi>9I=RqWYinGQ{O3I`gJ&vmJ%4kUhcHC~V^r_qwFDMoA0+ z!#M;3IG*6oQr-*`yT>5R8HMT&N@ds887CQQ(rMAk3A$l0kTanEg%5@ zJ!%5u(Ks?(g{RiTFH`CjIp0DCbVyXWE!m#n<#Wnpd(LysDZJ;5(q232C^)ZdOV$tb z8FD-cI9THhd8&SHJ=}gy{Y7YBFYO!mHp=c+McAZb>a4x9PK^`H z7Pq?#ixXt)7vevxJDw8{aJ+j@Jjmh7_QKkQc%uf<_c+&zJ6*c?Nj=W&B|67|J$|8A znnz*)Va$_6M{s)**dN`&@Hn~cq&i+{>{|oU7DFNIpRm2H3l5C-=D3}wmGl?FnbzLZ zn3j|yp|pjsY}uZ%AZF`QPebzz)$=fy?_hAY0nwqFJJ8A*i%QsY>^63Pn7_-R@CvM~ zJY=9NfXd2hYsq%O0f!Lh=jw=H2#Qm8xLYA2XeWp#KE>vqx=&y?KJPx^`T+Y0_r)?q z3En@XZN>hMvOUzN;a2$-03n*D223BaW@Z%Uj!8SGKKMz6uEL5@Z3} zF+mod#C;}wFG4Ua94K0u+(>~ro`D_j$CkZt`vC20v+va{+_1eDT~Qu*8v<Q>Chf@r> zxXc%?-%v&5aa)&%XmObPU~4|>*J?DnD!{NI$ndcLi;);DuHm+y@Yh#s)D&Py0{>0m zEdswH@JqsToBx%FM*9W6B$S^9wuUu&NoV*IiYpr3Ebv}|KdAoas74?3ajmBQ0{ynd zcA}U6T+Q%cfT2Y<~(OFjS{eR{AnTLN@X&_=iKUM36~TKZ0I<9Ay6cA`G7po-5IdMptOBM1nL|`#b2f zQzU=8n&}^jJQdXFPvB%bzRCc0R%il?@^@-Z)$|Ca0J~i~RdX#Rc%=gNJqL@BGQXDI zRecI0Phi(!&OZX{0Tu;D)EYfia}TxRt}SB$w7Z9vIat`w*meg?)iSo*!M>?8wig&w zpxdQx)WLMA8wbXE{vyKteGHf%ShISn<^j5o76|4?y9el$gVlQ(`y{X%!1*BRdguXQ z0bsL)^8x6_pn%7l4pJ`&4C6z^bmDcV2@B2ZJoG1+7Q}0p?SZHa&;BMo2C2( zDL><3%5y5iEkb!jD8CbUqrgSNzemddO?Yk>{@)4x;{v}g^n(KD3g=IR{(_VTrQ9p! zH-)EDDD$MeLg4=rnLgpkN$o>ISt*pqgmSl(?*acZIvAT7T1Fp=Ed)FkYXMwYvl8%M zYpw_>bV|Dt@Q2DKz^62ZU)HyVH0|H0A+%%SI^Pb!L&}a4<@WH^pm?JUPgOJA5@WbK z#PBy7!+lb_R46&&|5=dfpOx}&eO&&7w5n3L{JPF?U4-Gcg?^t%STCFpO6_|^+HvXe zVWCIsnEwW$bPN9`fp3TomkQ5^r1tAlP6-?nX^TbL^Wb+!`U&MaNV`|y&j8ExA<*YW z8Q!Zf{F%VJ^`R2awXtE)&-fVrR^aD^VyH~{Mh!!+&afuR@JfZ@L80uI@&-RsGQr`J z%;o+Apmc;8zD^AN5r&@$GW?Rl@M?i;g!3Aq|0%@uR{>r9uk+c>Gsf;IIoN!q3@{ogEQ-3PXP1K zEe=-j+#jllk}FR85@@mQa5X zs-?#rY?kjILprTqXmb{8o)1N7|02N}?}(fU#b^(wTy$gOO_5&%yIZhlXpgoJd+K*f zb+3i$>G_Jf85F<{Z@2sB&)2^E$e-1TLM+sBIGwIn976{KG zJR@;9qv1K!DcCdg$)G~>C@ByQqk#Ww;jJ{` z)N!0`qx(x(K0HXT0<*pOt?&-|vtT#*PpIDy@1i>7Yw)IjW9^TDwK&)xd_M)&C)mCI z7h=x?+wWkn0=t@S5$t<(NPVBOhn{h;`)VIk_s|=Hy{z0wP4dEvZLoZ+9nuB zWEEXU`vtROVlREnuJgA>u2=Wc*@r% z5qaOs;k|UJU^eHzNu2v=gTr|_y%ydF9eMBK3=+?G&Qs=Em3~~~^0=*#;A34mQtQ%f zIWEPP$vif{LeGhuf6$p?m!Fb;e-thAd|7I3t?V9|;`VOK?2jNsM0=L3#8ui`qd=33 z{R%SWdaOZJG~4e%rt1%tIe(><%gwNhI+X6Plw$=G0aIWE6&-G)aw5i^) z`CU%ivo_B^!V4;Oh`%b!3qmaa^=gKnRv0c5kM|=_KY_a&L7co#;C2+pq7GPvlM9#U z0|t>h-4v;%H3HWP>=n3G;BJ9Qff>MhIwa+Bfj0={9{^|3ZvYj#Rn}5nxhZln%>;xl z0@nx()6vLP$b0kAYiO(To9I6JKg4rs5!zN^iS3Tv0=O~!K~P2&9GXQ6&*Mt@MfheWG)pt+Nu0o>sn~d^C7k8I;;V zq3?0zf5i6(CGC`dt2e86DQav$9i$HjZ-G8+y*?=qN-uo^vveq!R~4mQyI#Fj*27zg z*TLONXXtC{A?4NBcTnyReP7K|N9-Eh0r1j)Q6u<%0WeH6JQ19YRs+`2HGqwD8{i!J zDqx&m16)M&y%C(5_5ilft$=OxS-^Js?|`c*QWb$``T;xXBw#mv6>uZ{8nBOQvz6hmhDd2t@1kBQLz&t$!SfpP99;JvsLf6w8zzI44_ z@D}=8z&q%l06$E%0Y816HUK_NeSm*25SdAbJh1=0{1|Yx@>9SL<$1tP<(Gin%C7)7Dz5NP_jbF3#F*==#DCX0GyE8_ec{ z+>b{OembpG0Y0Pz0Y9VE0DexX1AJVW3HTLd9^luNg@8{h3BYHRrGS60EC>9dvI_87 zseMl1^8#N`IzT_8tOa~k^m$G6`MqfSFA96)4bkn-3VVc9_J~(ykN8#AHmtHoYE||~ zoys0*RM{hQRQ5<*WsfXU*&_*+J<_7GN7_{ONW01&S*@~1I#l*Zr^+7bR@oyPRrW}q z${yLGvPTA0_Q)=kJ+en-kL**|2N9p@Re<}|bg&gSf%^ijSZAxNTag1c04}7JfX#F{ z;0oFScqx4ouuI@oLLZ>-f^v;eQUVXs%b*mfHqwfBRpv&zl)r)Gl)xJWo>p$8g^@D? zyHxJ?Q|j%2-x0Xa!{xN+Q-BkmCjd`-nE$kt9}@c0Qa&S)yv!39*y&|y`vgu1JT35P zfoB9#74yUeb_(1la6;f|foBBb)-pKPQeCJA*JfM;xUR)z;5vj$qh30JJ30LVw+h@2 zsM57kP6{*x-YW1;fp-bKN8rZ=o)Y+gz=s7sD)93Hzaa2S0>2^fTY#(SGORH7;f~Yu znBUFHyOqn8k0_5RUr~OdjHwgq2h`it52^R6_o)x6pH`n#zp2KstJYza$a|-z%l7rIc$7&4O0B3+z6||4@?aL{A_T994@HIf=F*<_1w?_Rq^{Dqz z(iYiq`I^0Zm+ft%jzQDD?|S)=L+H&F4J((-c4rECvtS5)1#?Q16?>Oa$Mh`AsJACK zHfmVOp{%iwu|s3YqJwNRlIhL4?0A=%%^Im<#>@$a&0jPv#`-daBEHwA53kKrH+0xJ(e{tr=3=& zXmqdbq77Yim|O1MOTD?2Wh4v6)-kh~q|rjkw6d8Yv`f*zc%f*Fww9GGv~DnRhLuS{ z{6Ql(U=#`%LT?(%9vCYW%lJSsnM)_F^tQ~%{$ha@2TPi^See6_tTAFhq0Df`NZWFD zWUS&?GMhP;WQ+9V*jQ-{r(hR`#)}4I92(15AWs$TkkhuG(y-E~d3busYqMGNh+EZX zj+nWD3<8V3#3iW3sTn3-A5Xh*8{IvIh+qll)LwF_;=EqqcF% zxMQR;VZi8uJBx^k5n~v(uB@^Bxy3T4uNcgXPGav*<{)H;nME{LiebL1&D zokZ##%^Oz1%&{`A-yQFi@d2aT7#bU?By7*6&D6n4ianx%@zEhOn@RO$a?{jqz+;eP zwzAbWBbyvDCXsAG;$PL)%p}6VcrLYe#K=t{@}kg_JDjo1+~|}_C-w|$ zG?|-H)t^l5&*Tg!ZH`q+w3m)bJ+|ix>}M=hSnl#;lX~ykpUjOIo6KTnc)YSrA3~-d zhPNhB-SMu&`UY+j%ipB>0V6dwnU*g(vb=~>FJ>7w0bY${+S;o{#lk_`FeJ>1!STGa zlpxTvysA2^U0LiQP8o{;^R2hc(K5yMrNo{?Op13aDMem$om#|P!6`a^cCftdbqCuo z>l!(3!E9cSCBa$OonWCp)2s}>P03M%pkv9pLMX^qAjKRr*h>ko1XQ_9IIAP3s6m^s zM3B2ykZe>uZhLVomwK|sVVPG#+PNP~XnEs7*;!d=OVN@|dMs5O1KFJl<|rb>u-L=c z$|mjE)IF9*9AW*TinVC+!i(Jm)s@4wDS68{oH54=HkLDv*acn%zz?Kidy`$2x}XV+ zYsn4?q3N|nJjoq`aaMj4X@Z-j%XOhe-xnL=g~4XctdI+PtB%oHnGOJpmVHn3nF zEKBJ*S~POJBbP}oH~W1D7M^J0OrH1Va^?DLa->j3?a_+> zUU!d5siGdlOmZlb#RNoeMJt&qmK(cDA|lgpZ@FR%7LttQ7+9*xWS76o%#T}~VU(-7 z`UY4Pbe5~2Zb{-dIBP8{IbP;03mMHPa}^cNTxKyCg{^bB*}zyHu~8^&&tZwfgi7;f z?ye&hY?C6S=O`8$1Oo5*G7+XuI-6*xF64HxK7;%-bBw1$F0~)4t&{;a54$sDa6dNt zG?sGADm#HC2`}lX&&Z7w_Y==orzk5(Z*JJc`poWh$d-XAz0Y9UK;B3p-AvipD72n3ftiv_A5L<* z-I@k+&`G%kan{$;dRP!D=d=>ZW>$>di%roP3GvopE5f;okrtgC1KQ=y$RQoMHUZH% zB?YksY({)%a*)XDML7rI70VfE$(dB-{h`9Uwgh`;Ifq^%|3hg<;@9$P}%o(J%i&7zKG_W4aGOgZR0ildM0x`2rf||@C zwwLmFY^z%Ku}Bg#$LO4+*~RSz7RURFy>FNqDd(Nh1js*5&C~Ak1Z?pXJ$L>nN@% zAV4ZAa3qsmE?dsQ3#GuV;IlJ88Ak>6oN32RE9$4@jRnfPsat{iGbzg~n8U?Z@jz?& zh*zL<@~Q&y;cilFmqTPSxzxpE@<`=TuCxcpSW605kjqls452_y{)haiKUp|fAiimk zEkF;+;Y%BP$y@HEZ7pw+rMmLWEZEM$nbQpr%sq!_d(1hxJIK@}r7N2(6wX;!Y-)e< zXo=mX2)e!39tt5=_`L35SYn-$o4BD46El;{+WDj9RAa)W*PAYe@$*@A(t!q!7Ngi> zvzyr~yRGRYioKCwjpN0vbg!d){vkQ^P|wj!(J_UyLpe)sdfm87m=bWXC^j<89_NhY z%%h5fk(+kAry*HEy2dQrBPf<5tc#CBWfbcwH&)SaYtkm|Hjr?3I@3h2f~Ds6*;Dq^B*6*#%%&TlTKna8sB0Q zc_l|LxWzFpW5N9=q`kQ!*7kywaolhZXEbR?lUpa{`%@KjbvmN#7)am>6_s)u#m+c5 zxwg-GFo%2WgTD$m7jz}_Nt_(V$;|JSIpmaKBc4%=O?N1C4dYHL>KV<0l|PpbkU?v4 z2fIKS8lfDX@mMI0QWD=V6q$4o94`GZ>axH`aM66b?HKOMX7H59ZaIl#A#<#QtQ4e- z;d#(BJnv?nE<86%q8FCC34InJaTxu-HNOSUB=~UtfJP<_0n1LuzrvPZ=HCKN?q}E; z%QStgJhzPjd$3hZ&V%1VR4|`y=V`RQf_v!&N6Hy>0XX}c zzioaKH5?t&`f}NH?YCk~90AGc#w9kM+T%{}Td*rzcZ68xw9(kiHGSYsB4WEmufw1q zWpc_Dv0dWj$n6K$sPr-IC?vxAAvJ|4W*vA&rSQ+hNZuk=BA5fQaDlX}Dx0%*CVSxix?hjiHnVegwKs z)21XDTPe6W`lsP~7x&Ls3i8eq5f0zm_Ij}`ZyY+MU~RVGTUdIH%gOrj$aq%pD#fysVYelZt8D*iMk!HK*@9=E{|jo;~jcS z3lBQ|T`gmq))Nv*gBZz}Gp;mNU-nuWanA8*$L?E3lC0_5!N)Pdvtt@N$m+v9ynfhg zAFl!22hZKS#MCtH0&zTnyWD;`h?e)h=X3dk_gr=A=O3l$ZQGt9Pn;BQTv7a00D3(a zBMekuTvha>ZfNz-jdK|su*&;fLK>(`~qlnL^ckA7LfKFAP z<0ZvE2R|e5`+Z)$L&bkc>{azRN?JtZ=(i_1P^pO(XtxtTb3WVrxwgjHes&g8nyFETd_4-s*4S-l5 zJ%oN{_(JH#wSj-GN00kq3D#y@#aOGL4Vu;}tn0*&lzFhwxH^yg-XO+~VMe#lL8pF< zJGywG5pA5|^Gjnr9&H4p z&8tSk5$?BMpSTP5LW@RdR8puyFEtcYN?bLQ+UW6_wW`wyqpxT*PpJ-;Wka=EMVZSZ z6&@aGJWvwKL7`|qsHF4A8xcp*Fb7kDOLbBctz*I>&F4||MKC!8_1l*xoMP!mpiK+S_Mat6fGnWxCL0OX9II zbDC`Tb8`iWl*$Hgoob2fcamw%;ZeL*q9rDK`#ej6=PysQWYIoE&P6diiIkUi|Woy!eA3CavMuo~V?($-g?mkM|Ld}$RjZOK zQ!6i7wq`}U(YAU`R2htT`5|>+{a7|DcN!HWg#G{$R6D!$JEe$SK(gxAMH_=sC#jl8 zL%OD^UJaN>Lw2L-aa@aVC2+OiYQxozs{>aj_y<{{B#JQvy{sQypsu z$|ARFkyP<;7wHK(reO4la6QgIN{jH`Arf#IBfhI}1kn4cF`js7B;Eu!07x)cU*l8v6cqgIsoC?oQ%_9W`e0U)dAN=K{sB^zPUb=0M-(l}pD1`@& zS%Y78Da7#zDL#z%@A&zt+)#|?41UiB&!^%=Gk%C)_iBk7^1!Yo?mPpDn^xSC7t`<; zA)Qx+3UM_+4wn9m8cQN@6AgOw&UM^G`=a5IvB@&Un9P}t!)j_#rSE#nxW*% zRhP71vUF8)^@^qK!^@W~9a_0^<|DkPi7E z@p2|T@t{k8Ym!$w{)KJ$5Uv5DZ3Eo{SHAw_FP^&N-B&)C`RMZQs~+y)R$cGe!_UMD zd)B5$GdbK1##;lXwFmDA94wmoJ(~vC54f{`k7LcUG56qkGFb7#*SU4A`ScJg^#8$U zi&a+g0GH!syt3r}JxQCkx68D;vv}Nr=ee@x8HPMb=Gr$ef(+g!{`&b3V*y1Rf<1X+ zvPv?K2s7#&I`eJBwF@;J*ihY1hqoQY9mo&&0`?%~9l*h4Gw$Q#^;^L8_FrA4Z+L%q zmggo`eenBA-}oCB@?nuYPb)v&Kom&jrxEM1SM$A2K7heMwG9?fd6^4~*}D$3f?u+`hYJKV#u`CTb3$6(=9#c>g?( zQu*FJMJ zFE2J6hsW@uG^pv%n-0!(3g+eL2t5YEsh@f8O}kJ_$+$_GUCV_IbN`B;e)?0J4v=3m1*#eqAz|v!I5Ks z24zf}oqjngc}#AEGiH0>os4b0_{naOMl5msm92E){%IHgOqMg%OH+NcTH4q*uz0-u k%!#A@?b^Ba`0Mw-g9Y-)ebCMI%l{qv`fC^e;Vkg~0N_4i|7fvvl{!r^RzvZxJrwS>d59US=|<3iI0`qB^tgkiz%-QB^v zcXu=QU4K5l7RXiqCwA5U$G5_>N_I=pxbU*__b$=YZq8eqUV3EB*g1FC-&RsScf%A< zsx&wC^HIUJ3&&?iMQL3ZhmHku^?!|nasRJ-l_(n@I;HH&X+8^d)qg(A93JsI7hZVw z_j^9qZ|#C$>-qm!@Qo)b=KlR}e*NQqYtOd#N8WMMr}`~=uHU1hgJ5T`*^llRG^M7obU3)`m^#Et4s}{fd((fPIdepY>J+$_gKcr4Rf5tJtK0GXVXqU3H>VN(E z4WDip-FWV8*UtX8i=KM$&(}58tUk0Yb9m&wv+BQe>hd2~Pgs8RKd+p7|1TRREc)s6 z#rGW^7Cf{|*;(};4*b>A=lA_ZLywIkudlmv)MJ;u{k88N+Lk#ya^G3?|N6jf4?lUv zrDx0^{m{_g{`S1zTy(`f|8jU(@X#)0XVw4Xr%pWX?;ii!m}_qR-z&fP?0HL1Sywdt z(6-Fsk^9c7|CfIE^U))hKlPb6UpW1opTEE6h&BJW`iqB$1rO~~c2@oGe(fjcH&358 zyLrs~jrV?ITFv97?{z&qIE0$U;-hV5JwAl8-j&q@u)qgzeDH=g@~8IT&y2}c7pIcV zsj6vpOY0l!Q!ULkEltf;<;m35Elta+=2y;Kupn96+FakVvg(57rrKmGbwP9e^7@A4 z;v`HB4NbK*Ey=oh$)!!rD~oDVK~Ouns?|uW$&gs*BsR7zN~OHSWme*{w8R=OacLy+ zz_J+Sc3NZIw3e3U`h~46$&_+>U>S|_T+>)rlOgv&^J|P;v7#l}n5u7T?3An;k;x2^ z2bxRQ1}YkB7B(cCJJFuWw8T!zV@A!-XliIk*0x~TPRw&g8>r3DaG+%{RW}O-4av^P zuo1T;5_e#^n^r4-P}y{Kvaz#rSYt%CNMvW_GV%bO(v`gLQ)L|QyzqMPE_W?-9w+Gj zjEk)VzRq>PyyzaTH}Z(>ZD1ky4+8SS=ENOw3jl?SEZXC5zdd3;Y{Ut_EDkrJy1Jj9NUX-U8bmDJOo__>>Rh&CWj zv`UN9%95UTZSPweL@UdRR%vlsS=iG)*Kqkz(W(YStF$<+YQfX?xcj|#MXTBotd-+jd2jl#y>v>R%GEs)6zF;oand{8>0OgU?|A5U<Yl&rP<>s!1)G(Nt%;;fK)c z+VG%I?acSL?M|=yy$_tlODy(!jgeCaY+tYM0(CaRDHfT(XQJ<`ovg3Kwc#h6K0h)_ z;bioE&+DsfTEHBb$b)+g#29tS<`vQAXomrihNfv+6c=?SbH4 z;6dPHz{i4n2S)^b@W6e7DS@sfPkh$bgpm(Yl@$XD!<@Vm!AEdk2=2pZ*bfT}dl}Ym z?N7Wbl~X$rzU*!}j|y@(1yJ;G2vL{DUbEebveMWQGjee?v1~EB|pBXE_;D z!LsYwU~7}pGVEddV(xs*bTZBb%dXUilQB9&hV55j)ZgOynCE272cLnA^CKCb%8+6E zNNC1P$TG^p`w7M#p9GI0?UG2wl^HT@yAPxO5YNZuPR14Bk;u3*lF^hQ!?xuxn*GIP zEOatz!Gn=e7s;?TeTO);!}Wl|1s18D24ev17gPgZ0PX^w0JZ@;fxa~4F+e#`4Xgmx z0`~%2ffs={fxQKFQSTpiIbyYC9~hexzv!8J{8xTN>(k@o|FHC2peVh{N)?@(Y)m%S z*9OD$q@Ta=Di&n(@U#s<{}|1A^^MmkPw}`)7O{#`|KGp4Mh~$$K0Eh$(TzRtniTto zu{ZHMU-p=<()=gDw#(oVy{8!-6q?~0n?%Dldnh=#>8h0rWa>DYg=YTNy=PDWZBP&fZJNLNF+o1uw$D)cGC}q$cGm;x zlVsnF1--!<3yuknGkx5T169bgbsU=d7V8PX1;i^1fk&4^!79JT1^F(G3q=l30Kfjm z2W^ahCVm>Yko4)`lfV~)hlACiPX>P$Oqtu-z~Wm4#t*gK0LG`aeF=OD_{(6?-R$t+ zgGGM_SYygY@M!Qu;M2iB0^?iSo&_s^KLd;YH86Q?)0j0DY<>UPj31u`1_b8@b4ih% zW|%RhAKs~7uoRd~9FhqA=$!+}op5O|iE@>=__4$l0X2rVJYb|C^a;)|cJ_YItd5CS zJ@%q)4FO64t?jzP!LdMh#QHUdaWLF7J&VF{`d{)$=l{#=Q`+E*oE21lEx3hi@p;-o zG2dNYU$eNeDb-TXF3G4^{6(#eE%i&2j1Nnfv4`BeAlbaUo=qevkB<+2&$;M=Wb@Mc zl-URsjr#c1z4;Q_j>>3!gPA38pSAAu<(E%WP~Y`|zL;pva@lRK1GcI6 zQ`hIvjqgb`eFVC9Io%^|@y%c6V~O?-bnnyHM<+yt=9U^8LNgBbWo&4B(u^^_>?<@0 zCd9`F=7EWgUjIcrf?b|5^mm%wD>d;Z#K(tXbbq%4-DFK`ZtmIF3jPsX2-e(Q{e6RzJs_A*UbIJbF0nzRM|rh#f!uk0*y(u$ zth_Scb8Ccok&J5M?Kqt~ug^Id&%3<-lzZj%MQ|b5=k>px>~vmdlA4)UJHCdL!-lwB zUv+w315@9@Z=Ae7>?Zj&oyu#+$S@i^<1+ro$=C%}9^a2-EY6T&$GI@_S8*9fu@+VR z_5rKk9SyeYs@e=0cC5-RW2loc%*i-0l5tsv3_ITB-eWw&$tVIJK|aPtGR}!)R1a-Qio`Fd}9=x1;?G0QD)~fh3;FH1Efo-nm} z3P5{9tATaE7T|e6bNQp_AY*`XUpY1h#&ylsoU&&c(0UJyh=-bVfo! zdD}uieHPHVLuKv?e>n@NE%|c~16=#oc;`a}?ea<*r%9S(dR}8q0~>+Mno`NB3$MI# z-1sZUL9BVVWNib)?|I@rVQ>?1vXjM(DzD9wknp!t*6W6td~)oTb-`u^+(Nf-VyV~^FJwHU$N zN6yoAJ}E$M7?4c0DlCtPA|OZ|g4iS(a0s4Axwx zyzF(DweIO)pQk=NA@q6DoZQw?`rL)=r1^kCk&{Qgw)N*;$AZ0$`|&X#epck8 zJ`19LM_+Vh2u*poHSN}q`FgfLJGd@t)Bc&Y+IJ=GwdD|Nv+?>L;yNhR9R;H3k*@D{ z@cj2hXgr_9>`(o7v{sC_jePTi`1~+_CTO4b$H^jHa#=eZ#&5%k3K5 z&)e=(M<9I8BJ-CPkJ<7?P>vNeov5~^T6kEzZMX^o{`85 z8TrZ1JL&#xSe&l0W~rvmre1vg%-`EQngaTHH2Tf{M8b)Y_{Fi>@`ZS0*)&2N3hBgOsl)9HI;t!tSH&(0Sc)7Ld}Of?J&x%bdsVv zYfN72o-V4L+IotoFKbRNuWxEic_PuMzTz~^$(GjU#^^|$vCYi=w@Ik6Cp#uXo%SeVr7zz}{Kn z*RecDXBOt$hONA7Zn_>`@p)R`c1ViyuD;+;d@3EWYMUA9zE${k6HjlbNwt_w%!=k_ zy>BBM%-Me%bTi|_u<)X=eRx3=-KYKXf>o2qi{yD*T&f2`1i$yAYoZc0G-l;n=QqsB zq{tvCQ;$2b!diK$Xgy? ziTDh)(@c#ImLQz2*pUo_g-R zKlXU9=Wnq?mR~Mlofm`y!fA5H)oM#S!d35wtKSK4{A76JJ>gA9hBwV9xS=WtZ~9EZ zP1jhReqU*eYh$mHPah~-qSfU)D5^CtmhI2J1m!jRE}FB;1_~kn{2WQDv_4T_JZzJF zz5>=<;BUcpja(hAk0nFA`DEPeWPHuZ_`66(<~s$Z&*jO-txm>mPR8vyWN02e+U3K~ zximk022l71Cu1F$Y6^tazWnn^-S_AI4zTtqz78Jd(oX_&PM~c#_%84m@ZDgo+{Gu~ zAUV^)>$#r|-Uyxtz6We=rnA5o5~KF!&jQad_xAj+_WqCN4ZoQtu1`?NeQ{)GtugIf zDU9Y?^3}Txbr5_DJ*um3gVn$81FO!y16Fzd39NkyTGVc2udz{98$WWcwHuM)p_R!qxkAT|U3MCTMT~?c`Ab1SDA=i(y zRiZwKk86_#+C$q^@DGFFrcZ;F-z&i{5MK@c3HWO8OW;#sVQuYvWf>33jRZU@u?=-rC;7{P=xK|#Bfd9-r zdxgROfJcEp0FMFh22TWwZZeqaZ~KH0SY^cjw#@eBZQBW9Zrwh!1EN)j_vG`s<4ESz|-zp=UH@l z3|MWWFSrMo3D1qbj}GSkSmI@q!C=|o1h8ztenW;0bk;>S7zUONP6C&Mhl5qmBf#^) zBf;{GqtKHC%Qh+n??bg+1=e{NwfSQ34d8L$HQ*BPePF&^-nJQB3Vs|s0sJIba-ITD z!B=F1NGB9m0I1{`BEPAyOVd~fLQLn)#xYxKTIhyq8%#5uQ?S*FdH?_B1buym# zVeCoQfbF}4h&Fy?An#!G!}s>%ZM1$tEiefv!4IpKc$#b2A0J74f7aGz!AaVwHEE*_ z_I*?R+m63s;K${7|1Jy6@fbbd*!U;PLYv#zoBZ|;jx_KN{Jj9ZC$DfRu!fFsAMgb5 zGO!C60+HrtRX_`{7PuF98rTjXEEo(F1G9i707eVe16zRSfv#}yETHQ1^E7;r3G%@{ z^vC6>o=j5K^S`Gd60J|)pFO|7rf0pr{G9bN!Hx{}8lRtdGpqdjvv!vKbjIN*#C7jm zFh_H6uWw3$)p43d=I;RL7t!Xk?cGAePC&FiU2C89#JvL?P5g4lr!}WUqfG` zl*Kv_@HEZ*Oah2|Nr=R-cT^?IT;zVp%5QEAL` z(Zn{dC&%9Phix0Q@mXw7nKtJ2uhpc0(3^N4m=7eTFwr$pIi4A-JyenJQ{fe#r&avz z#E&5U=Lq|>li}MuZD-FmpGxoj6~cEieCuO;%3e-B;(cEc-s`%V`qcQZzV7==p=9*! zULLls?b*Jvcl*k)ePzL_mhP(Io`sGkSzr^^=7G)e3$SBG?q}Qcm;x|$;H0`; z12We$&$cfxQ-cbo4Ek0>nZc6xroi~<(9P=Y`y($CuW*Tz#~h^%vfwhXZ2BoM{W|zG zcsN+|wvpf}?ln)n9ITZC^KUapuLf&=TEpCEHn^61c(t}MbMqvaxL^?&F!CC~OSsp3 zv>x1>b%xFVC^x^;D%H>3=9qb#T|2f=@AH5$CQfrfh4@*%d%3q`K^Xa6wY_yBBs8N> z<)!(fm-!c%W^b^hsl4(%idQ=%kH#*He`d{cEqIutlYK;YDtHC>7@ii`atz?T1X)Ra z%%AzT->y*HX!7spoXW5D_qp@ij$Gw;6`y#Ypk2V@%)NT z`Tacj7*25PZ+ScoX=OVA0VZv|k#_ht?^yHiB)tpP=2Ab3NX~`7-Nll=b6bG!~o; z#RD=T;bCOz@)5A|E?siwTe$BJeiW>g&cA^R!T*P*Q4M~A`x=LRzgyz&8^KSK-UR+W z__N@rz+VDC4gNA%dTs_w&h6m;0N>@}*Mt9)`wie{z}O@B0r)ZS55bRve*}IG{4Dq< zV9EP`;Q!)&JD9Y#SHaJNUkAScei!^x@GkI+;N4*Hv933JHrglqZ{lrT7n17N=%+dx zkHE%5SmT{-(uUzz2GRqM_O>Tp@cR5K<6E7`ef240>`r-RbjB`ls1t18c1&z z{XlxI>QX_z$Jb#o_jdeApTknyA0a}*WPGFgEN!a2H>=0q#JtVD((RZMMq>>{jNZN3 zN?D6}%JB|yYVUtmBH;o+d;4^wU@$NSC&;YCk z)&WldT_J6O?p*r$MxnF$=ybB?GKs35(R?H0`)}Kz6Rl70=p4uBztEZgeVWHohQ2^S zAZsu$b7w65`9pt3z@GsbX{hXS+;~8hn z_%Oiu3Nu%1JDzm;lA&O{fEg2y1)s(}^KQlwyU*E2Uo|4weWr7xJ}#ZMOu63?I1w3Y zDurO#O}fYjdrfv+9u9^^dxdTC@1wxhkCk$l*5~(IeV-4k`AuDHqo2MB^ujPBfUaEChX+u-EQbLlra{g=7?X?`mDw;bQUyYlyN za%VgKe|GxnsRPk3b@}>*qyMJE>}{L$vz-1P_;NXUHBMh|`i$iK#>okto>v_G2B)XS z$-CUiAL;lmb9C>za=q`$^Q4pig41`iF#FaQxqJ@$Wmn zCtZ3U$Nz%Uztq|FQCE(Cb^NVP|1~auXE{91(cR(rhB|zP)Ax##-|ldQ!#6v7OmK4F zckz!pT<_!#b^0%Maz{G7k2(H}T{-j|fd9ca9bW11aZb+rj_yWhr+E%nIJ%#?{7&%Y zaP&;BjNA~t1>{xx4*F)2{BbN4nsg$3dXxsO5B?G{8U)WVe|1gp@}*4jvjgdcikAE% z%8zx*jw-t3oW=Wy$ieX6J#w%wD1IGW(Ij}wb4o>)v6KTc@qwYn2UWZ*z?#l$HR8nAXlyy+HTLledrgvdU_l0=*!adYVWz| zZM>sDGfl5E!94^2-bPx!jW3?Krw6K0b6^j2run^R%?(XN*PoB21x(+j%Hw{Zdk#O) zJ+N(S9D|E*yBheq=V)6t-qGVXhPk#*Q{?H!o-dL3HgD4{UkSb=;zLh|d?wxT;WIp+ z#;ZiI=ff?p&!#&*{DtSMq91p}XVV=YKEwMcoxxA&z-*2WzImON#_{4iJn!ax;I%Z4 z7a!t%tHwN|H#(!6;aVe~V(A<|KE?BI-ba2*=lJn4emp2+oXpg(Gs1QZv1yK{Ce5R7 zk>%sDX^v-Mx?c3IU?z_p0=zDp?)Ylcd^~6Ckk6(&zPdDD+g|u=y5mcx`83f@1be=e z(L31lrAg0c z(=A_V+~2_$?!`}rzHVdwwUBa!9r!z&ZuJ$%^sO^|`P-{acYOF)-!AliSD5bukCefe z)6zNq*t|@0|4jb0->_+phqmN>v*z$&j+cA9E}QQ7@UNav-yG?P&!#)R*!-*vpJVdq zUSjcjY`mk#mwG*VMHAY`mkVu06fx&OOwB^o^33J#4(Ar;dG{Z8P-w=Lt65@x|&|>&qS;_ywEp z_+oSNTWE_ayZtqtbU(52j-LAU{cNY9&*Oj1e9Vrumd^2K)ptRT`Y!N3q&DqOH3k%P zFg`>)br`lQ9P$?6i}v^ES~ ziUQ5cd`tgb7n7OxtCsD|f&7}Zd+_-Mo-qu5)uJ;#%Uwivn$E$TmM2YTPV%Mce8+%1 zd^(?zFE2W4QJsfx3I+FP-LmtkXXgX+@ag$D|4qo`t87h@z_UgZdIXiN?vgR1vQ^&) z)xNeucACEFnU7E3>Qvah+hcp>?``aH<~tp_E;eJEjrD)`_!-cmXc1x^YI87S`h-a{ zXJ~>$@Ur#XDSmGfdBfsT?5eQKjPv%||IMW<>-RB(vgzd|9KE{$;$*9h6NfsVFO%z>s1>$2tcE>(Qm~EDHCoGwWwngVO0UE6UESVBV+D zv94nS?WZYdKX~uDqPoi{U;3LIMN_8M2Gc60SDaZq(`KM!{R8#RhY9=Z&NJ|f)nfmnJ(RF$FYG^y!qqiZGPw#X1cR4cc^6ou4L!dG$cpK_k{qWk}<3fo% zfmb7k1Yf;E=LQ<+e=F$kW4Jc^^k9WSz;Wj4^{oc+r{gv-IN0h2f-jJVDC>^7gFcoD zO3F&lJhP;9x})t_&++Cr7(}`g*t?!RH)$qRoOxz(#Uy4_Hgv3SK&0>aebVPjYQISt zj2~ZIKCPs}Iz{+9*45uUGf}QKQ?R|4ZEyWJm{u}#=EUg}rso|u^nGPN?q`oF`fl=I zWrmQQrjG>lw@G`X={v{y(ngWSe-pB0>bu0J=SkDIg!9SNH-ht}wUg%OJlXm-l9q4G z)VFkVkF|4Kx0B}Q3yENEY>b}Us^5|0zX{oC`hB>3Y5LtaUk}-Q`aL)A>$21IJ8k*+ z^!saL^W;Upt9ELhH2q%MDS6WLJ7_w0q>!1HIj#C`o1gRa4Cch_GN)DFVDs~@>@-9lz&J$GCB~w?oG%c%YY*~~_@on#BemA&kS+nVh%lrufm>Q7B?-Q|UveEoR*}*A5vQa<5)_ib;XIQ7UsiA@2 z;^d<}ovh5*X$iU-lAS8Krj{R%OPMbY9R%r76Ee+4TPK>gsNa0BHNA_)R;^hp_6BSI z#ga$g$S|`4ErVE6vFC5+8ILjcAH#JmnCV2IGpI~?%(_DJp0g1yJqp_{RfD&LlPzp={csya=l9O$D6rlHH^lb&RFLM@nDsVP%4loUv0Za$VfeK(I ba4s+lm<@DRsO&63U2?iC&}D%`&I11*u3Q>& diff --git a/ProcessPrivileges/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache b/ProcessPrivileges/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache deleted file mode 100644 index c63b382f76ba6191863b59601a18ca4858beab73..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6291 zcmeHLUsD@55Vyf77($9^N(eOR(Mem#cy4Tn`I8wQ5*xRkHVk9C2!wJfc6SF4ru(?+6^NaP1M?2oUETx1~^` zs?9yFeCn38?{HyeMZGS(LT)>0>@lgh@V3&g%oKi-M%H(=FWHvId@ZS)GIJWPLb4pIQgB7VQyT2Mu&yom6;bQ78 zNLJ%Y%htt!I8014bm2S*>UBnsmf0&^?}W#XnOwZNImcDQr7cu=bzmpZ7TN=MrLdV& zLcRg(xrRAG$aRJ=r|5f{*I8%CRY`3xsX1SqB~f{}vY55qs42*)HYs z!%E0n(vo|%q)}J4kS?!W?6JFVvGsMDu`_Gw&DB>dwXu1Syv>e#YU&{TaL`}3-g9x$ z=rBYF5k=u{8ieqB9#ehZK*InXL<|iBv|ktJK@@Rtd=$t;JciXVBmf5@@drTQXBsJLJ)RF*ZrIiCvToI>Mj;UiU8rDuZUotvC#!9cHQ>o3Mt;B3!a^12z z$Z1#d6F_b?rYuqU2*WFW4TS(KEdz8aG9}!T5GP;YB-5t$5sQC;^P2{;eA)Kyb0C-l zs6zO-)$v0D*cXxA25w8jaj!2H0Xao_vY5y5cT*47G`q6?kA|QtK=0@vq>2 zWFmpff?qO=#B6e}?vN)?kC~3^lDVM9PFVt1E?~sxf(I@HWi>$j2BKGGES+wwEnDFv zjgIpHB=;;*X!Pafvd~nNhsIm&xmaE77ML*)I)59y&Jbxz7N}hSweJ6>7W^H0d7hQkS4c}{+z4_$Rau9Lf@5S#k zdfh)5ACG?xr(U-t5E$SwNS*=N{@l|yxLU|_5VZuN-gD0p&7La>?^5gHT55BD(bMig3&!3fVPGYsr$q&%q4+OUaa;DCTw280- zlU(Oy8JaBcTAwjpg?k-Lmq4f%`1mDMDxVvYm*C!w*e4NyGtl)QSV2^cW%RG%+4^6Z N@!{DTW-JdT{{=+_AMpSH diff --git a/ProcessPrivileges/obj/Debug/ProcessPrivileges.csproj.FileListAbsolute.txt b/ProcessPrivileges/obj/Debug/ProcessPrivileges.csproj.FileListAbsolute.txt deleted file mode 100644 index eea008e..0000000 --- a/ProcessPrivileges/obj/Debug/ProcessPrivileges.csproj.FileListAbsolute.txt +++ /dev/null @@ -1,9 +0,0 @@ -C:\VS\fssecurity\NTFSSecurity\ProcessPrivileges\bin\Debug\ProcessPrivileges.dll -C:\VS\fssecurity\NTFSSecurity\ProcessPrivileges\bin\Debug\ProcessPrivileges.pdb -C:\VS\fssecurity\NTFSSecurity\ProcessPrivileges\obj\Debug\ProcessPrivileges.csprojResolveAssemblyReference.cache -C:\VS\fssecurity\NTFSSecurity\ProcessPrivileges\obj\Debug\ProcessPrivileges.dll -C:\VS\fssecurity\NTFSSecurity\ProcessPrivileges\obj\Debug\ProcessPrivileges.pdb -C:\Users\Administrator\Desktop\NTFSSecurity\ProcessPrivileges\bin\Debug\ProcessPrivileges.dll -C:\Users\Administrator\Desktop\NTFSSecurity\ProcessPrivileges\bin\Debug\ProcessPrivileges.pdb -C:\Users\Administrator\Desktop\NTFSSecurity\ProcessPrivileges\obj\Debug\ProcessPrivileges.dll -C:\Users\Administrator\Desktop\NTFSSecurity\ProcessPrivileges\obj\Debug\ProcessPrivileges.pdb diff --git a/ProcessPrivileges/obj/Debug/ProcessPrivileges.dll b/ProcessPrivileges/obj/Debug/ProcessPrivileges.dll deleted file mode 100644 index b65247a723e2854ad8a158b443fcb490854d1dce..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24064 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 ba4s+lm<@DRsO&63U2?iC&}D%`&I11*u3Q>& diff --git a/Security2/EffectiveAccess.cs b/Security2/EffectiveAccess.cs deleted file mode 100644 index 9527b2c..0000000 --- a/Security2/EffectiveAccess.cs +++ /dev/null @@ -1,66 +0,0 @@ -using Alphaleonis.Win32.Filesystem; -using System; -using System.Security.AccessControl; -using System.Security.Principal; - -namespace Security2 -{ - public class EffectiveAccess - { - public static EffectiveAccessInfo GetEffectiveAccess(FileSystemInfo item, IdentityReference2 id, string serverName) - { - bool remoteServerAvailable = false; - Exception authzAccessCheckException = null; - - var win32 = new Win32(); - - var fss = new FileSystemSecurity2(item); - - var effectiveAccessMask = win32.GetEffectiveAccess(fss.SecurityDescriptor, id, serverName, out remoteServerAvailable, out authzAccessCheckException); - - var ace = new FileSystemAccessRule((SecurityIdentifier)id, (FileSystemRights)effectiveAccessMask, AccessControlType.Allow); - - return new EffectiveAccessInfo( - new FileSystemAccessRule2(ace, item), - remoteServerAvailable, - authzAccessCheckException); - } - } - - public class EffectiveAccessInfo - { - private FileSystemAccessRule2 ace; - private bool fromRemote; - private Exception authzException; - - public FileSystemAccessRule2 Ace - { - get { return ace; } - } - - public bool FromRemote - { - get { return fromRemote; } - } - - public Exception AuthzException - { - get { return authzException; } - } - - public bool OperationFailed - { - get - { - return authzException == null ? false : true; - } - } - - public EffectiveAccessInfo(FileSystemAccessRule2 ace, bool fromRemote, Exception authzException = null) - { - this.ace = ace; - this.fromRemote = fromRemote; - this.authzException = authzException; - } - } -} \ No newline at end of file diff --git a/Security2/Enums.cs b/Security2/Enums.cs deleted file mode 100644 index a4f7e3a..0000000 --- a/Security2/Enums.cs +++ /dev/null @@ -1,82 +0,0 @@ -using System; -using System.Security.AccessControl; - -namespace Security2 -{ - public enum ApplyTo - { - ThisFolderOnly, //InheritanceFlags None / PropagationFlags None - - ThisFolderSubfoldersAndFiles, //InheritanceFlags ContainerInherit, ObjectInherit / PropagationFlags None - ThisFolderAndSubfolders, //InheritanceFlags ContainerInherit / PropagationFlags None - ThisFolderAndFiles, //InheritanceFlags ObjectInherit / PropagationFlags None - SubfoldersAndFilesOnly, //InheritanceFlags ContainerInherit, ObjectInherit / PropagationFlags InheritOnly - SubfoldersOnly, //InheritanceFlags ContainerInherit / PropagationFlags InheritOnly - FilesOnly, //InheritanceFlags ObjectInherit / PropagationFlags InheritOnly - - ThisFolderSubfoldersAndFilesOneLevel, //InheritanceFlags ContainerInherit, ObjectInherit / PropagationFlags NoPropagateInherit - ThisFolderAndSubfoldersOneLevel, //InheritanceFlags ContainerInherit / PropagationFlags NoPropagateInherit - ThisFolderAndFilesOneLevel, //InheritanceFlags ObjectInherit / PropagationFlags NoPropagateInherit - SubfoldersAndFilesOnlyOneLevel, //InheritanceFlags ContainerInherit, ObjectInherit / PropagationFlags InheritOnly, NoPropagateInherit - SubfoldersOnlyOneLevel, //InheritanceFlags ContainerInherit / PropagationFlags InheritOnly, NoPropagateInherit - FilesOnlyOneLevel, //InheritanceFlags ObjectInherit / PropagationFlags InheritOnly, NoPropagateInherit - } - - [Flags] - public enum FileSystemRights2 : uint - { - None = 0, - ListDirectory = 1, - ReadData = 1, - WriteData = 2, - CreateFiles = 2, - CreateDirectories = 4, - AppendData = 4, - ReadExtendedAttributes = 8, - WriteExtendedAttributes = 16, - ExecuteFile = 32, - Traverse = 32, - DeleteSubdirectoriesAndFiles = 64, - ReadAttributes = 128, - WriteAttributes = 256, - Write = 278, - Delete = 65536, - ReadPermissions = 131072, - Read = 131209, - ReadAndExecute = 131241, - Modify = 197055, - ChangePermissions = 262144, - TakeOwnership = 524288, - Synchronize = 1048576, - FullControl = 2032127, - GenericRead = 0x80000000, - GenericWrite = 0x40000000, - GenericExecute = 0x20000000, - GenericAll = 0x10000000 - } - - [Flags] - public enum SimpleFileSystemAccessRights - { - None = 0, - Read = 1, - Write = 2, - Delete = 4 - } - - public enum GenericRights : uint - { - GENERIC_READ = 0x80000000, - GENERIC_WRITE = 0x40000000, - GENERIC_EXECUTE = 0x20000000, - GENERIC_ALL = 0x10000000 - } - - public enum MappedGenericRights : uint - { - FILE_GENERIC_EXECUTE = FileSystemRights.ExecuteFile | FileSystemRights.ReadPermissions | FileSystemRights.ReadAttributes | FileSystemRights.Synchronize, - FILE_GENERIC_READ = FileSystemRights.ReadAttributes | FileSystemRights.ReadData | FileSystemRights.ReadExtendedAttributes | FileSystemRights.ReadPermissions | FileSystemRights.Synchronize, - FILE_GENERIC_WRITE = FileSystemRights.AppendData | FileSystemRights.WriteAttributes | FileSystemRights.WriteData | FileSystemRights.WriteExtendedAttributes | FileSystemRights.ReadPermissions | FileSystemRights.Synchronize, - FILE_GENERIC_ALL = FileSystemRights.FullControl - } -} \ No newline at end of file diff --git a/Security2/Exceptions/Exceptions.cs b/Security2/Exceptions/Exceptions.cs deleted file mode 100644 index ebd7fe8..0000000 --- a/Security2/Exceptions/Exceptions.cs +++ /dev/null @@ -1,9 +0,0 @@ -using System; - -namespace Security2 -{ - public class RightsConverionException : Exception - { - public RightsConverionException(string Message) : base(Message) { } - } -} diff --git a/Security2/Extensions.cs b/Security2/Extensions.cs deleted file mode 100644 index cffc62d..0000000 --- a/Security2/Extensions.cs +++ /dev/null @@ -1,25 +0,0 @@ -using System; -using System.Runtime.InteropServices; - -namespace Security2 -{ - internal static class IntPtrExtensions - { - public static IntPtr Increment(this IntPtr ptr, int cbSize) - { - return new IntPtr(ptr.ToInt64() + cbSize); - } - - public static IntPtr Increment(this IntPtr ptr) - { - return ptr.Increment(Marshal.SizeOf(typeof(T))); - } - - public static T ElementAt(this IntPtr ptr, int index) - { - var offset = Marshal.SizeOf(typeof(T)) * index; - var offsetPtr = ptr.Increment(offset); - return (T)Marshal.PtrToStructure(offsetPtr, typeof(T)); - } - } -} diff --git a/Security2/FileSystem/FileInfo/Extensions.cs b/Security2/FileSystem/FileInfo/Extensions.cs deleted file mode 100644 index 5a3483d..0000000 --- a/Security2/FileSystem/FileInfo/Extensions.cs +++ /dev/null @@ -1,62 +0,0 @@ -using System.Text; - -namespace Security2.FileSystem.FileInfo -{ - public enum HashAlgorithms - { - SHA1, - SHA256, - SHA384, - SHA512, - MACTripleDES, - MD5, - RIPEMD160 - } - - public static class Extensions - { - - public static string GetHash(this Alphaleonis.Win32.Filesystem.FileInfo file, HashAlgorithms algorithm) - { - byte[] hash = null; - - using (var fileStream = file.OpenRead()) - { - switch (algorithm) - { - case HashAlgorithms.MD5: - hash = System.Security.Cryptography.MD5.Create().ComputeHash(fileStream); - break; - case HashAlgorithms.SHA1: - hash = System.Security.Cryptography.SHA1.Create().ComputeHash(fileStream); - break; - case HashAlgorithms.SHA256: - hash = System.Security.Cryptography.SHA256.Create().ComputeHash(fileStream); - break; - case HashAlgorithms.SHA384: - hash = System.Security.Cryptography.SHA384.Create().ComputeHash(fileStream); - break; - case HashAlgorithms.SHA512: - hash = System.Security.Cryptography.SHA512.Create().ComputeHash(fileStream); - break; - case HashAlgorithms.MACTripleDES: - hash = System.Security.Cryptography.MACTripleDES.Create().ComputeHash(fileStream); - break; - case HashAlgorithms.RIPEMD160: - hash = System.Security.Cryptography.RIPEMD160.Create().ComputeHash(fileStream); - break; - } - - fileStream.Close(); - } - - var sb = new StringBuilder(hash.Length); - for (var i = 0; i < hash.Length; i++) - { - sb.Append(hash[i].ToString("X2")); - } - - return sb.ToString(); - } - } -} \ No newline at end of file diff --git a/Security2/FileSystem/FileSystemAccessRule2 Class/FileSystemAccessRule2.AddFileSystemAccessRules.cs b/Security2/FileSystem/FileSystemAccessRule2 Class/FileSystemAccessRule2.AddFileSystemAccessRules.cs deleted file mode 100644 index 7a39392..0000000 --- a/Security2/FileSystem/FileSystemAccessRule2 Class/FileSystemAccessRule2.AddFileSystemAccessRules.cs +++ /dev/null @@ -1,122 +0,0 @@ -using Alphaleonis.Win32.Filesystem; -using System.Collections.Generic; -using System.Security.AccessControl; - -namespace Security2 -{ - public partial class FileSystemAccessRule2 - { - public static FileSystemAccessRule2 AddFileSystemAccessRule(FileSystemSecurity2 sd, IdentityReference2 account, FileSystemRights2 rights, AccessControlType type, InheritanceFlags inheritanceFlags, PropagationFlags propagationFlags) - { - if (type == AccessControlType.Allow) - rights = rights | FileSystemRights2.Synchronize; - - FileSystemAccessRule ace = null; - - if (sd.IsFile) - { - ace = (FileSystemAccessRule)sd.SecurityDescriptor.AccessRuleFactory(account, (int)rights, false, InheritanceFlags.None, PropagationFlags.None, type); - ((FileSecurity)sd.SecurityDescriptor).AddAccessRule(ace); - } - else - { - ace = (FileSystemAccessRule)sd.SecurityDescriptor.AccessRuleFactory(account, (int)rights, false, inheritanceFlags, propagationFlags, type); - ((DirectorySecurity)sd.SecurityDescriptor).AddAccessRule(ace); - } - - return ace; - } - - public static FileSystemAccessRule2 AddFileSystemAccessRule(FileSystemInfo item, IdentityReference2 account, FileSystemRights2 rights, AccessControlType type, InheritanceFlags inheritanceFlags, PropagationFlags propagationFlags) - { - if (type == AccessControlType.Allow) - rights = rights | FileSystemRights2.Synchronize; - - var sd = new FileSystemSecurity2(item); - - var ace = AddFileSystemAccessRule(sd, account, rights, type, inheritanceFlags, propagationFlags); - - sd.Write(); - - return ace; - } - - public static IEnumerable AddFileSystemAccessRule(FileSystemInfo item, List accounts, FileSystemRights2 rights, AccessControlType type, InheritanceFlags inheritanceFlags, PropagationFlags propagationFlags) - { - var aces = new List(); - - foreach (var account in accounts) - { - aces.Add(AddFileSystemAccessRule(item, account, rights, type, inheritanceFlags, propagationFlags)); - } - - return aces; - } - - public static IEnumerable AddFileSystemAccessRule(FileSystemSecurity2 sd, List accounts, FileSystemRights2 rights, AccessControlType type, InheritanceFlags inheritanceFlags, PropagationFlags propagationFlags) - { - var aces = new List(); - - foreach (var account in accounts) - { - aces.Add(AddFileSystemAccessRule(sd, account, rights, type, inheritanceFlags, propagationFlags)); - } - - return aces; - } - - public static FileSystemAccessRule2 AddFileSystemAccessRule(string path, IdentityReference2 account, FileSystemRights2 rights, AccessControlType type, InheritanceFlags inheritanceFlags, PropagationFlags propagationFlags) - { - if (type == AccessControlType.Allow) - rights = rights | FileSystemRights2.Synchronize; - - FileSystemAccessRule ace = null; - - if (File.Exists(path)) - { - var item = new FileInfo(path); - ace = AddFileSystemAccessRule(item, account, rights, type, inheritanceFlags, propagationFlags); - } - else - { - var item = new DirectoryInfo(path); - ace = AddFileSystemAccessRule(item, account, rights, type, inheritanceFlags, propagationFlags); - } - - return ace; - } - - public static IEnumerable AddFileSystemAccessRule(string path, List accounts, FileSystemRights2 rights, AccessControlType type, InheritanceFlags inheritanceFlags, PropagationFlags propagationFlags) - { - if (type == AccessControlType.Allow) - rights = rights | FileSystemRights2.Synchronize; - - if (File.Exists(path)) - { - var item = new FileInfo(path); - foreach (var account in accounts) - { - yield return AddFileSystemAccessRule(item, account, rights, type, inheritanceFlags, propagationFlags); - } - } - else - { - var item = new DirectoryInfo(path); - foreach (var account in accounts) - { - yield return AddFileSystemAccessRule(item, account, rights, type, inheritanceFlags, propagationFlags); - } - } - } - - public static void AddFileSystemAccessRule(FileSystemAccessRule2 rule) - { - AddFileSystemAccessRule(rule.fullName, - rule.Account, - rule.AccessRights, - rule.AccessControlType, - rule.InheritanceFlags, - rule.PropagationFlags); - } - } -} \ No newline at end of file diff --git a/Security2/FileSystem/FileSystemAccessRule2 Class/FileSystemAccessRule2.GetFileSystemAccessRules.cs b/Security2/FileSystem/FileSystemAccessRule2 Class/FileSystemAccessRule2.GetFileSystemAccessRules.cs deleted file mode 100644 index 35f3bec..0000000 --- a/Security2/FileSystem/FileSystemAccessRule2 Class/FileSystemAccessRule2.GetFileSystemAccessRules.cs +++ /dev/null @@ -1,59 +0,0 @@ -using Alphaleonis.Win32.Filesystem; -using System.Collections.Generic; -using System.Security.AccessControl; -using System.Security.Principal; - -namespace Security2 -{ - public partial class FileSystemAccessRule2 - { - public static IEnumerable GetFileSystemAccessRules(FileSystemInfo item, bool includeExplicit, bool includeInherited, bool getInheritedFrom = false) - { - var sd = new FileSystemSecurity2(item, AccessControlSections.Access); - - return GetFileSystemAccessRules(sd, includeExplicit, includeInherited, getInheritedFrom); - } - - public static IEnumerable GetFileSystemAccessRules(FileSystemSecurity2 sd, bool includeExplicit, bool includeInherited, bool getInheritedFrom = false) - { - List aceList = new List(); - List inheritedFrom = null; - - if (getInheritedFrom) - { - inheritedFrom = Win32.GetInheritedFrom(sd.Item, sd.SecurityDescriptor); - } - - var aceCounter = 0; - var acl = !sd.IsFile ? - ((DirectorySecurity)sd.SecurityDescriptor).GetAccessRules(includeExplicit, includeInherited, typeof(SecurityIdentifier)) : - ((FileSecurity)sd.SecurityDescriptor).GetAccessRules(includeExplicit, includeInherited, typeof(SecurityIdentifier)); - - foreach (FileSystemAccessRule ace in acl) - { - var ace2 = new FileSystemAccessRule2(ace) { FullName = sd.Item.FullName, InheritanceEnabled = !sd.SecurityDescriptor.AreAccessRulesProtected }; - if (getInheritedFrom && inheritedFrom.Count > 0) - { - ace2.inheritedFrom = string.IsNullOrEmpty(inheritedFrom[aceCounter]) ? "" : inheritedFrom[aceCounter].Substring(0, inheritedFrom[aceCounter].Length - 1); - aceCounter++; - } - - aceList.Add(ace2); - } - - return aceList; - } - - public static IEnumerable GetFileSystemAccessRules(string path, bool includeExplicit, bool includeInherited, bool getInheritedFrom = false) - { - if (File.Exists(path)) - { - return GetFileSystemAccessRules(new FileInfo(path), includeExplicit, includeInherited, getInheritedFrom); - } - else - { - return GetFileSystemAccessRules(new DirectoryInfo(path), includeExplicit, includeInherited, getInheritedFrom); - } - } - } -} \ No newline at end of file diff --git a/Security2/FileSystem/FileSystemAccessRule2 Class/FileSystemAccessRule2.RemoveFileSystemAccessRules.cs b/Security2/FileSystem/FileSystemAccessRule2 Class/FileSystemAccessRule2.RemoveFileSystemAccessRules.cs deleted file mode 100644 index 21d069f..0000000 --- a/Security2/FileSystem/FileSystemAccessRule2 Class/FileSystemAccessRule2.RemoveFileSystemAccessRules.cs +++ /dev/null @@ -1,146 +0,0 @@ -using Alphaleonis.Win32.Filesystem; -using System.Collections.Generic; -using System.Security.AccessControl; - -namespace Security2 -{ - public partial class FileSystemAccessRule2 - { - public static void RemoveFileSystemAccessRule(FileSystemInfo item, IdentityReference2 account, FileSystemRights2 rights, AccessControlType type, InheritanceFlags inheritanceFlags, PropagationFlags propagationFlags, bool removeSpecific = false) - { - if (type == AccessControlType.Allow) - rights = rights | FileSystemRights2.Synchronize; - - FileSystemAccessRule ace = null; - - if (item as FileInfo != null) - { - var file = (FileInfo)item; - var sd = file.GetAccessControl(AccessControlSections.Access); - - ace = (FileSystemAccessRule)sd.AccessRuleFactory(account, (int)rights, false, inheritanceFlags, propagationFlags, type); - if (removeSpecific) - sd.RemoveAccessRuleSpecific(ace); - else - sd.RemoveAccessRule(ace); - - file.SetAccessControl(sd); - } - else - { - DirectoryInfo directory = (DirectoryInfo)item; - - var sd = directory.GetAccessControl(AccessControlSections.Access); - - ace = (FileSystemAccessRule)sd.AccessRuleFactory(account, (int)rights, false, inheritanceFlags, propagationFlags, type); - if (removeSpecific) - sd.RemoveAccessRuleSpecific(ace); - else - sd.RemoveAccessRule(ace); - - directory.SetAccessControl(sd); - } - } - - public static void RemoveFileSystemAccessRule(FileSystemInfo item, List accounts, FileSystemRights2 rights, AccessControlType type, InheritanceFlags inheritanceFlags, PropagationFlags propagationFlags, bool removeSpecific = false) - { - foreach (var account in accounts) - { - RemoveFileSystemAccessRule(item, account, rights, type, inheritanceFlags, propagationFlags, removeSpecific); - } - } - - public static void RemoveFileSystemAccessRule(string path, IdentityReference2 account, FileSystemRights2 rights, AccessControlType type, InheritanceFlags inheritanceFlags, PropagationFlags propagationFlags, bool removeSpecific = false) - { - if (File.Exists(path)) - { - var item = new FileInfo(path); - RemoveFileSystemAccessRule(item, account, rights, type, inheritanceFlags, propagationFlags, removeSpecific); - } - else - { - var item = new DirectoryInfo(path); - RemoveFileSystemAccessRule(item, account, rights, type, inheritanceFlags, propagationFlags, removeSpecific); - } - } - - public static void RemoveFileSystemAccessRule(string path, List account, FileSystemRights2 rights, AccessControlType type, InheritanceFlags inheritanceFlags, PropagationFlags propagationFlags, bool removeSpecific = false) - { - if (File.Exists(path)) - { - var item = new FileInfo(path); - RemoveFileSystemAccessRule(item, account, rights, type, inheritanceFlags, propagationFlags, removeSpecific); - } - else - { - var item = new DirectoryInfo(path); - RemoveFileSystemAccessRule(item, account, rights, type, inheritanceFlags, propagationFlags, removeSpecific); - } - } - - public static void RemoveFileSystemAccessRule(FileSystemInfo item, FileSystemAccessRule ace, bool removeSpecific = false) - { - if (item as FileInfo != null) - { - var file = (FileInfo)item; - var sd = file.GetAccessControl(AccessControlSections.Access); - - if (removeSpecific) - sd.RemoveAccessRuleSpecific(ace); - else - sd.RemoveAccessRule(ace); - - file.SetAccessControl(sd); - } - else - { - DirectoryInfo directory = (DirectoryInfo)item; - - var sd = directory.GetAccessControl(AccessControlSections.Access); - - if (removeSpecific) - sd.RemoveAccessRuleSpecific(ace); - else - sd.RemoveAccessRule(ace); - - directory.SetAccessControl(sd); - } - } - - public static FileSystemAccessRule2 RemoveFileSystemAccessRule(FileSystemSecurity2 sd, IdentityReference2 account, FileSystemRights2 rights, AccessControlType type, InheritanceFlags inheritanceFlags, PropagationFlags propagationFlags, bool removeSpecific = false) - { - if (type == AccessControlType.Allow) - rights = rights | FileSystemRights2.Synchronize; - - var ace = (FileSystemAccessRule)sd.SecurityDescriptor.AccessRuleFactory(account, (int)rights, false, inheritanceFlags, propagationFlags, type); - if (sd.IsFile) - { - if (removeSpecific) - ((FileSecurity)sd.SecurityDescriptor).RemoveAccessRuleSpecific(ace); - else - ((FileSecurity)sd.SecurityDescriptor).RemoveAccessRule(ace); - } - else - { - if (removeSpecific) - ((DirectorySecurity)sd.SecurityDescriptor).RemoveAccessRuleSpecific(ace); - else - ((DirectorySecurity)sd.SecurityDescriptor).RemoveAccessRule(ace); - } - - return ace; - } - - public static IEnumerable RemoveFileSystemAccessRule(FileSystemSecurity2 sd, List accounts, FileSystemRights2 rights, AccessControlType type, InheritanceFlags inheritanceFlags, PropagationFlags propagationFlags, bool removeSpecific = false) - { - var aces = new List(); - - foreach (var account in accounts) - { - aces.Add(RemoveFileSystemAccessRule(sd, account, rights, type, inheritanceFlags, propagationFlags)); - } - - return aces; - } - } -} \ No newline at end of file diff --git a/Security2/FileSystem/FileSystemAccessRule2 Class/FileSystemAccessRule2.RemoveFileSystemAccessRulesAll.cs b/Security2/FileSystem/FileSystemAccessRule2 Class/FileSystemAccessRule2.RemoveFileSystemAccessRulesAll.cs deleted file mode 100644 index 0cb8cd3..0000000 --- a/Security2/FileSystem/FileSystemAccessRule2 Class/FileSystemAccessRule2.RemoveFileSystemAccessRulesAll.cs +++ /dev/null @@ -1,35 +0,0 @@ -using Alphaleonis.Win32.Filesystem; -using System.Collections.Generic; -using System.Linq; -using System.Security.AccessControl; -using System.Security.Principal; - -namespace Security2 -{ - public partial class FileSystemAccessRule2 - { - public static void RemoveFileSystemAccessRuleAll(FileSystemSecurity2 sd, List accounts = null) - { - var acl = sd.SecurityDescriptor.GetAccessRules(true, false, typeof(SecurityIdentifier)); - - if (accounts != null) - { - acl.OfType().Where(ace => (accounts.Where(account => account == (IdentityReference2)ace.IdentityReference).Count() > 1)); - } - - foreach (FileSystemAccessRule ace in acl) - { - sd.SecurityDescriptor.RemoveAccessRuleSpecific(ace); - } - } - - public static void RemoveFileSystemAccessRuleAll(FileSystemInfo item, List accounts = null) - { - var sd = new FileSystemSecurity2(item); - - RemoveFileSystemAccessRuleAll(sd, accounts); - - sd.Write(); - } - } -} \ No newline at end of file diff --git a/Security2/FileSystem/FileSystemAccessRule2 Class/FileSystemAccessRule2.cs b/Security2/FileSystem/FileSystemAccessRule2 Class/FileSystemAccessRule2.cs deleted file mode 100644 index 4945596..0000000 --- a/Security2/FileSystem/FileSystemAccessRule2 Class/FileSystemAccessRule2.cs +++ /dev/null @@ -1,74 +0,0 @@ -using Alphaleonis.Win32.Filesystem; -using System.Security.AccessControl; - -namespace Security2 -{ - public partial class FileSystemAccessRule2 - { - #region Properties - private FileSystemAccessRule fileSystemAccessRule; - private string fullName; - private bool inheritanceEnabled; - private string inheritedFrom; - - public string Name { get { return System.IO.Path.GetFileName(fullName); } } - public string FullName { get { return fullName; } set { fullName = value; } } - public bool InheritanceEnabled { get { return inheritanceEnabled; } set { inheritanceEnabled = value; } } - public string InheritedFrom { get { return inheritedFrom; } set { inheritedFrom = value; } } - public AccessControlType AccessControlType { get { return fileSystemAccessRule.AccessControlType; } } - public FileSystemRights2 AccessRights { get { return (FileSystemRights2)fileSystemAccessRule.FileSystemRights; } } - public IdentityReference2 Account { get { return fileSystemAccessRule.IdentityReference; } } - public InheritanceFlags InheritanceFlags { get { return fileSystemAccessRule.InheritanceFlags; } } - public bool IsInherited { get { return fileSystemAccessRule.IsInherited; } } - public PropagationFlags PropagationFlags { get { return fileSystemAccessRule.PropagationFlags; } } - #endregion - - public FileSystemAccessRule2(FileSystemAccessRule fileSystemAccessRule) - { - this.fileSystemAccessRule = fileSystemAccessRule; - } - - public FileSystemAccessRule2(FileSystemAccessRule fileSystemAccessRule, FileSystemInfo item) - { - this.fileSystemAccessRule = fileSystemAccessRule; - this.fullName = item.FullName; - } - - public FileSystemAccessRule2(FileSystemAccessRule fileSystemAccessRule, string path) - { - this.fileSystemAccessRule = fileSystemAccessRule; - } - - public static implicit operator FileSystemAccessRule(FileSystemAccessRule2 ace2) - { - return ace2.fileSystemAccessRule; - } - public static implicit operator FileSystemAccessRule2(FileSystemAccessRule ace) - { - return new FileSystemAccessRule2(ace); - } - - //REQUIRED BECAUSE OF CONVERSION OPERATORS - public override bool Equals(object obj) - { - return fileSystemAccessRule == (FileSystemAccessRule)obj; - } - public override int GetHashCode() - { - return fileSystemAccessRule.GetHashCode(); - } - public override string ToString() - { - return string.Format("{0} '{1}' ({2})", - AccessControlType.ToString()[0], - Account.AccountName, - AccessRights.ToString() - ); - - } - public SimpleFileSystemAccessRule ToSimpleFileSystemAccessRule2() - { - return new SimpleFileSystemAccessRule(fullName, Account, AccessRights); - } - } -} \ No newline at end of file diff --git a/Security2/FileSystem/FileSystemAuditRule2 Class/FileSystemAuditRule2.AddFileSystemAuditRules.cs b/Security2/FileSystem/FileSystemAuditRule2 Class/FileSystemAuditRule2.AddFileSystemAuditRules.cs deleted file mode 100644 index 0bb350a..0000000 --- a/Security2/FileSystem/FileSystemAuditRule2 Class/FileSystemAuditRule2.AddFileSystemAuditRules.cs +++ /dev/null @@ -1,110 +0,0 @@ -using Alphaleonis.Win32.Filesystem; -using System.Collections.Generic; -using System.Security.AccessControl; - -namespace Security2 -{ - public partial class FileSystemAuditRule2 - { - public static FileSystemAuditRule2 AddFileSystemAuditRule(FileSystemSecurity2 sd, IdentityReference2 account, FileSystemRights2 rights, AuditFlags type, InheritanceFlags inheritanceFlags, PropagationFlags propagationFlags) - { - FileSystemAuditRule2 ace = null; - - if (sd.IsFile) - { - ace = (FileSystemAuditRule)sd.SecurityDescriptor.AuditRuleFactory(account, (int)rights, false, InheritanceFlags.None, PropagationFlags.None, type); - ((FileSecurity)sd.SecurityDescriptor).AddAuditRule(ace); - } - else - { - ace = (FileSystemAuditRule)sd.SecurityDescriptor.AuditRuleFactory(account, (int)rights, false, inheritanceFlags, propagationFlags, type); - ((DirectorySecurity)sd.SecurityDescriptor).AddAuditRule(ace); - } - - return ace; - } - - public static FileSystemAuditRule2 AddFileSystemAuditRule(FileSystemInfo item, IdentityReference2 account, FileSystemRights2 rights, AuditFlags type, InheritanceFlags inheritanceFlags, PropagationFlags propagationFlags) - { - var sd = new FileSystemSecurity2(item); - - var ace = AddFileSystemAuditRule(sd, account, rights, type, inheritanceFlags, propagationFlags); - - sd.Write(); - - return ace; - } - - public static FileSystemAuditRule2 AddFileSystemAuditRule(string path, IdentityReference2 account, FileSystemRights2 rights, AuditFlags type, InheritanceFlags inheritanceFlags, PropagationFlags propagationFlags) - { - FileSystemAuditRule ace = null; - - if (File.Exists(path)) - { - var item = new FileInfo(path); - ace = AddFileSystemAuditRule(item, account, rights, type, inheritanceFlags, propagationFlags); - } - else - { - var item = new DirectoryInfo(path); - ace = AddFileSystemAuditRule(item, account, rights, type, inheritanceFlags, propagationFlags); - } - - return ace; - } - - public static IEnumerable AddFileSystemAuditRule(FileSystemSecurity2 sd, List accounts, FileSystemRights2 rights, AuditFlags type, InheritanceFlags inheritanceFlags, PropagationFlags propagationFlags) - { - var aces = new List(); - - foreach (var account in accounts) - { - aces.Add(AddFileSystemAuditRule(sd, account, rights, type, inheritanceFlags, propagationFlags)); - } - - return aces; - } - - public static IEnumerable AddFileSystemAuditRule(FileSystemInfo item, List accounts, FileSystemRights2 rights, AuditFlags type, InheritanceFlags inheritanceFlags, PropagationFlags propagationFlags) - { - var aces = new List(); - - foreach (var account in accounts) - { - aces.Add(AddFileSystemAuditRule(item, account, rights, type, inheritanceFlags, propagationFlags)); - } - - return aces; - } - - public static IEnumerable AddFileSystemAuditRule(string path, List accounts, FileSystemRights2 rights, AuditFlags type, InheritanceFlags inheritanceFlags, PropagationFlags propagationFlags) - { - if (File.Exists(path)) - { - var item = new FileInfo(path); - foreach (var account in accounts) - { - yield return AddFileSystemAuditRule(item, account, rights, type, inheritanceFlags, propagationFlags); - } - } - else - { - var item = new DirectoryInfo(path); - foreach (var account in accounts) - { - yield return AddFileSystemAuditRule(item, account, rights, type, inheritanceFlags, propagationFlags); - } - } - } - - public static void AddFileSystemAuditRule(FileSystemAuditRule2 rule) - { - AddFileSystemAuditRule(rule.fullName, - rule.Account, - rule.AccessRights, - rule.AuditFlags, - rule.InheritanceFlags, - rule.PropagationFlags); - } - } -} diff --git a/Security2/FileSystem/FileSystemAuditRule2 Class/FileSystemAuditRule2.GetFileSystemAuditRules.cs b/Security2/FileSystem/FileSystemAuditRule2 Class/FileSystemAuditRule2.GetFileSystemAuditRules.cs deleted file mode 100644 index 9e797b6..0000000 --- a/Security2/FileSystem/FileSystemAuditRule2 Class/FileSystemAuditRule2.GetFileSystemAuditRules.cs +++ /dev/null @@ -1,61 +0,0 @@ -using Alphaleonis.Win32.Filesystem; -using System.Collections.Generic; -using System.Security.AccessControl; -using System.Security.Principal; - -namespace Security2 -{ - public partial class FileSystemAuditRule2 - { - public static IEnumerable GetFileSystemAuditRules(FileSystemInfo item, bool includeExplicit, bool includeInherited, bool getInheritedFrom = false) - { - var sd = new FileSystemSecurity2(item); - - return GetFileSystemAuditRules(sd, includeExplicit, includeInherited, getInheritedFrom); - } - - public static IEnumerable GetFileSystemAuditRules(FileSystemSecurity2 sd, bool includeExplicit, bool includeInherited, bool getInheritedFrom = false) - { - List aceList = new List(); - List inheritedFrom = null; - - if (getInheritedFrom) - { - inheritedFrom = Win32.GetInheritedFrom(sd.Item, sd.SecurityDescriptor); - } - - var aceCounter = 0; - var acl = !sd.IsFile ? - ((DirectorySecurity)sd.SecurityDescriptor).GetAuditRules(includeExplicit, includeInherited, typeof(SecurityIdentifier)) : - ((FileSecurity)sd.SecurityDescriptor).GetAuditRules(includeExplicit, includeInherited, typeof(SecurityIdentifier)); - - foreach (FileSystemAuditRule ace in acl) - { - var ace2 = new FileSystemAuditRule2(ace) { FullName = sd.Item.FullName, InheritanceEnabled = !sd.SecurityDescriptor.AreAccessRulesProtected }; - if (getInheritedFrom) - { - ace2.inheritedFrom = string.IsNullOrEmpty(inheritedFrom[aceCounter]) ? "" : inheritedFrom[aceCounter].Substring(0, inheritedFrom[aceCounter].Length - 1); - aceCounter++; - } - - aceList.Add(ace2); - } - - return aceList; - } - - public static IEnumerable GetFileSystemAuditRules(string path, bool includeExplicit, bool includeInherited) - { - if (File.Exists(path)) - { - var item = new FileInfo(path); - return GetFileSystemAuditRules(item, includeExplicit, includeInherited); - } - else - { - var item = new DirectoryInfo(path); - return GetFileSystemAuditRules(item, includeExplicit, includeInherited); - } - } - } -} diff --git a/Security2/FileSystem/FileSystemAuditRule2 Class/FileSystemAuditRule2.RemoveFileSystemAuditRule.cs b/Security2/FileSystem/FileSystemAuditRule2 Class/FileSystemAuditRule2.RemoveFileSystemAuditRule.cs deleted file mode 100644 index 46a03e4..0000000 --- a/Security2/FileSystem/FileSystemAuditRule2 Class/FileSystemAuditRule2.RemoveFileSystemAuditRule.cs +++ /dev/null @@ -1,115 +0,0 @@ -using Alphaleonis.Win32.Filesystem; -using System.Collections.Generic; -using System.Security.AccessControl; - -namespace Security2 -{ - public partial class FileSystemAuditRule2 - { - public static void RemoveFileSystemAuditRule(FileSystemInfo item, IdentityReference2 account, FileSystemRights2 rights, AuditFlags type, InheritanceFlags inheritanceFlags, PropagationFlags propagationFlags) - { - FileSystemAuditRule ace = null; - - if (item is FileInfo) - { - var file = (FileInfo)item; - var sd = file.GetAccessControl(AccessControlSections.Audit); - - ace = (FileSystemAuditRule)sd.AuditRuleFactory(account, (int)rights, false, inheritanceFlags, propagationFlags, type); - - sd.RemoveAuditRuleSpecific(ace); - - file.SetAccessControl(sd); - } - else - { - DirectoryInfo directory = (DirectoryInfo)item; - - var sd = directory.GetAccessControl(AccessControlSections.Audit); - - ace = (FileSystemAuditRule)sd.AuditRuleFactory(account, (int)rights, false, inheritanceFlags, propagationFlags, type); - sd.RemoveAuditRuleSpecific(ace); - - directory.SetAccessControl(sd); - } - } - - public static void RemoveFileSystemAuditRule(FileSystemInfo item, List accounts, FileSystemRights2 rights, AuditFlags type, InheritanceFlags inheritanceFlags, PropagationFlags propagationFlags, bool removeSpecific = false) - { - foreach (var account in accounts) - { - RemoveFileSystemAuditRule(item, account, rights, type, inheritanceFlags, propagationFlags); - } - } - - public static void RemoveFileSystemAuditRule(FileSystemInfo item, FileSystemAuditRule ace) - { - if (item is FileInfo) - { - var file = (FileInfo)item; - var sd = file.GetAccessControl(AccessControlSections.Audit); - - sd.RemoveAuditRuleSpecific(ace); - - file.SetAccessControl(sd); - } - else - { - DirectoryInfo directory = (DirectoryInfo)item; - - var sd = directory.GetAccessControl(AccessControlSections.Audit); - - sd.RemoveAuditRuleSpecific(ace); - - directory.SetAccessControl(sd); - } - } - - public static void RemoveFileSystemAuditRule(string path, IdentityReference2 account, FileSystemRights2 rights, AuditFlags type, InheritanceFlags inheritanceFlags, PropagationFlags propagationFlags) - { - if (File.Exists(path)) - { - var item = new FileInfo(path); - RemoveFileSystemAuditRule(item, account, rights, type, inheritanceFlags, propagationFlags); - } - else - { - var item = new DirectoryInfo(path); - RemoveFileSystemAuditRule(item, account, rights, type, inheritanceFlags, propagationFlags); - } - } - - public static FileSystemAuditRule2 RemoveFileSystemAuditRule(FileSystemSecurity2 sd, IdentityReference2 account, FileSystemRights2 rights, AuditFlags type, InheritanceFlags inheritanceFlags, PropagationFlags propagationFlags, bool removeSpecific = false) - { - var ace = (FileSystemAuditRule)sd.SecurityDescriptor.AuditRuleFactory(account, (int)rights, false, inheritanceFlags, propagationFlags, type); - if (sd.IsFile) - { - if (removeSpecific) - ((FileSecurity)sd.SecurityDescriptor).RemoveAuditRuleSpecific(ace); - else - ((FileSecurity)sd.SecurityDescriptor).RemoveAuditRule(ace); - } - else - { - if (removeSpecific) - ((DirectorySecurity)sd.SecurityDescriptor).RemoveAuditRuleSpecific(ace); - else - ((DirectorySecurity)sd.SecurityDescriptor).RemoveAuditRule(ace); - } - - return ace; - } - - public static IEnumerable RemoveFileSystemAuditRule(FileSystemSecurity2 sd, List accounts, FileSystemRights2 rights, AuditFlags type, InheritanceFlags inheritanceFlags, PropagationFlags propagationFlags, bool removeSpecific = false) - { - var aces = new List(); - - foreach (var account in accounts) - { - aces.Add(RemoveFileSystemAuditRule(sd, account, rights, type, inheritanceFlags, propagationFlags)); - } - - return aces; - } - } -} diff --git a/Security2/FileSystem/FileSystemAuditRule2 Class/FileSystemAuditRule2.RemoveFileSystemAuditRuleAll.cs b/Security2/FileSystem/FileSystemAuditRule2 Class/FileSystemAuditRule2.RemoveFileSystemAuditRuleAll.cs deleted file mode 100644 index 97edeea..0000000 --- a/Security2/FileSystem/FileSystemAuditRule2 Class/FileSystemAuditRule2.RemoveFileSystemAuditRuleAll.cs +++ /dev/null @@ -1,35 +0,0 @@ -using Alphaleonis.Win32.Filesystem; -using System.Collections.Generic; -using System.Linq; -using System.Security.AccessControl; -using System.Security.Principal; - -namespace Security2 -{ - public partial class FileSystemAuditRule2 - { - public static void RemoveFileSystemAuditRuleAll(FileSystemSecurity2 sd, List accounts = null) - { - var acl = sd.SecurityDescriptor.GetAuditRules(true, false, typeof(SecurityIdentifier)); - - if (accounts != null) - { - acl.OfType().Where(ace => (accounts.Where(account => account == (IdentityReference2)ace.IdentityReference).Count() > 1)); - } - - foreach (FileSystemAuditRule ace in acl) - { - sd.SecurityDescriptor.RemoveAuditRuleSpecific(ace); - } - } - - public static void RemoveFileSystemAuditRuleAll(FileSystemInfo item, List accounts = null) - { - var sd = new FileSystemSecurity2(item); - - RemoveFileSystemAuditRuleAll(sd, accounts); - - sd.Write(); - } - } -} diff --git a/Security2/FileSystem/FileSystemAuditRule2 Class/FileSystemAuditRule2.cs b/Security2/FileSystem/FileSystemAuditRule2 Class/FileSystemAuditRule2.cs deleted file mode 100644 index 7f951e4..0000000 --- a/Security2/FileSystem/FileSystemAuditRule2 Class/FileSystemAuditRule2.cs +++ /dev/null @@ -1,70 +0,0 @@ -using Alphaleonis.Win32.Filesystem; -using System.Security.AccessControl; - -namespace Security2 -{ - public partial class FileSystemAuditRule2 - { - #region Properties - private FileSystemAuditRule fileSystemAuditRule; - private string fullName; - private bool inheritanceEnabled; - private string inheritedFrom; - - public string Name { get { return System.IO.Path.GetFileName(fullName); } } - public string FullName { get { return fullName; } set { fullName = value; } } - public bool InheritanceEnabled { get { return inheritanceEnabled; } set { inheritanceEnabled = value; } } - public string InheritedFrom { get { return inheritedFrom; } set { inheritedFrom = value; } } - public AuditFlags AuditFlags { get { return fileSystemAuditRule.AuditFlags; } } - public FileSystemRights2 AccessRights { get { return (FileSystemRights2)fileSystemAuditRule.FileSystemRights; } } - public IdentityReference2 Account { get { return (IdentityReference2)fileSystemAuditRule.IdentityReference; } } - public InheritanceFlags InheritanceFlags { get { return fileSystemAuditRule.InheritanceFlags; } } - public bool IsInherited { get { return fileSystemAuditRule.IsInherited; } } - public PropagationFlags PropagationFlags { get { return fileSystemAuditRule.PropagationFlags; } } - #endregion - - public FileSystemAuditRule2(FileSystemAuditRule fileSystemAuditRule) - { - this.fileSystemAuditRule = fileSystemAuditRule; - } - - public FileSystemAuditRule2(FileSystemAuditRule fileSystemAuditRule, FileSystemInfo item) - { - this.fileSystemAuditRule = fileSystemAuditRule; - this.fullName = item.FullName; - } - - public FileSystemAuditRule2(FileSystemAuditRule fileSystemAuditRule, string path) - { - this.fileSystemAuditRule = fileSystemAuditRule; - } - - #region Conversion - public static implicit operator FileSystemAuditRule(FileSystemAuditRule2 ace2) - { - return ace2.fileSystemAuditRule; - } - public static implicit operator FileSystemAuditRule2(FileSystemAuditRule ace) - { - return new FileSystemAuditRule2(ace); - } - //REQUIRED BECAUSE OF CONVERSION OPERATORS - public override bool Equals(object obj) - { - return this.fileSystemAuditRule == (FileSystemAuditRule)obj; - } - public override int GetHashCode() - { - return this.fileSystemAuditRule.GetHashCode(); - } - public override string ToString() - { - return fileSystemAuditRule.ToString(); - } - public SimpleFileSystemAuditRule ToSimpleFileSystemAuditRule2() - { - return new SimpleFileSystemAuditRule(this.fullName, this.Account, this.AccessRights); - } - #endregion - } -} diff --git a/Security2/FileSystem/FileSystemEffectivePermissionEntry.cs b/Security2/FileSystem/FileSystemEffectivePermissionEntry.cs deleted file mode 100644 index 054a311..0000000 --- a/Security2/FileSystem/FileSystemEffectivePermissionEntry.cs +++ /dev/null @@ -1,65 +0,0 @@ -using System.Collections.Generic; -using System.Security.AccessControl; - -namespace Security2 -{ - public class FileSystemEffectivePermissionEntry - { - private IdentityReference2 account; - private uint accessMask; - private string objectPath; - - public IdentityReference2 Account { get { return account; } } - - public uint AccessMask { get { return accessMask; } } - - public string FullName { get { return objectPath; } } - - public string Name - { - get - { - if (!string.IsNullOrEmpty(FullName)) - { - return System.IO.Path.GetFileName(FullName); - } - else - { - return null; - } - } - } - - public FileSystemRights AccessRights - { - get - { - return (FileSystemRights)accessMask; - } - } - - private List accessAsString; - public List AccessAsString { get { return accessAsString; } } - - public FileSystemEffectivePermissionEntry(IdentityReference2 identity, uint AccessMask, string FullName) - { - this.account = identity; - this.accessMask = AccessMask; - this.objectPath = FullName; - this.accessAsString = new List(); - - if (accessMask == 0) - { - accessAsString.Add("None"); - } - else - { - string tempString = ((FileSystemRights)this.accessMask).ToString(); - foreach (var s in tempString.Split(',')) - { - this.accessAsString.Add(s); - } - } - } - } -} diff --git a/Security2/FileSystem/FileSystemFlags.cs b/Security2/FileSystem/FileSystemFlags.cs deleted file mode 100644 index f976a4f..0000000 --- a/Security2/FileSystem/FileSystemFlags.cs +++ /dev/null @@ -1,10 +0,0 @@ -using System.Security.AccessControl; - -namespace Security2 -{ - public class FileSystemFlags - { - public InheritanceFlags InheritanceFlags { get; set; } - public PropagationFlags PropagationFlags { get; set; } - } -} diff --git a/Security2/FileSystem/FileSystemInheritanceInfo.cs b/Security2/FileSystem/FileSystemInheritanceInfo.cs deleted file mode 100644 index 1b822c9..0000000 --- a/Security2/FileSystem/FileSystemInheritanceInfo.cs +++ /dev/null @@ -1,289 +0,0 @@ -using Alphaleonis.Win32.Filesystem; -using System.Security.AccessControl; -using System.Security.Principal; - -namespace Security2 -{ - - public class FileSystemInheritanceInfo - { - private enum InheritanceScope - { - Access, - Audit - } - - private FileSystemInfo item; - private bool? accessInheritanceEnabled; - private bool? auditInheritanceEnabled; - - public FileSystemInfo Item - { - get { return item; } - set { item = value; } - } - - public bool? AccessInheritanceEnabled - { - get { return accessInheritanceEnabled; } - set { accessInheritanceEnabled = value; } - } - - public bool? AuditInheritanceEnabled - { - get { return auditInheritanceEnabled; } - set { auditInheritanceEnabled = value; } - } - - public string FullName { get { return Item.FullName; } } - - public string Name { get { return Path.GetFileName(item.FullName); } } - - private FileSystemInheritanceInfo(FileSystemInfo item, bool? accessInheritanceEnabled, bool? auditInheritanceEnabled) - { - this.item = item; - this.accessInheritanceEnabled = accessInheritanceEnabled; - this.auditInheritanceEnabled = auditInheritanceEnabled; - } - - #region GetFileSystemInheritanceInfo - public static FileSystemInheritanceInfo GetFileSystemInheritanceInfo(string path) - { - var item = new FileInfo(path); - return GetFileSystemInheritanceInfo(item); - } - - public static FileSystemInheritanceInfo GetFileSystemInheritanceInfo(FileSystemInfo item) - { - if (item is FileInfo) - { - - bool? areAuditRulesProtected = null; - - var areAccessRulesProtected = ((FileInfo)item).GetAccessControl(AccessControlSections.Access).AreAccessRulesProtected; - - try - { - areAuditRulesProtected = ((FileInfo)item).GetAccessControl(AccessControlSections.Audit).AreAuditRulesProtected; - } - catch (System.IO.IOException) - { - //log that the security privilege is missing - } - - return new FileSystemInheritanceInfo(item, !areAccessRulesProtected, !areAuditRulesProtected); - } - else - { - bool? areAuditRulesProtected = null; - - var areAccessRulesProtected = ((DirectoryInfo)item).GetAccessControl(AccessControlSections.Access).AreAccessRulesProtected; - - try - { - areAuditRulesProtected = ((DirectoryInfo)item).GetAccessControl(AccessControlSections.Audit).AreAuditRulesProtected; - } - catch (System.IO.IOException) - { - //log that the security privilege is missing - } - - return new FileSystemInheritanceInfo(item, !areAccessRulesProtected, !areAuditRulesProtected); - } - } - - public static FileSystemInheritanceInfo GetFileSystemInheritanceInfo(FileSystemSecurity2 sd) - { - return new FileSystemInheritanceInfo(sd.Item, !sd.SecurityDescriptor.AreAccessRulesProtected, !sd.SecurityDescriptor.AreAuditRulesProtected); - } - #endregion GetFileSystemInheritanceInfo - - #region Enable / DisableInheritance internal - private static void EnableInheritance(FileSystemSecurity2 sd, bool removeExplicitAccessRules, InheritanceScope scope) - { - if (sd.IsFile) - { - if (scope == InheritanceScope.Access) - { - sd.SecurityDescriptor.SetAccessRuleProtection(false, false); - - //if RemoveExplicitAccessRules is set - if (removeExplicitAccessRules) - { - //remove all explicitly set ACEs from the item - foreach (FileSystemAccessRule ace in ((FileSecurity)sd.SecurityDescriptor).GetAccessRules(true, false, typeof(SecurityIdentifier))) - { - ((FileSecurity)sd.SecurityDescriptor).RemoveAccessRule(ace); - } - } - } - else - { - sd.SecurityDescriptor.SetAuditRuleProtection(false, false); - - //if RemoveExplicitAccessRules is set - if (removeExplicitAccessRules) - { - //remove all explicitly set ACEs from the item - foreach (FileSystemAuditRule ace in ((FileSecurity)sd.SecurityDescriptor).GetAuditRules(true, false, typeof(SecurityIdentifier))) - { - ((FileSecurity)sd.SecurityDescriptor).RemoveAuditRule(ace); - } - } - } - } - else - { - if (scope == InheritanceScope.Access) - { - ((DirectorySecurity)sd.SecurityDescriptor).SetAccessRuleProtection(false, false); - - //if RemoveExplicitAccessRules is set - if (removeExplicitAccessRules) - { - //remove all explicitly set ACEs from the item - foreach (FileSystemAccessRule ace in ((DirectorySecurity)sd.SecurityDescriptor).GetAccessRules(true, false, typeof(SecurityIdentifier))) - { - ((DirectorySecurity)sd.SecurityDescriptor).RemoveAccessRule(ace); - } - } - } - else - { - ((DirectorySecurity)sd.SecurityDescriptor).SetAuditRuleProtection(false, false); - - //if RemoveExplicitAccessRules is set - if (removeExplicitAccessRules) - { - //remove all explicitly set ACEs from the item - foreach (FileSystemAuditRule ace in ((DirectorySecurity)sd.SecurityDescriptor).GetAuditRules(true, false, typeof(SecurityIdentifier))) - { - ((DirectorySecurity)sd.SecurityDescriptor).RemoveAuditRule(ace); - } - } - } - } - } - - private static void DisableInheritance(FileSystemSecurity2 sd, bool removeInheritedAccessRules, InheritanceScope scope) - { - if (sd.IsFile) - { - if (scope == InheritanceScope.Access) - ((FileSecurity)sd.SecurityDescriptor).SetAccessRuleProtection(true, !removeInheritedAccessRules); - else - ((FileSecurity)sd.SecurityDescriptor).SetAuditRuleProtection(true, !removeInheritedAccessRules); - } - else - { - if (scope == InheritanceScope.Access) - ((DirectorySecurity)sd.SecurityDescriptor).SetAccessRuleProtection(true, !removeInheritedAccessRules); - else - ((DirectorySecurity)sd.SecurityDescriptor).SetAuditRuleProtection(true, !removeInheritedAccessRules); - } - } - #endregion Enable / DisableInheritance internal - - #region Public Methods using SecurityDescriptor - public static void EnableAccessInheritance(FileSystemSecurity2 sd, bool removeExplicitAccessRules) - { - EnableInheritance(sd, removeExplicitAccessRules, InheritanceScope.Access); - } - - public static void EnableAuditInheritance(FileSystemSecurity2 sd, bool removeExplicitAccessRules) - { - EnableInheritance(sd, removeExplicitAccessRules, InheritanceScope.Audit); - } - - public static void DisableAccessInheritance(FileSystemSecurity2 sd, bool removeExplicitAccessRules) - { - DisableInheritance(sd, removeExplicitAccessRules, InheritanceScope.Access); - } - - public static void DisableAuditInheritance(FileSystemSecurity2 sd, bool removeExplicitAccessRules) - { - DisableInheritance(sd, removeExplicitAccessRules, InheritanceScope.Audit); - } - #endregion Public Methods using SecurityDescriptor - - #region Public Methods using FileSystemInfo - public static void EnableAccessInheritance(FileSystemInfo item, bool removeExplicitAccessRules) - { - var sd = new FileSystemSecurity2(item, AccessControlSections.Access); - EnableAccessInheritance(sd, removeExplicitAccessRules); - sd.Write(); - } - - public static void DisableAccessInheritance(FileSystemInfo item, bool removeInheritedAccessRules) - { - var sd = new FileSystemSecurity2(item, AccessControlSections.Access); - DisableAccessInheritance(sd, removeInheritedAccessRules); - sd.Write(); - } - - public static void EnableAuditInheritance(FileSystemInfo item, bool removeExplicitAccessRules) - { - var sd = new FileSystemSecurity2(item, AccessControlSections.Audit); - EnableAuditInheritance(sd, removeExplicitAccessRules); - sd.Write(); - } - - public static void DisableAuditInheritance(FileSystemInfo item, bool removeInheritedAccessRules) - { - var sd = new FileSystemSecurity2(item, AccessControlSections.Audit); - DisableAuditInheritance(sd, removeInheritedAccessRules); - sd.Write(); - } - #endregion Public Methods using FileSystemInfo - - #region Public Methods using Path - public static void EnableAccessInheritance(string path, bool removeExplicitAccessRules) - { - if (File.Exists(path)) - { - EnableAccessInheritance(new FileInfo(path), removeExplicitAccessRules); - } - else if (Directory.Exists(path)) - { - EnableAccessInheritance(new DirectoryInfo(path), removeExplicitAccessRules); - } - } - - public static void DisableAccessInheritance(string path, bool removeInheritedAccessRules) - { - if (File.Exists(path)) - { - DisableAccessInheritance(new FileInfo(path), removeInheritedAccessRules); - } - else if (Directory.Exists(path)) - { - DisableAccessInheritance(new DirectoryInfo(path), removeInheritedAccessRules); - } - } - - public static void EnableAuditInheritance(string path, bool removeExplicitAccessRules) - { - if (File.Exists(path)) - { - EnableAuditInheritance(new FileInfo(path), removeExplicitAccessRules); - } - else if (Directory.Exists(path)) - { - EnableAuditInheritance(new DirectoryInfo(path), removeExplicitAccessRules); - } - } - - public static void DisableAuditInheritance(string path, bool removeInheritedAccessRules) - { - if (File.Exists(path)) - { - DisableAuditInheritance(new FileInfo(path), removeInheritedAccessRules); - } - else if (Directory.Exists(path)) - { - DisableAuditInheritance(new DirectoryInfo(path), removeInheritedAccessRules); - } - } - #endregion Public Methods using Path - } -} \ No newline at end of file diff --git a/Security2/FileSystem/FileSystemOwner.cs b/Security2/FileSystem/FileSystemOwner.cs deleted file mode 100644 index 275e565..0000000 --- a/Security2/FileSystem/FileSystemOwner.cs +++ /dev/null @@ -1,58 +0,0 @@ -using Alphaleonis.Win32.Filesystem; -using System.Security.AccessControl; -using System.Security.Principal; - -namespace Security2 -{ - public class FileSystemOwner - { - private FileSystemInfo item; - private IdentityReference2 owner; - private FileSystemSecurity sd; - - public FileSystemInfo Item - { - get { return item; } - } - - public IdentityReference2 Owner - { - get { return owner; } - } - - private FileSystemOwner(FileSystemInfo item, IdentityReference2 owner) - { - this.item = item; - this.owner = owner; - } - - public static FileSystemOwner GetOwner(FileSystemSecurity2 sd) - { - return new FileSystemOwner(sd.Item, sd.SecurityDescriptor.GetOwner(typeof(SecurityIdentifier))); - } - - public static void SetOwner(FileSystemSecurity2 sd, IdentityReference2 account) - { - sd.SecurityDescriptor.SetOwner(account); - } - - public static FileSystemOwner GetOwner(FileSystemInfo item) - { - return GetOwner(new FileSystemSecurity2(item, AccessControlSections.Owner)); - } - - public static void SetOwner(FileSystemInfo item, IdentityReference2 account) - { - var sd = new FileSystemSecurity2(item, AccessControlSections.Owner); - - SetOwner(sd, account); - - sd.Write(); - } - - public override string ToString() - { - return item.FullName; - } - } -} diff --git a/Security2/FileSystem/FileSystemSecurity2.cs b/Security2/FileSystem/FileSystemSecurity2.cs deleted file mode 100644 index cd5eb08..0000000 --- a/Security2/FileSystem/FileSystemSecurity2.cs +++ /dev/null @@ -1,314 +0,0 @@ -using Alphaleonis.Win32.Filesystem; -using System; -using System.Security.AccessControl; - -namespace Security2 -{ - public class FileSystemSecurity2 - { - protected FileSecurity fileSecurityDescriptor; - protected DirectorySecurity directorySecurityDescriptor; - protected FileSystemInfo item; - protected FileSystemSecurity sd; - protected AccessControlSections sections; - protected bool isFile = false; - - public FileSystemInfo Item - { - get { return item; } - set { item = value; } - } - - public string FullName { get { return item.FullName; } } - - public string Name { get { return item.Name; } } - - public bool IsFile { get { return isFile; } } - - public FileSystemSecurity2(FileSystemInfo item, AccessControlSections sections) - { - this.sections = sections; - - if (item is FileInfo) - { - this.item = (FileInfo)item; - - sd = ((FileInfo)this.item).GetAccessControl(sections); - - isFile = true; - } - else - { - this.item = (DirectoryInfo)item; - - sd = ((DirectoryInfo)this.item).GetAccessControl(sections); - } - } - - public FileSystemSecurity2(FileSystemInfo item) - { - if (item is FileInfo) - { - this.item = (FileInfo)item; - try - { - sd = ((FileInfo)this.item).GetAccessControl(AccessControlSections.All); - } - catch - { - try - { - sd = ((FileInfo)this.item).GetAccessControl(AccessControlSections.Access | AccessControlSections.Owner | AccessControlSections.Group); - } - catch - { - sd = ((FileInfo)this.item).GetAccessControl(AccessControlSections.Access); - } - } - - isFile = true; - } - else - { - this.item = (DirectoryInfo)item; - try - { - sd = ((DirectoryInfo)this.item).GetAccessControl(AccessControlSections.All); - } - catch - { - try - { - sd = ((DirectoryInfo)this.item).GetAccessControl(AccessControlSections.Access | AccessControlSections.Owner | AccessControlSections.Group); - } - catch - { - sd = ((DirectoryInfo)this.item).GetAccessControl(AccessControlSections.Access); - } - } - } - } - - public FileSystemSecurity SecurityDescriptor - { - get - { - return sd; - } - } - - public void Write() - { - if (isFile) - { - ((FileInfo)item).SetAccessControl((FileSecurity)sd); - } - else - { - ((DirectoryInfo)item).SetAccessControl((DirectorySecurity)sd); - } - } - - public void Write(FileSystemInfo item) - { - if (item is FileInfo) - { - ((FileInfo)item).SetAccessControl((FileSecurity)sd); - } - else - { - ((DirectoryInfo)item).SetAccessControl((DirectorySecurity)sd); - } - } - - public void Write(string path) - { - FileSystemInfo item = null; - - if (File.Exists(path)) - { - item = new FileInfo(path); - } - else if (Directory.Exists(path)) - { - item = new DirectoryInfo(path); - } - else - { - throw new System.IO.FileNotFoundException("File not found", path); - } - - Write(item); - } - - #region Conversion - public static implicit operator FileSecurity(FileSystemSecurity2 fs2) - { - return fs2.fileSecurityDescriptor; - } - public static implicit operator FileSystemSecurity2(FileSecurity fs) - { - return new FileSystemSecurity2(new FileInfo("")); - } - - public static implicit operator DirectorySecurity(FileSystemSecurity2 fs2) - { - return fs2.directorySecurityDescriptor; - } - public static implicit operator FileSystemSecurity2(DirectorySecurity fs) - { - return new FileSystemSecurity2(new DirectoryInfo("")); - } - - //REQUIRED BECAUSE OF CONVERSION OPERATORS - public override bool Equals(object obj) - { - return this.fileSecurityDescriptor == (FileSecurity)obj; - } - public override int GetHashCode() - { - return fileSecurityDescriptor.GetHashCode(); - } - #endregion - - public static void ConvertToFileSystemFlags(ApplyTo ApplyTo, out InheritanceFlags inheritanceFlags, out PropagationFlags propagationFlags) - { - inheritanceFlags = InheritanceFlags.None; - propagationFlags = PropagationFlags.None; - - switch (ApplyTo) - { - case ApplyTo.FilesOnly: - inheritanceFlags = InheritanceFlags.ObjectInherit; - propagationFlags = PropagationFlags.InheritOnly; - break; - case ApplyTo.SubfoldersAndFilesOnly: - inheritanceFlags = InheritanceFlags.ObjectInherit | InheritanceFlags.ContainerInherit; - propagationFlags = PropagationFlags.InheritOnly; - break; - case ApplyTo.SubfoldersOnly: - inheritanceFlags = InheritanceFlags.ContainerInherit; - propagationFlags = PropagationFlags.InheritOnly; - break; - case ApplyTo.ThisFolderAndFiles: - inheritanceFlags = InheritanceFlags.ObjectInherit; - propagationFlags = PropagationFlags.None; - break; - case ApplyTo.ThisFolderAndSubfolders: - inheritanceFlags = InheritanceFlags.ContainerInherit; - propagationFlags = PropagationFlags.None; - break; - case ApplyTo.ThisFolderOnly: - inheritanceFlags = InheritanceFlags.None; - propagationFlags = PropagationFlags.None; - break; - case ApplyTo.ThisFolderSubfoldersAndFiles: - inheritanceFlags = InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit; - propagationFlags = PropagationFlags.None; - break; - case ApplyTo.FilesOnlyOneLevel: - inheritanceFlags = InheritanceFlags.ObjectInherit; - propagationFlags = PropagationFlags.InheritOnly | PropagationFlags.NoPropagateInherit; - break; - case ApplyTo.SubfoldersAndFilesOnlyOneLevel: - inheritanceFlags = InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit; - propagationFlags = PropagationFlags.InheritOnly | PropagationFlags.NoPropagateInherit; - break; - case ApplyTo.SubfoldersOnlyOneLevel: - inheritanceFlags = InheritanceFlags.ContainerInherit; - propagationFlags = PropagationFlags.InheritOnly | PropagationFlags.NoPropagateInherit; - break; - case ApplyTo.ThisFolderAndFilesOneLevel: - inheritanceFlags = InheritanceFlags.ObjectInherit; - propagationFlags = PropagationFlags.NoPropagateInherit; - break; - case ApplyTo.ThisFolderAndSubfoldersOneLevel: - inheritanceFlags = InheritanceFlags.ContainerInherit; - propagationFlags = PropagationFlags.NoPropagateInherit; - break; - case ApplyTo.ThisFolderSubfoldersAndFilesOneLevel: - inheritanceFlags = InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit; - propagationFlags = PropagationFlags.NoPropagateInherit; - break; - } - } - - public static ApplyTo ConvertToApplyTo(InheritanceFlags InheritanceFlags, PropagationFlags PropagationFlags) - { - if (InheritanceFlags == InheritanceFlags.ObjectInherit & PropagationFlags == PropagationFlags.InheritOnly) - return ApplyTo.FilesOnly; - else if (InheritanceFlags == (InheritanceFlags.ObjectInherit | InheritanceFlags.ContainerInherit) & PropagationFlags == PropagationFlags.InheritOnly) - return ApplyTo.SubfoldersAndFilesOnly; - else if (InheritanceFlags == InheritanceFlags.ContainerInherit & PropagationFlags == PropagationFlags.InheritOnly) - return ApplyTo.SubfoldersOnly; - else if (InheritanceFlags == InheritanceFlags.ObjectInherit & PropagationFlags == PropagationFlags.None) - return ApplyTo.ThisFolderAndFiles; - else if (InheritanceFlags == InheritanceFlags.ContainerInherit & PropagationFlags == PropagationFlags.None) - return ApplyTo.ThisFolderAndSubfolders; - else if (InheritanceFlags == InheritanceFlags.None & PropagationFlags == PropagationFlags.None) - return ApplyTo.ThisFolderOnly; - else if (InheritanceFlags == (InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit) & PropagationFlags == PropagationFlags.None) - return ApplyTo.ThisFolderSubfoldersAndFiles; - else if (InheritanceFlags == (InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit) & PropagationFlags == PropagationFlags.NoPropagateInherit) - return ApplyTo.ThisFolderSubfoldersAndFilesOneLevel; - else if (InheritanceFlags == InheritanceFlags.ContainerInherit & PropagationFlags == PropagationFlags.NoPropagateInherit) - return ApplyTo.ThisFolderAndSubfoldersOneLevel; - else if (InheritanceFlags == InheritanceFlags.ObjectInherit & PropagationFlags == PropagationFlags.NoPropagateInherit) - return ApplyTo.ThisFolderAndFilesOneLevel; - else if (InheritanceFlags == (InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit) & PropagationFlags == (PropagationFlags.InheritOnly | PropagationFlags.NoPropagateInherit)) - return ApplyTo.SubfoldersAndFilesOnlyOneLevel; - else if (InheritanceFlags == InheritanceFlags.ContainerInherit & PropagationFlags == (PropagationFlags.InheritOnly | PropagationFlags.NoPropagateInherit)) - return ApplyTo.SubfoldersOnlyOneLevel; - else if (InheritanceFlags == InheritanceFlags.ObjectInherit & PropagationFlags == (PropagationFlags.InheritOnly | PropagationFlags.NoPropagateInherit)) - return ApplyTo.FilesOnlyOneLevel; - - throw new RightsConverionException("The combination of InheritanceFlags and PropagationFlags could not be translated"); - } - - public static FileSystemRights MapGenericRightsToFileSystemRights(uint originalRights) - { - try - { - var r = Enum.Parse(typeof(FileSystemRights), (originalRights).ToString()); - if (r.ToString() == originalRights.ToString()) - { - throw new ArgumentOutOfRangeException(); - } - - var fileSystemRights = (FileSystemRights)originalRights; - return fileSystemRights; - } - catch (Exception) - { - FileSystemRights rights = 0; - if (Convert.ToBoolean(originalRights & (uint)GenericRights.GENERIC_EXECUTE)) - { - rights |= (FileSystemRights)MappedGenericRights.FILE_GENERIC_EXECUTE; - originalRights ^= (uint)GenericRights.GENERIC_EXECUTE; - } - if (Convert.ToBoolean(originalRights & (uint)GenericRights.GENERIC_READ)) - { - rights |= (FileSystemRights)MappedGenericRights.FILE_GENERIC_READ; - originalRights ^= (uint)GenericRights.GENERIC_READ; - } - if (Convert.ToBoolean(originalRights & (uint)GenericRights.GENERIC_WRITE)) - { - rights |= (FileSystemRights)MappedGenericRights.FILE_GENERIC_WRITE; - originalRights ^= (uint)GenericRights.GENERIC_WRITE; - } - if (Convert.ToBoolean(originalRights & (uint)GenericRights.GENERIC_ALL)) - { - rights |= (FileSystemRights)MappedGenericRights.FILE_GENERIC_ALL; - originalRights ^= (uint)GenericRights.GENERIC_ALL; - } - //throw new RightsConverionException("Cannot convert GenericRights into FileSystemRights"); - - var remainingRights = (FileSystemRights)Enum.Parse(typeof(FileSystemRights), (originalRights).ToString()); - - rights |= remainingRights; - - return rights; - } - } - } -} diff --git a/Security2/FileSystem/SimpleFileSystemAccessRule.cs b/Security2/FileSystem/SimpleFileSystemAccessRule.cs deleted file mode 100644 index 8bd09f1..0000000 --- a/Security2/FileSystem/SimpleFileSystemAccessRule.cs +++ /dev/null @@ -1,134 +0,0 @@ -using System.Security.AccessControl; - -namespace Security2 -{ - public class SimpleFileSystemAccessRule - { - private string fullName; - private IdentityReference2 identity; - private FileSystemRights2 accessRights; - private AccessControlType type; - - public AccessControlType AccessControlType - { - get { return type; } - set { type = value; } - } - - public string FullName - { - get { return fullName; } - } - - public string Name - { - get - { - return System.IO.Path.GetFileName(fullName); - } - } - - public IdentityReference2 Identity - { - get { return identity; } - } - - public SimpleFileSystemAccessRights AccessRights - { - get - { - SimpleFileSystemAccessRights result = SimpleFileSystemAccessRights.None; - - if ((accessRights & FileSystemRights2.Read) == FileSystemRights2.Read) - { result |= SimpleFileSystemAccessRights.Read; } - - if ((accessRights & FileSystemRights2.CreateFiles) == FileSystemRights2.CreateFiles) - { result |= SimpleFileSystemAccessRights.Write; } - - if ((accessRights & FileSystemRights2.AppendData) == FileSystemRights2.AppendData) - { result |= SimpleFileSystemAccessRights.Write; } - - if ((accessRights & FileSystemRights2.ReadExtendedAttributes) == FileSystemRights2.ReadExtendedAttributes) - { result |= SimpleFileSystemAccessRights.Read; } - - if ((accessRights & FileSystemRights2.WriteExtendedAttributes) == FileSystemRights2.WriteExtendedAttributes) - { result |= SimpleFileSystemAccessRights.Write; } - - if ((accessRights & FileSystemRights2.ExecuteFile) == FileSystemRights2.ExecuteFile) - { result |= SimpleFileSystemAccessRights.Read; } - - if ((accessRights & FileSystemRights2.DeleteSubdirectoriesAndFiles) == FileSystemRights2.DeleteSubdirectoriesAndFiles) - { result |= SimpleFileSystemAccessRights.Delete; } - - if ((accessRights & FileSystemRights2.ReadAttributes) == FileSystemRights2.ReadAttributes) - { result |= SimpleFileSystemAccessRights.Read; } - - if ((accessRights & FileSystemRights2.WriteAttributes) == FileSystemRights2.WriteAttributes) - { result |= SimpleFileSystemAccessRights.Write; } - - if ((accessRights & FileSystemRights2.Delete) == FileSystemRights2.Delete) - { result |= SimpleFileSystemAccessRights.Delete; } - - if ((accessRights & FileSystemRights2.ReadPermissions) == FileSystemRights2.ReadPermissions) - { result |= SimpleFileSystemAccessRights.Read; } - - if ((accessRights & FileSystemRights2.ChangePermissions) == FileSystemRights2.ChangePermissions) - { result |= SimpleFileSystemAccessRights.Write; } - - if ((accessRights & FileSystemRights2.TakeOwnership) == FileSystemRights2.TakeOwnership) - { result |= SimpleFileSystemAccessRights.Write; } - - if ((accessRights & FileSystemRights2.Synchronize) == FileSystemRights2.Synchronize) - { result |= SimpleFileSystemAccessRights.Read; } - - if ((accessRights & FileSystemRights2.FullControl) == FileSystemRights2.FullControl) - { result = (SimpleFileSystemAccessRights.Write | SimpleFileSystemAccessRights.Read | SimpleFileSystemAccessRights.Delete); } - - if ((accessRights & FileSystemRights2.GenericRead) == FileSystemRights2.GenericRead) - { result |= SimpleFileSystemAccessRights.Read; } - - if ((accessRights & FileSystemRights2.GenericWrite) == FileSystemRights2.GenericWrite) - { result |= SimpleFileSystemAccessRights.Write; } - - if ((accessRights & FileSystemRights2.GenericExecute) == FileSystemRights2.GenericExecute) - { result |= SimpleFileSystemAccessRights.Read; } - - if ((accessRights & FileSystemRights2.GenericAll) == FileSystemRights2.GenericAll) - { result = (SimpleFileSystemAccessRights.Write | SimpleFileSystemAccessRights.Read | SimpleFileSystemAccessRights.Delete); } - - return result; - } - } - - public SimpleFileSystemAccessRule(string Path, IdentityReference2 account, FileSystemRights2 access) - { - this.fullName = Path; - this.accessRights = access; - this.identity = account; - } - - public override bool Equals(object obj) - { - var compareObject = obj as SimpleFileSystemAccessRule; - - if (compareObject == null) - { - return false; - } - - if (this.AccessRights == compareObject.AccessRights && this.Identity == compareObject.Identity && this.AccessControlType == compareObject.AccessControlType) - { - return true; - } - else - { - return false; - } - } - - public override int GetHashCode() - { - return this.Identity.GetHashCode() | this.AccessRights.GetHashCode() | this.AccessControlType.GetHashCode(); - } - } -} diff --git a/Security2/FileSystem/SimpleFileSystemAuditRule.cs b/Security2/FileSystem/SimpleFileSystemAuditRule.cs deleted file mode 100644 index fbf2a58..0000000 --- a/Security2/FileSystem/SimpleFileSystemAuditRule.cs +++ /dev/null @@ -1,134 +0,0 @@ -using System.Security.AccessControl; - -namespace Security2 -{ - public class SimpleFileSystemAuditRule - { - private string fullName; - private IdentityReference2 identity; - private FileSystemRights2 accessRights; - private AccessControlType type; - - public AccessControlType AccessControlType - { - get { return type; } - set { type = value; } - } - - public string FullName - { - get { return fullName; } - } - - public string Name - { - get - { - return System.IO.Path.GetFileName(fullName); - } - } - - public IdentityReference2 Identity - { - get { return identity; } - } - - public SimpleFileSystemAccessRights AccessRights - { - get - { - SimpleFileSystemAccessRights result = SimpleFileSystemAccessRights.None; - - if ((accessRights & FileSystemRights2.Read) == FileSystemRights2.Read) - { result |= SimpleFileSystemAccessRights.Read; } - - if ((accessRights & FileSystemRights2.CreateFiles) == FileSystemRights2.CreateFiles) - { result |= SimpleFileSystemAccessRights.Write; } - - if ((accessRights & FileSystemRights2.AppendData) == FileSystemRights2.AppendData) - { result |= SimpleFileSystemAccessRights.Write; } - - if ((accessRights & FileSystemRights2.ReadExtendedAttributes) == FileSystemRights2.ReadExtendedAttributes) - { result |= SimpleFileSystemAccessRights.Read; } - - if ((accessRights & FileSystemRights2.WriteExtendedAttributes) == FileSystemRights2.WriteExtendedAttributes) - { result |= SimpleFileSystemAccessRights.Write; } - - if ((accessRights & FileSystemRights2.ExecuteFile) == FileSystemRights2.ExecuteFile) - { result |= SimpleFileSystemAccessRights.Read; } - - if ((accessRights & FileSystemRights2.DeleteSubdirectoriesAndFiles) == FileSystemRights2.DeleteSubdirectoriesAndFiles) - { result |= SimpleFileSystemAccessRights.Delete; } - - if ((accessRights & FileSystemRights2.ReadAttributes) == FileSystemRights2.ReadAttributes) - { result |= SimpleFileSystemAccessRights.Read; } - - if ((accessRights & FileSystemRights2.WriteAttributes) == FileSystemRights2.WriteAttributes) - { result |= SimpleFileSystemAccessRights.Write; } - - if ((accessRights & FileSystemRights2.Delete) == FileSystemRights2.Delete) - { result |= SimpleFileSystemAccessRights.Delete; } - - if ((accessRights & FileSystemRights2.ReadPermissions) == FileSystemRights2.ReadPermissions) - { result |= SimpleFileSystemAccessRights.Read; } - - if ((accessRights & FileSystemRights2.ChangePermissions) == FileSystemRights2.ChangePermissions) - { result |= SimpleFileSystemAccessRights.Write; } - - if ((accessRights & FileSystemRights2.TakeOwnership) == FileSystemRights2.TakeOwnership) - { result |= SimpleFileSystemAccessRights.Write; } - - if ((accessRights & FileSystemRights2.Synchronize) == FileSystemRights2.Synchronize) - { result |= SimpleFileSystemAccessRights.Read; } - - if ((accessRights & FileSystemRights2.FullControl) == FileSystemRights2.FullControl) - { result = (SimpleFileSystemAccessRights.Write | SimpleFileSystemAccessRights.Read | SimpleFileSystemAccessRights.Delete); } - - if ((accessRights & FileSystemRights2.GenericRead) == FileSystemRights2.GenericRead) - { result |= SimpleFileSystemAccessRights.Read; } - - if ((accessRights & FileSystemRights2.GenericWrite) == FileSystemRights2.GenericWrite) - { result |= SimpleFileSystemAccessRights.Write; } - - if ((accessRights & FileSystemRights2.GenericExecute) == FileSystemRights2.GenericExecute) - { result |= SimpleFileSystemAccessRights.Read; } - - if ((accessRights & FileSystemRights2.GenericAll) == FileSystemRights2.GenericAll) - { result = (SimpleFileSystemAccessRights.Write | SimpleFileSystemAccessRights.Read | SimpleFileSystemAccessRights.Delete); } - - return result; - } - } - - public SimpleFileSystemAuditRule(string Path, IdentityReference2 account, FileSystemRights2 access) - { - this.fullName = Path; - this.accessRights = access; - this.identity = account; - } - - public override bool Equals(object obj) - { - var compareObject = obj as SimpleFileSystemAccessRule; - - if (compareObject == null) - { - return false; - } - - if (this.AccessRights == compareObject.AccessRights && this.Identity == compareObject.Identity && this.AccessControlType == compareObject.AccessControlType) - { - return true; - } - else - { - return false; - } - } - - public override int GetHashCode() - { - return this.Identity.GetHashCode() | this.AccessRights.GetHashCode() | this.AccessControlType.GetHashCode(); - } - } -} diff --git a/Security2/IdentityReference2.cs b/Security2/IdentityReference2.cs deleted file mode 100644 index 9f01a96..0000000 --- a/Security2/IdentityReference2.cs +++ /dev/null @@ -1,264 +0,0 @@ -using System; -using System.Security.Principal; -using System.Text.RegularExpressions; - -namespace Security2 -{ - public class IdentityReference2 - { - protected static Regex sidValidation = new Regex("(S-1-)[0-9-]+", RegexOptions.IgnoreCase); - protected SecurityIdentifier sid; - protected NTAccount ntAccount; - protected string lastError; - - #region Properties - - public string Sid - { - get { return sid.Value; } - } - - public string AccountName - { - get - { - return ntAccount != null ? ntAccount.Value : string.Empty; - } - } - - public string LastError - { - get { return lastError; } - } - - #endregion Properties - - #region Constructors - - public IdentityReference2(IdentityReference ir) - { - ntAccount = ir as NTAccount; - if (ntAccount != null) - { - //throws an IdentityNotMapped Exception if the account cannot be translated - sid = (SecurityIdentifier)ntAccount.Translate(typeof(SecurityIdentifier)); - } - else - { - sid = ir as SecurityIdentifier; - if (sid != null) - { - try - { - ntAccount = (NTAccount)sid.Translate(typeof(NTAccount)); - } - catch (Exception ex) - { - lastError = ex.Message; - } - } - } - } - - public IdentityReference2(string value) - { - if (string.IsNullOrEmpty(value)) - throw new ArgumentException("The value cannot be empty"); - - var sidMatch = sidValidation.Match(value); - - if (!string.IsNullOrEmpty(sidMatch.Value)) - { - //creating a SecurityIdentifier should always work if the string is in the right format - try - { - sid = new SecurityIdentifier(sidMatch.Value); - } - catch (Exception ex) - { - throw new InvalidCastException("Could not create an IdentityReference2 with the given SID", ex); - } - - //this is only going to work if the SID can be resolved - try - { - ntAccount = (NTAccount)sid.Translate(typeof(NTAccount)); - } - catch (Exception ex) - { - lastError = ex.Message; - } - } - else - { - try - { - //creating an NTAccount always works, the OS does not verify the name - ntAccount = new NTAccount(value); - //verification si done by translating the name into a SecurityIdentifier (SID) - sid = (SecurityIdentifier)ntAccount.Translate(typeof(SecurityIdentifier)); - } - catch (IdentityNotMappedException ex) - { - throw ex; - } - } - } - - #endregion Constructors - - #region Conversion - - //NTAccount - public static explicit operator NTAccount(IdentityReference2 ir2) - { - return ir2.ntAccount; - } - - public static explicit operator IdentityReference2(NTAccount ntAccount) - { - return new IdentityReference2(ntAccount); - } - - //SecurityIdentifier - public static explicit operator SecurityIdentifier(IdentityReference2 ir2) - { - return ir2.sid; - } - - public static explicit operator IdentityReference2(SecurityIdentifier sid) - { - return new IdentityReference2(sid); - } - - //IdentityReference - public static implicit operator IdentityReference(IdentityReference2 ir2) - { - return ir2.sid; - } - - public static implicit operator IdentityReference2(IdentityReference ir) - { - return new IdentityReference2(ir); - } - - //string - public static implicit operator IdentityReference2(string value) - { - return new IdentityReference2(value); - } - - public static implicit operator string(IdentityReference2 ir2) - { - return ir2.ToString(); - } - - #endregion Conversion - - #region comparison - - public override bool Equals(object obj) - { - //Instance cannot be null - if (ReferenceEquals(obj, null)) - return false; - - //Instances are equal - if (ReferenceEquals(this, obj)) - return true; - - SecurityIdentifier sid = obj as SecurityIdentifier; - if (sid != null) - { - return this.sid == sid; - } - - var ntAccount = obj as NTAccount; - if (ntAccount != null) - { - return this.ntAccount == ntAccount; - } - - IdentityReference2 ir2 = obj as IdentityReference2; - if (ir2 != null) - { - return this.sid == ir2.sid; - } - - string value = obj as string; - if (value != null) - { - if (this.sid.Value == value) - { - return true; - } - - if (this.ntAccount != null) - { - if (this.ntAccount.Value.ToLower() == value.ToLower()) - { - return true; - } - } - } - - return false; - } - - public override int GetHashCode() - { - return sid.GetHashCode(); - } - - public static bool operator ==(IdentityReference2 ir1, IdentityReference2 ir2) - { - //Instances are equal - if (ReferenceEquals(ir1, ir2)) - return true; - - //Instance cannot be null - if (ReferenceEquals(ir1, null) | ReferenceEquals(ir2, null)) - return false; - - return ir1.Equals(ir2); - } - - public static bool operator !=(IdentityReference2 ir1, IdentityReference2 ir2) - { - //Instances are equal - if (ReferenceEquals(ir1, ir2)) - return false; - - //Instance cannot be null - if (ReferenceEquals(ir1, null) | ReferenceEquals(ir2, null)) - return true; - - return !ir1.Equals(ir2); - } - - #endregion comparison - - #region Methods - - public byte[] GetBinaryForm() - { - byte[] rawSid = new byte[sid.BinaryLength]; - sid.GetBinaryForm(rawSid, 0); - return rawSid; - } - - public override string ToString() - { - if (ntAccount == null) - { - return sid.ToString(); - } - else - { - return ntAccount.ToString(); - } - } - - #endregion Methods - } -} \ No newline at end of file diff --git a/Security2/Properties/AssemblyInfo.cs b/Security2/Properties/AssemblyInfo.cs deleted file mode 100644 index 6144a7c..0000000 --- a/Security2/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,36 +0,0 @@ -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("Security2")] -[assembly: AssemblyDescription("Wrapper for security and identity classes")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("Microsoft")] -[assembly: AssemblyProduct("Security2")] -[assembly: AssemblyCopyright("Copyright © Raimund Andree 2015")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("d89dc40a-9b43-4bce-972d-b995df8d2820")] - -// 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("3.2.3.0")] -[assembly: AssemblyFileVersion("3.2.3.0")] diff --git a/Security2/Registry/RegistrySecurity.cs b/Security2/Registry/RegistrySecurity.cs deleted file mode 100644 index c7085fa..0000000 --- a/Security2/Registry/RegistrySecurity.cs +++ /dev/null @@ -1,499 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Security.AccessControl; -using Microsoft.Win32; -using System.Runtime.InteropServices; -using System.Security.Principal; - -namespace Security2 -{ - //#region FileSecurity2 - //public class FileSecurity2 : ICast, IDisposable - //{ - // protected FileSecurity securityDescriptor; - - // public string FullName { get; set; } - - // public string Name { get { return System.IO.Path.GetFileName(FullName); } } - - // public FileSecurity2() { } - // public FileSecurity2(FileSecurity SecurityDescriptor) - // { - // this.securityDescriptor = SecurityDescriptor; - // } - - // #region conversion - // public static implicit operator FileSecurity(FileSecurity2 V) - // { - // return V.securityDescriptor; - // } - // public static implicit operator FileSecurity2(FileSecurity n) - // { - // return new FileSecurity2(n); - // } - // //REQUIRED BECAUSE OF CONVERSION OPERATORS - // public override bool Equals(object obj) - // { - // return this.securityDescriptor == (FileSecurity)obj; - // } - // public override int GetHashCode() - // { - // return this.securityDescriptor.GetHashCode(); - // } - // #endregion - - // #region ICast Members - // public FileSecurity Cast - // { - // get { return this.securityDescriptor; } - // } - // #endregion - - // #region IDisposable Members - // public void Dispose() - // { } - // #endregion - //} - //#endregion - - //#region DirectorySecurity2 - //public class DirectorySecurity2 : ICast, IDisposable - //{ - // protected DirectorySecurity securityDescriptor; - - // public string FullName { get; set; } - - // public string Name { get { return System.IO.Path.GetFileName(FullName); } } - - // public DirectorySecurity2() { } - // public DirectorySecurity2(DirectorySecurity SecurityDescriptor) - // { - // this.securityDescriptor = SecurityDescriptor; - // } - - // #region conversion - // public static implicit operator DirectorySecurity(DirectorySecurity2 V) - // { - // return V.securityDescriptor; - // } - // public static implicit operator DirectorySecurity2(DirectorySecurity n) - // { - // return new DirectorySecurity2(n); - // } - // //REQUIRED BECAUSE OF CONVERSION OPERATORS - // public override bool Equals(object obj) - // { - // return this.securityDescriptor == (DirectorySecurity)obj; - // } - // public override int GetHashCode() - // { - // return this.securityDescriptor.GetHashCode(); - // } - // #endregion - - // #region ICast Members - // public DirectorySecurity Cast - // { - // get { return this.securityDescriptor; } - // } - // #endregion - - // #region IDisposable Members - // public void Dispose() - // { } - // #endregion - //} - //#endregion - - #region RegistryAccessRule2 - public class RegistryAccessRule2 : IDisposable - { - protected RegistryAccessRule registryAccessRule; - - public string Name - { - get - { - if (!string.IsNullOrEmpty(FullName)) - { - if (FullName.Contains("\\")) - { - var elements = FullName.Split('\\'); - return elements[elements.Length - 1]; - } - else - { - return FullName; - } - } - else - { - return null; - } - } - } - - public string FullName { get; set; } - - public bool InheritanceEnabled { get; set; } - - public RegistryAccessRule2(RegistryAccessRule registryAccessRule) - { - this.registryAccessRule = registryAccessRule; - } - - #region Properties - public AccessControlType AccessControlType { get { return registryAccessRule.AccessControlType; } } - public RegistryRights RegistryRights { get { return registryAccessRule.RegistryRights; } } - public IdentityReference2 IdentityReference { get { return (IdentityReference2)registryAccessRule.IdentityReference; } } - public InheritanceFlags InheritanceFlags { get { return registryAccessRule.InheritanceFlags; } } - public bool IsInherited { get { return registryAccessRule.IsInherited; } } - public PropagationFlags PropagationFlags { get { return registryAccessRule.PropagationFlags; } } - #endregion - - #region conversion - public static implicit operator RegistryAccessRule(RegistryAccessRule2 V) - { - return V.registryAccessRule; - } - public static implicit operator RegistryAccessRule2(RegistryAccessRule n) - { - return new RegistryAccessRule2(n); - } - //REQUIRED BECAUSE OF CONVERSION OPERATORS - public override bool Equals(object obj) - { - return this.registryAccessRule == (RegistryAccessRule)obj; - } - public override int GetHashCode() - { - return this.registryAccessRule.GetHashCode(); - } - public override string ToString() - { - return registryAccessRule.ToString(); - } - #endregion - - #region IDisposable Members - public void Dispose() - { } - #endregion - } - #endregion - - #region RegistryInheritanceInfo - public class RegistryInheritanceInfo - { - public RegistryKey Item { get; set; } - public bool InheritanceEnabled { get; set; } - - public string FullName { get { return Item.Name; } } - public string Name - { - get - { - if (!string.IsNullOrEmpty(FullName)) - { - if (FullName.Contains("\\")) - { - var elements = FullName.Split('\\'); - return elements[elements.Length - 1]; - } - else - { - return FullName; - } - } - else - { - return null; - } - } - } - } - #endregion - - #region RegistryEffectivePermissionEntry - public class RegistryEffectivePermissionEntry - { - private IdentityReference2 account; - public IdentityReference2 Account { get { return account; } } - - private uint accessMask; - public uint AccessMask { get { return accessMask; } } - - private string objectPath; - public string FullName { get { return objectPath; } } - public string Name { get - { - if (!string.IsNullOrEmpty(FullName)) - { - if (FullName.Contains("\\")) - { - var elements = FullName.Split('\\'); - return elements[elements.Length - 1]; - } - else - { - return FullName; - } - } - else - { - return null; - } - } - } - - private List accessAsString; - public List AccessAsString { get { return accessAsString; } } - - public RegistryEffectivePermissionEntry(IdentityReference2 id, uint AccessMask, string FullName) - { - this.account = id; - this.accessMask = AccessMask; - this.objectPath = FullName; - this.accessAsString = new List(); - - if (accessMask == 0) - { - accessAsString.Add("None"); - } - else - { - string tempString = ((RegistryRights)this.accessMask).ToString(); - foreach (var s in tempString.Split(',')) - { - this.accessAsString.Add(s); - } - } - } - } - #endregion - - #region RegistryOwner - public class RegistryOwner - { - public RegistryKey Item { get; set; } - public Security2.IdentityReference2 Account { get; set; } - } - #endregion - - #region Win32 - #region Win32Enums - /// - /// enum used by RegOpenKeyEx - /// - public enum SAM_DESIRED : long - { - KEY_QUERY_VALUE = 0x1, - KEY_SET_VALUE = 0x2, - KEY_ALL_ACCESS = 0xf003f, - KEY_CREATE_SUB_KEY = 0x4, - KEY_ENUMERATE_SUB_KEYS = 0x8, - KEY_NOTIFY = 0x10, - KEY_CREATE_LINK = 0x20, - READ_CONTROL = 0x20000, - WRITE_DAC = 0x40000, - WRITE_OWNER = 0x80000, - SYNCHRONIZE = 0x100000, - - STANDARD_RIGHTS_REQUIRED = 0xf0000, - - STANDARD_RIGHTS_READ = READ_CONTROL, - STANDARD_RIGHTS_WRITE = READ_CONTROL, - STANDARD_RIGHTS_EXECUTE = READ_CONTROL, - - KEY_READ = STANDARD_RIGHTS_READ | KEY_QUERY_VALUE | KEY_ENUMERATE_SUB_KEYS | KEY_NOTIFY, - - KEY_WRITE = STANDARD_RIGHTS_WRITE | KEY_SET_VALUE | KEY_CREATE_SUB_KEY, - - KEY_EXECUTE = KEY_READ - } - - /// - /// constant enum for registry roots - /// - public enum REGISTRY_ROOT : long - { - HKEY_CLASSES_ROOT = 0x80000000, - HKEY_CURRENT_USER = 0x80000001, - HKEY_LOCAL_MACHINE = 0x80000002, - HKEY_USERS = 0x80000003 - } - #endregion - - public class RegistryKeyOpenException : System.Exception - { - private long win32ErrorCode; - public long Win32ErrorCode { get { return win32ErrorCode; } } - - public RegistryKeyOpenException() - : base("Cannot open Registry Key") - { } - - public RegistryKeyOpenException(Exception innerException) - : base("Cannot open Registry Key", innerException) - { } - - public RegistryKeyOpenException(long Win32ErrorCode) - : base("Cannot open Registry Key") - { - this.win32ErrorCode = Win32ErrorCode; - } - - public RegistryKeyOpenException(Exception innerException, long Win32ErrorCode) - : base("Cannot open Registry Key", innerException) - { - this.win32ErrorCode = Win32ErrorCode; - } - } - - public class RegistryKeySetSecurityException : System.Exception - { - private long win32ErrorCode; - public long Win32ErrorCode { get { return win32ErrorCode; } } - - public RegistryKeySetSecurityException() - : base("Cannot set security descriptor on registry key") - { } - - public RegistryKeySetSecurityException(Exception innerException) - : base("Cannot set security descriptor on registry key", innerException) - { } - - public RegistryKeySetSecurityException(long Win32ErrorCode) - : base("Cannot set security descriptor on registry key") - { - this.win32ErrorCode = Win32ErrorCode; - } - - public RegistryKeySetSecurityException(Exception innerException, long Win32ErrorCode) - : base("Cannot set security descriptor on registry key", innerException) - { - this.win32ErrorCode = Win32ErrorCode; - } - } - - public class Win32RegistrySecurity - { - - #region DllImports - [DllImport("kernel32.dll")] - private static extern long CloseHandle(IntPtr hHandle); - - [DllImport("advapi32.dll")] - private static extern long InitializeSecurityDescriptor(ref SECURITY_DESCRIPTOR pSecurityDescriptor, long dwRevision); - - [DllImport("advapi32.dll")] - private static extern long SetSecurityDescriptorOwner(ref SECURITY_DESCRIPTOR pSecurityDescriptor, byte[] pOwner, long bOwnerDefaulted); - - [DllImport("advapi32.dll")] - private static extern long RegSetKeySecurity(IntPtr ptrKey, SECURITY_INFORMATION SecurityInformation, SECURITY_DESCRIPTOR pSecurityDescriptor); - - [DllImport("advapi32.dll", EntryPoint = "RegOpenKeyExA")] - private static extern long RegOpenKeyEx(REGISTRY_ROOT hKey, string lpSubKey, long ulOptions, SAM_DESIRED samDesired, ref IntPtr ptrKey); - - [DllImport("advapi32.dll")] - private static extern long RegCloseKey(IntPtr ptrKey); - - private struct SECURITY_DESCRIPTOR - { - public byte Revision; - public byte Sbz1; - public long Control; - public long Owner; - public long Group; - public ACL Sacl; - public ACL Dacl; - } - - private struct ACL - { - public byte AclRevision; - public byte Sbz1; - public int AclSize; - public int AceCount; - public int Sbz2; - } - #endregion - - private RegistryKey GetRegistryKey(REGISTRY_ROOT Root, string KeyPath, RegistryRights Desired) - { - try - { - switch (Root) - { - case REGISTRY_ROOT.HKEY_CLASSES_ROOT: - return Registry.ClassesRoot.OpenSubKey(KeyPath, RegistryKeyPermissionCheck.ReadWriteSubTree, Desired); - case REGISTRY_ROOT.HKEY_LOCAL_MACHINE: - return Registry.LocalMachine.OpenSubKey(KeyPath, RegistryKeyPermissionCheck.ReadWriteSubTree, Desired); - case REGISTRY_ROOT.HKEY_USERS: - return Registry.Users.OpenSubKey(KeyPath, RegistryKeyPermissionCheck.ReadWriteSubTree, Desired); - case REGISTRY_ROOT.HKEY_CURRENT_USER: - return Registry.CurrentUser.OpenSubKey(KeyPath, RegistryKeyPermissionCheck.ReadWriteSubTree, Desired); - default: - return null; - } - } - catch (Exception) - { - return null; - } - } - - public void SetRegistryOwner(REGISTRY_ROOT Root, string KeyPath, SecurityIdentifier sid) - { - long win32ErrorCode = 0; - - SECURITY_DESCRIPTOR sd = new SECURITY_DESCRIPTOR(); - byte[] byteSid = new byte[sid.BinaryLength]; - sid.GetBinaryForm(byteSid, 0); - - IntPtr pRegKey = IntPtr.Zero; - - try - { - win32ErrorCode = RegOpenKeyEx(Root, KeyPath, 0, SAM_DESIRED.WRITE_OWNER, ref pRegKey); - if (win32ErrorCode != 0) - { - throw new RegistryKeyOpenException(win32ErrorCode); - } - } - catch (RegistryKeyOpenException) - { - throw; - } - catch (Exception ex) - { - throw new RegistryKeyOpenException(ex); - } - - InitializeSecurityDescriptor(ref sd, 1); - SetSecurityDescriptorOwner(ref sd, byteSid, 0); - - try - { - win32ErrorCode = RegSetKeySecurity(pRegKey, SECURITY_INFORMATION.OWNER_SECURITY_INFORMATION, sd); - if (win32ErrorCode != 0) - { - throw new RegistryKeySetSecurityException(win32ErrorCode); - } - } - catch (RegistryKeySetSecurityException) - { - throw; - } - catch (Exception ex) - { - throw new RegistryKeyOpenException(ex); - } - finally - { - RegCloseKey(pRegKey); - } - } - } -#endregion -} \ No newline at end of file diff --git a/Security2/Security2.csproj b/Security2/Security2.csproj deleted file mode 100644 index 4869af3..0000000 --- a/Security2/Security2.csproj +++ /dev/null @@ -1,98 +0,0 @@ - - - - Debug - AnyCPU - 8.0.30703 - 2.0 - {B437C364-5BC7-42E4-93F7-0F459A5DF0D0} - Library - Properties - Security2 - Security2 - v3.5 - 512 - Client - SAK - SAK - SAK - SAK - - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - false - false - - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - false - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - {f0f9af1e-d5b5-4d72-804a-5380622fbdea} - AlphaFS - - - - - \ No newline at end of file diff --git a/Security2/Security2.csproj.vspscc b/Security2/Security2.csproj.vspscc deleted file mode 100644 index b6d3289..0000000 --- a/Security2/Security2.csproj.vspscc +++ /dev/null @@ -1,10 +0,0 @@ -"" -{ -"FILE_VERSION" = "9237" -"ENLISTMENT_CHOICE" = "NEVER" -"PROJECT_FILE_RELATIVE_PATH" = "" -"NUMBER_OF_EXCLUDED_FILES" = "0" -"ORIGINAL_PROJECT_FILE_PATH" = "" -"NUMBER_OF_NESTED_PROJECTS" = "0" -"SOURCE_CONTROL_SETTINGS_PROVIDER" = "PROVIDER" -} diff --git a/Security2/Win32/Enums.cs b/Security2/Win32/Enums.cs deleted file mode 100644 index 8af9592..0000000 --- a/Security2/Win32/Enums.cs +++ /dev/null @@ -1,116 +0,0 @@ -using System; - -namespace Security2 -{ - enum SECURITY_INFORMATION - { - OWNER_SECURITY_INFORMATION = 1, - GROUP_SECURITY_INFORMATION = 2, - DACL_SECURITY_INFORMATION = 4, - SACL_SECURITY_INFORMATION = 8, - } - - internal enum AuthzRpcClientVersion : ushort // USHORT - { - V1 = 1 - } - - [Flags] - internal enum AuthzResourceManagerFlags : uint - { - NO_AUDIT = 0x1, - } - - [Flags] - internal enum StdAccess : uint - { - None = 0x0, - - SYNCHRONIZE = 0x100000, - STANDARD_RIGHTS_REQUIRED = 0xF0000, - - MAXIMUM_ALLOWED = 0x2000000, - } - - [Flags] - internal enum AuthzInitFlags : uint - { - Default = 0x0, - SkipTokenGroups = 0x2, - RequireS4ULogon = 0x4, - ComputePrivileges = 0x8, - } - - internal enum AuthzACFlags : uint // DWORD - { - None = 0, - NoDeepCopySD - } - - [Flags] - internal enum SecurityInformationClass : uint - { - Owner = 0x00001, - Group = 0x00002, - Dacl = 0x00004, - Sacl = 0x00008, - Label = 0x00010, - Attribute = 0x00020, - Scope = 0x00040 - } - - internal enum ObjectType : uint - { - File = 1, - } - - [Flags] - internal enum FileAccess : uint - { - None = 0x0, - ReadData = 0x1, - WriteData = 0x2, - AppendData = 0x4, - ReadExAttrib = 0x8, - WriteExAttrib = 0x10, - Execute = 0x20, - DeleteChild = 0x40, - ReadAttrib = 0x80, - WriteAttrib = 0x100, - - Delete = 0x10000, // DELETE, - ReadPermissions = 0x20000, // READ_CONTROL - ChangePermissions = 0x40000, // WRITE_DAC, - TakeOwnership = 0x80000, // WRITE_OWNER, - - GenericRead = ReadPermissions - | ReadData - | ReadAttrib - | ReadExAttrib - | StdAccess.SYNCHRONIZE, - - GenericAll = (StdAccess.STANDARD_RIGHTS_REQUIRED | 0x1FF), - - CategoricalAll = uint.MaxValue - } - - [Flags] - internal enum FileShare : uint - { - None = 0x0, - Read = 0x1, - Write = 0x2, - Delete = 0x4 - } - - internal enum FileMode : uint - { - OpenExisting = 3, - } - - [Flags] - internal enum FileFlagAttrib : uint - { - BackupSemantics = 0x02000000, - } -} diff --git a/Security2/Win32/Errors.cs b/Security2/Win32/Errors.cs deleted file mode 100644 index cc2fe7d..0000000 --- a/Security2/Win32/Errors.cs +++ /dev/null @@ -1,96 +0,0 @@ -// THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF -// ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO -// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A -// PARTICULAR PURPOSE. -// -// Copyright (c) Microsoft Corporation. All rights reserved - -using System; -using System.Runtime.InteropServices; - -namespace Security2 -{ - static internal class Win32Error - { - // Note - the error codes here should all match the definitions in winerror.h. - - /// - /// Equal to ERROR_SUCCESS (The operation completed successfully). - /// - public const int NO_ERROR = 0; - - /// - /// Error code indicating: The operation completed successfully. - /// - public const int ERROR_SUCCESS = 0; - - /// - /// The system cannot find the file specified. - /// - public const int ERROR_FILE_NOT_FOUND = 2; - - /// - /// Error code indicating: Access is denied. - /// - public const int ERROR_ACCESS_DENIED = 5; - - /// - /// Error code indicating: Not enough storage is available to process this command - /// - public const int ERROR_NOT_ENOUGH_MEMORY = 8; - /// - /// The data area passed to a system call is too small. - /// - public const int ERROR_INSUFFICIENT_BUFFER = 122; - - /// - /// The filename or extension is too long. - /// - public const int ERROR_FILENAME_EXCED_RANGE = 206; - - /// - /// More data is available. - /// - public const int ERROR_MORE_DATA = 234; - - /// - /// An attempt was made to reference a token that does not exist. - /// - public const int ERROR_NO_TOKEN = 1008; - - /// - /// The specified device name is invalid. - /// - public const int ERROR_BAD_DEVICE = 1200; - - /// - /// Not all privileges or groups referenced are assigned to the caller. - /// - public const int ERROR_NOT_ALL_ASSIGNED = 1300; - - /// - /// A specified privilege does not exist. - /// - public const int ERROR_NO_SUCH_PRIVILEGE = 1313; - - /// - /// Cannot open an anonymous level security token. - /// - public const int ERROR_CANT_OPEN_ANONYMOUS = 1347; - - /// - /// The RPC server is unavailable. - /// - public const int RPC_S_SERVER_UNAVAILABLE = 1722; - - /// - /// There are no more endpoints available from the endpoint mapper. - /// - public const int EPT_S_NOT_REGISTERED = 1753; - - /// - /// This network connection does not exist. - /// - public const int ERROR_NOT_CONNECTED = 2250; - } -} \ No newline at end of file diff --git a/Security2/Win32/Functions.cs b/Security2/Win32/Functions.cs deleted file mode 100644 index 43211e1..0000000 --- a/Security2/Win32/Functions.cs +++ /dev/null @@ -1,103 +0,0 @@ -using Microsoft.Win32.SafeHandles; -using System; -using System.Runtime.InteropServices; - -namespace Security2 -{ - internal partial class Win32 - { - const string ADVAPI32_DLL = "advapi32.dll"; - internal const string KERNEL32_DLL = "kernel32.dll"; - internal const string AUTHZ_DLL = "authz.dll"; - - [DllImport(ADVAPI32_DLL, EntryPoint = "GetInheritanceSourceW", CharSet = CharSet.Unicode)] - static extern UInt32 GetInheritanceSource( - [MarshalAs(UnmanagedType.LPTStr)] string pObjectName, - System.Security.AccessControl.ResourceType ObjectType, - SECURITY_INFORMATION SecurityInfo, - [MarshalAs(UnmanagedType.Bool)]bool Container, - IntPtr pObjectClassGuids, - UInt32 GuidCount, - byte[] pAcl, - IntPtr pfnArray, - ref GENERIC_MAPPING pGenericMapping, - IntPtr pInheritArray - ); - - [DllImport(ADVAPI32_DLL, EntryPoint = "FreeInheritedFromArray", CharSet = CharSet.Unicode)] - static extern UInt32 FreeInheritedFromArray( - IntPtr pInheritArray, - UInt16 AceCnt, - IntPtr pfnArray - ); - - [DllImport(AUTHZ_DLL, CharSet = CharSet.Unicode, SetLastError = true)] - [return: MarshalAs(UnmanagedType.Bool)] - static extern bool AuthzInitializeRemoteResourceManager( - IntPtr rpcInitInfo, - out SafeAuthzRMHandle authRM); - - [DllImport(AUTHZ_DLL, CharSet = CharSet.Unicode, ExactSpelling = true, SetLastError = true)] - [return: MarshalAs(UnmanagedType.Bool)] - static extern bool AuthzInitializeResourceManager( - AuthzResourceManagerFlags flags, - IntPtr pfnAccessCheck, - IntPtr pfnComputeDynamicGroups, - IntPtr pfnFreeDynamicGroups, - string szResourceManagerName, - out SafeAuthzRMHandle phAuthzResourceManager); - - [DllImport(Win32.AUTHZ_DLL, CharSet = CharSet.Unicode, SetLastError = true)] - [return: MarshalAs(UnmanagedType.Bool)] - internal static extern bool AuthzInitializeContextFromSid( - AuthzInitFlags flags, - byte[] rawUserSid, - SafeAuthzRMHandle authzRM, - IntPtr expirationTime, - Win32.LUID Identifier, - IntPtr DynamicGroupArgs, - out IntPtr authzClientContext); - - [DllImport(Win32.AUTHZ_DLL, CharSet = CharSet.Unicode, SetLastError = true)] - [return: MarshalAs(UnmanagedType.Bool)] - internal static extern bool AuthzAccessCheck( - AuthzACFlags flags, - IntPtr hAuthzClientContext, - ref AUTHZ_ACCESS_REQUEST pRequest, - IntPtr AuditEvent, - byte[] rawSecurityDescriptor, - IntPtr[] OptionalSecurityDescriptorArray, - UInt32 OptionalSecurityDescriptorCount, - ref AUTHZ_ACCESS_REPLY pReply, - IntPtr cachedResults); - - [DllImport(Win32.AUTHZ_DLL, CharSet = CharSet.Unicode, ExactSpelling = true, SetLastError = true)] - [return: MarshalAs(UnmanagedType.Bool)] - internal static extern bool AuthzFreeContext(IntPtr authzClientContext); - - [DllImport(Win32.ADVAPI32_DLL, CallingConvention = CallingConvention.Winapi, CharSet = CharSet.Unicode)] - public static extern UInt32 GetSecurityDescriptorLength(IntPtr pSecurityDescriptor); - - - [DllImport(Win32.ADVAPI32_DLL, CallingConvention = CallingConvention.Winapi, SetLastError = true, CharSet = CharSet.Unicode)] - internal static extern UInt32 GetSecurityInfo( - SafeFileHandle handle, - ObjectType objectType, - SecurityInformationClass infoClass, - IntPtr owner, - IntPtr group, - IntPtr dacl, - IntPtr sacl, - out IntPtr securityDescriptor); - - [DllImport(Win32.KERNEL32_DLL, SetLastError = true, CharSet = CharSet.Unicode)] - internal static extern SafeFileHandle CreateFile( - string lpFileName, - FileAccess desiredAccess, - FileShare shareMode, - IntPtr lpSecurityAttributes, - FileMode mode, - FileFlagAttrib flagsAndAttributes, - IntPtr hTemplateFile); - } -} \ No newline at end of file diff --git a/Security2/Win32/Lib.cs b/Security2/Win32/Lib.cs deleted file mode 100644 index 55be9a0..0000000 --- a/Security2/Win32/Lib.cs +++ /dev/null @@ -1,322 +0,0 @@ -using Alphaleonis.Win32.Filesystem; -using Microsoft.Win32.SafeHandles; -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Runtime.InteropServices; -using System.Security.AccessControl; - -namespace Security2 -{ - internal partial class Win32 - { - internal const string AUTHZ_OBJECTUUID_WITHCAP = "9a81c2bd-a525-471d-a4ed-49907c0b23da"; - internal const string RCP_OVER_TCP_PROTOCOL = "ncacn_ip_tcp"; - - IntPtr userClientCtxt = IntPtr.Zero; - SafeAuthzRMHandle authzRM; - IntPtr pGrantedAccess = IntPtr.Zero; - IntPtr pErrorSecObj = IntPtr.Zero; - - #region GetInheritedFrom - public static List GetInheritedFrom(FileSystemInfo item, ObjectSecurity sd) - { - var inheritedFrom = new List(); - - var sdBytes = sd.GetSecurityDescriptorBinaryForm(); - byte[] aclBytes = null; - var rawSd = new RawSecurityDescriptor(sdBytes, 0); - - var aceCount = 0; - - if (rawSd.SystemAcl != null) - { - aceCount = rawSd.SystemAcl.Count; - aclBytes = new byte[rawSd.SystemAcl.BinaryLength]; - rawSd.SystemAcl.GetBinaryForm(aclBytes, 0); - - try - { - inheritedFrom = GetInheritedFrom(item.FullName, - aclBytes, - aceCount, - item is DirectoryInfo ? true : false, - SECURITY_INFORMATION.SACL_SECURITY_INFORMATION); - } - catch - { - inheritedFrom = new List(); - for (int i = 0; i < aceCount; i++) - { - inheritedFrom.Add("unknown parent"); - } - } - } - else if (rawSd.DiscretionaryAcl != null) - { - aceCount = rawSd.DiscretionaryAcl.Count; - aclBytes = new byte[rawSd.DiscretionaryAcl.BinaryLength]; - rawSd.DiscretionaryAcl.GetBinaryForm(aclBytes, 0); - - try - { - inheritedFrom = GetInheritedFrom(item.FullName, - aclBytes, - aceCount, - item is DirectoryInfo ? true : false, - SECURITY_INFORMATION.DACL_SECURITY_INFORMATION); - } - catch - { - inheritedFrom = new List(); - for (int i = 0; i < aceCount; i++) - { - inheritedFrom.Add("unknown parent"); - } - } - } - - return inheritedFrom; - } - public static List GetInheritedFrom(string path, byte[] aclBytes, int aceCount, bool isContainer, SECURITY_INFORMATION aclType) - { - var inheritedFrom = new List(); - path = Path.GetLongPath(path); - - uint returnValue = 0; - GENERIC_MAPPING genericMap = new GENERIC_MAPPING(); - genericMap.GenericRead = (uint)MappedGenericRights.FILE_GENERIC_READ; - genericMap.GenericWrite = (uint)MappedGenericRights.FILE_GENERIC_WRITE; - genericMap.GenericExecute = (uint)MappedGenericRights.FILE_GENERIC_EXECUTE; - genericMap.GenericAll = (uint)MappedGenericRights.FILE_GENERIC_ALL; - - var pInheritInfo = Marshal.AllocHGlobal(aceCount * Marshal.SizeOf(typeof(PINHERITED_FROM))); - - returnValue = GetInheritanceSource( - path, - ResourceType.FileObject, - aclType, - isContainer, - IntPtr.Zero, - 0, - aclBytes, - IntPtr.Zero, - ref genericMap, - pInheritInfo - ); - - if (returnValue != 0) - { - throw new System.ComponentModel.Win32Exception((int)returnValue); - } - - for (int i = 0; i < aceCount; i++) - { - var inheritInfo = pInheritInfo.ElementAt(i); - - inheritedFrom.Add( - !string.IsNullOrEmpty(inheritInfo.AncestorName) && inheritInfo.AncestorName.StartsWith(@"\\?\") ? inheritInfo.AncestorName.Substring(4) : inheritInfo.AncestorName - ); - } - - FreeInheritedFromArray(pInheritInfo, (ushort)aceCount, IntPtr.Zero); - Marshal.FreeHGlobal(pInheritInfo); - - return inheritedFrom; - } - #endregion GetInheritedFrom - - public int GetEffectiveAccess(ObjectSecurity sd, IdentityReference2 identity, string serverName, out bool remoteServerAvailable, out Exception authzException) - { - int effectiveAccess = 0; - remoteServerAvailable = false; - authzException = null; - - try - { - GetEffectivePermissions_AuthzInitializeResourceManager(serverName, out remoteServerAvailable); - - try - { - GetEffectivePermissions_AuthzInitializeContextFromSid(identity); - effectiveAccess = GetEffectivePermissions_AuthzAccessCheck(sd); - } - catch (Exception ex) - { - authzException = ex; - } - } - catch - { } - finally - { - GetEffectivePermissions_FreeResouces(); - } - - return effectiveAccess; - } - - #region Win32 Wrapper - private void GetEffectivePermissions_AuthzInitializeResourceManager(string serverName, out bool remoteServerAvailable) - { - remoteServerAvailable = false; - - var rpcInitInfo = new AUTHZ_RPC_INIT_INFO_CLIENT(); - - rpcInitInfo.version = AuthzRpcClientVersion.V1; - rpcInitInfo.objectUuid = AUTHZ_OBJECTUUID_WITHCAP; - rpcInitInfo.protocol = RCP_OVER_TCP_PROTOCOL; - rpcInitInfo.server = serverName; - - SafeHGlobalHandle pRpcInitInfo = SafeHGlobalHandle.AllocHGlobalStruct(rpcInitInfo); - if (!AuthzInitializeRemoteResourceManager(pRpcInitInfo.ToIntPtr(), out authzRM)) - { - int error = Marshal.GetLastWin32Error(); - - if (error != Win32Error.EPT_S_NOT_REGISTERED) //if not RPC server unavailable - { - throw new Win32Exception(error); - } - - if (serverName == "localhost") - { - remoteServerAvailable = true; - } - - // - // As a fallback we do AuthzInitializeResourceManager. But the results can be inaccurate. - // - if (!AuthzInitializeResourceManager( - AuthzResourceManagerFlags.NO_AUDIT, - IntPtr.Zero, - IntPtr.Zero, - IntPtr.Zero, - "EffectiveAccessCheck", - out authzRM)) - { - throw new Win32Exception(Marshal.GetLastWin32Error()); - } - } - else - { - remoteServerAvailable = true; - } - } - - private void GetEffectivePermissions_AuthzInitializeContextFromSid(IdentityReference2 id) - { - var rawSid = id.GetBinaryForm(); - - // - // Create an AuthZ context based on the user account - // - if (!AuthzInitializeContextFromSid( - AuthzInitFlags.Default, - rawSid, - authzRM, - IntPtr.Zero, - Win32.LUID.NullLuid, - IntPtr.Zero, - out userClientCtxt)) - { - Win32Exception win32Expn = new Win32Exception(Marshal.GetLastWin32Error()); - - if (win32Expn.NativeErrorCode != Win32Error.RPC_S_SERVER_UNAVAILABLE) - { - throw win32Expn; - } - } - } - - private int GetEffectivePermissions_AuthzAccessCheck(ObjectSecurity sd) - { - var request = new AUTHZ_ACCESS_REQUEST(); - request.DesiredAccess = StdAccess.MAXIMUM_ALLOWED; - request.PrincipalSelfSid = null; - request.ObjectTypeList = IntPtr.Zero; - request.ObjectTypeListLength = 0; - request.OptionalArguments = IntPtr.Zero; - - var reply = new AUTHZ_ACCESS_REPLY(); - reply.ResultListLength = 1; - reply.SaclEvaluationResults = IntPtr.Zero; - reply.GrantedAccessMask = pGrantedAccess = Marshal.AllocHGlobal(sizeof(uint)); - reply.Error = pErrorSecObj = Marshal.AllocHGlobal(sizeof(uint)); - - byte[] rawSD = sd.GetSecurityDescriptorBinaryForm(); - - if (!AuthzAccessCheck( - AuthzACFlags.None, - userClientCtxt, - ref request, - IntPtr.Zero, - rawSD, - null, - 0, - ref reply, - IntPtr.Zero)) - { - var error = Marshal.GetLastWin32Error(); - if (error != 0) - { - throw new Win32Exception(); - } - } - - var grantedAccess = Marshal.ReadInt32(pGrantedAccess); - - return grantedAccess; - } - - private void GetEffectivePermissions_FreeResouces() - { - Marshal.FreeHGlobal(pGrantedAccess); - Marshal.FreeHGlobal(pErrorSecObj); - - if (userClientCtxt != IntPtr.Zero) - { - AuthzFreeContext(userClientCtxt); - userClientCtxt = IntPtr.Zero; - } - } - - static RawSecurityDescriptor GetRawSecurityDescriptor(SafeFileHandle handle, SecurityInformationClass infoClass) - { - return new RawSecurityDescriptor(GetByteSecurityDescriptor(handle, infoClass), 0); - } - - public static byte[] GetByteSecurityDescriptor(SafeFileHandle handle, SecurityInformationClass infoClass) - { - var tempSD = IntPtr.Zero; - var buffer = new byte[0]; - try - { - uint error = GetSecurityInfo(handle, - ObjectType.File, - infoClass, - IntPtr.Zero, - IntPtr.Zero, - IntPtr.Zero, - IntPtr.Zero, - out tempSD); - if (error != Win32Error.ERROR_SUCCESS) - { - throw new Win32Exception(Marshal.GetLastWin32Error()); - } - - UInt32 sdLength = GetSecurityDescriptorLength(tempSD); - - buffer = new byte[sdLength]; - Marshal.Copy(tempSD, buffer, 0, (int)sdLength); - } - finally - { - Marshal.FreeHGlobal(tempSD); - tempSD = IntPtr.Zero; - } - - return buffer; - } - #endregion - } -} \ No newline at end of file diff --git a/Security2/Win32/SafeHandleEx.cs b/Security2/Win32/SafeHandleEx.cs deleted file mode 100644 index 08f35f3..0000000 --- a/Security2/Win32/SafeHandleEx.cs +++ /dev/null @@ -1,334 +0,0 @@ -// THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF -// ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO -// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A -// PARTICULAR PURPOSE. -// -// Copyright (c) Microsoft Corporation. All rights reserved - -using System; -using System.Collections.Generic; -using System.Diagnostics; -using System.Diagnostics.CodeAnalysis; -using System.Runtime.CompilerServices; -using System.Runtime.ConstrainedExecution; -using System.Runtime.InteropServices; -using System.Security; - -using Microsoft.Win32.SafeHandles; - -namespace Security2 -{ - using HANDLE = System.IntPtr; - - internal sealed class SafeHGlobalHandle : IDisposable - { - #region Constructor and Destructor - SafeHGlobalHandle() - { - pointer = IntPtr.Zero; - } - - SafeHGlobalHandle(IntPtr handle) - { - pointer = handle; - } - - ~SafeHGlobalHandle() - { - Dispose(); - } - #endregion - - #region Public methods - public static SafeHGlobalHandle InvalidHandle - { - get { return new SafeHGlobalHandle(IntPtr.Zero); } - } - - /// - /// Adds reference to other SafeHGlobalHandle objects, the pointer to - /// which are refered to by this object. This is to ensure that such - /// objects being referred to wouldn't be unreferenced until this object - /// is active. - /// - /// For e.g. when this object is an array of pointers to other objects - /// - /// Collection of SafeHGlobalHandle objects - /// referred to by this object. - public void AddSubReference(IEnumerable children) - { - if (references == null) - { - references = new List(); - } - - references.AddRange(children); - } - - /// - /// Allocates from unmanaged memory to represent an array of pointers - /// and marshals the unmanaged pointers (IntPtr) to the native array - /// equivalent. - /// - /// Array of unmanaged pointers - /// SafeHGlobalHandle object to an native (unmanaged) array of pointers - public static SafeHGlobalHandle AllocHGlobal(IntPtr[] values) - { - SafeHGlobalHandle result = AllocHGlobal(IntPtr.Size * values.Length); - - Marshal.Copy(values, 0, result.pointer, values.Length); - - return result; - } - - public static SafeHGlobalHandle AllocHGlobalStruct(T obj) where T : struct - { - Debug.Assert(typeof(T).StructLayoutAttribute.Value == LayoutKind.Sequential); - - SafeHGlobalHandle result = AllocHGlobal(Marshal.SizeOf(typeof(T))); - - Marshal.StructureToPtr(obj, result.pointer, false); - - return result; - } - - /// - /// Allocates from unmanaged memory to represent an array of structures - /// and marshals the structure elements to the native array of - /// structures. ONLY structures with attribute StructLayout of - /// LayoutKind.Sequential are supported. - /// - /// Native structure type - /// Collection of structure objects - /// Number of elements in the collection - /// SafeHGlobalHandle object to an native (unmanaged) array of structures - public static SafeHGlobalHandle AllocHGlobal(ICollection values) where T : struct - { - Debug.Assert(typeof(T).StructLayoutAttribute.Value == LayoutKind.Sequential); - - return AllocHGlobal(0, values, values.Count); - } - - /// - /// Allocates from unmanaged memory to represent a structure with a - /// variable length array at the end and marshal these structure - /// elements. It is the callers responsibility to marshal what preceeds - /// the trailinh array into the unmanaged memory. ONLY structures with - /// attribute StructLayout of LayoutKind.Sequential are supported. - /// - /// Type of the trailing array of structures - /// Number of bytes preceeding the trailing array of structures - /// Collection of structure objects - /// - /// SafeHGlobalHandle object to an native (unmanaged) structure - /// with a trail array of structures - public static SafeHGlobalHandle AllocHGlobal(int prefixBytes, IEnumerable values, int count) where T - : struct - { - Debug.Assert(typeof(T).StructLayoutAttribute.Value == LayoutKind.Sequential); - - SafeHGlobalHandle result = AllocHGlobal(prefixBytes + Marshal.SizeOf(typeof(T)) * count); - - IntPtr ptr = new IntPtr(result.pointer.ToInt32() + prefixBytes); - foreach (var value in values) - { - Marshal.StructureToPtr(value, ptr, false); - ptr.Increment(); - } - - return result; - } - - /// - /// Allocates from unmanaged memory to represent a unicode string (WSTR) - /// and marshal this to a native PWSTR. - /// - /// String - /// SafeHGlobalHandle object to an native (unmanaged) unicode string - public static SafeHGlobalHandle AllocHGlobal(string s) - { - return new SafeHGlobalHandle(Marshal.StringToHGlobalUni(s)); - } - - /// - /// Operator to obtain the unmanaged pointer wrapped by the object. Note - /// that the returned pointer is only valid for the lifetime of this - /// object. - /// - /// SafeHGlobalHandle object - /// Unmanaged pointer wrapped by the object - public IntPtr ToIntPtr() - { - return pointer; - } - #endregion - - #region IDisposable implmentation - public void Dispose() - { - if (pointer != IntPtr.Zero) - { - Marshal.FreeHGlobal(pointer); - pointer = IntPtr.Zero; - } - - GC.SuppressFinalize(this); - } - #endregion - - #region Private implementation - [SuppressMessage("Microsoft.Reliability", "CA2000:Dispose objects before losing scope", - Justification = "Caller will dispose result")] - static SafeHGlobalHandle AllocHGlobal(int cb) - { - if (cb < 0) - { - throw new ArgumentOutOfRangeException("cb", "The value of this argument must be non-negative"); - } - - SafeHGlobalHandle result = new SafeHGlobalHandle(); - - // - // CER - // - RuntimeHelpers.PrepareConstrainedRegions(); - try { } - finally - { - result.pointer = Marshal.AllocHGlobal(cb); - } - - return result; - } - #endregion - - #region Private members - /// - /// Maintainsreference to other SafeHGlobalHandle objects, the pointer - /// to which are refered to by this object. This is to ensure that such - /// objects being referred to wouldn't be unreferenced until this object - /// is active. - /// - List references; - - // - // Using SafeHandle here doesn't buy much since the pointer is - // eventually stashed into a native structure. Using a SafeHandle would - // involve calling DangerousGetHandle in place of ToIntPtr which makes - // code analysis report CA2001: Avoid calling problematic methods. - // - [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Reliability", "CA2006:UseSafeHandleToEncapsulateNativeResources")] - /// - /// Unmanaged pointer wrapped by this object - /// - IntPtr pointer; - #endregion - } - - // - // Adopted from: http://msdn.microsoft.com/en-us/magazine/cc163823.aspx - // - /// - /// Safe wrapper for HANDLE to a token. - /// - internal class SafeTokenHandle : SafeHandleZeroOrMinusOneIsInvalid - { - #region Constructors - /// - /// This safehandle instance "owns" the handle, hence base(true) - /// is being called. When safehandle is no longer in use it will - /// call this class's ReleaseHandle method which will release - /// the resources - /// - private SafeTokenHandle() : base(true) { } - - // 0 is an Invalid Handle - internal SafeTokenHandle(HANDLE handle) - : base(true) - { - SetHandle(handle); - } - #endregion - - internal static SafeTokenHandle InvalidHandle - { - [SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode", Justification = "Retain to illustrate semantics")] - get { return new SafeTokenHandle(HANDLE.Zero); } - } - - #region Private implementation - /// - /// Release the HANDLE held by this instance - /// - /// true if the release was successful. false otherwise. - override protected bool ReleaseHandle() - { - return NativeMethods.CloseHandle(handle); - } - #endregion - - #region Nested class for P/Invokes - static class NativeMethods - { - [DllImport(Win32.KERNEL32_DLL, SetLastError = true), - SuppressUnmanagedCodeSecurity, - ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)] - [return: MarshalAs(UnmanagedType.Bool)] - public static extern bool CloseHandle(HANDLE handle); - } - #endregion - } - - /// - /// Safe wrapper for AUTHZ_RESOURCE_MANAGER_HANDLE. - /// - internal class SafeAuthzRMHandle : SafeHandleZeroOrMinusOneIsInvalid - { - #region Constructors - /// - /// This safehandle instance "owns" the handle, hence base(true) - /// is being called. When safehandle is no longer in use it will - /// call this class's ReleaseHandle method which will release - /// the resources - /// - SafeAuthzRMHandle() : base(true) { } - - [SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode", - Justification = "Retain to illustrate semantics and for reuse")] - SafeAuthzRMHandle(HANDLE handle) - : base(true) - { - SetHandle(handle); - } - #endregion - - public static SafeAuthzRMHandle InvalidHandle - { - [SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode", - Justification = "Retain to illustrate semantics")] - get { return new SafeAuthzRMHandle(HANDLE.Zero); } - } - - #region Private implementation - /// - /// Release the resource manager handle held by this instance - /// - /// true if the release was successful. false otherwise. - override protected bool ReleaseHandle() - { - return NativeMethods.AuthzFreeResourceManager(handle); - } - #endregion - - #region Nested class for P/Invokes - static class NativeMethods - { - [DllImport(Win32.AUTHZ_DLL, SetLastError = true), - SuppressUnmanagedCodeSecurity, - ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)] - [return: MarshalAs(UnmanagedType.Bool)] - public static extern bool AuthzFreeResourceManager(HANDLE handle); - } - #endregion - } -} diff --git a/Security2/Win32/Structs.cs b/Security2/Win32/Structs.cs deleted file mode 100644 index cfa4937..0000000 --- a/Security2/Win32/Structs.cs +++ /dev/null @@ -1,83 +0,0 @@ -using System; -using System.Runtime.InteropServices; - -namespace Security2 -{ - internal partial class Win32 - { - [StructLayout(LayoutKind.Sequential)] - struct PINHERITED_FROM - { - public Int32 GenerationGap; - [MarshalAs(UnmanagedType.LPTStr)] - public string AncestorName; - } - - [StructLayout(LayoutKind.Sequential)] - struct GENERIC_MAPPING - { - public uint GenericRead; - public uint GenericWrite; - public uint GenericExecute; - public uint GenericAll; - } - - [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)] - struct AUTHZ_RPC_INIT_INFO_CLIENT - { - public AuthzRpcClientVersion version; - public string objectUuid; - public string protocol; - public string server; - public string endPoint; - public string options; - public string serverSpn; - } - - [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)] - public struct LUID - { - public uint LowPart; - public uint HighPart; - - public static LUID NullLuid - { - get - { - LUID Empty; - Empty.LowPart = 0; - Empty.HighPart = 0; - - return Empty; - } - } - } - - #region authz - [StructLayout(LayoutKind.Sequential)] - internal struct AUTHZ_ACCESS_REQUEST - { - public StdAccess DesiredAccess; - public byte[] PrincipalSelfSid; - public IntPtr ObjectTypeList; - public int ObjectTypeListLength; - public IntPtr OptionalArguments; - } - - [StructLayout(LayoutKind.Sequential)] - internal struct AUTHZ_ACCESS_REPLY - { - public int ResultListLength; - public IntPtr GrantedAccessMask; - public IntPtr SaclEvaluationResults; - public IntPtr Error; - } - - internal enum AuthzACFlags : uint // DWORD - { - None = 0, - NoDeepCopySD - } - #endregion - } -} \ No newline at end of file diff --git a/Security2/Win32/Win32Functions.cs b/Security2/Win32/Win32Functions.cs deleted file mode 100644 index a770a60..0000000 --- a/Security2/Win32/Win32Functions.cs +++ /dev/null @@ -1,32 +0,0 @@ -using System; -using System.Runtime.InteropServices; - -namespace Security2 -{ - internal partial class Win32 - { - const string ADVAPI32_DLL = "advapi32.dll"; - const string KERNEL32_DLL = "kernel32.dll"; - - [DllImport(Win32.ADVAPI32_DLL, EntryPoint = "GetInheritanceSourceW", CharSet = CharSet.Unicode)] - static extern UInt32 GetInheritanceSource( - [MarshalAs(UnmanagedType.LPTStr)] string pObjectName, - System.Security.AccessControl.ResourceType ObjectType, - SECURITY_INFORMATION SecurityInfo, - [MarshalAs(UnmanagedType.Bool)]bool Container, - IntPtr pObjectClassGuids, - UInt32 GuidCount, - byte[] pAcl, - IntPtr pfnArray, - ref GENERIC_MAPPING pGenericMapping, - IntPtr pInheritArray - ); - - [DllImport(Win32.ADVAPI32_DLL, EntryPoint = "FreeInheritedFromArray", CharSet = CharSet.Unicode)] - static extern UInt32 FreeInheritedFromArray( - IntPtr pInheritArray, - UInt16 AceCnt, - IntPtr pfnArray - ); - } -} \ No newline at end of file diff --git a/Security2/Win32/Win32Lib.cs b/Security2/Win32/Win32Lib.cs deleted file mode 100644 index 3fa97d4..0000000 --- a/Security2/Win32/Win32Lib.cs +++ /dev/null @@ -1,66 +0,0 @@ -using Alphaleonis.Win32.Filesystem; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Runtime.InteropServices; -using System.Security.AccessControl; -using System.Text; - -namespace Security2 -{ - internal partial class Win32 - { - public static List GetInheritedFrom(string path, ObjectSecurity sd, bool isContainer) - { - var inheritedFrom = new List(); - path = Path.GetLongPath(path); - - uint returnValue = 0; - GENERIC_MAPPING genericMap = new GENERIC_MAPPING(); - genericMap.GenericRead = (uint)MappedGenericRights.FILE_GENERIC_READ; - genericMap.GenericWrite = (uint)MappedGenericRights.FILE_GENERIC_WRITE; - genericMap.GenericExecute = (uint)MappedGenericRights.FILE_GENERIC_EXECUTE; - genericMap.GenericAll = (uint)MappedGenericRights.FILE_GENERIC_ALL; - - var sdBytes = sd.GetSecurityDescriptorBinaryForm(); - var commonSd = new CommonSecurityDescriptor(isContainer, false, sdBytes, 0); - - var aclBytes = new byte[commonSd.DiscretionaryAcl.BinaryLength]; - commonSd.DiscretionaryAcl.GetBinaryForm(aclBytes, 0); - - var pInheritInfo = Marshal.AllocHGlobal(commonSd.DiscretionaryAcl.Count * Marshal.SizeOf(typeof(PINHERITED_FROM))); - - returnValue = GetInheritanceSource( - path, - ResourceType.FileObject, - SECURITY_INFORMATION.DACL_SECURITY_INFORMATION, - isContainer, - IntPtr.Zero, - 0, - aclBytes, - IntPtr.Zero, - ref genericMap, - pInheritInfo - ); - - if (returnValue != 0) - { - throw new System.ComponentModel.Win32Exception((int)returnValue); - } - - for (int i = 0; i < commonSd.DiscretionaryAcl.Count; i++) - { - var inheritInfo = pInheritInfo.ElementAt(i); - - inheritedFrom.Add( - !string.IsNullOrEmpty(inheritInfo.AncestorName) && inheritInfo.AncestorName.StartsWith(@"\\?\") ? inheritInfo.AncestorName.Substring(4) : inheritInfo.AncestorName - ); - } - - FreeInheritedFromArray(pInheritInfo, (ushort)commonSd.DiscretionaryAcl.Count, IntPtr.Zero); - Marshal.FreeHGlobal(pInheritInfo); - - return inheritedFrom; - } - } -} diff --git a/Security2/bin/Debug/AlphaFS.dll b/Security2/bin/Debug/AlphaFS.dll deleted file mode 100644 index ec222ca91d42a63209ec0f2b8852a4020d4a84c9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 312320 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

b}QC#9^3)AZ*S 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
2F#_$7G*x6+c`7=B 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 (chIeEYYQFS*6|0uT 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%0D(cmDJQDtTkw>_)tXxQ7ejA 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 U>-|Wm - - - AlphaFS - - - -

Information about an alternate data stream. - - - - Gets the name of the alternate data stream. - This value is an empty string for the default stream (:$DATA), and for any other data stream it contains the name of the stream. - The name of the stream. - - - Gets the size of the stream. - - - Gets the full path to the stream. - - This is a path in long path format that can be passed to to open the stream if - or - is specified. - - The full path to the stream in long path format. - - - Returns the hash code for this instance. - A 32-bit signed integer that is the hash code for this instance. - - - Indicates whether this instance and a specified object are equal. - The object to compare with the current instance. - - true if and this instance are the same type and represent the same value; otherwise, false. - - - - Equality operator. - The first operand. - The second operand. - The result of the operation. - - - Inequality operator. - The first operand. - The second operand. - The result of the operation. - - - The structure contains stream header data. - - - - Initializes a new instance of the class. - The stream ID. - The name. - - - Gets the size of the data in the substream, in bytes. - The size of the data in the substream, in bytes. - - - Gets a string that specifies the name of the alternative data stream. - A string that specifies the name of the alternative data stream. - - - Gets the type of the data in the stream. - The type of the data in the stream. - - - Gets the attributes of the data to facilitate cross-operating system transfer. - Attributes of the data to facilitate cross-operating system transfer. - - - Callback used by CopyFileXxx and MoveFileXxx to report progress about the copy/move operation. - - - Exposes static methods for creating, moving, and enumerating through directories and subdirectories. - This class cannot be inherited. - - - - [AlphaFS] Copies an existing directory to a new directory. Overwriting a directory of the same name is not allowed. - - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two directories have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - A class with details of the Copy action. - - - - - - - The source directory path. - The destination directory path. - - - [AlphaFS] Copies an existing directory to a new directory. Overwriting a directory of the same name is not allowed. - - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two directories have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - A class with details of the Copy action. - - - - - - - The source directory path. - The destination directory path. - Indicates the format of the path parameter(s). - - - [AlphaFS] Copies an existing directory to a new directory. Overwriting a directory of the same name is allowed. - - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two directories have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - A class with details of the Copy action. - - - - - - - The source directory path. - The destination directory path. - if the destination directory should ignoring the read-only and hidden attributes and overwrite; otherwise, . - - - [AlphaFS] Copies an existing directory to a new directory. Overwriting a directory of the same name is allowed. - - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two directories have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - A class with details of the Copy action. - - - - - - - The source directory path. - The destination directory path. - if the destination directory should ignoring the read-only and hidden attributes and overwrite; otherwise, . - Indicates the format of the path parameter(s). - - - [AlphaFS] Copies an existing directory to a new directory. Overwriting a directory of the same name is not allowed. - - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two directories have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - A class with details of the Copy action. - - - - - - - The transaction. - The source directory path. - The destination directory path. - - - [AlphaFS] Copies an existing directory to a new directory. Overwriting a directory of the same name is not allowed. - - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two directories have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - A class with details of the Copy action. - - - - - - - The transaction. - The source directory path. - The destination directory path. - Indicates the format of the path parameter(s). - - - [AlphaFS] Copies an existing directory to a new directory. Overwriting a directory of the same name is allowed. - - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two directories have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - A class with details of the Copy action. - - - - - - - The transaction. - The source directory path. - The destination directory path. - if the destination directory should ignoring the read-only and hidden attributes and overwrite; otherwise, . - - - [AlphaFS] Copies an existing directory to a new directory. Overwriting a directory of the same name is allowed. - - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two directories have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - A class with details of the Copy action. - - - - - - - The transaction. - The source directory path. - The destination directory path. - if the destination directory should ignoring the read-only and hidden attributes and overwrite; otherwise, . - Indicates the format of the path parameter(s). - - - [AlphaFS] Copies a directory and its contents to a new location, can be specified. - - Option is recommended for very large file transfers. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two directories have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - A class with details of the Copy action. - - - - - - - The source directory path. - The destination directory path. - that specify how the directory is to be copied. This parameter can be . - - - [AlphaFS] Copies a directory and its contents to a new location, can be specified. - - Option is recommended for very large file transfers. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two directories have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - A class with details of the Copy action. - - - - - - - The source directory path. - The destination directory path. - that specify how the directory is to be copied. This parameter can be . - Indicates the format of the path parameter(s). - - - [AlphaFS] Copies a directory and its contents to a new location, can be specified, - and the possibility of notifying the application of its progress through a callback function. - - Option is recommended for very large file transfers. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two directories have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - A class with details of the Copy action. - - - - - - - The source directory path. - The destination directory path. - that specify how the directory is to be copied. This parameter can be . - A callback function that is called each time another portion of the directory has been copied. This parameter can be . - The argument to be passed to the callback function. This parameter can be . - - - [AlphaFS] Copies a directory and its contents to a new location, can be specified, - and the possibility of notifying the application of its progress through a callback function. - - Option is recommended for very large file transfers. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two directories have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - A class with details of the Copy action. - - - - - - - The source directory path. - The destination directory path. - that specify how the directory is to be copied. This parameter can be . - A callback function that is called each time another portion of the directory has been copied. This parameter can be . - The argument to be passed to the callback function. This parameter can be . - Indicates the format of the path parameter(s). - - - [AlphaFS] Copies a directory and its contents to a new location, can be specified. - - Option is recommended for very large file transfers. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two directories have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - A class with details of the Copy action. - - - - - - - The transaction. - The source directory path. - The destination directory path. - that specify how the directory is to be copied. This parameter can be . - - - [AlphaFS] Copies a directory and its contents to a new location, can be specified. - - Option is recommended for very large file transfers. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two directories have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - A class with details of the Copy action. - - - - - - - The transaction. - The source directory path. - The destination directory path. - that specify how the directory is to be copied. This parameter can be . - Indicates the format of the path parameter(s). - - - [AlphaFS] Copies a directory and its contents to a new location, can be specified, - and the possibility of notifying the application of its progress through a callback function. - - Option is recommended for very large file transfers. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two directories have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - A class with details of the Copy action. - - - - - - - The transaction. - The source directory path. - The destination directory path. - that specify how the directory is to be copied. This parameter can be . - A callback function that is called each time another portion of the directory has been copied. This parameter can be . - The argument to be passed to the callback function. This parameter can be . - - - [AlphaFS] Copies a directory and its contents to a new location, can be specified, - and the possibility of notifying the application of its progress through a callback function. - - Option is recommended for very large file transfers. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two directories have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - A class with details of the Copy action. - - - - - - - The transaction. - The source directory path. - The destination directory path. - that specify how the directory is to be copied. This parameter can be . - A callback function that is called each time another portion of the directory has been copied. This parameter can be . - The argument to be passed to the callback function. This parameter can be . - Indicates the format of the path parameter(s). - - - Moves a file or a directory and its contents to a new location. - - This method does not work across disk volumes. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two directories have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - A class with details of the Move action. - - - - - - - The source directory path. - The destination directory path. - - - [AlphaFS] Moves a file or a directory and its contents to a new location. - - This method does not work across disk volumes. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two directories have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - A class with details of the Move action. - - - - - - - The source directory path. - The destination directory path. - Indicates the format of the path parameter(s). - - - [AlphaFS] Moves a file or a directory and its contents to a new location. - - This method does not work across disk volumes. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two directories have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - A class with details of the Move action. - - - - - - - The transaction. - The source directory path. - The destination directory path. - - - [AlphaFS] Moves a file or a directory and its contents to a new location. - - This method does not work across disk volumes. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two directories have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - A class with details of the Move action. - - - - - - - The transaction. - The source directory path. - The destination directory path. - Indicates the format of the path parameter(s). - - - [AlphaFS] Moves a file or a directory and its contents to a new location, can be specified. - - This method does not work across disk volumes unless contains . - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two directories have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - A class with details of the Move action. - - - - - - - The source directory path. - The destination directory path. - that specify how the directory is to be moved. This parameter can be . - - - [AlphaFS] Moves a file or a directory and its contents to a new location, can be specified. - - This method does not work across disk volumes unless contains . - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two directories have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - A class with details of the Move action. - - - - - - - The source directory path. - The destination directory path. - that specify how the directory is to be moved. This parameter can be . - Indicates the format of the path parameter(s). - - - [AlphaFS] Moves a file or a directory and its contents to a new location, can be specified, - and the possibility of notifying the application of its progress through a callback function. - - This method does not work across disk volumes unless contains . - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two directories have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - A class with details of the Move action. - - - - - - - The source directory path. - The destination directory path. - that specify how the directory is to be moved. This parameter can be . - A callback function that is called each time another portion of the directory has been moved. This parameter can be . - The argument to be passed to the callback function. This parameter can be . - - - [AlphaFS] Moves a file or a directory and its contents to a new location, can be specified, - and the possibility of notifying the application of its progress through a callback function. - - This method does not work across disk volumes unless contains . - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two directories have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - A class with details of the Move action. - - - - - - - The source directory path. - The destination directory path. - that specify how the directory is to be moved. This parameter can be . - A callback function that is called each time another portion of the directory has been moved. This parameter can be . - The argument to be passed to the callback function. This parameter can be . - Indicates the format of the path parameter(s). - - - [AlphaFS] Moves a file or a directory and its contents to a new location, can be specified. - - This method does not work across disk volumes unless contains . - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two directories have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - A class with details of the Move action. - - - - - - - The transaction. - The source directory path. - The destination directory path. - that specify how the directory is to be moved. This parameter can be . - - - [AlphaFS] Moves a file or a directory and its contents to a new location, can be specified. - - This method does not work across disk volumes unless contains . - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two directories have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - A class with details of the Move action. - - - - - - - The transaction. - The source directory path. - The destination directory path. - that specify how the directory is to be moved. This parameter can be . - Indicates the format of the path parameter(s). - - - [AlphaFS] Moves a file or a directory and its contents to a new location, can be specified, - and the possibility of notifying the application of its progress through a callback function. - - This method does not work across disk volumes unless contains . - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two directories have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - A class with details of the Move action. - - - - - - - The transaction. - The source directory path. - The destination directory path. - that specify how the directory is to be moved. This parameter can be . - A callback function that is called each time another portion of the directory has been moved. This parameter can be . - The argument to be passed to the callback function. This parameter can be . - - - [AlphaFS] Moves a file or a directory and its contents to a new location, can be specified, - and the possibility of notifying the application of its progress through a callback function. - A class with the status of the Move action. - - This method does not work across disk volumes unless contains . - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two directories have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - A class with details of the Move action. - - - - - - - The transaction. - The source directory path. - The destination directory path. - that specify how the directory is to be moved. This parameter can be . - A callback function that is called each time another portion of the directory has been moved. This parameter can be . - The argument to be passed to the callback function. This parameter can be . - Indicates the format of the path parameter(s). - - - Copy/move a Non-/Transacted file or directory including its children to a new location, - or can be specified, - and the possibility of notifying the application of its progress through a callback function. - - Option is recommended for very large file transfers. - You cannot use the Move method to overwrite an existing file, unless contains . - Note that if you attempt to replace a file by moving a file of the same name into that directory, you get an IOException. - - - A class with the status of the Copy or Move action. - - - - - - - The transaction. - The source directory path. - The destination directory path. - that specify how the directory is to be copied. This parameter can be . - that specify how the directory is to be moved. This parameter can be . - A callback function that is called each time another portion of the file has been copied/moved. This parameter can be . - The argument to be passed to the callback function. This parameter can be . - - Indicates the format of the path parameter(s). - - - [AlphaFS] Counts file system objects: files, folders or both) in a given directory. - The counted number of file system objects. - - - - - - - The directory path. - flags that specify how the directory is to be enumerated. - - - [AlphaFS] Counts file system objects: files, folders or both) in a given directory. - The counted number of file system objects. - - - - - - - The directory path. - flags that specify how the directory is to be enumerated. - Indicates the format of the path parameter(s). - - - [AlphaFS] Counts file system objects: files, folders or both) in a given directory. - The counted number of file system objects. - - - - - - - The directory path. - - The search string to match against the names of directories in . - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - flags that specify how the directory is to be enumerated. - - - [AlphaFS] Counts file system objects: files, folders or both) in a given directory. - The counted number of file system objects. - - - - - - - The directory path. - - The search string to match against the names of directories in . - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - flags that specify how the directory is to be enumerated. - Indicates the format of the path parameter(s). - - - [AlphaFS] Counts file system objects: files, folders or both) in a given directory. - The counted number of file system objects. - - - - - - - The transaction. - The directory path. - flags that specify how the directory is to be enumerated. - - - [AlphaFS] Counts file system objects: files, folders or both) in a given directory. - The counted number of file system objects. - - - - - - - The transaction. - The directory path. - flags that specify how the directory is to be enumerated. - Indicates the format of the path parameter(s). - - - [AlphaFS] Counts file system objects: files, folders or both) in a given directory. - The counted number of file system objects. - - - - - - - The transaction. - The directory path. - - The search string to match against the names of directories in . - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - flags that specify how the directory is to be enumerated. - - - [AlphaFS] Counts file system objects: files, folders or both) in a given directory. - The counted number of file system objects. - - - - - - - The transaction. - The directory path. - - The search string to match against the names of directories in . - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - flags that specify how the directory is to be enumerated. - Indicates the format of the path parameter(s). - - - [AlphaFS] Deletes empty subdirectories from the specified directory. - - - - The name of the directory to remove empty subdirectories from. - deletes empty subdirectories from this directory and its subdirectories. - - - [AlphaFS] Deletes empty subdirectories from the specified directory. - - - - The name of the directory to remove empty subdirectories from. - deletes empty subdirectories from this directory and its subdirectories. - Indicates the format of the path parameter(s). - - - [AlphaFS] Deletes empty subdirectories from the specified directory. - - - - The name of the directory to remove empty subdirectories from. - deletes empty subdirectories from this directory and its subdirectories. - overrides read only of empty directories. - - - [AlphaFS] Deletes empty subdirectories from the specified directory. - - - - The name of the directory to remove empty subdirectories from. - deletes empty subdirectories from this directory and its subdirectories. - overrides read only of empty directories. - Indicates the format of the path parameter(s). - - - [AlphaFS] Deletes empty subdirectories from the specified directory. - - - - The transaction. - The name of the directory to remove empty subdirectories from. - deletes empty subdirectories from this directory and its subdirectories. - - - [AlphaFS] Deletes empty subdirectories from the specified directory. - - - - The transaction. - The name of the directory to remove empty subdirectories from. - deletes empty subdirectories from this directory and its subdirectories. - Indicates the format of the path parameter(s). - - - [AlphaFS] Deletes empty subdirectories from the specified directory. - - - - The transaction. - The name of the directory to remove empty subdirectories from. - deletes empty subdirectories from this directory and its subdirectories. - overrides read only of empty directories. - - - [AlphaFS] Deletes empty subdirectories from the specified directory. - - - - The transaction. - The name of the directory to remove empty subdirectories from. - deletes empty subdirectories from this directory and its subdirectories. - overrides read only of empty directories. - Indicates the format of the path parameter(s). - - - Delete empty subdirectories from the specified directory. - - - - - - - A FileSystemEntryInfo instance. Use either or , not both. - The transaction. - The name of the directory to remove empty subdirectories from. Use either or , not both. - deletes empty subdirectories from this directory and its subdirectories. - overrides read only of empty directories. - When indicates the method is called externally. - Indicates the format of the path parameter(s). - - - Deletes an empty directory from a specified path. - - - - - - - - The name of the empty directory to remove. This directory must be writable and empty. - - - Deletes the specified directory and, if indicated, any subdirectories in the directory. - - - - - - - - The name of the directory to remove. - to remove directories, subdirectories, and files in . otherwise. - - - [AlphaFS] Deletes an empty directory from a specified path. - - - - - - - - The name of the empty directory to remove. This directory must be writable and empty. - Indicates the format of the path parameter(s). - - - [AlphaFS] Deletes the specified directory and, if indicated, any subdirectories in the directory. - - - - - - - - The name of the directory to remove. - to remove directories, subdirectories, and files in . otherwise. - Indicates the format of the path parameter(s). - - - [AlphaFS] Deletes the specified directory and, if indicated, any subdirectories in the directory. - - - - - - - - The name of the directory to remove. - to remove directories, subdirectories, and files in . otherwise. - overrides read only of files and directories. - - - [AlphaFS] Deletes the specified directory and, if indicated, any subdirectories in the directory. - - - - - - - - The name of the directory to remove. - to remove directories, subdirectories, and files in . otherwise. - overrides read only of files and directories. - Indicates the format of the path parameter(s). - - - [AlphaFS] Deletes an empty directory from a specified path. - - - - - - - - The transaction. - The name of the empty directory to remove. This directory must be writable and empty. - - - [AlphaFS] Deletes an empty directory from a specified path. - - - - - - - - The transaction. - The name of the empty directory to remove. This directory must be writable and empty. - Indicates the format of the path parameter(s). - - - [AlphaFS] Deletes the specified directory and, if indicated, any subdirectories in the directory. - - - - - - - - The transaction. - The name of the directory to remove. - to remove directories, subdirectories, and files in . otherwise. - - - [AlphaFS] Deletes the specified directory and, if indicated, any subdirectories in the directory. - - - - - - - - The transaction. - The name of the directory to remove. - to remove directories, subdirectories, and files in . otherwise. - Indicates the format of the path parameter(s). - - - [AlphaFS] Deletes the specified directory and, if indicated, any subdirectories in the directory. - - - - - - - - The transaction. - The name of the directory to remove. - to remove directories, subdirectories, and files in . otherwise. - overrides read only of files and directories. - - - [AlphaFS] Deletes the specified directory and, if indicated, any subdirectories in the directory. - - - - - - - - The transaction. - The name of the directory to remove. - to remove directories, subdirectories, and files in . otherwise. - overrides read only of files and directories. - Indicates the format of the path parameter(s). - - - Deletes the specified directory and, if indicated, any subdirectories in the directory. - The RemoveDirectory function marks a directory for deletion on close. Therefore, the directory is not removed until the last handle to the directory is closed. - - - - - - - - A FileSystemEntryInfo instance. Use either or , not both. - The transaction. - The name of the directory to remove. Use either or , not both. - to remove all files and subdirectories recursively; otherwise only the top level empty directory. - overrides read only attribute of files and directories. - requires the directory must be empty. - does not throw an Exception when the file system object does not exist. - Indicates the format of the path parameter(s). - - - Creates all directories and subdirectories in the specified path unless they already exist. - An object that represents the directory at the specified path. This object is returned regardless of whether a directory at the specified path already exists. - - - - - - - The directory to create. - - - [AlphaFS] Creates all the directories in the specified path, applying the specified Windows security. - An object that represents the directory at the specified path. This object is returned regardless of whether a directory at the specified path already exists. - - - - - - - The directory to create. - Indicates the format of the path parameter(s). - - - [AlphaFS] Creates all the directories in the specified path, applying the specified Windows security. - An object that represents the directory at the specified path. This object is returned regardless of whether a directory at the specified path already exists. - - - - - - - The directory to create. - When compresses the directory. - - - [AlphaFS] Creates all the directories in the specified path, applying the specified Windows security. - An object that represents the directory at the specified path. This object is returned regardless of whether a directory at the specified path already exists. - - - - - - - The directory to create. - When compresses the directory. - Indicates the format of the path parameter(s). - - - Creates all the directories in the specified path, unless the already exist, applying the specified Windows security. - An object that represents the directory at the specified path. This object is returned regardless of whether a directory at the specified path already exists. - - - - - - - The directory to create. - The access control to apply to the directory. - - - [AlphaFS] Creates all the directories in the specified path, applying the specified Windows security. - An object that represents the directory at the specified path. This object is returned regardless of whether a directory at the specified path already exists. - - - - - - - The directory to create. - The access control to apply to the directory. - Indicates the format of the path parameter(s). - - - [AlphaFS] Creates all the directories in the specified path, applying the specified Windows security. - An object that represents the directory at the specified path. This object is returned regardless of whether a directory at the specified path already exists. - - - - - - - The directory to create. - The access control to apply to the directory. - When compresses the directory. - - - [AlphaFS] Creates all the directories in the specified path, applying the specified Windows security. - An object that represents the directory at the specified path. This object is returned regardless of whether a directory at the specified path already exists. - - - - - - - The directory to create. - The access control to apply to the directory. - When compresses the directory. - Indicates the format of the path parameter(s). - - - [AlphaFS] Creates a new directory, with the attributes of a specified template directory. - An object that represents the directory at the specified path. This object is returned regardless of whether a directory at the specified path already exists. - - - - - - - The directory to create. - The path of the directory to use as a template when creating the new directory. - - - [AlphaFS] Creates a new directory, with the attributes of a specified template directory. - An object that represents the directory at the specified path. This object is returned regardless of whether a directory at the specified path already exists. - - - - - - - The directory to create. - The path of the directory to use as a template when creating the new directory. - Indicates the format of the path parameter(s). - - - [AlphaFS] Creates a new directory, with the attributes of a specified template directory. - An object that represents the directory at the specified path. This object is returned regardless of whether a directory at the specified path already exists. - - - - - - - The directory to create. - The path of the directory to use as a template when creating the new directory. - When compresses the directory. - - - [AlphaFS] Creates a new directory, with the attributes of a specified template directory. - An object that represents the directory at the specified path. This object is returned regardless of whether a directory at the specified path already exists. - - - - - - - The directory to create. - The path of the directory to use as a template when creating the new directory. - When compresses the directory. - Indicates the format of the path parameter(s). - - - [AlphaFS] Creates all the directories in the specified path of a specified template directory and applies the specified Windows security. - An object that represents the directory at the specified path. This object is returned regardless of whether a directory at the specified path already exists. - - - - - - - The directory to create. - The path of the directory to use as a template when creating the new directory. - The access control to apply to the directory. - - - [AlphaFS] Creates all the directories in the specified path of a specified template directory and applies the specified Windows security. - An object that represents the directory at the specified path. This object is returned regardless of whether a directory at the specified path already exists. - - - - - - - The directory to create. - The path of the directory to use as a template when creating the new directory. - The access control to apply to the directory. - Indicates the format of the path parameter(s). - - - [AlphaFS] Creates all the directories in the specified path of a specified template directory and applies the specified Windows security. - An object that represents the directory at the specified path. This object is returned regardless of whether a directory at the specified path already exists. - - - - - - - The directory to create. - The path of the directory to use as a template when creating the new directory. - The access control to apply to the directory. - When compresses the directory. - - - [AlphaFS] Creates all the directories in the specified path of a specified template directory and applies the specified Windows security. - An object that represents the directory at the specified path. This object is returned regardless of whether a directory at the specified path already exists. - - - - - - - The directory to create. - The path of the directory to use as a template when creating the new directory. - The access control to apply to the directory. - When compresses the directory. - Indicates the format of the path parameter(s). - - - Creates all directories and subdirectories in the specified path unless they already exist. - An object that represents the directory at the specified path. This object is returned regardless of whether a directory at the specified path already exists. - - - - - - - The transaction. - The directory to create. - - - [AlphaFS] Creates all the directories in the specified path, applying the specified Windows security. - An object that represents the directory at the specified path. This object is returned regardless of whether a directory at the specified path already exists. - - - - - - - The transaction. - The directory to create. - Indicates the format of the path parameter(s). - - - [AlphaFS] Creates all the directories in the specified path, applying the specified Windows security. - An object that represents the directory at the specified path. This object is returned regardless of whether a directory at the specified path already exists. - - - - - - - The transaction. - The directory to create. - When compresses the directory. - - - [AlphaFS] Creates all the directories in the specified path, applying the specified Windows security. - An object that represents the directory at the specified path. This object is returned regardless of whether a directory at the specified path already exists. - - - - - - - The transaction. - The directory to create. - When compresses the directory. - Indicates the format of the path parameter(s). - - - Creates all the directories in the specified path, unless the already exist, applying the specified Windows security. - An object that represents the directory at the specified path. This object is returned regardless of whether a directory at the specified path already exists. - - - - - - - The transaction. - The directory to create. - The access control to apply to the directory. - - - [AlphaFS] Creates all the directories in the specified path, applying the specified Windows security. - An object that represents the directory at the specified path. This object is returned regardless of whether a directory at the specified path already exists. - - - - - - - The transaction. - The directory to create. - The access control to apply to the directory. - Indicates the format of the path parameter(s). - - - [AlphaFS] Creates all the directories in the specified path, applying the specified Windows security. - An object that represents the directory at the specified path. This object is returned regardless of whether a directory at the specified path already exists. - - - - - - - The transaction. - The directory to create. - The access control to apply to the directory. - When compresses the directory. - - - [AlphaFS] Creates all the directories in the specified path, applying the specified Windows security. - An object that represents the directory at the specified path. This object is returned regardless of whether a directory at the specified path already exists. - - - - - - - The transaction. - The directory to create. - The access control to apply to the directory. - When compresses the directory. - Indicates the format of the path parameter(s). - - - [AlphaFS] Creates a new directory, with the attributes of a specified template directory. - An object that represents the directory at the specified path. This object is returned regardless of whether a directory at the specified path already exists. - - - - - - - The transaction. - The directory to create. - The path of the directory to use as a template when creating the new directory. - - - [AlphaFS] Creates a new directory, with the attributes of a specified template directory. - An object that represents the directory at the specified path. This object is returned regardless of whether a directory at the specified path already exists. - - - - - - - The transaction. - The directory to create. - The path of the directory to use as a template when creating the new directory. - Indicates the format of the path parameter(s). - - - [AlphaFS] Creates a new directory, with the attributes of a specified template directory. - An object that represents the directory at the specified path. This object is returned regardless of whether a directory at the specified path already exists. - - - - - - - The transaction. - The directory to create. - The path of the directory to use as a template when creating the new directory. - When compresses the directory. - - - [AlphaFS] Creates a new directory, with the attributes of a specified template directory. - An object that represents the directory at the specified path. This object is returned regardless of whether a directory at the specified path already exists. - - - - - - - The transaction. - The directory to create. - The path of the directory to use as a template when creating the new directory. - When compresses the directory. - Indicates the format of the path parameter(s). - - - [AlphaFS] Creates all the directories in the specified path of a specified template directory and applies the specified Windows security. - An object that represents the directory at the specified path. This object is returned regardless of whether a directory at the specified path already exists. - - - - - - - The transaction. - The directory to create. - The path of the directory to use as a template when creating the new directory. - The access control to apply to the directory. - - - [AlphaFS] Creates all the directories in the specified path of a specified template directory and applies the specified Windows security. - An object that represents the directory at the specified path. This object is returned regardless of whether a directory at the specified path already exists. - - - - - - - The transaction. - The directory to create. - The path of the directory to use as a template when creating the new directory. - The access control to apply to the directory. - Indicates the format of the path parameter(s). - - - [AlphaFS] Creates all the directories in the specified path of a specified template directory and applies the specified Windows security. - An object that represents the directory at the specified path. This object is returned regardless of whether a directory at the specified path already exists. - - - - - - - The transaction. - The directory to create. - The path of the directory to use as a template when creating the new directory. - The access control to apply to the directory. - When compresses the directory. - - - [AlphaFS] Creates all the directories in the specified path of a specified template directory and applies the specified Windows security. - An object that represents the directory at the specified path. This object is returned regardless of whether a directory at the specified path already exists. - - - - - - - The transaction. - The directory to create. - The path of the directory to use as a template when creating the new directory. - The access control to apply to the directory. - When compresses the directory. - Indicates the format of the path parameter(s). - - - Creates a new directory with the attributes of a specified template directory (if one is specified). - If the underlying file system supports security on files and directories, the function applies the specified security descriptor to the new directory. - The new directory retains the other attributes of the specified template directory. - - - Returns an object that represents the directory at the specified path. - This object is returned regardless of whether a directory at the specified path already exists. - - - - - - - - The transaction. - The directory to create. - The path of the directory to use as a template when creating the new directory. May be to indicate that no template should be used. - The access control to apply to the directory, may be null. - When compresses the directory. - Indicates the format of the path parameter(s). - - - Returns an enumerable collection of directory names in a specified . - An enumerable collection of the full names (including paths) for the directories in the directory specified by . - - - - - - - The directory to search. - - - Returns an enumerable collection of directory names that match a in a specified . - An enumerable collection of the full names (including paths) for the directories in the directory specified by and that match the specified . - - - - - - - The directory to search. - - The search string to match against the names of directories in . - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - - - Returns an enumerable collection of directory names that match a in a specified , and optionally searches subdirectories. - An enumerable collection of the full names (including paths) for the directories in the directory specified by and that match the specified and . - - - - - - - The directory to search. - - The search string to match against the names of directories in . - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - - One of the enumeration values that specifies whether the - should include only the current directory or should include all subdirectories. - - - - [AlphaFS] Returns an enumerable collection of directory names in a specified . - An enumerable collection of the full names (including paths) for the directories in the directory specified by . - - - - - - - The directory to search. - Indicates the format of the path parameter(s). - - - [AlphaFS] Returns an enumerable collection of directory names that match a in a specified . - An enumerable collection of the full names (including paths) for the directories in the directory specified by and that match the specified . - - - - - - - The directory to search. - - The search string to match against the names of directories in . - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - Indicates the format of the path parameter(s). - - - [AlphaFS] Returns an enumerable collection of directory names that match a in a specified , and optionally searches subdirectories. - An enumerable collection of the full names (including paths) for the directories in the directory specified by and that match the specified and . - - - - - - - The directory to search. - - The search string to match against the names of directories in . - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - - One of the enumeration values that specifies whether the - should include only the current directory or should include all subdirectories. - - Indicates the format of the path parameter(s). - - - [AlphaFS] Returns an enumerable collection of directory names in a specified . - An enumerable collection of the full names (including paths) for the directories in the directory specified by . - - - - - - - The directory to search. - flags that specify how the directory is to be enumerated. - - - [AlphaFS] Returns an enumerable collection of directory names in a specified . - An enumerable collection of the full names (including paths) for the directories in the directory specified by . - - - - - - - The directory to search. - flags that specify how the directory is to be enumerated. - Indicates the format of the path parameter(s). - - - [AlphaFS] Returns an enumerable collection of directory names in a specified . - An enumerable collection of the full names (including paths) for the directories in the directory specified by . - - - - - - - The directory to search. - - The search string to match against the names of directories in . - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - flags that specify how the directory is to be enumerated. - - - [AlphaFS] Returns an enumerable collection of directory names in a specified . - An enumerable collection of the full names (including paths) for the directories in the directory specified by . - - - - - - - The directory to search. - - The search string to match against the names of directories in . - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - flags that specify how the directory is to be enumerated. - Indicates the format of the path parameter(s). - - - [AlphaFS] Returns an enumerable collection of directory instances in a specified . - An enumerable collection of the full names (including paths) for the directories in the directory specified by . - - - - - - - The transaction. - The directory to search. - - - [AlphaFS] Returns an enumerable collection of directory instances that match a in a specified . - An enumerable collection of the full names (including paths) for the directories in the directory specified by and that match the specified . - - - - - - - The transaction. - The directory to search. - - The search string to match against the names of directories in . - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - - - [AlphaFS] Returns an enumerable collection of directory names that match a in a specified , and optionally searches subdirectories. - An enumerable collection of the full names (including paths) for the directories in the directory specified by and that match the specified and . - - - - - - - The transaction. - The directory to search. - - The search string to match against the names of directories in . - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - - One of the enumeration values that specifies whether the - should include only the current directory or should include all subdirectories. - - - - [AlphaFS] Returns an enumerable collection of directory instances in a specified . - An enumerable collection of the full names (including paths) for the directories in the directory specified by . - - - - - - - The transaction. - The directory to search. - Indicates the format of the path parameter(s). - - - [AlphaFS] Returns an enumerable collection of directory instances that match a in a specified . - An enumerable collection of the full names (including paths) for the directories in the directory specified by and that match the specified . - - - - - - - The transaction. - The directory to search. - - The search string to match against the names of directories in . - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - Indicates the format of the path parameter(s). - - - [AlphaFS] Returns an enumerable collection of directory names that match a in a specified , and optionally searches subdirectories. - An enumerable collection of the full names (including paths) for the directories in the directory specified by and that match the specified and . - - - - - - - The transaction. - The directory to search. - - The search string to match against the names of directories in . - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - - One of the enumeration values that specifies whether the - should include only the current directory or should include all subdirectories. - - Indicates the format of the path parameter(s). - - - [AlphaFS] Returns an enumerable collection of directory instances in a specified . - An enumerable collection of the full names (including paths) for the directories in the directory specified by . - - - - - - - The transaction. - The directory to search. - flags that specify how the directory is to be enumerated. - - - [AlphaFS] Returns an enumerable collection of directory instances in a specified . - An enumerable collection of the full names (including paths) for the directories in the directory specified by . - - - - - - - The transaction. - The directory to search. - flags that specify how the directory is to be enumerated. - Indicates the format of the path parameter(s). - - - [AlphaFS] Returns an enumerable collection of directory instances that match a in a specified . - An enumerable collection of the full names (including paths) for the directories in the directory specified by and that match the specified . - - - - - - - The transaction. - The directory to search. - - The search string to match against the names of directories in . - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - flags that specify how the directory is to be enumerated. - - - [AlphaFS] Returns an enumerable collection of directory instances that match a in a specified . - An enumerable collection of the full names (including paths) for the directories in the directory specified by and that match the specified . - - - - - - - The transaction. - The directory to search. - - The search string to match against the names of directories in . - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - flags that specify how the directory is to be enumerated. - Indicates the format of the path parameter(s). - - - Returns an enumerable collection of file names in a specified . - An enumerable collection of the full names (including paths) for the files in the directory specified by . - - - - - - - The directory to search. - - - Returns an enumerable collection of file names in a specified . - An enumerable collection of the full names (including paths) for the files in the directory specified by and that match the . - - - - - - - The directory to search. - - The search string to match against the names of directories in . - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - - - Returns an enumerable collection of file names that match a in a specified , and optionally searches subdirectories. - An enumerable collection of the full names (including paths) for the files in the directory specified by and that match the specified and . - - - - - - - The directory to search. - - The search string to match against the names of directories in . - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - - One of the enumeration values that specifies whether the - should include only the current directory or should include all subdirectories. - - - - [AlphaFS] Returns an enumerable collection of file names in a specified . - An enumerable collection of the full names (including paths) for the files in the directory specified by . - - - - - - - The directory to search. - Indicates the format of the path parameter(s). - - - [AlphaFS] Returns an enumerable collection of file names in a specified . - An enumerable collection of the full names (including paths) for the files in the directory specified by and that match the . - - - - - - - The directory to search. - - The search string to match against the names of directories in . - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - Indicates the format of the path parameter(s). - - - [AlphaFS] Returns an enumerable collection of file names that match a in a specified , and optionally searches subdirectories. - An enumerable collection of the full names (including paths) for the files in the directory specified by and that match the specified and . - - - - - - - The directory to search. - - The search string to match against the names of directories in . - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - - One of the enumeration values that specifies whether the - should include only the current directory or should include all subdirectories. - - Indicates the format of the path parameter(s). - - - [AlphaFS] Returns an enumerable collection of file names in a specified . - An enumerable collection of the full names (including paths) for the files in the directory specified by . - - - - - - - The directory to search. - flags that specify how the directory is to be enumerated. - - - [AlphaFS] Returns an enumerable collection of file names in a specified . - An enumerable collection of the full names (including paths) for the files in the directory specified by . - - - - - - - The directory to search. - flags that specify how the directory is to be enumerated. - Indicates the format of the path parameter(s). - - - [AlphaFS] Returns an enumerable collection of file names in a specified . - An enumerable collection of the full names (including paths) for the files in the directory specified by and that match the . - - - - - - - The directory to search. - - The search string to match against the names of directories in . - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - flags that specify how the directory is to be enumerated. - - - [AlphaFS] Returns an enumerable collection of file names in a specified . - An enumerable collection of the full names (including paths) for the files in the directory specified by and that match the . - - - - - - - The directory to search. - - The search string to match against the names of directories in . - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - flags that specify how the directory is to be enumerated. - Indicates the format of the path parameter(s). - - - [AlphaFS] Returns an enumerable collection of file names in a specified . - An enumerable collection of the full names (including paths) for the files in the directory specified by . - - - - - - - The transaction. - The directory to search. - - - [AlphaFS] Returns an enumerable collection of file instances that match a in a specified . - An enumerable collection of the full names (including paths) for the files in the directory specified by and that match the . - - - - - - - The transaction. - The directory to search. - - The search string to match against the names of directories in . - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - - - [AlphaFS] Returns an enumerable collection of file instances instances that match a in a specified , and optionally searches subdirectories. - An enumerable collection of the full names (including paths) for the files in the directory specified by and that match the specified and . - - - - - - - The transaction. - The directory to search. - - The search string to match against the names of directories in . - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - - One of the enumeration values that specifies whether the - should include only the current directory or should include all subdirectories. - - - - [AlphaFS] Returns an enumerable collection of file names in a specified . - An enumerable collection of the full names (including paths) for the files in the directory specified by . - - - - - - - The transaction. - The directory to search. - Indicates the format of the path parameter(s). - - - [AlphaFS] Returns an enumerable collection of file instances that match a in a specified . - An enumerable collection of the full names (including paths) for the files in the directory specified by and that match the . - - - - - - - The transaction. - The directory to search. - - The search string to match against the names of directories in . - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - Indicates the format of the path parameter(s). - - - [AlphaFS] Returns an enumerable collection of file instances instances that match a in a specified , and optionally searches subdirectories. - An enumerable collection of the full names (including paths) for the files in the directory specified by and that match the specified and . - - - - - - - The transaction. - The directory to search. - - The search string to match against the names of directories in . - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - - One of the enumeration values that specifies whether the - should include only the current directory or should include all subdirectories. - - Indicates the format of the path parameter(s). - - - [AlphaFS] Returns an enumerable collection of file names in a specified . - An enumerable collection of the full names (including paths) for the files in the directory specified by . - - - - - - - The transaction. - The directory to search. - flags that specify how the directory is to be enumerated. - - - [AlphaFS] Returns an enumerable collection of file names in a specified . - An enumerable collection of the full names (including paths) for the files in the directory specified by . - - - - - - - The transaction. - The directory to search. - flags that specify how the directory is to be enumerated. - Indicates the format of the path parameter(s). - - - [AlphaFS] Returns an enumerable collection of file instances that match a in a specified . - An enumerable collection of the full names (including paths) for the files in the directory specified by and that match the . - - - - - - - The transaction. - The directory to search. - - The search string to match against the names of directories in . - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - flags that specify how the directory is to be enumerated. - - - [AlphaFS] Returns an enumerable collection of file instances that match a in a specified . - An enumerable collection of the full names (including paths) for the files in the directory specified by and that match the . - - - - - - - The transaction. - The directory to search. - - The search string to match against the names of directories in . - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - flags that specify how the directory is to be enumerated. - Indicates the format of the path parameter(s). - - - [AlphaFS] Returns an enumerable collection of file system entries in a specified path. - The matching file system entries. The type of the items is determined by the type . - - - - - - - The type to return. This may be one of the following types: - - - - This method will return instances of instances. - - - - This method will return instances of and instances. - - - - This method will return the full path of each item. - - - - The directory to search. - - - [AlphaFS] Returns an enumerable collection of file system entries in a specified path. - The matching file system entries. The type of the items is determined by the type . - - - - - - - The type to return. This may be one of the following types: - - - - This method will return instances of instances. - - - - This method will return instances of and instances. - - - - This method will return the full path of each item. - - - - The directory to search. - Indicates the format of the path parameter(s). - - - [AlphaFS] Returns an enumerable collection of file system entries in a specified path. - The matching file system entries. The type of the items is determined by the type . - - - - - - - The type to return. This may be one of the following types: - - - - This method will return instances of instances. - - - - This method will return instances of and instances. - - - - This method will return the full path of each item. - - - - The directory to search. - flags that specify how the directory is to be enumerated. - - - [AlphaFS] Returns an enumerable collection of file system entries in a specified path. - The matching file system entries. The type of the items is determined by the type . - - - - - - - The type to return. This may be one of the following types: - - - - This method will return instances of instances. - - - - This method will return instances of and instances. - - - - This method will return the full path of each item. - - - - The directory to search. - flags that specify how the directory is to be enumerated. - Indicates the format of the path parameter(s). - - - [AlphaFS] Returns an enumerable collection of file system entries that match a in a specified path. - The matching file system entries. The type of the items is determined by the type . - - - - - - - The type to return. This may be one of the following types: - - - - This method will return instances of instances. - - - - This method will return instances of and instances. - - - - This method will return the full path of each item. - - - - The directory to search. - - The search string to match against the names of directories in . - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - - - [AlphaFS] Returns an enumerable collection of file system entries that match a in a specified path. - The matching file system entries. The type of the items is determined by the type . - - - - - - - The type to return. This may be one of the following types: - - - - This method will return instances of instances. - - - - This method will return instances of and instances. - - - - This method will return the full path of each item. - - - - The directory to search. - - The search string to match against the names of directories in . - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - Indicates the format of the path parameter(s). - - - [AlphaFS] Returns an enumerable collection of file system entries that match a in a specified path using . - The matching file system entries. The type of the items is determined by the type . - - - - - - - The type to return. This may be one of the following types: - - - - This method will return instances of instances. - - - - This method will return instances of and instances. - - - - This method will return the full path of each item. - - - - The directory to search. - - The search string to match against the names of directories in . - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - flags that specify how the directory is to be enumerated. - - - [AlphaFS] Returns an enumerable collection of file system entries that match a in a specified path using . - The matching file system entries. The type of the items is determined by the type . - - - - - - - The type to return. This may be one of the following types: - - - - This method will return instances of instances. - - - - This method will return instances of and instances. - - - - This method will return the full path of each item. - - - - The directory to search. - - The search string to match against the names of directories in . - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - flags that specify how the directory is to be enumerated. - Indicates the format of the path parameter(s). - - - [AlphaFS] Returns an enumerable collection of file system entries in a specified path. - The matching file system entries. The type of the items is determined by the type . - - - - - - - The type to return. This may be one of the following types: - - - - This method will return instances of instances. - - - - This method will return instances of and instances. - - - - This method will return the full path of each item. - - - - The transaction. - The directory to search. - - - [AlphaFS] Returns an enumerable collection of file system entries in a specified path. - The matching file system entries. The type of the items is determined by the type . - - - - - - - The type to return. This may be one of the following types: - - - - This method will return instances of instances. - - - - This method will return instances of and instances. - - - - This method will return the full path of each item. - - - - The transaction. - The directory to search. - Indicates the format of the path parameter(s). - - - [AlphaFS] Returns an enumerable collection of file system entries in a specified path. - The matching file system entries. The type of the items is determined by the type . - - - - - - - The type to return. This may be one of the following types: - - - - This method will return instances of instances. - - - - This method will return instances of and instances. - - - - This method will return the full path of each item. - - - - The transaction. - The directory to search. - flags that specify how the directory is to be enumerated. - - - [AlphaFS] Returns an enumerable collection of file system entries in a specified path. - The matching file system entries. The type of the items is determined by the type . - - - - - - - The type to return. This may be one of the following types: - - - - This method will return instances of instances. - - - - This method will return instances of and instances. - - - - This method will return the full path of each item. - - - - The transaction. - The directory to search. - flags that specify how the directory is to be enumerated. - Indicates the format of the path parameter(s). - - - [AlphaFS] Returns an enumerable collection of file system entries that match a in a specified path. - The matching file system entries. The type of the items is determined by the type . - - - - - - - The type to return. This may be one of the following types: - - - - This method will return instances of instances. - - - - This method will return instances of and instances. - - - - This method will return the full path of each item. - - - - The transaction. - The directory to search. - - The search string to match against the names of directories in . - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - - - [AlphaFS] Returns an enumerable collection of file system entries that match a in a specified path. - The matching file system entries. The type of the items is determined by the type . - - - - - - - The type to return. This may be one of the following types: - - - - This method will return instances of instances. - - - - This method will return instances of and instances. - - - - This method will return the full path of each item. - - - - The transaction. - The directory to search. - - The search string to match against the names of directories in . - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - Indicates the format of the path parameter(s). - - - [AlphaFS] Returns an enumerable collection of file system entries that match a in a specified path using . - The matching file system entries. The type of the items is determined by the type . - - - - - - - The type to return. This may be one of the following types: - - - - This method will return instances of instances. - - - - This method will return instances of and instances. - - - - This method will return the full path of each item. - - - - The transaction. - The directory to search. - - The search string to match against the names of directories in . - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - flags that specify how the directory is to be enumerated. - - - [AlphaFS] Returns an enumerable collection of file system entries that match a in a specified path using . - The matching file system entries. The type of the items is determined by the type . - - - - - - - The type to return. This may be one of the following types: - - - - This method will return instances of instances. - - - - This method will return instances of and instances. - - - - This method will return the full path of each item. - - - - The transaction. - The directory to search. - - The search string to match against the names of directories in . - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - flags that specify how the directory is to be enumerated. - Indicates the format of the path parameter(s). - - - Returns an enumerable collection of file system entries in a specified path using . - The matching file system entries. The type of the items is determined by the type . - - - - - - - The type to return. This may be one of the following types: - - - - This method will return instances of instances. - - - - This method will return instances of and instances. - - - - This method will return the full path of each item. - - - - The transaction. - The directory to search. - - The search string to match against the names of directories in . - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - flags that specify how the directory is to be enumerated. - Indicates the format of the path parameter(s). - - - Returns an enumerable collection of file names and directory names in a specified . - An enumerable collection of file system entries in the directory specified by . - - - - - - - The directory to search. - - - Returns an enumerable collection of file names and directory names that match a in a specified . - An enumerable collection of file system entries in the directory specified by and that match the specified . - - - - - - - The directory to search. - - The search string to match against the names of directories in . - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - - - Returns an enumerable collection of file names and directory names that match a in a specified , and optionally searches subdirectories. - An enumerable collection of file system entries in the directory specified by and that match the specified and . - - - - - - - The directory to search. - - The search string to match against the names of directories in . - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - - One of the enumeration values that specifies whether the - should include only the current directory or should include all subdirectories. - - - - [AlphaFS] Returns an enumerable collection of file names and directory names in a specified . - An enumerable collection of file system entries in the directory specified by . - - - - - - - The directory to search. - Indicates the format of the path parameter(s). - - - [AlphaFS] Returns an enumerable collection of file names and directory names that match a in a specified . - An enumerable collection of file system entries in the directory specified by and that match the specified . - - - - - - - The directory to search. - - The search string to match against the names of directories in . - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - Indicates the format of the path parameter(s). - - - [AlphaFS] Returns an enumerable collection of file names and directory names that match a in a specified , and optionally searches subdirectories. - An enumerable collection of file system entries in the directory specified by and that match the specified and . - - - - - - - The directory to search. - - The search string to match against the names of directories in . - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - - One of the enumeration values that specifies whether the - should include only the current directory or should include all subdirectories. - - Indicates the format of the path parameter(s). - - - [AlphaFS] Returns an enumerable collection of file names and directory names in a specified . - An enumerable collection of file system entries in the directory specified by . - - - - - - - The directory to search. - flags that specify how the directory is to be enumerated. - - - [AlphaFS] Returns an enumerable collection of file names and directory names in a specified . - An enumerable collection of file system entries in the directory specified by . - - - - - - - The directory to search. - flags that specify how the directory is to be enumerated. - Indicates the format of the path parameter(s). - - - [AlphaFS] Returns an enumerable collection of file names and directory names that match a in a specified . - An enumerable collection of file system entries in the directory specified by and that match the specified . - - - - - - - The directory to search. - - The search string to match against the names of directories in . - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - flags that specify how the directory is to be enumerated. - - - [AlphaFS] Returns an enumerable collection of file names and directory names that match a in a specified . - An enumerable collection of file system entries in the directory specified by and that match the specified . - - - - - - - The directory to search. - - The search string to match against the names of directories in . - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - Indicates the format of the path parameter(s). - flags that specify how the directory is to be enumerated. - - - [AlphaFS] Returns an enumerable collection of file names and directory names in a specified . - An enumerable collection of file system entries in the directory specified by . - - - - - - - The transaction. - The directory to search. - - - [AlphaFS] Returns an enumerable collection of file names and directory names that match a in a specified . - An enumerable collection of file system entries in the directory specified by and that match the specified . - - - - - - - The transaction. - The directory to search. - - The search string to match against the names of directories in . - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - - - [AlphaFS] Returns an enumerable collection of file names and directory names that match a in a specified , and optionally searches subdirectories. - An enumerable collection of file system entries in the directory specified by and that match the specified and . - - - - - - - The transaction. - The directory to search. - - The search string to match against the names of directories in . - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - - One of the enumeration values that specifies whether the - should include only the current directory or should include all subdirectories. - - - - [AlphaFS] Returns an enumerable collection of file names and directory names in a specified . - An enumerable collection of file system entries in the directory specified by . - - - - - - - The transaction. - The directory to search. - Indicates the format of the path parameter(s). - - - [AlphaFS] Returns an enumerable collection of file names and directory names that match a in a specified . - An enumerable collection of file system entries in the directory specified by and that match the specified . - - - - - - - The transaction. - The directory to search. - - The search string to match against the names of directories in . - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - Indicates the format of the path parameter(s). - - - [AlphaFS] Returns an enumerable collection of file names and directory names that match a in a specified , and optionally searches subdirectories. - An enumerable collection of file system entries in the directory specified by and that match the specified and . - - - - - - - The transaction. - The directory to search. - - The search string to match against the names of directories in . - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - - One of the enumeration values that specifies whether the - should include only the current directory or should include all subdirectories. - - Indicates the format of the path parameter(s). - - - [AlphaFS] Returns an enumerable collection of file names and directory names in a specified . - An enumerable collection of file system entries in the directory specified by . - - - - - - - The transaction. - The directory to search. - flags that specify how the directory is to be enumerated. - - - [AlphaFS] Returns an enumerable collection of file names and directory names in a specified . - An enumerable collection of file system entries in the directory specified by . - - - - - - - The transaction. - The directory to search. - flags that specify how the directory is to be enumerated. - Indicates the format of the path parameter(s). - - - [AlphaFS] Returns an enumerable collection of file names and directory names that match a in a specified . - An enumerable collection of file system entries in the directory specified by and that match the specified . - - - - - - - The transaction. - The directory to search. - - The search string to match against the names of directories in . - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - flags that specify how the directory is to be enumerated. - - - [AlphaFS] Returns an enumerable collection of file names and directory names that match a in a specified . - An enumerable collection of file system entries in the directory specified by and that match the specified . - - - - - - - The transaction. - The directory to search. - - The search string to match against the names of directories in . - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - flags that specify how the directory is to be enumerated. - Indicates the format of the path parameter(s). - - - Determines whether the given path refers to an existing directory on disk. - - Returns if refers to an existing directory. - Returns if the directory does not exist or an error occurs when trying to determine if the specified file exists. - - - The Exists method returns if any error occurs while trying to determine if the specified file exists. - This can occur in situations that raise exceptions such as passing a file name with invalid characters or too many characters, - a failing or missing disk, or if the caller does not have permission to read the file. - - The path to test. - - - [AlphaFS] Determines whether the given path refers to an existing directory on disk. - - Returns if refers to an existing directory. - Returns if the directory does not exist or an error occurs when trying to determine if the specified file exists. - - - The Exists method returns if any error occurs while trying to determine if the specified file exists. - This can occur in situations that raise exceptions such as passing a file name with invalid characters or too many characters, - a failing or missing disk, or if the caller does not have permission to read the file. - - The path to test. - Indicates the format of the path parameter(s). - - - [AlphaFS] Determines whether the given path refers to an existing directory on disk. - - Returns if refers to an existing directory. - Returns if the directory does not exist or an error occurs when trying to determine if the specified file exists. - - - The Exists method returns if any error occurs while trying to determine if the specified file exists. - This can occur in situations that raise exceptions such as passing a file name with invalid characters or too many characters, - a failing or missing disk, or if the caller does not have permission to read the file. - - The transaction. - The path to test. - - - [AlphaFS] Determines whether the given path refers to an existing directory on disk. - - Returns if refers to an existing directory. - Returns if the directory does not exist or an error occurs when trying to determine if the specified file exists. - - - The Exists method returns if any error occurs while trying to determine if the specified file exists. - This can occur in situations that raise exceptions such as passing a file name with invalid characters or too many characters, - a failing or missing disk, or if the caller does not have permission to read the file. - - The transaction. - The path to test. - Indicates the format of the path parameter(s). - - - Returns the names of subdirectories (including their paths) in the specified directory. - An array of the full names (including paths) of subdirectories in the specified path, or an empty array if no directories are found. - - The names returned by this method are prefixed with the directory information provided in path. - The EnumerateDirectories and GetDirectories methods differ as follows: When you use EnumerateDirectories, you can start enumerating the collection of names - before the whole collection is returned; when you use GetDirectories, you must wait for the whole array of names to be returned before you can access the array. - Therefore, when you are working with many files and directories, EnumerateDirectories can be more efficient. - - - - - - - - - The directory to search. - - - Returns the names of subdirectories (including their paths) that match the specified search pattern in the specified directory. - An array of the full names (including paths) of the subdirectories that match the search pattern in the specified directory, or an empty array if no directories are found. - - The names returned by this method are prefixed with the directory information provided in path. - The EnumerateDirectories and GetDirectories methods differ as follows: When you use EnumerateDirectories, you can start enumerating the collection of names - before the whole collection is returned; when you use GetDirectories, you must wait for the whole array of names to be returned before you can access the array. - Therefore, when you are working with many files and directories, EnumerateDirectories can be more efficient. - - - - - - - - - The directory to search. - - The search string to match against the names of directories in . - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - - - Returns the names of the subdirectories (including their paths) that match the specified search pattern in the specified directory, and optionally searches subdirectories. - An array of the full names (including paths) of the subdirectories that match the specified criteria, or an empty array if no directories are found. - - The names returned by this method are prefixed with the directory information provided in path. - The EnumerateDirectories and GetDirectories methods differ as follows: When you use EnumerateDirectories, you can start enumerating the collection of names - before the whole collection is returned; when you use GetDirectories, you must wait for the whole array of names to be returned before you can access the array. - Therefore, when you are working with many files and directories, EnumerateDirectories can be more efficient. - - - - - - - - - The directory to search. - - The search string to match against the names of directories in . - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - - One of the enumeration values that specifies whether the - should include only the current directory or should include all subdirectories. - - - - Returns the names of subdirectories (including their paths) in the specified directory. - An array of the full names (including paths) of subdirectories in the specified path, or an empty array if no directories are found. - - The names returned by this method are prefixed with the directory information provided in path. - The EnumerateDirectories and GetDirectories methods differ as follows: When you use EnumerateDirectories, you can start enumerating the collection of names - before the whole collection is returned; when you use GetDirectories, you must wait for the whole array of names to be returned before you can access the array. - Therefore, when you are working with many files and directories, EnumerateDirectories can be more efficient. - - - - - - - - - The transaction. - The directory to search. - - - Returns the names of subdirectories (including their paths) that match the specified search pattern in the specified directory. - An array of the full names (including paths) of the subdirectories that match the search pattern in the specified directory, or an empty array if no directories are found. - - The names returned by this method are prefixed with the directory information provided in path. - The EnumerateDirectories and GetDirectories methods differ as follows: When you use EnumerateDirectories, you can start enumerating the collection of names - before the whole collection is returned; when you use GetDirectories, you must wait for the whole array of names to be returned before you can access the array. - Therefore, when you are working with many files and directories, EnumerateDirectories can be more efficient. - - - - - - - - - The transaction. - The directory to search. - - The search string to match against the names of directories in . - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - - - Returns the names of the subdirectories (including their paths) that match the specified search pattern in the specified directory, and optionally searches subdirectories. - An array of the full names (including paths) of the subdirectories that match the specified criteria, or an empty array if no directories are found. - - The names returned by this method are prefixed with the directory information provided in path. - The EnumerateDirectories and GetDirectories methods differ as follows: When you use EnumerateDirectories, you can start enumerating the collection of names - before the whole collection is returned; when you use GetDirectories, you must wait for the whole array of names to be returned before you can access the array. - Therefore, when you are working with many files and directories, EnumerateDirectories can be more efficient. - - - - - - - - - The transaction. - The directory to search. - - The search string to match against the names of directories in . - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - - One of the enumeration values that specifies whether the - should include only the current directory or should include all subdirectories. - - - - Returns the names of files (including their paths) in the specified directory. - An array of the full names (including paths) for the files in the specified directory, or an empty array if no files are found. - - The returned file names are appended to the supplied parameter. - The order of the returned file names is not guaranteed; use the Sort() method if a specific sort order is required. - The EnumerateFiles and GetFiles methods differ as follows: When you use EnumerateFiles, you can start enumerating the collection of names - before the whole collection is returned; when you use GetFiles, you must wait for the whole array of names to be returned before you can access the array. - Therefore, when you are working with many files and directories, EnumerateFiles can be more efficient. - - - - - - - - - The directory to search. - - - Returns the names of files (including their paths) that match the specified search pattern in the specified directory. - An array of the full names (including paths) for the files in the specified directory that match the specified search pattern, or an empty array if no files are found. - - The returned file names are appended to the supplied parameter. - The order of the returned file names is not guaranteed; use the Sort() method if a specific sort order is required. - The EnumerateFiles and GetFiles methods differ as follows: When you use EnumerateFiles, you can start enumerating the collection of names - before the whole collection is returned; when you use GetFiles, you must wait for the whole array of names to be returned before you can access the array. - Therefore, when you are working with many files and directories, EnumerateFiles can be more efficient. - - - - - - - - - The directory to search. - - The search string to match against the names of directories in . - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - - - Returns the names of files (including their paths) that match the specified search pattern in the current directory, and optionally searches subdirectories. - An array of the full names (including paths) for the files in the specified directory that match the specified search pattern and option, or an empty array if no files are found. - - The returned file names are appended to the supplied parameter. - The order of the returned file names is not guaranteed; use the Sort() method if a specific sort order is required. - The EnumerateFiles and GetFiles methods differ as follows: When you use EnumerateFiles, you can start enumerating the collection of names - before the whole collection is returned; when you use GetFiles, you must wait for the whole array of names to be returned before you can access the array. - Therefore, when you are working with many files and directories, EnumerateFiles can be more efficient. - - - - - - - - - The directory to search. - - The search string to match against the names of directories in . - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - - One of the enumeration values that specifies whether the - should include only the current directory or should include all subdirectories. - - - - Returns the names of files (including their paths) in the specified directory. - An array of the full names (including paths) for the files in the specified directory, or an empty array if no files are found. - - The returned file names are appended to the supplied parameter. - The order of the returned file names is not guaranteed; use the Sort() method if a specific sort order is required. - The EnumerateFiles and GetFiles methods differ as follows: When you use EnumerateFiles, you can start enumerating the collection of names - before the whole collection is returned; when you use GetFiles, you must wait for the whole array of names to be returned before you can access the array. - Therefore, when you are working with many files and directories, EnumerateFiles can be more efficient. - - - - - - - - - The transaction. - The directory to search. - - - Returns the names of files (including their paths) that match the specified search pattern in the specified directory. - An array of the full names (including paths) for the files in the specified directory that match the specified search pattern, or an empty array if no files are found. - - The returned file names are appended to the supplied parameter. - The order of the returned file names is not guaranteed; use the Sort() method if a specific sort order is required. - The EnumerateFiles and GetFiles methods differ as follows: When you use EnumerateFiles, you can start enumerating the collection of names - before the whole collection is returned; when you use GetFiles, you must wait for the whole array of names to be returned before you can access the array. - Therefore, when you are working with many files and directories, EnumerateFiles can be more efficient. - - - - - - - - - The transaction. - The directory to search. - - The search string to match against the names of directories in . - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - - - Returns the names of files (including their paths) that match the specified search pattern in the current directory, and optionally searches subdirectories. - An array of the full names (including paths) for the files in the specified directory that match the specified search pattern and option, or an empty array if no files are found. - - The returned file names are appended to the supplied parameter. - The order of the returned file names is not guaranteed; use the Sort() method if a specific sort order is required. - The EnumerateFiles and GetFiles methods differ as follows: When you use EnumerateFiles, you can start enumerating the collection of names - before the whole collection is returned; when you use GetFiles, you must wait for the whole array of names to be returned before you can access the array. - Therefore, when you are working with many files and directories, EnumerateFiles can be more efficient. - - - - - - - - - The transaction. - The directory to search. - - The search string to match against the names of directories in . - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - - One of the enumeration values that specifies whether the - should include only the current directory or should include all subdirectories. - - - - Gets the creation date and time of the specified directory. - A structure set to the creation date and time for the specified directory. This value is expressed in local time. - The directory for which to obtain creation date and time information. - - - Gets the creation date and time, in Coordinated Universal Time (UTC) format, of the specified directory. - A structure set to the creation date and time for the specified directory. This value is expressed in UTC time. - The directory for which to obtain creation date and time information, in Coordinated Universal Time (UTC) format. - - - [AlphaFS] Gets the creation date and time of the specified directory. - A structure set to the creation date and time for the specified directory. This value is expressed in local time. - The directory for which to obtain creation date and time information. - Indicates the format of the path parameter(s). - - - [AlphaFS] Gets the creation date and time, in Coordinated Universal Time (UTC) format, of the specified directory. - A structure set to the creation date and time for the specified directory. This value is expressed in UTC time. - The directory for which to obtain creation date and time information, in Coordinated Universal Time (UTC) format. - Indicates the format of the path parameter(s). - - - [AlphaFS] Gets the creation date and time of the specified directory. - A structure set to the creation date and time for the specified directory. This value is expressed in local time. - The transaction. - The directory for which to obtain creation date and time information. - - - [AlphaFS] Gets the creation date and time of the specified directory. - A structure set to the creation date and time for the specified directory. This value is expressed in local time. - The transaction. - The directory for which to obtain creation date and time information. - Indicates the format of the path parameter(s). - - - [AlphaFS] Gets the creation date and time, in Coordinated Universal Time (UTC) format, of the specified directory. - A structure set to the creation date and time for the specified directory. This value is expressed in UTC time. - The transaction. - The directory for which to obtain creation date and time information, in Coordinated Universal Time (UTC) format. - - - [AlphaFS] Gets the creation date and time, in Coordinated Universal Time (UTC) format, of the specified directory. - A structure set to the creation date and time for the specified directory. This value is expressed in UTC time. - The transaction. - The directory for which to obtain creation date and time information, in Coordinated Universal Time (UTC) format. - Indicates the format of the path parameter(s). - - - Gets the date and time that the specified directory was last accessed. - A structure set to the date and time that the specified directory was last accessed. This value is expressed in local time. - The directory for which to obtain access date and time information. - - - Gets the date and time, in coordinated universal time (UTC), that the specified directory was last accessed. - A structure set to the date and time that the specified directory was last accessed. This value is expressed in UTC time. - The directory for which to obtain access date and time information. - - - [AlphaFS] Gets the date and time that the specified directory was last accessed. - A structure set to the date and time that the specified directory was last accessed. This value is expressed in local time. - The directory for which to obtain access date and time information. - Indicates the format of the path parameter(s). - - - [AlphaFS] Gets the date and time, in coordinated universal time (UTC), that the specified directory was last accessed. - A structure set to the date and time that the specified directory was last accessed. This value is expressed in UTC time. - The directory for which to obtain access date and time information. - Indicates the format of the path parameter(s). - - - [AlphaFS] Gets the date and time that the specified directory was last accessed. - A structure set to the date and time that the specified directory was last accessed. This value is expressed in local time. - The transaction. - The directory for which to obtain access date and time information. - - - [AlphaFS] Gets the date and time that the specified directory was last accessed. - A structure set to the date and time that the specified directory was last accessed. This value is expressed in local time. - The transaction. - The directory for which to obtain access date and time information. - Indicates the format of the path parameter(s). - - - [AlphaFS] Gets the date and time, in coordinated universal time (UTC), that the specified directory was last accessed. - A structure set to the date and time that the specified directory was last accessed. This value is expressed in UTC time. - The transaction. - The directory for which to obtain access date and time information. - - - [AlphaFS] Gets the date and time, in coordinated universal time (UTC), that the specified directory was last accessed. - A structure set to the date and time that the specified directory was last accessed. This value is expressed in UTC time. - The transaction. - The directory for which to obtain access date and time information. - Indicates the format of the path parameter(s). - - - Gets the date and time that the specified directory was last written to. - A structure set to the date and time that the specified directory was last written to. This value is expressed in local time. - The directory for which to obtain write date and time information. - - - Gets the date and time, in coordinated universal time (UTC) time, that the specified directory was last written to. - A structure set to the date and time that the specified directory was last written to. This value is expressed in UTC time. - The directory for which to obtain write date and time information. - - - [AlphaFS] Gets the date and time that the specified directory was last written to. - A structure set to the date and time that the specified directory was last written to. This value is expressed in local time. - The directory for which to obtain write date and time information. - Indicates the format of the path parameter(s). - - - [AlphaFS] Gets the date and time, in coordinated universal time (UTC) time, that the specified directory was last written to. - A structure set to the date and time that the specified directory was last written to. This value is expressed in UTC time. - The directory for which to obtain write date and time information. - Indicates the format of the path parameter(s). - - - [AlphaFS] Gets the date and time that the specified directory was last written to. - A structure set to the date and time that the specified directory was last written to. This value is expressed in local time. - The transaction. - The directory for which to obtain write date and time information. - - - [AlphaFS] Gets the date and time that the specified directory was last written to. - A structure set to the date and time that the specified directory was last written to. This value is expressed in local time. - The transaction. - The directory for which to obtain write date and time information. - Indicates the format of the path parameter(s). - - - [AlphaFS] Gets the date and time, in coordinated universal time (UTC) time, that the specified directory was last written to. - A structure set to the date and time that the specified directory was last written to. This value is expressed in UTC time. - The transaction. - The directory for which to obtain write date and time information. - - - [AlphaFS] Gets the date and time, in coordinated universal time (UTC) time, that the specified directory was last written to. - A structure set to the date and time that the specified directory was last written to. This value is expressed in UTC time. - The transaction. - The directory for which to obtain write date and time information. - Indicates the format of the path parameter(s). - - - [AlphaFS] Check if the directory has permission inheritance enabled. - if permission inheritance is enabled, if permission inheritance is disabled. - The full path to the directory to check. - Indicates the format of the path parameter(s). - - - [AlphaFS] Check if the directory has permission inheritance enabled. - The full path to the directory to check. - if permission inheritance is enabled, if permission inheritance is disabled. - - - Gets a object that encapsulates the access control list (ACL) entries for the specified directory. - A object that encapsulates the access control rules for the file described by the parameter. - - - - The path to a directory containing a object that describes the file's access control list (ACL) information. - - - Gets a object that encapsulates the specified type of access control list (ACL) entries for a particular directory. - A object that encapsulates the access control rules for the directory described by the parameter. - - - - The path to a directory containing a object that describes the directory's access control list (ACL) information. - One (or more) of the values that specifies the type of access control list (ACL) information to receive. - - - [AlphaFS] Gets a object that encapsulates the access control list (ACL) entries for the specified directory. - A object that encapsulates the access control rules for the file described by the parameter. - - - - The path to a directory containing a object that describes the file's access control list (ACL) information. - Indicates the format of the path parameter(s). - - - [AlphaFS] Gets a object that encapsulates the specified type of access control list (ACL) entries for a particular directory. - A object that encapsulates the access control rules for the directory described by the parameter. - - - - The path to a directory containing a object that describes the directory's access control list (ACL) information. - One (or more) of the values that specifies the type of access control list (ACL) information to receive. - Indicates the format of the path parameter(s). - - - [AlphaFS] Gets a object that encapsulates the access control list (ACL) entries for the specified directory handle. - A object that encapsulates the access control rules for the file described by the parameter. - - - - A to a directory containing a object that describes the directory's access control list (ACL) information. - - - [AlphaFS] Gets a object that encapsulates the specified type of access control list (ACL) entries for a particular directory handle. - A object that encapsulates the access control rules for the directory described by the parameter. - - - - A to a directory containing a object that describes the directory's access control list (ACL) information. - One (or more) of the values that specifies the type of access control list (ACL) information to receive. - - - [AlphaFS] Gets the change date and time of the specified directory. - A structure set to the change date and time for the specified directory. This value is expressed in local time. - The directory for which to obtain creation date and time information. - - - [AlphaFS] Gets the change date and time of the specified directory. - A structure set to the change date and time for the specified directory. This value is expressed in local time. - The directory for which to obtain creation date and time information. - Indicates the format of the path parameter(s). - - - [AlphaFS] Gets the change date and time, in Coordinated Universal Time (UTC) format, of the specified directory. - A structure set to the change date and time for the specified directory. This value is expressed in UTC time. - The file for which to obtain change date and time information, in Coordinated Universal Time (UTC) format. - - - [AlphaFS] Gets the change date and time, in Coordinated Universal Time (UTC) format, of the specified directory. - A structure set to the change date and time for the specified directory. This value is expressed in UTC time. - The file for which to obtain change date and time information, in Coordinated Universal Time (UTC) format. - Indicates the format of the path parameter(s). - - - [AlphaFS] Gets the change date and time of the specified directory. - A structure set to the change date and time for the specified directory. This value is expressed in local time. - An open handle to the directory from which to retrieve information. - - - [AlphaFS] Gets the change date and time, in Coordinated Universal Time (UTC) format, of the specified directory. - A structure set to the change date and time for the specified directory. This value is expressed in UTC time. - An open handle to the directory from which to retrieve information. - - - [AlphaFS] Gets the change date and time of the specified directory. - A structure set to the change date and time for the specified directory. This value is expressed in local time. - The transaction. - The directory for which to obtain creation date and time information. - - - [AlphaFS] Gets the change date and time of the specified directory. - A structure set to the change date and time for the specified directory. This value is expressed in local time. - The transaction. - The directory for which to obtain creation date and time information. - Indicates the format of the path parameter(s). - - - [AlphaFS] Gets the change date and time, in Coordinated Universal Time (UTC) format, of the specified directory. - A structure set to the change date and time for the specified directory. This value is expressed in UTC time. - The transaction. - The file for which to obtain change date and time information, in Coordinated Universal Time (UTC) format. - - - [AlphaFS] Gets the change date and time, in Coordinated Universal Time (UTC) format, of the specified directory. - A structure set to the change date and time for the specified directory. This value is expressed in UTC time. - The transaction. - The file for which to obtain change date and time information, in Coordinated Universal Time (UTC) format. - Indicates the format of the path parameter(s). - - - - Gets the current working directory of the application. - - MSDN: Multithreaded applications and shared library code should not use the GetCurrentDirectory function and should avoid using relative path names. - The current directory state written by the SetCurrentDirectory function is stored as a global variable in each process, - therefore multithreaded applications cannot reliably use this value without possible data corruption from other threads that may also be reading or setting this value. - This limitation also applies to the SetCurrentDirectory and GetFullPathName functions. The exception being when the application is guaranteed to be running in a single thread, - for example parsing file names from the command line argument string in the main thread prior to creating any additional threads. - Using relative path names in multithreaded applications or shared library code can yield unpredictable results and is not supported. - - - The path of the current working directory without a trailing directory separator. - - - - Sets the application's current working directory to the specified directory. - - MSDN: Multithreaded applications and shared library code should not use the GetCurrentDirectory function and should avoid using relative path names. - The current directory state written by the SetCurrentDirectory function is stored as a global variable in each process, - therefore multithreaded applications cannot reliably use this value without possible data corruption from other threads that may also be reading or setting this value. - This limitation also applies to the SetCurrentDirectory and GetFullPathName functions. The exception being when the application is guaranteed to be running in a single thread, - for example parsing file names from the command line argument string in the main thread prior to creating any additional threads. - Using relative path names in multithreaded applications or shared library code can yield unpredictable results and is not supported. - - - The path to which the current working directory is set. - - - - Sets the application's current working directory to the specified directory. - - MSDN: Multithreaded applications and shared library code should not use the GetCurrentDirectory function and should avoid using relative path names. - The current directory state written by the SetCurrentDirectory function is stored as a global variable in each process, - therefore multithreaded applications cannot reliably use this value without possible data corruption from other threads that may also be reading or setting this value. - This limitation also applies to the SetCurrentDirectory and GetFullPathName functions. The exception being when the application is guaranteed to be running in a single thread, - for example parsing file names from the command line argument string in the main thread prior to creating any additional threads. - Using relative path names in multithreaded applications or shared library code can yield unpredictable results and is not supported. - - - The path to which the current working directory is set. - Indicates the format of the path parameter. - - - Returns the names of all files and subdirectories in the specified directory. - An string[] array of the names of files and subdirectories in the specified directory. - - The EnumerateFileSystemEntries and GetFileSystemEntries methods differ as follows: When you use EnumerateFileSystemEntries, - you can start enumerating the collection of entries before the whole collection is returned; when you use GetFileSystemEntries, - you must wait for the whole array of entries to be returned before you can access the array. - Therefore, when you are working with many files and directories, EnumerateFiles can be more efficient. - - - - - - - - - The directory for which file and subdirectory names are returned. - - - Returns an array of file system entries that match the specified search criteria. - An string[] array of file system entries that match the specified search criteria. - - The EnumerateFileSystemEntries and GetFileSystemEntries methods differ as follows: When you use EnumerateFileSystemEntries, - you can start enumerating the collection of entries before the whole collection is returned; when you use GetFileSystemEntries, - you must wait for the whole array of entries to be returned before you can access the array. - Therefore, when you are working with many files and directories, EnumerateFiles can be more efficient. - - - - - - - - - The path to be searched. - - The search string to match against the names of directories in . - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - - - Gets an array of all the file names and directory names that match a in a specified path, and optionally searches subdirectories. - An string[] array of file system entries that match the specified search criteria. - - The EnumerateFileSystemEntries and GetFileSystemEntries methods differ as follows: When you use EnumerateFileSystemEntries, - you can start enumerating the collection of entries before the whole collection is returned; when you use GetFileSystemEntries, - you must wait for the whole array of entries to be returned before you can access the array. - Therefore, when you are working with many files and directories, EnumerateFiles can be more efficient. - - - - - - - - - The directory to search. - - The search string to match against the names of directories in . - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - - One of the enumeration values that specifies whether the - should include only the current directory or should include all subdirectories. - - - - Returns the names of all files and subdirectories in the specified directory. - An string[] array of the names of files and subdirectories in the specified directory. - - The EnumerateFileSystemEntries and GetFileSystemEntries methods differ as follows: When you use EnumerateFileSystemEntries, - you can start enumerating the collection of entries before the whole collection is returned; when you use GetFileSystemEntries, - you must wait for the whole array of entries to be returned before you can access the array. - Therefore, when you are working with many files and directories, EnumerateFiles can be more efficient. - - - - - - - - - The transaction. - The directory for which file and subdirectory names are returned. - - - Returns an array of file system entries that match the specified search criteria. - An string[] array of file system entries that match the specified search criteria. - - The EnumerateFileSystemEntries and GetFileSystemEntries methods differ as follows: When you use EnumerateFileSystemEntries, - you can start enumerating the collection of entries before the whole collection is returned; when you use GetFileSystemEntries, - you must wait for the whole array of entries to be returned before you can access the array. - Therefore, when you are working with many files and directories, EnumerateFiles can be more efficient. - - - - - - - - - The transaction. - The path to be searched. - - The search string to match against the names of directories in . - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - - - Gets an array of all the file names and directory names that match a in a specified path, and optionally searches subdirectories. - An string[] array of file system entries that match the specified search criteria. - - The EnumerateFileSystemEntries and GetFileSystemEntries methods differ as follows: When you use EnumerateFileSystemEntries, - you can start enumerating the collection of entries before the whole collection is returned; when you use GetFileSystemEntries, - you must wait for the whole array of entries to be returned before you can access the array. - Therefore, when you are working with many files and directories, EnumerateFiles can be more efficient. - - - - - - - - - The transaction. - The directory to search. - - The search string to match against the names of directories in . - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - - One of the enumeration values that specifies whether the - should include only the current directory or should include all subdirectories. - - - - Returns the volume information, root information, or both for the specified path. - The volume information, root information, or both for the specified path, or if path does not contain root directory information. - - - - The path of a file or directory. - - - Returns the volume information, root information, or both for the specified path. - The volume information, root information, or both for the specified path, or if path does not contain root directory information. - - - - The path of a file or directory. - Indicates the format of the path parameter(s). - - - [AlphaFS] Returns the volume information, root information, or both for the specified path. - The volume information, root information, or both for the specified path, or if path does not contain root directory information. - - - - The transaction. - The path of a file or directory. - - - Returns the volume information, root information, or both for the specified path. - The volume information, root information, or both for the specified path, or if path does not contain root directory information. - - - - The transaction. - The path of a file or directory. - Indicates the format of the path parameter(s). - - - Returns the volume information, root information, or both for the specified path. - The volume information, root information, or both for the specified path, or if path does not contain root directory information. - - - - The transaction. - The path of a file or directory. - Indicates the format of the path parameter(s). - - - Retrieves the names of the logical drives on this computer in the form "<drive letter>:\". - An array of type that represents the logical drives on a computer. - - - [AlphaFS] Retrieves the names of the logical drives on this computer in the form "<drive letter>:\". - An array of type that represents the logical drives on a computer. - Retrieve logical drives as known by the Environment. - Retrieve only when accessible (IsReady) logical drives. - - - [AlphaFS] Enumerates the drive names of all logical drives on a computer. - An IEnumerable of type that represents the logical drives on a computer. - Retrieve logical drives as known by the Environment. - Retrieve only when accessible (IsReady) logical drives. - - - Enumerates the drive names of all logical drives on a computer. - An IEnumerable of type that represents the logical drives on a computer. - Retrieve logical drives as known by the Environment. - Retrieve only when accessible (IsReady) logical drives. - - - Retrieves the parent directory of the specified path, including both absolute and relative paths. - The path for which to retrieve the parent directory. - The parent directory, or if is the root directory, including the root of a UNC server or share name. - - - [AlphaFS] Retrieves the parent directory of the specified path, including both absolute and relative paths. - The parent directory, or if is the root directory, including the root of a UNC server or share name. - The path for which to retrieve the parent directory. - Indicates the format of the path parameter(s). - - - [AlphaFS] Retrieves the parent directory of the specified path, including both absolute and relative paths. - The parent directory, or if is the root directory, including the root of a UNC server or share name. - The transaction. - The path for which to retrieve the parent directory. - - - Retrieves the parent directory of the specified path, including both absolute and relative paths. - The parent directory, or if is the root directory, including the root of a UNC server or share name. - The transaction. - The path for which to retrieve the parent directory. - Indicates the format of the path parameter(s). - - - Retrieves the parent directory of the specified path, including both absolute and relative paths. - The parent directory, or if is the root directory, including the root of a UNC server or share name. - The transaction. - The path for which to retrieve the parent directory. - Indicates the format of the path parameter(s). - - - Applies access control list (ACL) entries described by a object to the specified directory. - A directory to add or remove access control list (ACL) entries from. - A object that describes an ACL entry to apply to the directory described by the path parameter. - - - Applies access control list (ACL) entries described by a object to the specified directory. - Note that unlike this method does not automatically - determine what parts of the specified instance has been modified. Instead, the - parameter is used to specify what entries from to apply to . - A directory to add or remove access control list (ACL) entries from. - A object that describes an ACL entry to apply to the directory described by the path parameter. - One or more of the values that specifies the type of access control list (ACL) information to set. - - - [AlphaFS] Applies access control list (ACL) entries described by a object to the specified directory. - A directory to add or remove access control list (ACL) entries from. - A object that describes an ACL entry to apply to the directory described by the path parameter. - Indicates the format of the path parameter(s). - - - [AlphaFS] Applies access control list (ACL) entries described by a object to the specified directory. - Note that unlike this method does not automatically - determine what parts of the specified instance has been modified. Instead, the - parameter is used to specify what entries from to apply to . - A directory to add or remove access control list (ACL) entries from. - A object that describes an ACL entry to apply to the directory described by the path parameter. - One or more of the values that specifies the type of access control list (ACL) information to set. - Indicates the format of the path parameter(s). - - - Applies access control list (ACL) entries described by a object to the specified directory. - A to a file to add or remove access control list (ACL) entries from. - A object that describes an ACL entry to apply to the directory described by the path parameter. - - - Applies access control list (ACL) entries described by a object to the specified directory. - A to a file to add or remove access control list (ACL) entries from. - A object that describes an ACL entry to apply to the directory described by the path parameter. - One or more of the values that specifies the type of access control list (ACL) information to set. - - - Sets the date and time the directory was created. - The directory for which to set the creation date and time information. - A containing the value to set for the creation date and time of . This value is expressed in local time. - - - Sets the date and time, in coordinated universal time (UTC), that the directory was created. - The directory for which to set the creation date and time information. - A containing the value to set for the creation date and time of . This value is expressed in UTC time. - - - [AlphaFS] Sets the date and time the directory was created. - The directory for which to set the creation date and time information. - Indicates the format of the path parameter(s). - A containing the value to set for the creation date and time of . This value is expressed in local time. - - - [AlphaFS] Sets the date and time the directory was created. - The directory for which to set the creation date and time information. - Indicates the format of the path parameter(s). - A containing the value to set for the creation date and time of . This value is expressed in local time. - If , the date and time information will apply to the reparse point (symlink or junction) and not the file or directory linked to. No effect if does not refer to a reparse point. - - - [AlphaFS] Sets the date and time, in coordinated universal time (UTC), that the directory was created. - The directory for which to set the creation date and time information. - A containing the value to set for the creation date and time of . This value is expressed in UTC time. - Indicates the format of the path parameter(s). - - - [AlphaFS] Sets the date and time, in coordinated universal time (UTC), that the directory was created. - The directory for which to set the creation date and time information. - A containing the value to set for the creation date and time of . This value is expressed in UTC time. - If , the date and time information will apply to the reparse point (symlink or junction) and not the file or directory linked to. No effect if does not refer to a reparse point. - Indicates the format of the path parameter(s). - - - [AlphaFS] Sets the date and time the directory was created. - The transaction. - The directory for which to set the creation date and time information. - A containing the value to set for the creation date and time of . This value is expressed in local time. - - - [AlphaFS] Sets the date and time the directory was created. - The transaction. - The directory for which to set the creation date and time information. - A containing the value to set for the creation date and time of . This value is expressed in local time. - Indicates the format of the path parameter(s). - - - [AlphaFS] Sets the date and time the directory was created. - The transaction. - The directory for which to set the creation date and time information. - A containing the value to set for the creation date and time of . This value is expressed in local time. - If , the date and time information will apply to the reparse point (symlink or junction) and not the file or directory linked to. No effect if does not refer to a reparse point. - Indicates the format of the path parameter(s). - - - [AlphaFS] Sets the date and time, in coordinated universal time (UTC), that the directory was created. - The transaction. - The directory for which to set the creation date and time information. - A containing the value to set for the creation date and time of . This value is expressed in UTC time. - - - [AlphaFS] Sets the date and time, in coordinated universal time (UTC), that the directory was created. - The transaction. - The directory for which to set the creation date and time information. - A containing the value to set for the creation date and time of . This value is expressed in UTC time. - Indicates the format of the path parameter(s). - - - [AlphaFS] Sets the date and time, in coordinated universal time (UTC), that the directory was created. - The transaction. - The directory for which to set the creation date and time information. - A containing the value to set for the creation date and time of . This value is expressed in UTC time. - If , the date and time information will apply to the reparse point (symlink or junction) and not the file or directory linked to. No effect if does not refer to a reparse point. - Indicates the format of the path parameter(s). - - - Sets the date and time that the specified directory was last accessed. - The file for which to set the access date and time information. - A containing the value to set for the last access date and time of . This value is expressed in local time. - - - Sets the date and time, in coordinated universal time (UTC), that the specified directory was last accessed. - The directory for which to set the access date and time information. - A containing the value to set for the last access date and time of . This value is expressed in UTC time. - - - [AlphaFS] Sets the date and time that the specified directory was last accessed. - The file for which to set the access date and time information. - A containing the value to set for the last access date and time of . This value is expressed in local time. - Indicates the format of the path parameter(s). - - - [AlphaFS] Sets the date and time that the specified directory was last accessed. - The file for which to set the access date and time information. - A containing the value to set for the last access date and time of . This value is expressed in local time. - If , the date and time information will apply to the reparse point (symlink or junction) and not the file or directory linked to. No effect if does not refer to a reparse point. - Indicates the format of the path parameter(s). - - - [AlphaFS] Sets the date and time, in coordinated universal time (UTC), that the specified directory was last accessed. - The directory for which to set the access date and time information. - A containing the value to set for the last access date and time of . This value is expressed in UTC time. - Indicates the format of the path parameter(s). - - - [AlphaFS] Sets the date and time, in coordinated universal time (UTC), that the specified directory was last accessed. - The directory for which to set the access date and time information. - A containing the value to set for the last access date and time of . This value is expressed in UTC time. - If , the date and time information will apply to the reparse point (symlink or junction) and not the file or directory linked to. No effect if does not refer to a reparse point. - Indicates the format of the path parameter(s). - - - [AlphaFS] Sets the date and time that the specified directory was last accessed. - The transaction. - The directory for which to set the access date and time information. - A containing the value to set for the last access date and time of . This value is expressed in local time. - - - [AlphaFS] Sets the date and time that the specified directory was last accessed. - The transaction. - The directory for which to set the access date and time information. - A containing the value to set for the last access date and time of . This value is expressed in local time. - Indicates the format of the path parameter(s). - - - [AlphaFS] Sets the date and time that the specified directory was last accessed. - The transaction. - The directory for which to set the access date and time information. - A containing the value to set for the last access date and time of . This value is expressed in local time. - If , the date and time information will apply to the reparse point (symlink or junction) and not the file or directory linked to. No effect if does not refer to a reparse point. - Indicates the format of the path parameter(s). - - - [AlphaFS] Sets the date and time, in coordinated universal time (UTC), that the specified directory was last accessed. - The transaction. - The directory for which to set the access date and time information. - A containing the value to set for the last access date and time of . This value is expressed in UTC time. - - - [AlphaFS] Sets the date and time, in coordinated universal time (UTC), that the specified directory was last accessed. - The transaction. - The directory for which to set the access date and time information. - A containing the value to set for the last access date and time of . This value is expressed in UTC time. - Indicates the format of the path parameter(s). - - - [AlphaFS] Sets the date and time, in coordinated universal time (UTC), that the specified directory was last accessed. - The transaction. - The directory for which to set the access date and time information. - A containing the value to set for the last access date and time of . This value is expressed in UTC time. - If , the date and time information will apply to the reparse point (symlink or junction) and not the file or directory linked to. No effect if does not refer to a reparse point. - Indicates the format of the path parameter(s). - - - [AlphaFS] Sets all the date and time stamps for the specified directory, at once. - The directory for which to set the dates and times information. - A containing the value to set for the creation date and time of . This value is expressed in local time. - A containing the value to set for the last access date and time of . This value is expressed in local time. - A containing the value to set for the last write date and time of . This value is expressed in local time. - - - [AlphaFS] Sets all the date and time stamps for the specified directory, at once. - The directory for which to set the dates and times information. - A containing the value to set for the creation date and time of . This value is expressed in local time. - A containing the value to set for the last access date and time of . This value is expressed in local time. - A containing the value to set for the last write date and time of . This value is expressed in local time. - Indicates the format of the path parameter(s). - - - [AlphaFS] Sets all the date and time stamps for the specified directory, at once. - The directory for which to set the dates and times information. - A containing the value to set for the creation date and time of . This value is expressed in local time. - A containing the value to set for the last access date and time of . This value is expressed in local time. - A containing the value to set for the last write date and time of . This value is expressed in local time. - If , the date and time information will apply to the reparse point (symlink or junction) and not the file or directory linked to. No effect if does not refer to a reparse point. - Indicates the format of the path parameter(s). - - - [AlphaFS] Sets all the date and time stamps, in coordinated universal time (UTC), for the specified directory, at once. - The directory for which to set the dates and times information. - A containing the value to set for the creation date and time of . This value is expressed in UTC time. - A containing the value to set for the last access date and time of . This value is expressed in UTC time. - A containing the value to set for the last write date and time of . This value is expressed in UTC time. - - - [AlphaFS] Sets all the date and time stamps, in coordinated universal time (UTC), for the specified directory, at once. - The directory for which to set the dates and times information. - A containing the value to set for the creation date and time of . This value is expressed in UTC time. - A containing the value to set for the last access date and time of . This value is expressed in UTC time. - A containing the value to set for the last write date and time of . This value is expressed in UTC time. - Indicates the format of the path parameter(s). - - - [AlphaFS] Sets all the date and time stamps, in coordinated universal time (UTC), for the specified directory, at once. - The directory for which to set the dates and times information. - A containing the value to set for the creation date and time of . This value is expressed in UTC time. - A containing the value to set for the last access date and time of . This value is expressed in UTC time. - A containing the value to set for the last write date and time of . This value is expressed in UTC time. - If , the date and time information will apply to the reparse point (symlink or junction) and not the file or directory linked to. No effect if does not refer to a reparse point. - Indicates the format of the path parameter(s). - - - [AlphaFS] Sets all the date and time stamps for the specified directory, at once. - The transaction. - The directory for which to set the dates and times information. - A containing the value to set for the creation date and time of . This value is expressed in local time. - A containing the value to set for the last access date and time of . This value is expressed in local time. - A containing the value to set for the last write date and time of . This value is expressed in local time. - - - [AlphaFS] Sets all the date and time stamps for the specified directory, at once. - The transaction. - The directory for which to set the dates and times information. - A containing the value to set for the creation date and time of . This value is expressed in local time. - A containing the value to set for the last access date and time of . This value is expressed in local time. - A containing the value to set for the last write date and time of . This value is expressed in local time. - Indicates the format of the path parameter(s). - - - [AlphaFS] Sets all the date and time stamps for the specified directory, at once. - The transaction. - The directory for which to set the dates and times information. - A containing the value to set for the creation date and time of . This value is expressed in local time. - A containing the value to set for the last access date and time of . This value is expressed in local time. - A containing the value to set for the last write date and time of . This value is expressed in local time. - If , the date and time information will apply to the reparse point (symlink or junction) and not the file or directory linked to. No effect if does not refer to a reparse point. - Indicates the format of the path parameter(s). - - - [AlphaFS] Sets all the date and time stamps, in coordinated universal time (UTC), for the specified directory, at once. - The transaction. - The directory for which to set the dates and times information. - A containing the value to set for the creation date and time of . This value is expressed in UTC time. - A containing the value to set for the last access date and time of . This value is expressed in UTC time. - A containing the value to set for the last write date and time of . This value is expressed in UTC time. - - - [AlphaFS] Sets all the date and time stamps, in coordinated universal time (UTC), for the specified directory, at once. - The transaction. - The directory for which to set the dates and times information. - A containing the value to set for the creation date and time of . This value is expressed in UTC time. - A containing the value to set for the last access date and time of . This value is expressed in UTC time. - A containing the value to set for the last write date and time of . This value is expressed in UTC time. - Indicates the format of the path parameter(s). - - - [AlphaFS] Sets all the date and time stamps, in coordinated universal time (UTC), for the specified directory, at once. - The transaction. - The directory for which to set the dates and times information. - A containing the value to set for the creation date and time of . This value is expressed in UTC time. - A containing the value to set for the last access date and time of . This value is expressed in UTC time. - A containing the value to set for the last write date and time of . This value is expressed in UTC time. - If , the date and time information will apply to the reparse point (symlink or junction) and not the file or directory linked to. No effect if does not refer to a reparse point. - Indicates the format of the path parameter(s). - - - [AlphaFS] Transfers the date and time stamps for the specified directories. - This method uses BackupSemantics flag to get Timestamp changed for directories. - The source directory to get the date and time stamps from. - The destination directory to set the date and time stamps. - - - [AlphaFS] Transfers the date and time stamps for the specified directories. - This method uses BackupSemantics flag to get Timestamp changed for directories. - The source directory to get the date and time stamps from. - The destination directory to set the date and time stamps. - Indicates the format of the path parameter(s). - - - [AlphaFS] Transfers the date and time stamps for the specified directories. - This method uses BackupSemantics flag to get Timestamp changed for directories. - The transaction. - The source directory to get the date and time stamps from. - The destination directory to set the date and time stamps. - - - [AlphaFS] Transfers the date and time stamps for the specified directories. - This method uses BackupSemantics flag to get Timestamp changed for directories. - The transaction. - The source directory to get the date and time stamps from. - The destination directory to set the date and time stamps. - Indicates the format of the path parameter(s). - - - Sets the date and time that the specified directory was last written to. - The directory for which to set the date and time information. - A containing the value to set for the last write date and time of . This value is expressed in local time. - - - Sets the date and time, in coordinated universal time (UTC), that the specified directory was last written to. - The directory for which to set the date and time information. - A containing the value to set for the last write date and time of . This value is expressed in UTC time. - - - [AlphaFS] Sets the date and time that the specified directory was last written to. - The directory for which to set the date and time information. - A containing the value to set for the last write date and time of . This value is expressed in local time. - Indicates the format of the path parameter(s). - - - [AlphaFS] Sets the date and time that the specified directory was last written to. - The directory for which to set the date and time information. - A containing the value to set for the last write date and time of . This value is expressed in local time. - If , the date and time information will apply to the reparse point (symlink or junction) and not the file or directory linked to. No effect if does not refer to a reparse point. - Indicates the format of the path parameter(s). - - - [AlphaFS] Sets the date and time, in coordinated universal time (UTC), that the specified directory was last written to. - The directory for which to set the date and time information. - A containing the value to set for the last write date and time of . This value is expressed in UTC time. - Indicates the format of the path parameter(s). - - - [AlphaFS] Sets the date and time, in coordinated universal time (UTC), that the specified directory was last written to. - The directory for which to set the date and time information. - A containing the value to set for the last write date and time of . This value is expressed in UTC time. - If , the date and time information will apply to the reparse point (symlink or junction) and not the file or directory linked to. No effect if does not refer to a reparse point. - Indicates the format of the path parameter(s). - - - [AlphaFS] Sets the date and time that the specified directory was last written to. - The transaction. - The directory for which to set the date and time information. - A containing the value to set for the last write date and time of . This value is expressed in local time. - - - [AlphaFS] Sets the date and time that the specified directory was last written to. - The transaction. - The directory for which to set the date and time information. - A containing the value to set for the last write date and time of . This value is expressed in local time. - Indicates the format of the path parameter(s). - - - [AlphaFS] Sets the date and time that the specified directory was last written to. - The transaction. - The directory for which to set the date and time information. - A containing the value to set for the last write date and time of . This value is expressed in local time. - If , the date and time information will apply to the reparse point (symlink or junction) and not the file or directory linked to. No effect if does not refer to a reparse point. - Indicates the format of the path parameter(s). - - - [AlphaFS] Sets the date and time, in coordinated universal time (UTC), that the specified directory was last written to. - The transaction. - The directory for which to set the date and time information. - A containing the value to set for the last write date and time of . This value is expressed in UTC time. - - - [AlphaFS] Sets the date and time, in coordinated universal time (UTC), that the specified directory was last written to. - The transaction. - The directory for which to set the date and time information. - A containing the value to set for the last write date and time of . This value is expressed in UTC time. - Indicates the format of the path parameter(s). - - - [AlphaFS] Sets the date and time, in coordinated universal time (UTC), that the specified directory was last written to. - The transaction. - The directory for which to set the date and time information. - A containing the value to set for the last write date and time of . This value is expressed in UTC time. - If , the date and time information will apply to the reparse point (symlink or junction) and not the file or directory linked to. No effect if does not refer to a reparse point. - Indicates the format of the path parameter(s). - - - [AlphaFS] Compresses a directory using NTFS compression. - This will only compress the root items (non recursive). - - - - - - - A path that describes a directory to compress. - - - [AlphaFS] Compresses a directory using NTFS compression. - This will only compress the root items (non recursive). - - - - - - - A path that describes a directory to compress. - Indicates the format of the path parameter(s). - - - [AlphaFS] Compresses a directory using NTFS compression. - - - - - - - A path that describes a directory to compress. - flags that specify how the directory is to be enumerated. - - - [AlphaFS] Compresses a directory using NTFS compression. - - - - - - - A path that describes a directory to compress. - flags that specify how the directory is to be enumerated. - Indicates the format of the path parameter(s). - - - [AlphaFS] Compresses a directory using NTFS compression. - This will only compress the root items (non recursive). - - - - - - - The transaction. - A path that describes a directory to compress. - - - [AlphaFS] Compresses a directory using NTFS compression. - This will only compress the root items (non recursive). - - - - - - - The transaction. - A path that describes a directory to compress. - Indicates the format of the path parameter(s). - - - [AlphaFS] Compresses a directory using NTFS compression. - - - - - - - The transaction. - A path that describes a directory to compress. - flags that specify how the directory is to be enumerated. - - - [AlphaFS] Compresses a directory using NTFS compression. - - - - - - - The transaction. - A path that describes a directory to compress. - flags that specify how the directory is to be enumerated. - Indicates the format of the path parameter(s). - - - [AlphaFS] Decompresses an NTFS compressed directory. - This will only decompress the root items (non recursive). - - - - - - - A path that describes a directory to decompress. - - - [AlphaFS] Decompresses an NTFS compressed directory. - This will only decompress the root items (non recursive). - - - - - - - A path that describes a directory to decompress. - Indicates the format of the path parameter(s). - - - [AlphaFS] Decompresses an NTFS compressed directory. - - - - - - - A path that describes a directory to decompress. - flags that specify how the directory is to be enumerated. - - - [AlphaFS] Decompresses an NTFS compressed directory. - - - - - - - A path that describes a directory to decompress. - flags that specify how the directory is to be enumerated. - Indicates the format of the path parameter(s). - - - [AlphaFS] Decompresses an NTFS compressed directory. - This will only decompress the root items (non recursive). - - - - - - - The transaction. - A path that describes a directory to decompress. - - - [AlphaFS] Decompresses an NTFS compressed directory. - This will only decompress the root items (non recursive). - - - - - - - The transaction. - A path that describes a directory to decompress. - Indicates the format of the path parameter(s). - - - [AlphaFS] Decompresses an NTFS compressed directory. - - - - - - - The transaction. - A path that describes a directory to decompress. - flags that specify how the directory is to be enumerated. - - - [AlphaFS] Decompresses an NTFS compressed directory. - - - - - - - The transaction. - A path that describes a directory to decompress. - flags that specify how the directory is to be enumerated. - Indicates the format of the path parameter(s). - - - [AlphaFS] Disables NTFS compression of the specified directory and the files in it. - This method disables the directory-compression attribute. It will not decompress the current contents of the directory. However, newly created files and directories will be uncompressed. - - - - - - - A path to a directory to decompress. - - - [AlphaFS] Disables NTFS compression of the specified directory and the files in it. - This method disables the directory-compression attribute. It will not decompress the current contents of the directory. However, newly created files and directories will be uncompressed. - - - - - - - A path to a directory to decompress. - Indicates the format of the path parameter(s). - - - [AlphaFS] Disables NTFS compression of the specified directory and the files in it. - This method disables the directory-compression attribute. It will not decompress the current contents of the directory. However, newly created files and directories will be uncompressed. - - - - - - - The transaction. - A path to a directory to decompress. - - - [AlphaFS] Disables NTFS compression of the specified directory and the files in it. - This method disables the directory-compression attribute. It will not decompress the current contents of the directory. However, newly created files and directories will be uncompressed. - - - - - - - The transaction. - Indicates the format of the path parameter(s). - A path to a directory to decompress. - - - [AlphaFS] Enables NTFS compression of the specified directory and the files in it. - This method enables the directory-compression attribute. It will not compress the current contents of the directory. However, newly created files and directories will be compressed. - - - - - - - A path to a directory to compress. - - - [AlphaFS] Enables NTFS compression of the specified directory and the files in it. - This method enables the directory-compression attribute. It will not compress the current contents of the directory. However, newly created files and directories will be compressed. - - - - - - - A path to a directory to compress. - Indicates the format of the path parameter(s). - - - [AlphaFS] Enables NTFS compression of the specified directory and the files in it. - This method enables the directory-compression attribute. It will not compress the current contents of the directory. However, newly created files and directories will be compressed. - - - - - - - The transaction. - A path to a directory to compress. - - - [AlphaFS] Enables NTFS compression of the specified directory and the files in it. - This method enables the directory-compression attribute. It will not compress the current contents of the directory. However, newly created files and directories will be compressed. - - - - - - - The transaction. - A path to a directory to compress. - Indicates the format of the path parameter(s). - - - Compress/decompress Non-/Transacted files/directories. - - - - - - - The transaction. - A path that describes a directory to compress. - - The search string to match against the names of directories in . - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - flags that specify how the directory is to be enumerated. - compress, when decompress. - Indicates the format of the path parameter(s). - - - [AlphaFS] Decrypts a directory that was encrypted by the current account using the Encrypt method. - - - - - - - A path that describes a directory to decrypt. - Indicates the format of the path parameter(s). - - - [AlphaFS] Decrypts a directory that was encrypted by the current account using the Encrypt method. - - - - - - - A path that describes a directory to decrypt. - to decrypt the directory recursively. only decrypt the directory. - Indicates the format of the path parameter(s). - - - [AlphaFS] Decrypts a directory that was encrypted by the current account using the Encrypt method. - - - - - - - A path that describes a directory to decrypt. - - - [AlphaFS] Decrypts a directory that was encrypted by the current account using the Encrypt method. - - - - - - - A path that describes a directory to decrypt. - to decrypt the directory recursively. only decrypt the directory. - - - [AlphaFS] Encrypts a directory so that only the account used to encrypt the directory can decrypt it. - - - - - - - A path that describes a directory to encrypt. - Indicates the format of the path parameter(s). - - - [AlphaFS] Encrypts a directory so that only the account used to encrypt the directory can decrypt it. - - - - - - - A path that describes a directory to encrypt. - to encrypt the directory recursively. only encrypt the directory. - Indicates the format of the path parameter(s). - - - [AlphaFS] Encrypts a directory so that only the account used to encrypt the directory can decrypt it. - - - - - - - A path that describes a directory to encrypt. - - - [AlphaFS] Encrypts a directory so that only the account used to encrypt the directory can decrypt it. - - - - - - - A path that describes a directory to encrypt. - to encrypt the directory recursively. only encrypt the directory. - - - [AlphaFS] Disables encryption of the specified directory and the files in it. - This method only creates/modifies the file "Desktop.ini" in the root of and disables encryption by writing: "Disable=1" - This method does not affect encryption of files and subdirectories below the indicated directory. - - The name of the directory for which to disable encryption. - Indicates the format of the path parameter(s). - - - [AlphaFS] Disables encryption of the specified directory and the files in it. - This method only creates/modifies the file "Desktop.ini" in the root of and disables encryption by writing: "Disable=1" - This method does not affect encryption of files and subdirectories below the indicated directory. - - The name of the directory for which to disable encryption. - - - [AlphaFS] Enables encryption of the specified directory and the files in it. - This method only creates/modifies the file "Desktop.ini" in the root of and enables encryption by writing: "Disable=0" - This method does not affect encryption of files and subdirectories below the indicated directory. - - The name of the directory for which to enable encryption. - Indicates the format of the path parameter(s). - - - [AlphaFS] Enables encryption of the specified directory and the files in it. - This method only creates/modifies the file "Desktop.ini" in the root of and enables encryption by writing: "Disable=0" - This method does not affect encryption of files and subdirectories below the indicated directory. - - The name of the directory for which to enable encryption. - - - Enables/disables encryption of the specified directory and the files in it. - This method only creates/modifies the file "Desktop.ini" in the root of and enables/disables encryption by writing: "Disable=0" or "Disable=1". - This method does not affect encryption of files and subdirectories below the indicated directory. - - The name of the directory for which to enable encryption. - enabled encryption, disables encryption. - Indicates the format of the path parameter(s). - - - Decrypts/encrypts a directory recursively so that only the account used to encrypt the directory can decrypt it. - - - - - - - A path that describes a directory to encrypt. - encrypt, decrypt. - to decrypt the directory recursively. only decrypt files and directories in the root of . - Indicates the format of the path parameter(s). - - - [AlphaFS] Retrieves information about files in the directory specified by in mode. - An enumeration of records for each file system entry in the specified diretory. - A path to a directory from which to retrieve information. - - - [AlphaFS] Retrieves information about files in the directory specified by in mode. - An enumeration of records for each file system entry in the specified diretory. - A path to a directory from which to retrieve information. - Indicates the format of the path parameter(s). - - - [AlphaFS] Retrieves information about files in the directory specified by in specified mode. - An enumeration of records for each file system entry in the specified diretory. - A path to a directory from which to retrieve information. - The mode with which to open a handle to the directory. - - - [AlphaFS] Retrieves information about files in the directory specified by in specified mode. - An enumeration of records for each file system entry in the specified diretory. - A path to a directory from which to retrieve information. - The mode with which to open a handle to the directory. - Indicates the format of the path parameter(s). - - - [AlphaFS] Retrieves information about files in the directory handle specified. - An IEnumerable of records for each file system entry in the specified diretory. - An open handle to the directory from which to retrieve information. - - - [AlphaFS] Retrieves information about files in the directory specified by in mode. - An enumeration of records for each file system entry in the specified diretory. - The transaction. - A path to a directory from which to retrieve information. - - - [AlphaFS] Retrieves information about files in the directory specified by in mode. - An enumeration of records for each file system entry in the specified diretory. - The transaction. - A path to a directory from which to retrieve information. - Indicates the format of the path parameter(s). - - - [AlphaFS] Retrieves information about files in the directory specified by in specified mode. - An enumeration of records for each file system entry in the specified diretory. - The transaction. - A path to a directory from which to retrieve information. - The mode with which to open a handle to the directory. - - - [AlphaFS] Retrieves information about files in the directory specified by in specified mode. - An enumeration of records for each file system entry in the specified diretory. - The transaction. - A path to a directory from which to retrieve information. - The mode with which to open a handle to the directory. - Indicates the format of the path parameter(s). - - - Returns an enumerable collection of information about files in the directory handle specified. - An IEnumerable of records for each file system entry in the specified diretory. - - Either use or , not both. - - The number of files that are returned for each call to GetFileInformationByHandleEx depends on the size of the buffer that is passed to the function. - Any subsequent calls to GetFileInformationByHandleEx on the same handle will resume the enumeration operation after the last file is returned. - - - The transaction. - An open handle to the directory from which to retrieve information. - A path to the directory. - The mode with which to open a handle to the directory. - suppress any Exception that might be thrown as a result from a failure, such as ACLs protected directories or non-accessible reparse points. - Indicates the format of the path parameter(s). - - - [AlphaFS] Gets the properties of the particular directory without following any symbolic links or mount points. - Properties include aggregated info from of each encountered file system object, plus additional ones: Total, File, Size and Error. - Total: is the total number of enumerated objects. - File: is the total number of files. File is considered when object is neither nor . - Size: is the total size of enumerated objects. - Error: is the total number of errors encountered during enumeration. - - A dictionary mapping the keys mentioned above to their respective aggregated values. - Directory: is an object which has attribute without one. - - - - - - - The target directory. - - - [AlphaFS] Gets the properties of the particular directory without following any symbolic links or mount points. - Properties include aggregated info from of each encountered file system object, plus additional ones: Total, File, Size and Error. - Total: is the total number of enumerated objects. - File: is the total number of files. File is considered when object is neither nor . - Size: is the total size of enumerated objects. - Error: is the total number of errors encountered during enumeration. - - A dictionary mapping the keys mentioned above to their respective aggregated values. - Directory: is an object which has attribute without one. - - - - - - - The target directory. - Indicates the format of the path parameter(s). - - - [AlphaFS] Gets the properties of the particular directory without following any symbolic links or mount points. - Properties include aggregated info from of each encountered file system object, plus additional ones: Total, File, Size and Error. - Total: is the total number of enumerated objects. - File: is the total number of files. File is considered when object is neither nor . - Size: is the total size of enumerated objects. - Error: is the total number of errors encountered during enumeration. - - A dictionary mapping the keys mentioned above to their respective aggregated values. - Directory: is an object which has attribute without one. - - - - - - - The target directory. - flags that specify how the directory is to be enumerated. - - - [AlphaFS] Gets the properties of the particular directory without following any symbolic links or mount points. - Properties include aggregated info from of each encountered file system object, plus additional ones: Total, File, Size and Error. - Total: is the total number of enumerated objects. - File: is the total number of files. File is considered when object is neither nor . - Size: is the total size of enumerated objects. - Error: is the total number of errors encountered during enumeration. - - A dictionary mapping the keys mentioned above to their respective aggregated values. - Directory: is an object which has attribute without one. - - - - - - - The target directory. - flags that specify how the directory is to be enumerated. - Indicates the format of the path parameter(s). - - - [AlphaFS] Gets the properties of the particular directory without following any symbolic links or mount points. - Properties include aggregated info from of each encountered file system object, plus additional ones: Total, File, Size and Error. - Total: is the total number of enumerated objects. - File: is the total number of files. File is considered when object is neither nor . - Size: is the total size of enumerated objects. - Error: is the total number of errors encountered during enumeration. - - A dictionary mapping the keys mentioned above to their respective aggregated values. - Directory: is an object which has attribute without one. - - - - - - - The transaction. - The target directory. - - - [AlphaFS] Gets the properties of the particular directory without following any symbolic links or mount points. - Properties include aggregated info from of each encountered file system object, plus additional ones: Total, File, Size and Error. - Total: is the total number of enumerated objects. - File: is the total number of files. File is considered when object is neither nor . - Size: is the total size of enumerated objects. - Error: is the total number of errors encountered during enumeration. - - A dictionary mapping the keys mentioned above to their respective aggregated values. - Directory: is an object which has attribute without one. - - - - - - - The transaction. - The target directory. - Indicates the format of the path parameter(s). - - - [AlphaFS] Gets the properties of the particular directory without following any symbolic links or mount points. - Properties include aggregated info from of each encountered file system object, plus additional ones: Total, File, Size and Error. - Total: is the total number of enumerated objects. - File: is the total number of files. File is considered when object is neither nor . - Size: is the total size of enumerated objects. - Error: is the total number of errors encountered during enumeration. - - A dictionary mapping the keys mentioned above to their respective aggregated values. - Directory: is an object which has attribute without one. - - - - - - - The transaction. - The target directory. - flags that specify how the directory is to be enumerated. - - - [AlphaFS] Gets the properties of the particular directory without following any symbolic links or mount points. - Properties include aggregated info from of each encountered file system object, plus additional ones: Total, File, Size and Error. - Total: is the total number of enumerated objects. - File: is the total number of files. File is considered when object is neither nor . - Size: is the total size of enumerated objects. - Error: is the total number of errors encountered during enumeration. - - A dictionary mapping the keys mentioned above to their respective aggregated values. - Directory: is an object which has attribute without one. - - - - - - - The transaction. - The target directory. - flags that specify how the directory is to be enumerated. - Indicates the format of the path parameter(s). - - - [AlphaFS] Gets the properties of the particular directory without following any symbolic links or mount points. - Properties include aggregated info from of each encountered file system object, plus additional ones: Total, File, Size and Error. - Total: is the total number of enumerated objects. - File: is the total number of files. File is considered when object is neither nor . - Size: is the total size of enumerated objects. - Error: is the total number of errors encountered during enumeration. - - A dictionary mapping the keys mentioned above to their respective aggregated values. - Directory: is an object which has attribute without one. - - - - - - - The transaction. - The target directory. - flags that specify how the directory is to be enumerated. - Indicates the format of the path parameter(s). - - - [AlphaFS] Enumerates the streams of type :$DATA from the specified directory. - The path to the directory to enumerate streams of. - The streams of type :$DATA in the specified directory. - - - [AlphaFS] Enumerates the streams of type :$DATA from the specified directory. - The path to the directory to enumerate streams of. - Indicates the format of the path parameter(s). - The streams of type :$DATA in the specified directory. - - - [AlphaFS] Enumerates the streams of type :$DATA from the specified directory. - The transaction. - The path to the directory to enumerate streams of. - The streams of type :$DATA in the specified directory. - - - [AlphaFS] Enumerates the streams of type :$DATA from the specified directory. - The transaction. - The path to the directory to enumerate streams of. - Indicates the format of the path parameter(s). - The streams of type :$DATA in the specified directory. - - - [AlphaFS] Backs up (export) encrypted directories. This is one of a group of Encrypted File System (EFS) functions that is - intended to implement backup and restore functionality, while maintaining files in their encrypted state. - - - The directory being backed up is not decrypted; it is backed up in its encrypted state. - If the caller does not have access to the key for the file, the caller needs to export encrypted files. See . - To backup an encrypted directory call one of the overloads and specify the directory to backup along with the destination stream of the backup data. - This function is intended for the backup of only encrypted directories; see for backup of unencrypted directories. - Note that this method does not back up the files inside the directory, only the directory entry itself. - - - - - The name of the file to be backed up. - The destination stream to which the backup data will be written. - - - [AlphaFS] Backs up (export) encrypted directories. This is one of a group of Encrypted File System (EFS) functions that is - intended to implement backup and restore functionality, while maintaining files in their encrypted state. - - - The directory being backed up is not decrypted; it is backed up in its encrypted state. - If the caller does not have access to the key for the file, the caller needs to export encrypted files. See . - To backup an encrypted directory call one of the overloads and specify the directory to backup along with the destination stream of the backup data. - This function is intended for the backup of only encrypted directories; see for backup of unencrypted directories. - Note that this method does not back up the files inside the directory, only the directory entry itself. - - - - - The name of the file to be backed up. - The destination stream to which the backup data will be written. - The path format of the parameter. - - - [AlphaFS] Restores (import) encrypted directories. This is one of a group of Encrypted File System (EFS) functions that is - intended to implement backup and restore functionality, while maintaining files in their encrypted state. - - - If the caller does not have access to the key for the directory, the caller needs to restore encrypted directories. See . - To restore an encrypted directory call one of the overloads and specify the file to restore along with the destination stream of the restored data. - This function is intended for the restoration of only encrypted directories; see for backup of unencrypted files. - - - - - The stream to read previously backed up data from. - The path of the destination directory to restore to. - - - [AlphaFS] Restores (import) encrypted directories. This is one of a group of Encrypted File System (EFS) functions that is - intended to implement backup and restore functionality, while maintaining files in their encrypted state. - - - If the caller does not have access to the key for the directory, the caller needs to restore encrypted directories. See . - To restore an encrypted directory call one of the overloads and specify the file to restore along with the destination stream of the restored data. - This function is intended for the restoration of only encrypted directories; see for backup of unencrypted files. - - - - - The stream to read previously backed up data from. - The path of the destination directory to restore to. - The path format of the parameter. - - - [AlphaFS] Restores (import) encrypted directories. This is one of a group of Encrypted File System (EFS) functions that is - intended to implement backup and restore functionality, while maintaining files in their encrypted state. - - - If the caller does not have access to the key for the directory, the caller needs to restore encrypted directories. See . - To restore an encrypted directory call one of the overloads and specify the file to restore along with the destination stream of the restored data. - This function is intended for the restoration of only encrypted directories; see for backup of unencrypted files. - - - - - The stream to read previously backed up data from. - The path of the destination directory to restore to. - If set to a hidden directory will be overwritten on import. - - - [AlphaFS] Restores (import) encrypted directories. This is one of a group of Encrypted File System (EFS) functions that is - intended to implement backup and restore functionality, while maintaining files in their encrypted state. - - - If the caller does not have access to the key for the directory, the caller needs to restore encrypted directories. See . - To restore an encrypted directory call one of the overloads and specify the file to restore along with the destination stream of the restored data. - This function is intended for the restoration of only encrypted directories; see for backup of unencrypted files. - - - - - The stream to read previously backed up data from. - The path of the destination directory to restore to. - If set to a hidden directory will be overwritten on import. - The path format of the parameter. - - - Exposes instance methods for creating, moving, and enumerating through directories and subdirectories. This class cannot be inherited. - - - Refreshes the state of the EntryInfo instance. - - - [AlphaFS] Decrypts a directory that was encrypted by the current account using the Encrypt method. - - - - - - - - - [AlphaFS] Decrypts a directory that was encrypted by the current account using the Encrypt method. - - - - - - - to decrypt the directory recursively. only decrypt files and directories in the root of the directory. - - - [AlphaFS] Disables encryption of the specified directory and the files in it. It does not affect encryption of subdirectories below the indicated directory. - on success, otherwise. - This method will create/change the file "Desktop.ini" and wil set Encryption value: "Disable=0" - - - [AlphaFS] Enables encryption of the specified directory and the files in it. It does not affect encryption of subdirectories below the indicated directory. - on success, otherwise. - This method will create/change the file "Desktop.ini" and wil set Encryption value: "Disable=1" - - - [AlphaFS] Encrypts a directory so that only the account used to encrypt the directory can decrypt it. - - - - - - - - - [AlphaFS] Decrypts a directory that was encrypted by the current account using the Encrypt method. - - - - - - - to encrypt the directory recursively. only encrypt files and directories in the root of the directory. - - - [AlphaFS] Deletes empty subdirectories from the instance. - - - [AlphaFS] Deletes empty subdirectories from the instance. - deletes empty subdirectories from this directory and its subdirectories. - - - [AlphaFS] Deletes empty subdirectories from the instance. - deletes empty subdirectories from this directory and its subdirectories. - overrides read only of empty directories. - - - [AlphaFS] Compresses a directory using NTFS compression. - This will only compress the root items (non recursive). - - - - - - - - - [AlphaFS] Compresses a directory using NTFS compression. - - - - - - - flags that specify how the directory is to be enumerated. - - - [AlphaFS] Decompresses an NTFS compressed directory. - This will only decompress the root items (non recursive). - - - - - - - - - [AlphaFS] Decompresses an NTFS compressed directory. - - - - - - - flags that specify how the directory is to be enumerated. - - - [AlphaFS] Disables compression of the specified directory and the files in it. - - This method disables the directory-compression attribute. It will not decompress the current contents of the directory. - However, newly created files and directories will be uncompressed. - - - - [AlphaFS] Enables compression of the specified directory and the files in it. - - This method enables the directory-compression attribute. It will not compress the current contents of the directory. - However, newly created files and directories will be compressed. - - - - [AlphaFS] Counts file system objects: files, folders or both) in a given directory. - The counted number of file system objects. - - - - - - - flags that specify how the directory is to be enumerated. - - - [AlphaFS] Counts file system objects: files, folders or both) in a given directory. - The counted number of file system objects. - - - - - - - - The search string to match against the names of directories in path. - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - flags that specify how the directory is to be enumerated. - - - [AlphaFS] Copies a instance and its contents to a new path. - - Use this method to prevent overwriting of an existing directory by default. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two directories have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - A new instance if the directory was completely copied. - - - - - - - The destination directory path. - - - [AlphaFS] Copies a instance and its contents to a new path. - - Use this method to prevent overwriting of an existing directory by default. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two directories have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - A new instance if the directory was completely copied. - - - - - - - The destination directory path. - Indicates the format of the path parameter(s). - - - [AlphaFS] Copies an existing directory to a new directory, allowing the overwriting of an existing directory, can be specified. - - Option is recommended for very large file transfers. - Use this method to allow or prevent overwriting of an existing directory. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two directories have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - - Returns a new directory, or an overwrite of an existing directory if is not . - If the directory exists and contains , an is thrown. - - - - - - - - The destination directory path. - that specify how the directory is to be copied. This parameter can be . - - - [AlphaFS] Copies an existing directory to a new directory, allowing the overwriting of an existing directory, can be specified. - - Option is recommended for very large file transfers. - Use this method to allow or prevent overwriting of an existing directory. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two directories have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - - Returns a new directory, or an overwrite of an existing directory if is not . - If the directory exists and contains , an is thrown. - - - - - - - - The destination directory path. - that specify how the directory is to be copied. This parameter can be . - Indicates the format of the path parameter(s). - - - [AlphaFS] Copies an existing directory to a new directory, allowing the overwriting of an existing directory, can be specified. - and the possibility of notifying the application of its progress through a callback function. - - Option is recommended for very large file transfers. - Use this method to allow or prevent overwriting of an existing directory. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two directories have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - A class with details of the Copy action. - - - - - - - The destination directory path. - that specify how the directory is to be copied. This parameter can be . - A callback function that is called each time another portion of the directory has been copied. This parameter can be . - The argument to be passed to the callback function. This parameter can be . - - - [AlphaFS] Copies an existing directory to a new directory, allowing the overwriting of an existing directory, can be specified. - and the possibility of notifying the application of its progress through a callback function. - - Option is recommended for very large file transfers. - Use this method to allow or prevent overwriting of an existing directory. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two directories have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - A class with details of the Copy action. - - - - - - - The destination directory path. - that specify how the directory is to be copied. This parameter can be . - A callback function that is called each time another portion of the directory has been copied. This parameter can be . - The argument to be passed to the callback function. This parameter can be . - Indicates the format of the path parameter(s). - - - Moves a instance and its contents to a new path. - - Use this method to prevent overwriting of an existing directory by default. - This method does not work across disk volumes. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two directories have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - A class with details of the Move action. - - - - - - - - The name and path to which to move this directory. - The destination cannot be another disk volume or a directory with the identical name. - It can be an existing directory to which you want to add this directory as a subdirectory. - - - - Moves a instance and its contents to a new path. - - Use this method to prevent overwriting of an existing directory by default. - This method does not work across disk volumes. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two directories have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - A new instance if the directory was completely moved. - - - - - - - - The name and path to which to move this directory. - The destination cannot be another disk volume or a directory with the identical name. - It can be an existing directory to which you want to add this directory as a subdirectory. - - Indicates the format of the path parameter(s). - - - [AlphaFS] Moves a instance and its contents to a new path, can be specified. - - Use this method to allow or prevent overwriting of an existing directory. - This method does not work across disk volumes unless contains . - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two directories have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - A new instance if the directory was completely moved. - - - - - - - - The name and path to which to move this directory. - The destination cannot be another disk volume unless contains , or a directory with the identical name. - It can be an existing directory to which you want to add this directory as a subdirectory. - - that specify how the directory is to be moved. This parameter can be . - - - [AlphaFS] Moves a instance and its contents to a new path, can be specified. - - Use this method to allow or prevent overwriting of an existing directory. - This method does not work across disk volumes unless contains . - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two directories have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - A new instance if the directory was completely moved. - - - - - - - - The name and path to which to move this directory. - The destination cannot be another disk volume unless contains , or a directory with the identical name. - It can be an existing directory to which you want to add this directory as a subdirectory. - - that specify how the directory is to be moved. This parameter can be . - Indicates the format of the path parameter(s). - - - [AlphaFS] Moves a instance and its contents to a new path, can be specified, - and the possibility of notifying the application of its progress through a callback function. - - Use this method to allow or prevent overwriting of an existing directory. - This method does not work across disk volumes unless contains . - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two directories have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - A class with details of the Move action. - - - - - - - - The name and path to which to move this directory. - The destination cannot be another disk volume unless contains , or a directory with the identical name. - It can be an existing directory to which you want to add this directory as a subdirectory. - - that specify how the directory is to be moved. This parameter can be . - A callback function that is called each time another portion of the directory has been moved. This parameter can be . - The argument to be passed to the callback function. This parameter can be . - - - [AlphaFS] Moves a instance and its contents to a new path, can be specified, - and the possibility of notifying the application of its progress through a callback function. - - Use this method to allow or prevent overwriting of an existing directory. - This method does not work across disk volumes unless contains . - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two directories have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - A class with details of the Move action. - - - - - - - - The name and path to which to move this directory. - The destination cannot be another disk volume unless contains , or a directory with the identical name. - It can be an existing directory to which you want to add this directory as a subdirectory. - - that specify how the directory is to be moved. This parameter can be . - A callback function that is called each time another portion of the directory has been moved. This parameter can be . - The argument to be passed to the callback function. This parameter can be . - Indicates the format of the path parameter(s). - - - Copy/move a Non-/Transacted file or directory including its children to a new location, - or can be specified, and the possibility of notifying the application of its progress through a callback function. - - Option is recommended for very large file transfers. - You cannot use the Move method to overwrite an existing file, unless contains . - Note that if you attempt to replace a file by moving a file of the same name into that directory, you get an IOException. - - - A class with details of the Copy or Move action. - - - - - - - The destination directory path. - that specify how the file is to be copied. This parameter can be . - that specify how the file is to be moved. This parameter can be . - A callback function that is called each time another portion of the file has been copied. This parameter can be . - The argument to be passed to the callback function. This parameter can be . - Returns the retrieved long full path. - Indicates the format of the path parameter(s). - - - Returns the original path that was passed by the user. - A string that represents this object. - - - Applies access control list (ACL) entries described by a object to the directory described by the current DirectoryInfo object. - A object that describes an ACL entry to apply to the directory described by the path parameter. - - - Applies access control list (ACL) entries described by a object to the directory described by the current DirectoryInfo object. - A object that describes an ACL entry to apply to the directory described by the path parameter. - One or more of the values that specifies the type of access control list (ACL) information to set. - - - Refreshes the state of the object. - - - Returns an array of strongly typed entries representing all the files and subdirectories in a directory. - An array of strongly typed entries. - - For subdirectories, the objects returned by this method can be cast to the derived class . - Use the value returned by the property to determine whether the represents a file or a directory. - - - If there are no files or directories in the DirectoryInfo, this method returns an empty array. This method is not recursive. - For subdirectories, the FileSystemInfo objects returned by this method can be cast to the derived class DirectoryInfo. - Use the FileAttributes value returned by the Attributes property to determine whether the FileSystemInfo represents a file or a directory. - - - - - - - - - - Retrieves an array of strongly typed objects representing the files and subdirectories that match the specified search criteria. - - The search string to match against the names of directories in path. - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - An array of strongly typed entries. - - For subdirectories, the objects returned by this method can be cast to the derived class . - Use the value returned by the property to determine whether the represents a file or a directory. - - - If there are no files or directories in the DirectoryInfo, this method returns an empty array. This method is not recursive. - For subdirectories, the FileSystemInfo objects returned by this method can be cast to the derived class DirectoryInfo. - Use the FileAttributes value returned by the Attributes property to determine whether the FileSystemInfo represents a file or a directory. - - - - - - - - - - Retrieves an array of strongly typed objects representing the files and subdirectories that match the specified search criteria. - - The search string to match against the names of directories in path. - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - - One of the enumeration values that specifies whether the - should include only the current directory or should include all subdirectories. - - An array of strongly typed entries. - - For subdirectories, the objects returned by this method can be cast to the derived class . - Use the value returned by the property to determine whether the represents a file or a directory. - - - If there are no files or directories in the DirectoryInfo, this method returns an empty array. This method is not recursive. - For subdirectories, the FileSystemInfo objects returned by this method can be cast to the derived class DirectoryInfo. - Use the FileAttributes value returned by the Attributes property to determine whether the FileSystemInfo represents a file or a directory. - - - - - - - - - - Returns a file list from the current directory. - An array of type . - The order of the returned file names is not guaranteed; use the Sort() method if a specific sort order is required. - If there are no files in the , this method returns an empty array. - - The EnumerateFiles and GetFiles methods differ as follows: When you use EnumerateFiles, you can start enumerating the collection of names - before the whole collection is returned; when you use GetFiles, you must wait for the whole array of names to be returned before you can access the array. - Therefore, when you are working with many files and directories, EnumerateFiles can be more efficient. - - - - - - - - - - Returns a file list from the current directory matching the given search pattern. - - The search string to match against the names of directories in path. - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - An array of type . - The order of the returned file names is not guaranteed; use the Sort() method if a specific sort order is required. - If there are no files in the , this method returns an empty array. - - The EnumerateFiles and GetFiles methods differ as follows: When you use EnumerateFiles, you can start enumerating the collection of names - before the whole collection is returned; when you use GetFiles, you must wait for the whole array of names to be returned before you can access the array. - Therefore, when you are working with many files and directories, EnumerateFiles can be more efficient. - - - - - - - - - - Returns a file list from the current directory matching the given search pattern and using a value to determine whether to search subdirectories. - - The search string to match against the names of directories in path. - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - - One of the enumeration values that specifies whether the - should include only the current directory or should include all subdirectories. - - An array of type . - The order of the returned file names is not guaranteed; use the Sort() method if a specific sort order is required. - If there are no files in the , this method returns an empty array. - - The EnumerateFiles and GetFiles methods differ as follows: When you use EnumerateFiles, you can start enumerating the collection of names - before the whole collection is returned; when you use GetFiles, you must wait for the whole array of names to be returned before you can access the array. - Therefore, when you are working with many files and directories, EnumerateFiles can be more efficient. - - - - - - - - - - Returns the subdirectories of the current directory. - An array of objects. - If there are no subdirectories, this method returns an empty array. This method is not recursive. - - The EnumerateDirectories and GetDirectories methods differ as follows: When you use EnumerateDirectories, you can start enumerating the collection of names - before the whole collection is returned; when you use GetDirectories, you must wait for the whole array of names to be returned before you can access the array. - Therefore, when you are working with many files and directories, EnumerateDirectories can be more efficient. - - - - - - - - - - Returns an array of directories in the current matching the given search criteria. - An array of type matching . - - The EnumerateDirectories and GetDirectories methods differ as follows: When you use EnumerateDirectories, you can start enumerating the collection of names - before the whole collection is returned; when you use GetDirectories, you must wait for the whole array of names to be returned before you can access the array. - Therefore, when you are working with many files and directories, EnumerateDirectories can be more efficient. - - - - - - - - - The search string to match against the names of directories in path. - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - - - Returns an array of directories in the current matching the given search criteria and using a value to determine whether to search subdirectories. - An array of type matching . - If there are no subdirectories, or no subdirectories match the searchPattern parameter, this method returns an empty array. - - The EnumerateDirectories and GetDirectories methods differ as follows: When you use EnumerateDirectories, you can start enumerating the collection of names - before the whole collection is returned; when you use GetDirectories, you must wait for the whole array of names to be returned before you can access the array. - Therefore, when you are working with many files and directories, EnumerateDirectories can be more efficient. - - - - - - - - - The search string to match against the names of directories in path. - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - - One of the enumeration values that specifies whether the - should include only the current directory or should include all subdirectories. - - - - Gets a object that encapsulates the access control list (ACL) entries for the directory described by the current DirectoryInfo object. - A object that encapsulates the access control rules for the directory. - - - Gets a object that encapsulates the specified type of access control list (ACL) entries for the directory described by the current object. - One of the values that specifies the type of access control list (ACL) information to receive. - A object that encapsulates the access control rules for the file described by the path parameter. - - - Returns an enumerable collection of file system information in the current directory. - An enumerable collection of file system information in the current directory. - - - - - - - - - Returns an enumerable collection of file system information that matches a specified search pattern. - An enumerable collection of file system information objects that matches . - - - - - - - - The search string to match against the names of directories in path. - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - - - Returns an enumerable collection of file system information that matches a specified search pattern and search subdirectory option. - An enumerable collection of file system information objects that matches and . - - - - - - - - The search string to match against the names of directories in path. - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - - One of the enumeration values that specifies whether the - should include only the current directory or should include all subdirectories. - - - - [AlphaFS] Returns an enumerable collection of file system information in the current directory. - An enumerable collection of file system information in the current directory. - - - - - - - flags that specify how the directory is to be enumerated. - - - [AlphaFS] Returns an enumerable collection of file system information that matches a specified search pattern. - An enumerable collection of file system information objects that matches . - - - - - - - - The search string to match against the names of directories in path. - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - flags that specify how the directory is to be enumerated. - - - Returns an enumerable collection of file information in the current directory. - An enumerable collection of the files in the current directory. - - - - - - - - - Returns an enumerable collection of file information that matches a search pattern. - An enumerable collection of files that matches . - - - - - - - - The search string to match against the names of directories in path. - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - - - Returns an enumerable collection of file information that matches a specified search pattern and search subdirectory option. - An enumerable collection of files that matches and . - - - - - - - - The search string to match against the names of directories in path. - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - - One of the enumeration values that specifies whether the - should include only the current directory or should include all subdirectories. - - - - Returns an enumerable collection of file information in the current directory. - An enumerable collection of the files in the current directory. - - - - - - - flags that specify how the directory is to be enumerated. - - - Returns an enumerable collection of file information that matches a search pattern. - An enumerable collection of files that matches . - - - - - - - - The search string to match against the names of directories in path. - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - flags that specify how the directory is to be enumerated. - - - Returns an enumerable collection of directory information in the current directory. - An enumerable collection of directories in the current directory. - - - - - - - - - Returns an enumerable collection of directory information that matches a specified search pattern. - An enumerable collection of directories that matches . - - - - - - - - The search string to match against the names of directories in path. - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - - - Returns an enumerable collection of directory information that matches a specified search pattern and search subdirectory option. - An enumerable collection of directories that matches and . - - - - - - - - The search string to match against the names of directories in path. - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - - One of the enumeration values that specifies whether the - should include only the current directory or should include all subdirectories. - - - - [AlphaFS] Returns an enumerable collection of directory information in the current directory. - An enumerable collection of directories in the current directory. - - - - - - - flags that specify how the directory is to be enumerated. - - - Returns an enumerable collection of directory information that matches a specified search pattern. - An enumerable collection of directories that matches . - - - - - - - - The search string to match against the names of directories in path. - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - flags that specify how the directory is to be enumerated. - - - Deletes this if it is empty. - - - - - - - - - Deletes this instance of a , specifying whether to delete subdirectories and files. - - If the has no files or subdirectories, this method deletes the even if recursive is . - Attempting to delete a that is not empty when recursive is false throws an . - - - - - - - - to delete this directory, its subdirectories, and all files; otherwise, . - - - [AlphaFS] Deletes this instance of a , specifying whether to delete files and subdirectories. - - If the has no files or subdirectories, this method deletes the even if recursive is . - Attempting to delete a that is not empty when recursive is false throws an . - - - - - - - - to delete this directory, its subdirectories, and all files; otherwise, . - ignores read only attribute of files and directories. - - - Creates a subdirectory or subdirectories on the specified path. The specified path can be relative to this instance of the class. - The specified path. This cannot be a different disk volume. - The last directory specified in . - - Any and all directories specified in path are created, unless some part of path is invalid. - The path parameter specifies a directory path, not a file path. - If the subdirectory already exists, this method does nothing. - - - - Creates a subdirectory or subdirectories on the specified path. The specified path can be relative to this instance of the class. - The specified path. This cannot be a different disk volume. - The security to apply. - The last directory specified in . - - Any and all directories specified in path are created, unless some part of path is invalid. - The path parameter specifies a directory path, not a file path. - If the subdirectory already exists, this method does nothing. - - - - [AlphaFS] Creates a subdirectory or subdirectories on the specified path. The specified path can be relative to this instance of the class. - The last directory specified in . - - Any and all directories specified in path are created, unless some part of path is invalid. - The path parameter specifies a directory path, not a file path. - If the subdirectory already exists, this method does nothing. - - The specified path. This cannot be a different disk volume. - When compresses the directory. - - - [AlphaFS] Creates a subdirectory or subdirectories on the specified path. The specified path can be relative to this instance of the class. - The specified path. This cannot be a different disk volume. - The path of the directory to use as a template when creating the new directory. - When compresses the directory. - The last directory specified in . - - Any and all directories specified in path are created, unless some part of path is invalid. - The path parameter specifies a directory path, not a file path. - If the subdirectory already exists, this method does nothing. - - - - [AlphaFS] Creates a subdirectory or subdirectories on the specified path. The specified path can be relative to this instance of the class. - The specified path. This cannot be a different disk volume. - The security to apply. - When compresses the directory. - The last directory specified in . - - Any and all directories specified in path are created, unless some part of path is invalid. - The path parameter specifies a directory path, not a file path. - If the subdirectory already exists, this method does nothing. - - - - [AlphaFS] Creates a subdirectory or subdirectories on the specified path. The specified path can be relative to this instance of the class. - The path of the directory to use as a template when creating the new directory. - The specified path. This cannot be a different disk volume. - When compresses the directory. - The security to apply. - The last directory specified in . - - Any and all directories specified in path are created, unless some part of path is invalid. - The path parameter specifies a directory path, not a file path. - If the subdirectory already exists, this method does nothing. - - - - Creates a subdirectory or subdirectories on the specified path. The specified path can be relative to this instance of the DirectoryInfo class. - The last directory specified in path as an object. - - Any and all directories specified in path are created, unless some part of path is invalid. - The path parameter specifies a directory path, not a file path. - If the subdirectory already exists, this method does nothing. - - The specified path. This cannot be a different disk volume or Universal Naming Convention (UNC) name. - The path of the directory to use as a template when creating the new directory. - The security to apply. - When compresses the directory. - - - Creates a directory. - If the directory already exists, this method does nothing. - - - Creates a directory using a object. - The access control to apply to the directory. - If the directory already exists, this method does nothing. - - - [AlphaFS] Creates a directory using a object. - When compresses the directory. - If the directory already exists, this method does nothing. - - - [AlphaFS] Creates a directory using a object. - The access control to apply to the directory. - When compresses the directory. - If the directory already exists, this method does nothing. - - - [AlphaFS] Returns an enumerable collection of instances for the directory. - An enumerable collection of instances for the directory. - - - Initializes a new instance of the class on the specified path. - The path on which to create the . - - This constructor does not check if a directory exists. This constructor is a placeholder for a string that is used to access the disk in subsequent operations. - The path parameter can be a file name, including a file on a Universal Naming Convention (UNC) share. - - - - [AlphaFS] Initializes a new instance of the class on the specified path. - The path on which to create the . - Indicates the format of the path parameter(s). - This constructor does not check if a directory exists. This constructor is a placeholder for a string that is used to access the disk in subsequent operations. - - - [AlphaFS] Special internal implementation. - The transaction. - The full path on which to create the . - Not used. - Not used. - This constructor does not check if a directory exists. This constructor is a placeholder for a string that is used to access the disk in subsequent operations. - - - [AlphaFS] Initializes a new instance of the class on the specified path. - The transaction. - The path on which to create the . - This constructor does not check if a directory exists. This constructor is a placeholder for a string that is used to access the disk in subsequent operations. - - - [AlphaFS] Initializes a new instance of the class on the specified path. - The transaction. - The path on which to create the . - Indicates the format of the path parameter(s). - This constructor does not check if a directory exists. This constructor is a placeholder for a string that is used to access the disk in subsequent operations. - - - Gets a value indicating whether the directory exists. - - The property returns if any error occurs while trying to determine if the - specified directory exists. - This can occur in situations that raise exceptions such as passing a directory name with invalid characters or too many - characters, - a failing or missing disk, or if the caller does not have permission to read the directory. - - if the directory exists; otherwise, . - - - Gets the name of this instance. - The directory name. - - This Name property returns only the name of the directory, such as "Bin". - To get the full path, such as "c:\public\Bin", use the FullName property. - - - - Gets the parent directory of a specified subdirectory. - The parent directory, or null if the path is null or if the file path denotes a root (such as "\", "C:", or * "\\server\share"). - - - Gets the root portion of the directory. - An object that represents the root of the directory. - - - Indicates the operation to be performed when opening a file using the OpenEncryptedFileRaw. - - - (0) Open the file for export (backup). - - - (1) The file is being opened for import (restore). - - - (2) Import (restore) a directory containing encrypted files. This must be combined with one of the previous two flags to indicate the operation. - - - (4) Overwrite a hidden file on import. - - - Defines values that are used with the FindFirstStreamW function to specify the information level of the returned data. - - Minimum supported client: Windows Vista [desktop apps only] - Minimum supported server: Windows Server 2003 [desktop apps only] - - - - The FindFirstStreamW function retrieves standard stream information. The data is returned in a structure. - - - Used to determine valid enumeration values. All supported enumeration values are less than FindStreamInfoMaxInfoLevel. - - - Specifies control options that filter the device information elements that are added to the device information set. - - - DIGCF_DEFAULT - Return only the device that is associated with the system default device interface, if one is set, for the specified device interface classes. - - - - DIGCF_PRESENT - Return only devices that are currently present. - - - - DIGCF_ALLCLASSES - Return a list of installed devices for the specified device setup classes or device interface classes. - - - - DIGCF_PROFILE - Return only devices that are a part of the current hardware profile. - - - - DIGCF_DEVICEINTERFACE - - Return devices that support device interfaces for the specified device interface classes. - This flag must be set in the Flags parameter if the Enumerator parameter specifies a Device Instance ID. - - - - - FILE_INFO_BY_HANDLE_CLASS - Identifies the type of file information that GetFileInformationByHandleEx should retrieve or SetFileInformationByHandle should set. - - - - FILE_BASIC_INFO - Minimal information for the file should be retrieved or set. Used for file handles. - - - - FILE_ID_BOTH_DIR_INFO - Files in the specified directory should be retrieved. Used for directory handles. - Use only when calling GetFileInformationByHandleEx. - - The number of files returned for each call to GetFileInformationByHandleEx - depends on the size of the buffer that is passed to the function. - Any subsequent calls to GetFileInformationByHandleEx on the same handle - will resume the enumeration operation after the last file is returned. - - - - - Additional flags that control the search. - - - No additional flags used. - - - Searches are case-sensitive. - - - Uses a larger buffer for directory queries, which can increase performance of the find operation. - This value is not supported until Windows Server 2008 R2 and Windows 7. - - - FINDEX_INFO_LEVELS Enumeration - Defines values that are used with the FindFirstFileEx function to specify the information level of the returned data. - - Minimum supported client: Windows XP [desktop apps | Windows Store apps] - Minimum supported server: Windows Server 2003 [desktop apps | Windows Store apps] - - - - A standard set of attribute is returned in a structure. - - - The FindFirstFileEx function does not query the short file name, improving overall enumeration speed. - This value is not supported until Windows Server 2008 R2 and Windows 7. - - - FINDEX_SEARCH_OPS Enumeration - Defines values that are used with the FindFirstFileEx function to specify the type of filtering to perform. - - Minimum supported client: Windows XP [desktop apps | Windows Store apps] - Minimum supported server: Windows Server 2003 [desktop apps | Windows Store apps] - - - - The search for a file that matches a specified file name. - The lpSearchFilter parameter of FindFirstFileEx must be NULL when this search operation is used. - - - - This is an advisory flag. If the file system supports directory filtering, - the function searches for a file that matches the specified name and is also a directory. - If the file system does not support directory filtering, this flag is silently ignored. -   - - The lpSearchFilter parameter of the FindFirstFileEx function must be NULL when this search value is used. - If directory filtering is desired, this flag can be used on all file systems, - but because it is an advisory flag and only affects file systems that support it, - the application must examine the file attribute data stored in the lpFindFileData parameter - of the FindFirstFileEx function to determine whether the function has returned a handle to a directory. - - - - - This filtering type is not available. - For more information, see Device Interface Classes. - - - Enum for struct ChangeErrorMode. - - - Use the system default, which is to display all error dialog boxes. - - - The system does not display the critical-error-handler message box. Instead, the system sends the error to the calling process/thread. - - - The system does not display the Windows Error Reporting dialog. - - - The system automatically fixes memory alignment faults and makes them invisible to the application. It does this for the calling process and any descendant processes. This feature is only supported by certain processor architectures. - - - The system does not display a message box when it fails to find a file. Instead, the error is returned to the calling process/thread. - - - Flags for SetupDiGetDeviceRegistryProperty(). - - - SPDRP_DEVICEDESC - Represents a description of a device instance. - - - - SPDRP_HARDWAREID - Represents the list of hardware identifiers for a device instance. - - - - SPDRP_COMPATIBLEIDS - Represents the list of compatible identifiers for a device instance. - - - - SPDRP_CLASS - Represents the name of the service that is installed for a device instance. - - - - SPDRP_CLASS - Represents the name of the device setup class that a device instance belongs to. - - - - SPDRP_CLASSGUID - Represents the of the device setup class that a device instance belongs to. - - - - SPDRP_DRIVER - Represents the registry entry name of the driver key for a device instance. - - - - SPDRP_MFG - Represents the name of the manufacturer of a device instance. - - - - SPDRP_FRIENDLYNAME - Represents the friendly name of a device instance. - - - - SPDRP_LOCATION_INFORMATION - Represents the bus-specific physical location of a device instance. - - - - SPDRP_PHYSICAL_DEVICE_LOCATION - Encapsulates the physical device location information provided by a device's firmware to Windows. - - - - SPDRP_ENUMERATOR_NAME - Represents the name of the enumerator for a device instance. - - - - SPDRP_LOCATION_PATHS - Represents the location of a device instance in the device tree. - - - - SPDRP_BASE_CONTAINERID - Represents the value of the base container identifier (ID) .The Windows Plug and Play (PnP) manager assigns this value to the device node (devnode). - - - - Volume Attributes used by the GetVolumeInfo() function. - - - No VolumeInfo attributes. - - - FILE_CASE_SENSITIVE_SEARCH - The specified volume supports case-sensitive file names. - - - - FILE_CASE_PRESERVED_NAMES - The specified volume supports preserved case of file names when it places a name on disk. - - - - FILE_UNICODE_ON_DISK - The specified volume supports Unicode in file names as they appear on disk. - - - - FILE_PERSISTENT_ACLS - - The specified volume preserves and enforces access control lists (ACL). - For example, the NTFS file system preserves and enforces ACLs, and the FAT file system does not. - - - - - FILE_FILE_COMPRESSION - The specified volume supports file-based compression. - - - - FILE_VOLUME_QUOTAS - The specified volume supports disk quotas. - - - - FILE_SUPPORTS_SPARSE_FILES - The specified volume supports sparse files. - - - - FILE_SUPPORTS_REPARSE_POINTS - The specified volume supports re-parse points. - - - - (does not appear on MSDN) - - - FILE_VOLUME_IS_COMPRESSED - The specified volume is a compressed volume, for example, a DoubleSpace volume. - - - - FILE_SUPPORTS_OBJECT_IDS - The specified volume supports object identifiers. - - - - FILE_SUPPORTS_ENCRYPTION - The specified volume supports the Encrypted File System (EFS). For more information, see File Encryption. - - - - FILE_NAMED_STREAMS - The specified volume supports named streams. - - - - FILE_READ_ONLY_VOLUME - The specified volume is read-only. - - - - FILE_SEQUENTIAL_WRITE_ONCE - The specified volume is read-only. - - - - FILE_SUPPORTS_TRANSACTIONS - The specified volume supports transactions.For more information, see About KTM. - - - - FILE_SUPPORTS_HARD_LINKS - The specified volume supports hard links. For more information, see Hard Links and Junctions. - - Windows Server 2008, Windows Vista, Windows Server 2003, and Windows XP: This value is not supported until Windows Server 2008 R2 and Windows 7. - - - FILE_SUPPORTS_EXTENDED_ATTRIBUTES - - The specified volume supports extended attributes. An extended attribute is a piece of application-specific metadata - that an application can associate with a file and is not part of the file's data. - - - Windows Server 2008, Windows Vista, Windows Server 2003, and Windows XP: This value is not supported until Windows Server 2008 R2 and Windows 7. - - - FILE_SUPPORTS_OPEN_BY_FILE_ID - The file system supports open by FileID. For more information, see FILE_ID_BOTH_DIR_INFO. - - Windows Server 2008, Windows Vista, Windows Server 2003, and Windows XP: This value is not supported until Windows Server 2008 R2 and Windows 7. - - - FILE_SUPPORTS_USN_JOURNAL - The specified volume supports update sequence number (USN) journals. For more information, see Change Journal Records. - - Windows Server 2008, Windows Vista, Windows Server 2003, and Windows XP: This value is not supported until Windows Server 2008 R2 and Windows 7. - - - Defines values that are used with the GetFileAttributesEx and GetFileAttributesTransacted functions to specify the information level of the returned data. - - - The GetFileAttributesEx or GetFileAttributesTransacted function retrieves a standard set of attribute information. The data is returned in a WIN32_FILE_ATTRIBUTE_DATA structure. - - - Opens an encrypted file in order to backup (export) or restore (import) the file. - If the function succeeds, it returns ERROR_SUCCESS. - If the function fails, it returns a nonzero error code defined in WinError.h. You can use FormatMessage with the FORMAT_MESSAGE_FROM_SYSTEM flag to get a generic text description of the error. - Minimum supported client: Windows XP Professional [desktop apps only] - Minimum supported server: Windows Server 2003 [desktop apps only] - The name of the file to be opened. - The operation to be performed. - [out] The address of a context block that must be presented in subsequent calls to - ReadEncryptedFileRaw, WriteEncryptedFileRaw, or CloseEncryptedFileRaw. - - - Closes an encrypted file after a backup or restore operation, and frees associated system resources. - Minimum supported client: Windows XP Professional [desktop apps only] - Minimum supported server: Windows Server 2003 [desktop apps only] - A pointer to a system-defined context block. The OpenEncryptedFileRaw function returns the context block. - - - Backs up (export) encrypted files. This is one of a group of Encrypted File System (EFS) functions that is intended to implement backup and restore functionality, while maintaining files in their encrypted state. - If the function succeeds, it returns ERROR_SUCCESS. - If the function fails, it returns a nonzero error code defined in WinError.h. You can use FormatMessage with the FORMAT_MESSAGE_FROM_SYSTEM flag to get a generic text description of the error. - Minimum supported client: Windows XP Professional [desktop apps only] - Minimum supported server: Windows Server 2003 [desktop apps only] - - - Restores (import) encrypted files. This is one of a group of Encrypted File System (EFS) functions that is intended to implement backup and restore functionality, while maintaining files in their encrypted state. - If the function succeeds, it returns ERROR_SUCCESS. - If the function fails, it returns a nonzero error code defined in WinError.h. You can use FormatMessage with the FORMAT_MESSAGE_FROM_SYSTEM flag to get a generic text description of the error. - Minimum supported client: Windows XP Professional [desktop apps only] - Minimum supported server: Windows Server 2003 [desktop apps only] - - - Returns a pointer to an IQueryAssociations object. - If this function succeeds, it returns S_OK. Otherwise, it returns an HRESULT error code. - Minimum supported client: Windows 2000 Professional, Windows XP [desktop apps only] - Minimum supported server: Windows 2000 Server [desktop apps only] - - - Searches for and retrieves a file or protocol association-related string from the registry. - Return value Type: HRESULT. Returns a standard COM error value, including the following: S_OK, E_POINTER and S_FALSE. - Minimum supported client: Windows 2000 Professional - Minimum supported server: Windows 2000 Server - - - Exposes methods that simplify the process of retrieving information stored in the registry in association with defining a file type or protocol and associating it with an application. - - - Initializes the IQueryAssociations interface and sets the root key to the appropriate ProgID. - If this method succeeds, it returns S_OK. Otherwise, it returns an HRESULT error code. - Minimum supported client: Windows 2000 Professional, Windows XP [desktop apps only] - Minimum supported server: Windows 2000 Server [desktop apps only] - - - Searches for and retrieves a file or protocol association-related string from the registry. - A standard COM error value, including the following: S_OK, E_POINTER, S_FALSE - Minimum supported client: Windows 2000 Professional, Windows XP [desktop apps only] - Minimum supported server: Windows 2000 Server [desktop apps only] - - - Determines whether a path to a file system object such as a file or folder is valid. - if the file exists; otherwise, . Call GetLastError for extended error information. - - This function tests the validity of the path. - A path specified by Universal Naming Convention (UNC) is limited to a file only; that is, \\server\share\file is permitted. - A network share path to a server or server share is not permitted; that is, \\server or \\server\share. - This function returns FALSE if a mounted remote drive is out of service. - - Minimum supported client: Windows 2000 Professional - Minimum supported server: Windows 2000 Server - - - Converts a file URL to a Microsoft MS-DOS path. - Type: HRESULT - If this function succeeds, it returns S_OK. Otherwise, it returns an HRESULT error code. - - Minimum supported client: Windows 2000 Professional, Windows XP [desktop apps only] - Minimum supported server: Windows 2000 Server [desktop apps only] - - - Creates a path from a file URL. - Type: HRESULT - If this function succeeds, it returns S_OK. Otherwise, it returns an HRESULT error code. - - Minimum supported client: Windows Vista [desktop apps only] - Minimum supported server: Windows Server 2008 [desktop apps only] - - - Converts a Microsoft MS-DOS path to a canonicalized URL. - Type: HRESULT - Returns S_FALSE if pszPath is already in URL format. In this case, pszPath will simply be copied to pszUrl. - Otherwise, it returns S_OK if successful or a standard COM error value if not. - - - UrlCreateFromPath does not support extended paths. These are paths that include the extended-length path prefix "\\?\". - - Minimum supported client: Windows 2000 Professional, Windows XP [desktop apps only] - Minimum supported server: Windows 2000 Server [desktop apps only] - - - Tests whether a URL is a specified type. - - Type: BOOL - For all but one of the URL types, UrlIs returns if the URL is the specified type, otherwise. - If UrlIs is set to , UrlIs will attempt to determine the URL scheme. - If the function is able to determine a scheme, it returns , or . - - Minimum supported client: Windows 2000 Professional, Windows XP [desktop apps only] - Minimum supported server: Windows 2000 Server [desktop apps only] - - - Destroys an icon and frees any memory the icon occupied. - Minimum supported client: Windows XP [desktop apps only] - Minimum supported server: Windows 2000 Server [desktop apps only] - - - Retrieves information about an object in the file system, such as a file, folder, directory, or drive root. - You should call this function from a background thread. Failure to do so could cause the UI to stop responding. - Minimum supported client: Windows 2000 Professional [desktop apps only] - Minimum supported server: Windows 2000 Server [desktop apps only] - - - - Creates a new transaction object. - - - Use the function to close the transaction handle. If the last transaction handle is closed - beforea client calls the CommitTransaction function with the transaction handle, then KTM rolls back the transaction. - Minimum supported client: Windows Vista - Minimum supported server:Windows Server 2008 - - - If the function succeeds, the return value is a handle to the transaction. - If the function fails, the return value is INVALID_HANDLE_VALUE. To get extended error information, call the GetLastError - function. - - - - Requests that the specified transaction be committed. - - You can commit any transaction handle that has been opened or created using the TRANSACTION_COMMIT permission; any - application can commit a transaction, not just the creator. - This function can only be called if the transaction is still active, not prepared, pre-prepared, or rolled back. - Minimum supported client: Windows Vista - Minimum supported server:Windows Server 2008 - - - If the function succeeds, the return value is nonzero. - If the function fails, the return value is 0 (zero). To get extended error information, call the GetLastError function. - - - - - Requests that the specified transaction be rolled back. This function is synchronous. - - - If the function succeeds, the return value is nonzero. - If the function fails, the return value is zero. To get extended error information, call the GetLastError function. - - - - Closes an open object handle. - - The CloseHandle function closes handles to the following objects: - Access token, Communications device, Console input, Console screen buffer, Event, File, File mapping, I/O completion port, - Job, Mailslot, Memory resource notification, Mutex, Named pipe, Pipe, Process, Semaphore, Thread, Transaction, Waitable - timer. - SetLastError is set to . - Minimum supported client: Windows 2000 Professional [desktop apps | Windows Store apps] - Minimum supported server: Windows 2000 Server [desktop apps | Windows Store apps] - - - If the function succeeds, the return value is nonzero. - If the function fails, the return value is zero. To get extended error information, call GetLastError. - If the application is running under a debugger, the function will throw an exception if it receives either a handle value - that is not valid or a pseudo-handle value.This can happen if you close a handle twice, or if you call CloseHandle on a handle - returned by the FindFirstFile function instead of calling the FindClose function. - - - - - Copies an existing file to a new file, notifying the application of its progress through a callback function. - - - This function fails with ERROR_ACCESS_DENIED if the destination file already exists and has the FILE_ATTRIBUTE_HIDDEN or - FILE_ATTRIBUTE_READONLY attribute set. - This function preserves extended attributes, OLE structured storage, NTFS file system alternate data streams, security - resource attributes, and file attributes. - Windows 7, Windows Server 2008 R2, Windows Server 2008, Windows Vista, Windows Server 2003, and Windows XP: - Security resource attributes (ATTRIBUTE_SECURITY_INFORMATION) for the existing file are not copied to the new file until - Windows 8 and Windows Server 2012. - Minimum supported client: Windows XP [desktop apps only] - Minimum supported server: Windows Server 2003 [desktop apps only] - - Filename of the existing file. - Filename of the new file. - The progress routine. - The data. - [out] The pb cancel. - The copy flags. - - If the function succeeds, the return value is nonzero. - If the function fails, the return value is zero. To get extended error information, call GetLastError. - - - - - Copies an existing file to a new file as a transacted operation, notifying the application of its progress through a callback - function. - - - This function fails with ERROR_ACCESS_DENIED if the destination file already exists and has the FILE_ATTRIBUTE_HIDDEN or - FILE_ATTRIBUTE_READONLY attribute set. - This function preserves extended attributes, OLE structured storage, NTFS file system alternate data streams, security - resource attributes, and file attributes. - Windows 7, Windows Server 2008 R2, Windows Server 2008, Windows Vista, Windows Server 2003, and Windows XP: - Security resource attributes (ATTRIBUTE_SECURITY_INFORMATION) for the existing file are not copied to the new file until - Windows 8 and Windows Server 2012. - Minimum supported client: Windows Vista [desktop apps only] - Minimum supported server: Windows Server 2008 [desktop apps only] - - - If the function succeeds, the return value is nonzero. - If the function fails, the return value is zero. To get extended error information, call GetLastError. - - - - - Creates or opens a file or I/O device. The most commonly used I/O devices are as follows: file, file stream, directory, physical - disk, volume, console buffer, tape drive, communications resource, mailslot, and pipe. - - Minimum supported client: Windows XP. - Minimum supported server: Windows Server 2003. - - If the function succeeds, the return value is an open handle to the specified file, device, named pipe, or mail slot. If the - function fails, the return value is Win32Errors.ERROR_INVALID_HANDLE. To get extended error information, call GetLastError. - - - - - Creates or opens a file or I/O device. The most commonly used I/O devices are as follows: file, file stream, directory, physical - disk, volume, console buffer, tape drive, communications resource, mailslot, and pipe. - - Minimum supported client: Windows Vista [desktop apps only]. - Minimum supported server: Windows Server 2008 [desktop apps only]. - - If the function succeeds, the return value is an open handle to the specified file, device, named pipe, or mail slot. If the - function fails, the return value is Win32Errors.ERROR_INVALID_HANDLE". To get extended error information, call GetLastError. - - - - Creates or opens a named or unnamed file mapping object for a specified file. - Minimum supported client: Windows XP. - Minimum supported server: Windows Server 2003. - - If the function succeeds, the return value is a handle to the newly created file mapping object. If the function fails, the return - value is . - - - - - Establishes a hard link between an existing file and a new file. This function is only supported on the NTFS file system, and only - for files, not directories. - - Minimum supported client: Windows XP [desktop apps only]. - Minimum supported server: Windows Server 2003 [desktop apps only]. - - If the function succeeds, the return value is nonzero. If the function fails, the return value is zero (0). To get extended error - information, call GetLastError. - - - - - Establishes a hard link between an existing file and a new file as a transacted operation. This function is only supported on the - NTFS file system, and only for files, not directories. - - Minimum supported client: Windows Vista [desktop apps only]. - Minimum supported server: Windows Server 2008 [desktop apps only]. - - If the function succeeds, the return value is nonzero. If the function fails, the return value is zero (0). To get extended error - information, call GetLastError. - - - - Creates a symbolic link. - Minimum supported client: Windows Vista [desktop apps only]. - Minimum supported server: Windows Server 2008 [desktop apps only]. - - The unmanaged prototype contains a return directive because the CreateSymbolicLink API function returns BOOLEAN, a one-byte data type. - The default marshaling for bool is four bytes (to allow seamless integration with BOOL return values). - If you were to use the default marshaling for BOOLEAN values, it's likely that you will get erroneous results. - The return directive forces PInvoke to marshal just one byte of the return value. - Source: http://www.informit.com/guides/content.aspx?g=dotnet&seqNum=762&ns=16196 - - - If the function succeeds, the return value is nonzero. If the function fails, the return value is zero (0). To get extended error - information, call GetLastError. - - - - Creates a symbolic link as a transacted operation. - Minimum supported client: Windows Vista [desktop apps only]. - Minimum supported server: Windows Server 2008 [desktop apps only]. - - The unmanaged prototype contains a return directive because the CreateSymbolicLink API function returns BOOLEAN, a one-byte data type. - The default marshaling for bool is four bytes (to allow seamless integration with BOOL return values). - If you were to use the default marshaling for BOOLEAN values, it's likely that you will get erroneous results. - The return directive forces PInvoke to marshal just one byte of the return value. - Source: http://www.informit.com/guides/content.aspx?g=dotnet&seqNum=762&ns=16196 - - - If the function succeeds, the return value is nonzero. If the function fails, the return value is zero (0). To get extended error - information, call GetLastError. - - - - Decrypts an encrypted file or directory. - - The DecryptFile function requires exclusive access to the file being decrypted, and will fail if another process is using the file. - If the file is not encrypted, DecryptFile simply returns a nonzero value, which indicates success. If lpFileName specifies a read- - only file, the function fails and GetLastError returns ERROR_FILE_READ_ONLY. If lpFileName specifies a directory that contains a - read-only file, the functions succeeds but the directory is not decrypted. - - Minimum supported client: Windows XP. - Minimum supported server: Windows Server 2003. - - If the function succeeds, the return value is nonzero. If the function fails, the return value is zero. To get extended error - information, call GetLastError. - - - - Deletes an existing file. - - If an application attempts to delete a file that does not exist, the DeleteFile function fails with ERROR_FILE_NOT_FOUND. - - If the file is a read-only file, the function fails with ERROR_ACCESS_DENIED. - - If the path points to a symbolic link, the symbolic link is deleted, not the target. To delete a target, you must call CreateFile - and specify FILE_FLAG_DELETE_ON_CLOSE. - - Minimum supported client: Windows XP [desktop apps | Windows Store apps]. - Minimum supported server: Windows Server 2003 [desktop apps | Windows Store apps]. - - If the function succeeds, the return value is nonzero. If the function fails, the return value is zero (0). To get extended error - information, call GetLastError. - - - - Deletes an existing file as a transacted operation. - Minimum supported client: Windows Vista [desktop apps only]. - Minimum supported server: Windows Server 2008 [desktop apps only]. - - If the function succeeds, the return value is nonzero. If the function fails, the return value is zero (0). To get extended error - information, call GetLastError. - - - - - Encrypts a file or directory. All data streams in a file are encrypted. All new files created in an encrypted directory are - encrypted. - - - The EncryptFile function requires exclusive access to the file being encrypted, and will fail if another process is using the file. - If the file is already encrypted, EncryptFile simply returns a nonzero value, which indicates success. If the file is compressed, - EncryptFile will decompress the file before encrypting it. If lpFileName specifies a read-only file, the function fails and - GetLastError returns ERROR_FILE_READ_ONLY. If lpFileName specifies a directory that contains a read-only file, the functions - succeeds but the directory is not encrypted. - - Minimum supported client: Windows XP. - Minimum supported server: Windows Server 2003. - - If the function succeeds, the return value is nonzero. If the function fails, the return value is zero. To get extended error - information, call GetLastError. - - - - - Disables or enables encryption of the specified directory and the files in it. It does not affect encryption of subdirectories - below the indicated directory. - - - EncryptionDisable() disables encryption of directories and files. It does not affect the visibility of files with the - FILE_ATTRIBUTE_SYSTEM attribute set. This method will create/change the file "Desktop.ini" and wil set Encryption value: - "Disable=0|1". - - Minimum supported client: Windows XP Professional [desktop apps only]. - Minimum supported server: Windows Server 2003 [desktop apps only]. - - If the function succeeds, the return value is nonzero. If the function fails, the return value is zero. To get extended error - information, call GetLastError. - - - - Retrieves the encryption status of the specified file. - Minimum supported client: Windows XP Professional [desktop apps only]. - Minimum supported server: Windows Server 2003 [desktop apps only]. - - If the function succeeds, the return value is nonzero. If the function fails, the return value is zero. To get extended error - information, call GetLastError. - - - - - Closes a file search handle opened by the FindFirstFile, FindFirstFileEx, FindFirstFileNameW, FindFirstFileNameTransactedW, - FindFirstFileTransacted, FindFirstStreamTransactedW, or FindFirstStreamW functions. - - Minimum supported client: Windows XP [desktop apps | Windows Store apps]. - Minimum supported server: Windows Server 2003 [desktop apps | Windows Store apps]. - - If the function succeeds, the return value is nonzero. If the function fails, the return value is zero. To get extended error - information, call GetLastError. - - - - Searches a directory for a file or subdirectory with a name and attributes that match those specified. - A trailing backslash is not allowed and will be removed. - Minimum supported client: Windows XP [desktop apps | Windows Store apps]. - Minimum supported server: Windows Server 2003 [desktop apps | Windows Store apps]. - - If the function succeeds, the return value is a search handle used in a subsequent call to FindNextFile or FindClose, and the - lpFindFileData parameter contains information about the first file or directory found. If the function fails or fails to locate - files from the search string in the lpFileName parameter, the return value is INVALID_HANDLE_VALUE and the contents of - lpFindFileData are indeterminate. To get extended error information, call the GetLastError function. - - - - - Searches a directory for a file or subdirectory with a name that matches a specific name as a transacted operation. - - A trailing backslash is not allowed and will be removed. - Minimum supported client: Windows Vista [desktop apps only]. - Minimum supported server: Windows Server 2008 [desktop apps only]. - - If the function succeeds, the return value is a search handle used in a subsequent call to FindNextFile or FindClose, and the - lpFindFileData parameter contains information about the first file or directory found. If the function fails or fails to locate - files from the search string in the lpFileName parameter, the return value is INVALID_HANDLE_VALUE and the contents of - lpFindFileData are indeterminate. To get extended error information, call the GetLastError function. - - - - - Creates an enumeration of all the hard links to the specified file. The FindFirstFileNameW function returns a handle to the - enumeration that can be used on subsequent calls to the FindNextFileNameW function. - - Minimum supported client: Windows Vista [desktop apps only]. - Minimum supported server: Windows Server 2008 [desktop apps only]. - - If the function succeeds, the return value is a search handle that can be used with the FindNextFileNameW function or closed with - the FindClose function. If the function fails, the return value is INVALID_HANDLE_VALUE (0xffffffff). To get extended error - information, call the GetLastError function. - - - - - Creates an enumeration of all the hard links to the specified file as a transacted operation. The function returns a handle to the - enumeration that can be used on subsequent calls to the FindNextFileNameW function. - - Minimum supported client: Windows Vista [desktop apps only]. - Minimum supported server: Windows Server 2008 [desktop apps only]. - - If the function succeeds, the return value is a search handle that can be used with the FindNextFileNameW function or closed with - the FindClose function. If the function fails, the return value is INVALID_HANDLE_VALUE (0xffffffff). To get extended error - information, call the GetLastError function. - - - - - Continues a file search from a previous call to the FindFirstFile, FindFirstFileEx, or FindFirstFileTransacted functions. - - Minimum supported client: Windows XP [desktop apps | Windows Store apps]. - Minimum supported server: Windows Server 2003 [desktop apps | Windows Store apps]. - - If the function succeeds, the return value is nonzero and the lpFindFileData parameter contains information about the next file or - directory found. If the function fails, the return value is zero and the contents of lpFindFileData are indeterminate. To get - extended error information, call the GetLastError function. If the function fails because no more matching files can be found, the - GetLastError function returns ERROR_NO_MORE_FILES. - - - - - Continues enumerating the hard links to a file using the handle returned by a successful call to the FindFirstFileName function. - - Minimum supported client: Windows Vista [desktop apps only]. - Minimum supported server: Windows Server 2008 [desktop apps only]. - - If the function succeeds, the return value is nonzero. If the function fails, the return value is zero (0). To get extended error - information, call GetLastError. If no matching files can be found, the GetLastError function returns ERROR_HANDLE_EOF. - - - - Flushes the buffers of a specified file and causes all buffered data to be written to a file. - Minimum supported client: Windows XP [desktop apps | Windows Store apps]. - Minimum supported server: Windows Server 2003 [desktop apps | Windows Store apps]. - - If the function succeeds, the return value is nonzero. If the function fails, the return value is zero. To get extended error - information, call GetLastError. - - - - Retrieves the actual number of bytes of disk storage used to store a specified file. - Minimum supported client: Windows XP [desktop apps only]. - Minimum supported server: Windows Server 2003 [desktop apps only]. - - If the function succeeds, the return value is the low-order DWORD of the actual number of bytes of disk storage used to store the - specified file, and if lpFileSizeHigh is non-NULL, the function puts the high-order DWORD of that actual value into the DWORD - pointed to by that parameter. This is the compressed file size for compressed files, the actual file size for noncompressed files. - If the function fails, and lpFileSizeHigh is NULL, the return value is INVALID_FILE_SIZE. To get extended error information, call - GetLastError. If the return value is INVALID_FILE_SIZE and lpFileSizeHigh is non-NULL, an application must call GetLastError to - determine whether the function has succeeded (value is NO_ERROR) or failed (value is other than NO_ERROR). - - - - Retrieves the actual number of bytes of disk storage used to store a specified file as a transacted operation. - Minimum supported client: Windows Vista [desktop apps only]. - Minimum supported server: Windows Server 2008 [desktop apps only]. - - If the function succeeds, the return value is the low-order DWORD of the actual number of bytes of disk storage used to store the - specified file, and if lpFileSizeHigh is non-NULL, the function puts the high-order DWORD of that actual value into the DWORD - pointed to by that parameter. This is the compressed file size for compressed files, the actual file size for noncompressed files. - If the function fails, and lpFileSizeHigh is NULL, the return value is INVALID_FILE_SIZE. To get extended error information, call - GetLastError. If the return value is INVALID_FILE_SIZE and lpFileSizeHigh is non-NULL, an application must call GetLastError to - determine whether the function has succeeded (value is NO_ERROR) or failed (value is other than NO_ERROR). - - - - - Retrieves attributes for a specified file or directory. - - - The GetFileAttributes function retrieves file system attribute information. - GetFileAttributesEx can obtain other sets of file or directory attribute information. - Currently, GetFileAttributesEx retrieves a set of standard attributes that is a superset of the file system attribute - information. - When the GetFileAttributesEx function is called on a directory that is a mounted folder, it returns the attributes of the directory, - not those of the root directory in the volume that the mounted folder associates with the directory. To obtain the attributes of - the associated volume, call GetVolumeNameForVolumeMountPoint to obtain the name of the associated volume. Then use the resulting - name in a call to GetFileAttributesEx. The results are the attributes of the root directory on the associated volume. - Symbolic link behavior: If the path points to a symbolic link, the function returns attributes for the symbolic link. - Minimum supported client: Windows XP [desktop apps only] - Minimum supported server: Windows Server 2003 [desktop apps only] - - - If the function succeeds, the return value is nonzero. - If the function fails, the return value is zero. To get extended error information, call GetLastError. - - - - Retrieves attributes for a specified file or directory. - - The GetFileAttributes function retrieves file system attribute information. - GetFileAttributesEx can obtain other sets of file or directory attribute information. - - Currently, GetFileAttributesEx retrieves a set of standard attributes that is a superset of the file system attribute information. - When the GetFileAttributesEx function is called on a directory that is a mounted folder, it returns the attributes of the directory, - not those of the root directory in the volume that the mounted folder associates with the directory. To obtain the attributes of - the associated volume, call GetVolumeNameForVolumeMountPoint to obtain the name of the associated volume. Then use the resulting - name in a call to GetFileAttributesEx. The results are the attributes of the root directory on the associated volume. - Symbolic link behavior: If the path points to a symbolic link, the function returns attributes for the symbolic link. - Transacted Operations - If a file is open for modification in a transaction, no other thread can open the file for modification until the transaction - is committed. Conversely, if a file is open for modification outside of a transaction, no transacted thread can open the file for - modification until the non-transacted handle is closed. If a non-transacted thread has a handle opened to modify a file, a call to - GetFileAttributesTransacted for that file will fail with an ERROR_TRANSACTIONAL_CONFLICT error. - Minimum supported client: Windows Vista [desktop apps only] - Minimum supported server: Windows Server 2008 [desktop apps only] - - - If the function succeeds, the return value is nonzero. - If the function fails, the return value is zero. To get extended error information, call GetLastError. - - - - Retrieves file information for the specified file. - - If the function succeeds, the return value is nonzero and file information data is contained in the buffer pointed to by the lpByHandleFileInformation parameter. - If the function fails, the return value is zero. To get extended error information, call GetLastError. - - - Depending on the underlying network features of the operating system and the type of server connected to, - the GetFileInformationByHandle function may fail, return partial information, or full information for the given file. - - Minimum supported client: Windows XP [desktop apps only] - Minimum supported server: Windows Server 2003 [desktop apps only] - - - - Retrieves file information for the specified file. - - - Minimum supported client: Windows Vista [desktop apps | Windows Store apps] - Minimum supported server: Windows Server 2008 [desktop apps | Windows Store apps] - Redistributable: Windows SDK on Windows Server 2003 and Windows XP. - - The file. - The file information by handle class. - Information describing the file. - Size of the buffer. - - If the function succeeds, the return value is nonzero and file information data is contained in the buffer pointed to by the - lpByHandleFileInformation parameter. - If the function fails, the return value is zero. To get extended error information, call GetLastError. - - - - Retrieves file information for the specified file. - - Minimum supported client: Windows Vista [desktop apps | Windows Store apps] - Minimum supported server: Windows Server 2008 [desktop apps | Windows Store apps] - Redistributable: Windows SDK on Windows Server 2003 and Windows XP. - - - If the function succeeds, the return value is nonzero and file information data is contained in the buffer pointed to by the - lpByHandleFileInformation parameter. - If the function fails, the return value is zero. To get extended error information, call GetLastError. - - The file. - The file information by handle class. - Information describing the file. - Size of the buffer. - - - - Retrieves the size of the specified file. - - - Minimum supported client: Windows XP [desktop apps only] - Minimum supported server: Windows Server 2003 [desktop apps only] - - - If the function succeeds, the return value is nonzero. - If the function fails, the return value is zero. To get extended error information, call GetLastError. - - - - Retrieves the final path for the specified file. - Minimum supported client: Windows Vista [desktop apps only]. - Minimum supported server: Windows Server 2008 [desktop apps only]. - - If the function succeeds, the return value is nonzero. If the function fails, the return value is zero. To get extended error - information, call GetLastError. - - - - - Checks whether the specified address is within a memory-mapped file in the address space of the specified process. If so, the - function returns the name of the memory-mapped file. - - Minimum supported client: Windows XP. - Minimum supported server: Windows Server 2003. - - If the function succeeds, the return value is nonzero. If the function fails, the return value is zero. To get extended error - information, call GetLastError. - - - - Locks the specified file for exclusive access by the calling process. - Minimum supported client: Windows XP. - Minimum supported server: Windows Server 2003. - - If the function succeeds, the return value is nonzero (TRUE). If the function fails, the return value is zero (FALSE). To get - extended error information, call GetLastError. - - - - Maps a view of a file mapping into the address space of a calling process. - Minimum supported client: Windows XP. - Minimum supported server: Windows Server 2003. - - If the function succeeds, the return value is the starting address of the mapped view. If the function fails, the return value is - . - - - - - Moves a file or directory, including its children. - You can provide a callback function that receives progress notifications. - - - The MoveFileWithProgress function coordinates its operation with the link tracking service, so link sources can be tracked as they are moved. - Minimum supported client: Windows XP [desktop apps only] - Minimum supported server: Windows Server 2003 [desktop apps only] - - Filename of the existing file. - Filename of the new file. - The progress routine. - The data. - The flags. - - If the function succeeds, the return value is nonzero. - If the function fails, the return value is zero. To get extended error information, call GetLastError. - - - - - Moves an existing file or a directory, including its children, as a transacted operation. - You can provide a callback function that receives progress notifications. - - - Minimum supported client: Windows Vista [desktop apps only] - Minimum supported server: Windows Server 2008 [desktop apps only] - - - If the function succeeds, the return value is nonzero. - If the function fails, the return value is zero. To get extended error information, call GetLastError. - - - - An application-defined callback function used with the CopyFileEx, MoveFileTransacted, and MoveFileWithProgress functions. - It is called when a portion of a copy or move operation is completed. - The LPPROGRESS_ROUTINE type defines a pointer to this callback function. - NativeCopyMoveProgressRoutine (NativeCopyMoveProgressRoutine) is a placeholder for the application-defined function name. - - - - Replaces one file with another file, with the option of creating a backup copy of the original file. The replacement file assumes the name of the replaced file and its identity. - - If the function succeeds, the return value is nonzero. - If the function fails, the return value is zero. To get extended error information, call GetLastError. - - Minimum supported client: Windows XP [desktop apps only] - Minimum supported server: Windows Server 2003 [desktop apps only] - - - Sets the attributes for a file or directory. - - If the function succeeds, the return value is nonzero. - If the function fails, the return value is zero. To get extended error information, call GetLastError. - - Minimum supported client: Windows XP - Minimum supported server: Windows Server 2003 - - - Sets the attributes for a file or directory as a transacted operation. - - If the function succeeds, the return value is nonzero. - If the function fails, the return value is zero. To get extended error information, call GetLastError. - - Minimum supported client: Windows Vista [desktop apps only] - Minimum supported server: Windows Server 2008 [desktop apps only] - - - Sets the date and time that the specified file or directory was created, last accessed, or last modified. - - If the function succeeds, the return value is nonzero. - If the function fails, the return value is zero. To get extended error information, call GetLastError. - - Minimum supported client: Windows XP [desktop apps only] - Minimum supported server: Windows Server 2003 [desktop apps only] - - - Unlocks a region in an open file. Unlocking a region enables other processes to access the region. - - If the function succeeds, the return value is nonzero. - If the function fails, the return value is zero. To get extended error information, call GetLastError. - - Minimum supported client: Windows XP - Minimum supported server: Windows Server 2003 - - - Unmaps a mapped view of a file from the calling process's address space. - Minimum supported client: Windows XP. - Minimum supported server: Windows Server 2003. - The base address. - - If the function succeeds, the return value is nonzero. If the function fails, the return value is zero. To get extended error - information, call GetLastError. - - - - - Retrieves information about the specified disk, including the amount of free space on the disk. - - - Symbolic link behavior: If the path points to a symbolic link, the operation is performed on the target. - If this parameter is a UNC name, it must include a trailing backslash (for example, "\\MyServer\MyShare\"). - Furthermore, a drive specification must have a trailing backslash (for example, "C:\"). - The calling application must have FILE_LIST_DIRECTORY access rights for this directory. - Minimum supported client: Windows XP [desktop apps only] - Minimum supported server: Windows Server 2003 [desktop apps only] - - Full pathname of the root file. - [out] The sectors per cluster. - [out] The bytes per sector. - [out] Number of free clusters. - [out] The total number of clusters. - - If the function succeeds, the return value is nonzero. - If the function fails, the return value is zero. To get extended error information, call GetLastError. - - - - - Retrieves information about the amount of space that is available on a disk volume, which is the total amount of space, - the total amount of free space, and the total amount of free space available to the user that is associated with the calling - thread. - - - Symbolic link behavior: If the path points to a symbolic link, the operation is performed on the target. - The GetDiskFreeSpaceEx function returns zero (0) for lpTotalNumberOfFreeBytes and lpFreeBytesAvailable - for all CD requests unless the disk is an unwritten CD in a CD-RW drive. - If this parameter is a UNC name, it must include a trailing backslash, for example, "\\MyServer\MyShare\". - This parameter does not have to specify the root directory on a disk. - The function accepts any directory on a disk. - The calling application must have FILE_LIST_DIRECTORY access rights for this directory. - Minimum supported client: Windows XP [desktop apps | Windows Store apps] - Minimum supported server: Windows Server 2003 [desktop apps | Windows Store apps] - - Pathname of the directory. - [out] The free bytes available. - [out] The total number of in bytes. - [out] The total number of free in bytes. - - If the function succeeds, the return value is nonzero. - If the function fails, the return value is zero (0). To get extended error information, call GetLastError. - - - - - Creates a new directory. - If the underlying file system supports security on files and directories, - the function applies a specified security descriptor to the new directory. - - - Some file systems, such as the NTFS file system, support compression or encryption for individual files and - directories. - On volumes formatted for such a file system, a new directory inherits the compression and encryption attributes of its parent - directory. - An application can obtain a handle to a directory by calling with the FILE_FLAG_BACKUP_SEMANTICS - flag set. - Minimum supported client: Windows XP [desktop apps | Windows Store apps] - Minimum supported server: Windows Server 2003 [desktop apps | Windows Store apps] - - Full pathname of the file. - The security attributes. - - If the function succeeds, the return value is nonzero. - If the function fails, the return value is zero. To get extended error information, call GetLastError. - - - - - Creates a new directory with the attributes of a specified template directory. - If the underlying file system supports security on files and directories, - the function applies a specified security descriptor to the new directory. - The new directory retains the other attributes of the specified template directory. - - - The CreateDirectoryEx function allows you to create directories that inherit stream information from other directories. - This function is useful, for example, when you are using Macintosh directories, which have a resource stream - that is needed to properly identify directory contents as an attribute. - Some file systems, such as the NTFS file system, support compression or encryption for individual files and - directories. - On volumes formatted for such a file system, a new directory inherits the compression and encryption attributes of its parent - directory. - You can obtain a handle to a directory by calling the function with the FILE_FLAG_BACKUP_SEMANTICS - flag set. - Minimum supported client: Windows XP [desktop apps only] - Minimum supported server: Windows Server 2003 [desktop apps only] - - Pathname of the template directory. - Full pathname of the file. - The security attributes. - - If the function succeeds, the return value is nonzero. - If the function fails, the return value is zero (0). To get extended error information, call GetLastError. - - - - - Creates a new directory as a transacted operation, with the attributes of a specified template directory. - If the underlying file system supports security on files and directories, - the function applies a specified security descriptor to the new directory. - The new directory retains the other attributes of the specified template directory. - - - The CreateDirectoryTransacted function allows you to create directories that inherit stream information from other - directories. - This function is useful, for example, when you are using Macintosh directories, which have a resource stream - that is needed to properly identify directory contents as an attribute. - Some file systems, such as the NTFS file system, support compression or encryption for individual files and - directories. - On volumes formatted for such a file system, a new directory inherits the compression and encryption attributes of its parent - directory. - You can obtain a handle to a directory by calling the function with the - FILE_FLAG_BACKUP_SEMANTICS flag set. - Minimum supported client: Windows XP [desktop apps only] - Minimum supported server: Windows Server 2003 [desktop apps only] - - Pathname of the template directory. - Pathname of the new directory. - The security attributes. - The transaction. - - If the function succeeds, the return value is nonzero. - If the function fails, the return value is zero (0). To get extended error information, call GetLastError. - This function fails with ERROR_EFS_NOT_ALLOWED_IN_TRANSACTION if you try to create a - child directory with a parent directory that has encryption disabled. - - - - - Retrieves the current directory for the current process. - - - The RemoveDirectory function marks a directory for deletion on close. - Therefore, the directory is not removed until the last handle to the directory is closed. - RemoveDirectory removes a directory junction, even if the contents of the target are not empty; - the function removes directory junctions regardless of the state of the target object. - Minimum supported client: Windows XP [desktop apps | Windows Store apps] - Minimum supported server: Windows Server 2003 [desktop apps | Windows Store apps] - - The length of the buffer for the current directory string, in TCHARs. The buffer length must include room for a terminating null character. - - A pointer to the buffer that receives the current directory string. This null-terminated string specifies the absolute path to the current directory. - To determine the required buffer size, set this parameter to NULL and the nBufferLength parameter to 0. - - - If the function succeeds, the return value specifies the number of characters that are written to the buffer, not including the terminating null character. - If the function fails, the return value is zero. To get extended error information, call GetLastError. - - - - - Deletes an existing empty directory. - - - The RemoveDirectory function marks a directory for deletion on close. - Therefore, the directory is not removed until the last handle to the directory is closed. - RemoveDirectory removes a directory junction, even if the contents of the target are not empty; - the function removes directory junctions regardless of the state of the target object. - Minimum supported client: Windows XP [desktop apps | Windows Store apps] - Minimum supported server: Windows Server 2003 [desktop apps | Windows Store apps] - - Full pathname of the file. - - If the function succeeds, the return value is nonzero. - If the function fails, the return value is zero. To get extended error information, call GetLastError. - - - - - Deletes an existing empty directory as a transacted operation. - - - The RemoveDirectoryTransacted function marks a directory for deletion on close. - Therefore, the directory is not removed until the last handle to the directory is closed. - RemoveDirectory removes a directory junction, even if the contents of the target are not empty; - the function removes directory junctions regardless of the state of the target object. - Minimum supported client: Windows Vista [desktop apps only] - Minimum supported server: Windows Server 2008 [desktop apps only] - - Full pathname of the file. - The transaction. - - If the function succeeds, the return value is nonzero. - If the function fails, the return value is zero. To get extended error information, call GetLastError. - - - - - Changes the current directory for the current process. - - - The path to the new current directory. This parameter may specify a relative path or a full path. In either case, the full path of the specified directory is calculated and stored as the current directory. - - - If the function succeeds, the return value is nonzero. - If the function fails, the return value is zero. To get extended error information, call GetLastError. - - - - The CM_Connect_Machine function creates a connection to a remote machine. - - Beginning in Windows 8 and Windows Server 2012 functionality to access remote machines has been removed. - You cannot access remote machines when running on these versions of Windows. - Available in Microsoft Windows 2000 and later versions of Windows. - - Name of the unc server. - [out] The ph machine. - - If the operation succeeds, the function returns CR_SUCCESS. - Otherwise, it returns one of the CR_-prefixed error codes defined in Cfgmgr32.h. - - - - - The CM_Get_Device_ID_Ex function retrieves the device instance ID for a specified device instance on a local or a remote machine. - - - Beginning in Windows 8 and Windows Server 2012 functionality to access remote machines has been removed. - You cannot access remote machines when running on these versions of Windows. -   - Available in Microsoft Windows 2000 and later versions of Windows. - - The dn development instance. - The buffer. - Length of the buffer. - The ul flags. - The machine. - - If the operation succeeds, the function returns CR_SUCCESS. - Otherwise, it returns one of the CR_-prefixed error codes defined in Cfgmgr32.h. - - - - - The CM_Disconnect_Machine function removes a connection to a remote machine. - - - Beginning in Windows 8 and Windows Server 2012 functionality to access remote machines has been removed. - You cannot access remote machines when running on these versions of Windows. - SetLastError is set to . - Available in Microsoft Windows 2000 and later versions of Windows. - - The machine. - - If the operation succeeds, the function returns CR_SUCCESS. - Otherwise, it returns one of the CR_-prefixed error codes defined in Cfgmgr32.h. - - - - - The CM_Get_Parent_Ex function obtains a device instance handle to the parent node of a specified device node (devnode) in a local - or a remote machine's device tree. - - - Beginning in Windows 8 and Windows Server 2012 functionality to access remote machines has been removed. - You cannot access remote machines when running on these versions of Windows. - Available in Microsoft Windows 2000 and later versions of Windows. - - [out] The pdn development instance. - The dn development instance. - The ul flags. - The machine. - - If the operation succeeds, the function returns CR_SUCCESS. - Otherwise, it returns one of the CR_-prefixed error codes defined in Cfgmgr32.h. - - - - Sends a control code directly to a specified device driver, causing the corresponding device to perform the corresponding operation. - - If the operation completes successfully, the return value is nonzero. - If the operation fails or is pending, the return value is zero. To get extended error information, call GetLastError. - - - To retrieve a handle to the device, you must call the function with either the name of a device or - the name of the driver associated with a device. - To specify a device name, use the following format: \\.\DeviceName - Minimum supported client: Windows XP - Minimum supported server: Windows Server 2003 - - The device. - The i/o control code. - Buffer for in data. - Size of the in buffer. - Buffer for out data. - Size of the out buffer. - [out] The bytes returned. - The overlapped. - - - Sends a control code directly to a specified device driver, causing the corresponding device to perform the corresponding operation. - - If the operation completes successfully, the return value is nonzero. - If the operation fails or is pending, the return value is zero. To get extended error information, call GetLastError. - - - To retrieve a handle to the device, you must call the function with either the name of a device or - the name of the driver associated with a device. - To specify a device name, use the following format: \\.\DeviceName - Minimum supported client: Windows XP - Minimum supported server: Windows Server 2003 - - The device. - The i/o control code. - Buffer for in data. - Size of the in buffer. - Buffer for out data. - Size of the out buffer. - [out] The bytes returned. - The overlapped. - - - - The SetupDiDestroyDeviceInfoList function deletes a device information set and frees all associated memory. - - - SetLastError is set to . - Available in Microsoft Windows 2000 and later versions of Windows. - - Information describing the development. - - The function returns TRUE if it is successful. - Otherwise, it returns FALSE and the logged error can be retrieved with a call to GetLastError. - - - - - The SetupDiEnumDeviceInterfaces function enumerates the device interfaces that are contained in a device information set. - - - Repeated calls to this function return an structure for a different device - interface. - This function can be called repeatedly to get information about interfaces in a device information set that are - associated - with a particular device information element or that are associated with all device information elements. - Available in Microsoft Windows 2000 and later versions of Windows. - - Information describing the development. - Information describing the development. - [in,out] Unique identifier for the interface class. - Zero-based index of the member. - [in,out] Information describing the device interface. - - SetupDiEnumDeviceInterfaces returns TRUE if the function completed without error. - If the function completed with an error, FALSE is returned and the error code for the failure can be retrieved by calling - GetLastError. - - - - - The SetupDiGetClassDevsEx function returns a handle to a device information set that contains requested device information elements - for a local or a remote computer. - - - The caller of SetupDiGetClassDevsEx must delete the returned device information set when it is no longer needed by calling - . - Available in Microsoft Windows 2000 and later versions of Windows. - - [in,out] Unique identifier for the class. - The enumerator. - The parent. - The devs ex flags. - Set the device information belongs to. - Name of the machine. - The reserved. - - If the operation succeeds, SetupDiGetClassDevsEx returns a handle to a device information set that contains all installed - devices that matched the supplied parameters. - If the operation fails, the function returns INVALID_HANDLE_VALUE. To get extended error information, call - GetLastError. - - - - - The SetupDiGetDeviceInterfaceDetail function returns details about a device interface. - - - The interface detail returned by this function consists of a device path that can be passed to Win32 functions such as - CreateFile. - Do not attempt to parse the device path symbolic name. The device path can be reused across system starts. - Available in Microsoft Windows 2000 and later versions of Windows. - - Information describing the development. - [in,out] Information describing the device interface. - [in,out] Information describing the device interface detail. - Size of the device interface detail data. - Size of the required. - [in,out] Information describing the device information. - - SetupDiGetDeviceInterfaceDetail returns TRUE if the function completed without error. - If the function completed with an error, FALSE is returned and the error code for the failure can be retrieved by calling - GetLastError. - - - - - The SetupDiGetDeviceRegistryProperty function retrieves a specified Plug and Play device property. - - Available in Microsoft Windows 2000 and later versions of Windows. - Set the device information belongs to. - [in,out] Information describing the device information. - The property. - [out] Type of the property register data. - Buffer for property data. - Size of the property buffer. - Size of the required. - - SetupDiGetDeviceRegistryProperty returns TRUE if the call was successful. - Otherwise, it returns FALSE and the logged error can be retrieved by making a call to GetLastError. - SetupDiGetDeviceRegistryProperty returns the ERROR_INVALID_DATA error code if the requested property does not exist for a - device or if the property data is not valid. - - - - The FindFirstFileEx function does not query the short file name, improving overall enumeration speed. -   - - The data is returned in a structure, - and cAlternateFileName member is always a NULL string. - This value is not supported until Windows Server 2008 R2 and Windows 7. - - - - - Uses a larger buffer for directory queries, which can increase performance of the find operation. - This value is not supported until Windows Server 2008 R2 and Windows 7. - - - DefaultFileBufferSize = 4096; Default type buffer size used for reading and writing files. - - - DefaultFileEncoding = Encoding.UTF8; Default type of Encoding used for reading and writing files. - - - MaxDirectoryLength = 255 - - - MaxPath = 260 - The specified path, file name, or both exceed the system-defined maximum length. - For example, on Windows-based platforms, paths must be less than 248 characters, and file names must be less than 260 characters. - - - - MaxPathUnicode = 32000 - - - When an exception is raised, bit shifting is needed to prevent: "System.OverflowException: Arithmetic operation resulted in an overflow." - - - The BackupRead function can be used to back up a file or directory, including the security information. - The function reads data associated with a specified file or directory into a buffer, - which can then be written to the backup medium using the WriteFile function. - - - This function is not intended for use in backing up files encrypted under the Encrypted File System. - Use ReadEncryptedFileRaw for that purpose. - Minimum supported client: Windows XP [desktop apps only] - Minimum supported server: Windows Server 2003 [desktop apps only] - - The file. - The buffer. - Number of bytes to reads. - [out] Number of bytes reads. - true to abort. - true to process security. - [out] The context. - - If the function succeeds, the return value is nonzero. - If the function fails, the return value is zero, indicating that an I/O error occurred. To get extended error information, - call GetLastError. - - - - The BackupSeek function seeks forward in a data stream initially accessed by using the or - function. - The function reads data associated with a specified file or directory into a buffer, which can then be written to the backup - medium using the WriteFile function. - - - Applications use the BackupSeek function to skip portions of a data stream that cause errors. - This function does not seek across stream headers. For example, this function cannot be used to skip the stream name. - If an application attempts to seek past the end of a substream, the function fails, the lpdwLowByteSeeked and - lpdwHighByteSeeked parameters - indicate the actual number of bytes the function seeks, and the file position is placed at the start of the next stream - header. -   - Minimum supported client: Windows XP [desktop apps only] - Minimum supported server: Windows Server 2003 [desktop apps only] - - The file. - The low bytes to seek. - The high bytes to seek. - [out] The lpdw low bytes seeked. - [out] The lpdw high bytes seeked. - [out] The context. - - If the function could seek the requested amount, the function returns a nonzero value. - If the function could not seek the requested amount, the function returns zero. To get extended error information, call - GetLastError. - - - - The BackupWrite function can be used to restore a file or directory that was backed up using . - Use the ReadFile function to get a stream of data from the backup medium, then use BackupWrite to write the data to the - specified file or directory. -   - - - This function is not intended for use in restoring files encrypted under the Encrypted File System. Use WriteEncryptedFileRaw - for that purpose. - Minimum supported client: Windows XP [desktop apps only] - Minimum supported server: Windows Server 2003 [desktop apps only] - - The file. - The buffer. - Number of bytes to writes. - [out] Number of bytes writtens. - true to abort. - true to process security. - [out] The context. - - If the function succeeds, the return value is nonzero. - If the function fails, the return value is zero, indicating that an I/O error occurred. To get extended error information, - call GetLastError. - - - - Check is the current handle is not null, not closed and not invalid. - The current handle to check. - will throw an , will not raise this exception.. - on success, otherwise. - - - - Check is the current handle is not null, not closed and not invalid. - The current handle to check. - The result of Marshal.GetLastWin32Error() - will throw an , will not raise this exception.. - on success, otherwise. - - - - - Controls whether the system will handle the specified types of serious errors or whether the process will handle them. - - - Because the error mode is set for the entire process, you must ensure that multi-threaded applications do not set different error- - mode attributes. Doing so can lead to inconsistent error handling. - - Minimum supported client: Windows XP [desktop apps only]. - Minimum supported server: Windows Server 2003 [desktop apps only]. - The mode. - The return value is the previous state of the error-mode bit attributes. - - - - Controls whether the system will handle the specified types of serious errors or whether the calling thread will handle them. - - - Because the error mode is set for the entire process, you must ensure that multi-threaded applications do not set different error- - mode attributes. Doing so can lead to inconsistent error handling. - - Minimum supported client: Windows 7 [desktop apps only]. - Minimum supported server: Windows Server 2008 R2 [desktop apps only]. - The new mode. - [out] The old mode. - The return value is the previous state of the error-mode bit attributes. - - - Retrieves the full path and file name of the specified file or directory. - If the function fails for any other reason, the return value is zero. To get extended error information, call GetLastError. - The GetFullPathName function is not recommended for multithreaded applications or shared library code. - Minimum supported client: Windows XP [desktop apps only] - Minimum supported server: Windows Server 2003 [desktop apps only] - - - Retrieves the full path and file name of the specified file or directory as a transacted operation. - If the function fails for any other reason, the return value is zero. To get extended error information, call GetLastError. - Minimum supported client: Windows Vista [desktop apps only] - Minimum supported server: Windows Server 2008 [desktop apps only] - - - Converts the specified path to its long form. - - If the function succeeds, the return value is nonzero. - If the function fails, the return value is zero. To get extended error information, call GetLastError. - - Minimum supported client: Windows XP [desktop apps only] - Minimum supported server: Windows Server 2003 [desktop apps only] - - - Converts the specified path to its long form as a transacted operation. - - If the function succeeds, the return value is nonzero. - If the function fails, the return value is zero. To get extended error information, call GetLastError. - - Minimum supported client: Windows Vista [desktop apps only] - Minimum supported server: Windows Server 2008 [desktop apps only] - - - Retrieves the short path form of the specified path. - - If the function succeeds, the return value is nonzero. - If the function fails, the return value is zero. To get extended error information, call GetLastError. - - Minimum supported client: Windows XP - Minimum supported server: Windows Server 2003 - - - Represents a wrapper class for a handle used by the SetupDiGetClassDevs/SetupDiDestroyDeviceInfoList Win32 API functions. - - - Initializes a new instance of the class. - - - Contains the basic information for a file. Used for file handles. - - Specifying -1 for , , or - indicates that operations on the current handle should not affect the given field. - (I.e, specifying -1 for will leave the unaffected by writes performed - on the current handle.) - - - - The time the file was created in format, - which is a 64-bit value representing the number of 100-nanosecond intervals since January 1, 1601 (UTC). - - - - The time the file was last accessed in format. - - - The time the file was last written to in format. - - - The time the file was changed in format. - - - The file attributes. - If this is set to 0 in a structure passed to SetFileInformationByHandle then none of the attributes are changed. - - - Contains information that the GetFileInformationByHandle function retrieves. - - - The file attributes. - - - A structure that specifies when a file or directory is created. - - - A structure. For a file, the structure specifies the last time that a file is read from or written to. - For a directory, the structure specifies when the directory is created. - For both files and directories, the specified date is correct, but the time of day is always set to midnight. - - - - A structure. For a file, the structure specifies the last time that a file is written to. - For a directory, the structure specifies when the directory is created. - - - The serial number of the volume that contains a file. - - - The high-order part of the file size. - - - The low-order part of the file size. - - - The number of links to this file. For the FAT file system this member is always 1. For the NTFS file system, it can be more than 1. - - - The high-order part of a unique identifier that is associated with a file. - - - The low-order part of a unique identifier that is associated with a file. - - - Controls whether the system will handle the specified types of serious errors or whether the process will handle them. - Minimum supported client: Windows 2000 Professional - Minimum supported server: Windows 2000 Server - - - ChangeErrorMode is for the Win32 SetThreadErrorMode() method, used to suppress possible pop-ups. - One of the values. - - - Contains information about files in the specified directory. Used for directory handles. Use only when calling GetFileInformationByHandleEx. - - The number of files that are returned for each call to GetFileInformationByHandleEx depends on the size of the buffer that is passed to the function. - Any subsequent calls to GetFileInformationByHandleEx on the same handle will resume the enumeration operation after the last file is returned. - - - - The offset for the next FILE_ID_BOTH_DIR_INFO structure that is returned. Contains zero (0) if no other entries follow this one. - - - The byte offset of the file within the parent directory. This member is undefined for file systems, such as NTFS, - in which the position of a file within the parent directory is not fixed and can be changed at any time to maintain sort order. - - - - The time that the file was created. - - - The time that the file was last accessed. - - - The time that the file was last written to. - - - The time that the file was last changed. - - - The absolute new end-of-file position as a byte offset from the start of the file to the end of the file. - Because this value is zero-based, it actually refers to the first free byte in the file. - In other words, EndOfFile is the offset to the byte that immediately follows the last valid byte in the file. - - - - The number of bytes that are allocated for the file. This value is usually a multiple of the sector or cluster size of the underlying physical device. - - - The file attributes. - - - The length of the file name. - - - The size of the extended attributes for the file. - - - The length of ShortName. - - - The short 8.3 file naming convention (for example, "FILENAME.TXT") name of the file. - - - The file ID. - - - The first character of the file name string. This is followed in memory by the remainder of the string. - - - Represents the number of 100-nanosecond intervals since January 1, 1601. This structure is a 64-bit value. - - - Converts a value to long. - - - Converts a value to long. - - - Determines whether the specified Object is equal to the current Object. - Another object to compare to. - if the specified Object is equal to the current Object; otherwise, . - - - Serves as a hash function for a particular type. - A hash code for the current Object. - - - Implements the operator == - A. - B. - The result of the operator. - - - Implements the operator != - A. - B. - The result of the operator. - - - An SP_DEVINFO_DATA structure defines a device instance that is a member of a device information set. - - - The size, in bytes, of the SP_DEVINFO_DATA structure. - - - The GUID of the device's setup class. - - - An opaque handle to the device instance (also known as a handle to the devnode). - - - Reserved. For internal use only. - - - An SP_DEVICE_INTERFACE_DATA structure defines a device interface in a device information set. - - - The size, in bytes, of the SP_DEVICE_INTERFACE_DATA structure. - - - The GUID for the class to which the device interface belongs. - - - Can be one or more of the following: SPINT_ACTIVE (1), SPINT_DEFAULT (2), SPINT_REMOVED (3). - - - Reserved. Do not use. - - - An SP_DEVICE_INTERFACE_DETAIL_DATA structure contains the path for a device interface. - - - The size, in bytes, of the SP_DEVICE_INTERFACE_DETAIL_DATA structure. - - - The device interface path. This path can be passed to Win32 functions such as CreateFile. - - - WIN32_FILE_ATTRIBUTE_DATA structure contains attribute information for a file or directory. The GetFileAttributesEx function uses this structure. - - Not all file systems can record creation and last access time, and not all file systems record them in the same manner. - For example, on the FAT file system, create time has a resolution of 10 milliseconds, write time has a resolution of 2 seconds, - and access time has a resolution of 1 day. On the NTFS file system, access time has a resolution of 1 hour. - For more information, see File Times. - - - - The file attributes of a file. - - - A structure that specifies when a file or directory was created. - If the underlying file system does not support creation time, this member is zero. - - - A structure. - For a file, the structure specifies when the file was last read from, written to, or for executable files, run. - For a directory, the structure specifies when the directory is created. If the underlying file system does not support last access time, this member is zero. - On the FAT file system, the specified date for both files and directories is correct, but the time of day is always set to midnight. - - - - A structure. - For a file, the structure specifies when the file was last written to, truncated, or overwritten, for example, when WriteFile or SetEndOfFile are used. - The date and time are not updated when file attributes or security descriptors are changed. - For a directory, the structure specifies when the directory is created. If the underlying file system does not support last write time, this member is zero. - - - - The high-order DWORD of the file size. This member does not have a meaning for directories. - This value is zero unless the file size is greater than MAXDWORD. - The size of the file is equal to (nFileSizeHigh * (MAXDWORD+1)) + nFileSizeLow. - - - - The low-order DWORD of the file size. This member does not have a meaning for directories. - - - The file size. - - - Contains information about the file that is found by the FindFirstFile, FindFirstFileEx, or FindNextFile function. - - If a file has a long file name, the complete name appears in the cFileName member, and the 8.3 format truncated version of the name appears - in the cAlternateFileName member. Otherwise, cAlternateFileName is empty. If the FindFirstFileEx function was called with a value of FindExInfoBasic - in the fInfoLevelId parameter, the cAlternateFileName member will always contain a string value. This remains true for all subsequent calls to the - FindNextFile function. As an alternative method of retrieving the 8.3 format version of a file name, you can use the GetShortPathName function. - For more information about file names, see File Names, Paths, and Namespaces. - - - Not all file systems can record creation and last access times, and not all file systems record them in the same manner. - For example, on the FAT file system, create time has a resolution of 10 milliseconds, write time has a resolution of 2 seconds, - and access time has a resolution of 1 day. The NTFS file system delays updates to the last access time for a file by up to 1 hour - after the last access. For more information, see File Times. - - - - The file attributes of a file. - - - A structure that specifies when a file or directory was created. - If the underlying file system does not support creation time, this member is zero. - - - A structure. - For a file, the structure specifies when the file was last read from, written to, or for executable files, run. - For a directory, the structure specifies when the directory is created. If the underlying file system does not support last access time, this member is zero. - On the FAT file system, the specified date for both files and directories is correct, but the time of day is always set to midnight. - - - - A structure. - For a file, the structure specifies when the file was last written to, truncated, or overwritten, for example, when WriteFile or SetEndOfFile are used. - The date and time are not updated when file attributes or security descriptors are changed. - For a directory, the structure specifies when the directory is created. If the underlying file system does not support last write time, this member is zero. - - - - The high-order DWORD of the file size. This member does not have a meaning for directories. - This value is zero unless the file size is greater than MAXDWORD. - The size of the file is equal to (nFileSizeHigh * (MAXDWORD+1)) + nFileSizeLow. - - - - The low-order DWORD of the file size. This member does not have a meaning for directories. - - - If the dwFileAttributes member includes the FILE_ATTRIBUTE_REPARSE_POINT attribute, this member specifies the reparse point tag. - Otherwise, this value is undefined and should not be used. - - - - Reserved for future use. - - - The name of the file. - - - An alternative name for the file. This name is in the classic 8.3 file name format. - - - Contains stream data. - - - Type of stream data. - - - Attributes of data to facilitate cross-operating system transfer. - - - Size of data, in bytes. - - - Length of the name of the alternative data stream, in bytes. - - - Defines, redefines, or deletes MS-DOS device names. - - If the function succeeds, the return value is nonzero. - If the function fails, the return value is zero. To get extended error information, call GetLastError. - - Minimum supported client: Windows XP [desktop apps only] - Minimum supported server: Windows Server 2003 [desktop apps only] - - - Deletes a drive letter or mounted folder. - - If the function succeeds, the return value is nonzero. - If the function fails, the return value is zero. To get extended error information, call GetLastError. - - Minimum supported client: Windows XP [desktop apps only] - Minimum supported server: Windows Server 2003 [desktop apps only] - - - Retrieves the name of a volume on a computer. FindFirstVolume is used to begin scanning the volumes of a computer. - - If the function succeeds, the return value is a search handle used in a subsequent call to the FindNextVolume and FindVolumeClose functions. - If the function fails to find any volumes, the return value is the INVALID_HANDLE_VALUE error code. To get extended error information, call GetLastError. - - Minimum supported client: Windows XP [desktop apps only] - Minimum supported server: Windows Server 2003 [desktop apps only] - - - Retrieves the name of a mounted folder on the specified volume. FindFirstVolumeMountPoint is used to begin scanning the mounted folders on a volume. - - If the function succeeds, the return value is a search handle used in a subsequent call to the FindNextVolumeMountPoint and FindVolumeMountPointClose functions. - If the function fails to find a mounted folder on the volume, the return value is the INVALID_HANDLE_VALUE error code. - - Minimum supported client: Windows XP [desktop apps only] - Minimum supported server: Windows Server 2003 [desktop apps only] - - - Continues a volume search started by a call to the FindFirstVolume function. FindNextVolume finds one volume per call. - - If the function succeeds, the return value is nonzero. - If the function fails, the return value is zero. To get extended error information, call GetLastError. - - Minimum supported client: Windows XP [desktop apps only] - Minimum supported server: Windows Server 2003 [desktop apps only] - - - Continues a mounted folder search started by a call to the FindFirstVolumeMountPoint function. FindNextVolumeMountPoint finds one mounted folder per call. - - If the function succeeds, the return value is nonzero. - If the function fails, the return value is zero. To get extended error information, call GetLastError. If no more mounted folders can be found, the GetLastError function returns the ERROR_NO_MORE_FILES error code. - In that case, close the search with the FindVolumeMountPointClose function. - - Minimum supported client: Windows XP - Minimum supported server: Windows Server 2003 - - - Closes the specified volume search handle. - - SetLastError is set to . - Minimum supported client: Windows XP [desktop apps only]. Minimum supported server: Windows Server 2003 [desktop apps only]. - - - If the function succeeds, the return value is nonzero. If the function fails, the return value is zero. To get extended error - information, call GetLastError. - - - - Closes the specified mounted folder search handle. - - SetLastError is set to . - Minimum supported client: Windows XP - Minimum supported server: Windows Server 2003 - - - If the function succeeds, the return value is nonzero. If the function fails, the return value is zero. To get extended error - information, call GetLastError. - - - - - Determines whether a disk drive is a removable, fixed, CD-ROM, RAM disk, or network drive. - To determine whether a drive is a USB-type drive, call and specify the - SPDRP_REMOVAL_POLICY property. - - - SMB does not support volume management functions. - Minimum supported client: Windows XP [desktop apps only] - Minimum supported server: Windows Server 2003 [desktop apps only] - - Full pathname of the root file. - - The return value specifies the type of drive, see . - If the function fails, the return value is zero. To get extended error information, call GetLastError. - - - - - Retrieves a bitmask representing the currently available disk drives. - - - SMB does not support volume management functions. - Minimum supported client: Windows XP [desktop apps only] - Minimum supported server: Windows Server 2003 [desktop apps only] - - - If the function succeeds, the return value is a bitmask representing the currently available disk drives. - Bit position 0 (the least-significant bit) is drive A, bit position 1 is drive B, bit position 2 is drive C, and so on. - If the function fails, the return value is zero. To get extended error information, call GetLastError. - - - - Retrieves information about the file system and volume associated with the specified root directory. - - If all the requested information is retrieved, the return value is nonzero. - If not all the requested information is retrieved, the return value is zero. - - Minimum supported client: Windows XP [desktop apps only] - Minimum supported server: Windows Server 2003 [desktop apps only] - "lpRootPathName" must end with a trailing backslash. - - - Retrieves information about the file system and volume associated with the specified file. - - If all the requested information is retrieved, the return value is nonzero. - If not all the requested information is retrieved, the return value is zero. To get extended error information, call GetLastError. - - To retrieve the current compression state of a file or directory, use FSCTL_GET_COMPRESSION. - SMB does not support volume management functions. - Minimum supported client: Windows Vista [desktop apps only] - Minimum supported server: Windows Server 2008 [desktop apps only] - - - Retrieves a volume GUID path for the volume that is associated with the specified volume mount point (drive letter, volume GUID path, or mounted folder). - - If the function succeeds, the return value is nonzero. - If the function fails, the return value is zero. To get extended error information, call GetLastError. - - Use GetVolumeNameForVolumeMountPoint to obtain a volume GUID path for use with functions such as SetVolumeMountPoint and FindFirstVolumeMountPoint that require a volume GUID path as an input parameter. - SMB does not support volume management functions. - Mount points aren't supported by ReFS volumes. - Minimum supported client: Windows XP [desktop apps only] - Minimum supported server: Windows Server 2003 [desktop apps only] - - - Retrieves the volume mount point where the specified path is mounted. - - If a specified path is passed, GetVolumePathName returns the path to the volume mount point, which means that it returns the - root of the volume where the end point of the specified path is located. - For example, assume that you have volume D mounted at C:\Mnt\Ddrive and volume E mounted at "C:\Mnt\Ddrive\Mnt\Edrive". Also - assume that you have a file with the path "E:\Dir\Subdir\MyFile". - If you pass "C:\Mnt\Ddrive\Mnt\Edrive\Dir\Subdir\MyFile" to GetVolumePathName, it returns the path "C:\Mnt\Ddrive\Mnt\Edrive\". - If a network share is specified, GetVolumePathName returns the shortest path for which GetDriveType returns DRIVE_REMOTE, - which means that the path is validated as a remote drive that exists, which the current user can access. - Minimum supported client: Windows XP [desktop apps only] - Minimum supported server: Windows Server 2003 [desktop apps only] - - - If the function succeeds, the return value is nonzero. - If the function fails, the return value is zero. To get extended error information, call GetLastError. - - - - Retrieves a list of drive letters and mounted folder paths for the specified volume. - Minimum supported client: Windows XP. - Minimum supported server: Windows Server 2003. - - If the function succeeds, the return value is nonzero. If the function fails, the return value is zero. To get extended error - information, call GetLastError. - - - - Sets the label of a file system volume. - Minimum supported client: Windows XP [desktop apps only]. - Minimum supported server: Windows Server 2003 [desktop apps only]. - "lpRootPathName" must end with a trailing backslash. - - If the function succeeds, the return value is nonzero. If the function fails, the return value is zero. To get extended error - information, call GetLastError. - - - - Associates a volume with a drive letter or a directory on another volume. - Minimum supported client: Windows XP [desktop apps only]. - Minimum supported server: Windows Server 2003 [desktop apps only]. - - If the function succeeds, the return value is nonzero. If the function fails, the return value is zero. To get extended error - information, call GetLastError. - - - - Retrieves information about MS-DOS device names. - Minimum supported client: Windows XP [desktop apps only]. - Minimum supported server: Windows Server 2003 [desktop apps only]. - - If the function succeeds, the return value is the number of TCHARs stored into the buffer pointed to by lpTargetPath. If the - function fails, the return value is zero. To get extended error information, call GetLastError. If the buffer is too small, the - function fails and the last error code is ERROR_INSUFFICIENT_BUFFER. - - - - Indicates the format of a path passed to a method. - - At some point in code you know the full path of file system objects, e.g.: "C:\Windows". - For example, Directory.EnumerateFileSystemEntries() will return all files and directories from a given path. - Most likely, some processing will happen on the results of the enum. The file or directory may be passed - on to another function. Whenever a file path is required, some performance can be gained. -   - A path like: "C:\Windows" or "\\server\share" is considered a full path for a directory because it is rooted and has a drive/unc path. - If the method supports it, and will skip GetFullPath() - calls for path resolving of the object, while also avoiding path validation and checks. - Using (default) will always call GetFullPath() and perform path validation and checks. -   - When working in a loop with thousands of files, will give the best performance. - - - - The format of the path is automatically detected by the method and internally converted to an extended length path. - It can be either a standard (short) full path, an extended length (unicode) full path or a relative path. - Example relative path: "Windows". - - - - The path is a full path in either normal or extended length (UNICODE) format. - Internally it will be converted to an extended length (UNICODE) path. - Using this option has a very slight performance advantage compared to using . - Example full path: "C:\Windows" or "\\server\share". - - - - The path is an extended length path. No additional processing will be done on the path, and it will be used as is. - Using this option has a slight performance advantage compared to using . - Example long full path: "\\?\C:\Windows" or "\\?\UNC\server\share". - - - - The exception that is thrown when an attempt to create a directory or file that already exists was made. - - - Initializes a new instance of the class. - - - Initializes a new instance of the class. - The message. - - - Initializes a new instance of the class. - The message. - The inner exception. - - - Initializes a new instance of the class. - The data for serializing or deserializing the object. - The source and destination for the object. - - - The requested operation could not be completed because the device was not ready. - - - Initializes a new instance of the class. - - - Initializes a new instance of the class. - The message. - - - Initializes a new instance of the class. - The message. - The inner exception. - - - Initializes a new instance of the class. - The data for serializing or deserializing the object. - The source and destination for the object. - - - The operation could not be completed because the directory is read-only. - - - Initializes a new instance of the class. - - - Initializes a new instance of the class. - The message. - - - Initializes a new instance of the class. - The message. - The inner exception. - - - Initializes a new instance of the class. - The data for serializing or deserializing the object. - The source and destination for the object. - - - The operation could not be completed because the directory was not empty. - - - Initializes a new instance of the class. - - - Initializes a new instance of the class. - The message. - - - Initializes a new instance of the class. - The message. - The inner exception. - - - Initializes a new instance of the class. - The data for serializing or deserializing the object. - The source and destination for the object. - - - The operation could not be completed because the file is read-only. - - - Initializes a new instance of the class. - - - Initializes a new instance of the class. - The message. - - - Initializes a new instance of the class. - The message. - The inner exception. - - - Initializes a new instance of the class. - The data for serializing or deserializing the object. - The source and destination for the object. - - - Provides static methods for the creation, copying, deletion, moving, and opening of files, and aids in the creation of objects. - This class cannot be inherited. - - - - [AlphaFS] Calculates the hash/checksum for the given . - The name of the file. - One of the values. - - - [AlphaFS] Calculates the hash/checksum for the given . - The name of the file. - One of the values. - Indicates the format of the path parameter(s). - - - [AlphaFS] Calculates the hash/checksum for the given . - The transaction. - The name of the file. - One of the values. - - - [AlphaFS] Calculates the hash/checksum for the given . - The transaction. - The name of the file. - One of the values. - Indicates the format of the path parameter(s). - - - [AlphaFS] Calculates the hash/checksum for the given . - The transaction. - One of the values. - The name of the file. - Indicates the format of the path parameter(s). - - - [AlphaFS] Backs up (export) encrypted files. This is one of a group of Encrypted File System (EFS) functions that is - intended to implement backup and restore functionality, while maintaining files in their encrypted state. - - - The file being backed up is not decrypted; it is backed up in its encrypted state. - - - If the caller does not have access to the key for the file, the caller needs - to export encrypted files. See - . - - - To backup an encrypted file call one of the - overloads and specify the file to backup - along with the destination stream of the backup data. - - - This function is intended for the backup of only encrypted files; see for backup - of unencrypted files. - - - The name of the file to be backed up. - The destination stream to which the backup data will be written. - - - - [AlphaFS] Backs up (export) encrypted files. This is one of a group of Encrypted File System (EFS) functions that is - intended to implement backup and restore functionality, while maintaining files in their encrypted state. - - - The file being backed up is not decrypted; it is backed up in its encrypted state. - - - If the caller does not have access to the key for the file, the caller needs - to export encrypted files. See - . - - - To backup an encrypted file call one of the - overloads and specify the file to backup - along with the destination stream of the backup data. - - - This function is intended for the backup of only encrypted files; see for backup - of unencrypted files. - - - The name of the file to be backed up. - The destination stream to which the backup data will be written. - The path format of the parameter. - - - - [AlphaFS] Restores (import) encrypted files. This is one of a group of Encrypted File System (EFS) functions that is - intended to implement backup and restore functionality, while maintaining files in their encrypted state. - - - If the caller does not have access to the key for the file, the caller needs - to restore encrypted files. See - . - - - To restore an encrypted file call one of the - overloads and specify the file to restore - along with the destination stream of the restored data. - - - This function is intended for the restoration of only encrypted files; see for - backup of unencrypted files. - - - The stream to read previously backed up data from. - The path of the destination file to restore to. - - - - [AlphaFS] Restores (import) encrypted files. This is one of a group of Encrypted File System (EFS) functions that is - intended to implement backup and restore functionality, while maintaining files in their encrypted state. - - - If the caller does not have access to the key for the file, the caller needs - to restore encrypted files. See - . - - - To restore an encrypted file call one of the - overloads and specify the file to restore - along with the destination stream of the restored data. - - - This function is intended for the restoration of only encrypted files; see for - backup of unencrypted files. - - - The stream to read previously backed up data from. - The path of the destination file to restore to. - The path format of the parameter. - - - - [AlphaFS] Restores (import) encrypted files. This is one of a group of Encrypted File System (EFS) functions that is - intended to implement backup and restore functionality, while maintaining files in their encrypted state. - - - If the caller does not have access to the key for the file, the caller needs - to restore encrypted files. See - . - - - To restore an encrypted file call one of the - overloads and specify the file to restore - along with the destination stream of the restored data. - - - This function is intended for the restoration of only encrypted files; see for - backup of unencrypted files. - - - The stream to read previously backed up data from. - The path of the destination file to restore to. - If set to a hidden file will be overwritten on import. - - - - [AlphaFS] Restores (import) encrypted files. This is one of a group of Encrypted File System (EFS) functions that is - intended to implement backup and restore functionality, while maintaining files in their encrypted state. - - - If the caller does not have access to the key for the file, the caller needs - to restore encrypted files. See - . - - - To restore an encrypted file call one of the - overloads and specify the file to restore - along with the destination stream of the restored data. - - - This function is intended for the restoration of only encrypted files; see for - backup of unencrypted files. - - - The stream to read previously backed up data from. - The path of the destination file to restore to. - If set to a hidden file will be overwritten on import. - The path format of the parameter. - - - - [AlphaFS] Enumerates the streams of type :$DATA from the specified file. - The path to the file to enumerate streams of. - The streams of type :$DATA in the specified file. - - - [AlphaFS] Enumerates the streams of type :$DATA from the specified file. - The path to the file to enumerate streams of. - Indicates the format of the path parameter(s). - The streams of type :$DATA in the specified file. - - - [AlphaFS] Enumerates the streams of type :$DATA from the specified file. - The transaction. - The path to the file to enumerate streams of. - The streams of type :$DATA in the specified file. - - - [AlphaFS] Enumerates the streams of type :$DATA from the specified file. - The transaction. - The path to the file to enumerate streams of. - Indicates the format of the path parameter(s). - The streams of type :$DATA in the specified file. - - - [AlphaFS] Enumerates the streams of type :$DATA from the specified file or directory. - The transaction. - The path to the file or directory to enumerate streams of. - Indicates the format of the path parameter(s). - The streams of type :$DATA in the specified file or directory. - - - [AlphaFS] Creates an enumeration of all the hard links to the specified . - The name of the file. - Indicates the format of the path parameter(s). - An enumerable collection of of all the hard links to the specified - - - [AlphaFS] Creates an enumeration of all the hard links to the specified . - The name of the file. - An enumerable collection of of all the hard links to the specified - - - [AlphaFS] Creates an enumeration of all the hard links to the specified . - The transaction. - The name of the file. - Indicates the format of the path parameter(s). - An enumerable collection of of all the hard links to the specified - - - [AlphaFS] Creates an enumeration of all the hard links to the specified . - The transaction. - The name of the file. - An enumerable collection of of all the hard links to the specified - - - [AlphaFS] Creates an enumeration of all the hard links to the specified . - - The transaction. - The name of the file. - Indicates the format of the path parameter(s). - An enumerable collection of of all the hard links to the specified - - - [AlphaFS] Creates a symbolic link. - See to run this method in an elevated state. - The name of the target for the symbolic link to be created. - The symbolic link to be created. - Indicates whether the link target, , is a file or directory. - Indicates the format of the path parameter(s). - - Several Exceptions possible. - - - [AlphaFS] Creates a symbolic link. - See to run this method in an elevated state. - The name of the target for the symbolic link to be created. - The symbolic link to be created. - Indicates whether the link target, , is a file or directory. - - Several Exceptions possible. - - - [AlphaFS] Creates a symbolic link. - See to run this method in an elevated state. - The transaction. - The name of the target for the symbolic link to be created. - The symbolic link to be created. - Indicates whether the link target, , is a file or directory. - Indicates the format of the path parameter(s). - - Several Exceptions possible. - - - [AlphaFS] Creates a symbolic link. - See to run this method in an elevated state. - The transaction. - The name of the target for the symbolic link to be created. - The symbolic link to be created. - Indicates whether the link target, , is a file or directory. - - Several Exceptions possible. - - - Creates a symbolic link. - See to run this method in an elevated state. - The transaction. - The name of the target for the symbolic link to be created. - The symbolic link to be created. - Indicates whether the link target, , is a file or directory. - Indicates the format of the path parameter(s). - - Several Exceptions possible. - - - [AlphaFS] Establishes a hard link between an existing file and a new file. This function is only supported on the NTFS file system, and only for files, not directories. - The name of the new file. This parameter cannot specify the name of a directory. - The name of the existing file. This parameter cannot specify the name of a directory. - Indicates the format of the path parameter(s). - - - [AlphaFS] Establishes a hard link between an existing file and a new file. This function is only supported on the NTFS file system, and only for files, not directories. - The name of the new file. This parameter cannot specify the name of a directory. - The name of the existing file. This parameter cannot specify the name of a directory. - - - - [AlphaFS] Establishes a hard link between an existing file and a new file. This function is only supported on the NTFS file system, - and only for files, not directories. - - The transaction. - The name of the new file. This parameter cannot specify the name of a directory. - The name of the existing file. This parameter cannot specify the name of a directory. - Indicates the format of the path parameter(s). - - - - [AlphaFS] Establishes a hard link between an existing file and a new file. This function is only supported on the NTFS file system, - and only for files, not directories. - - The transaction. - The name of the new file. This parameter cannot specify the name of a directory. - The name of the existing file. This parameter cannot specify the name of a directory. - - - Establish a hard link between an existing file and a new file. This function - is only supported on the NTFS file system, and only for files, not directories. - - - The transaction. - The name of the new file. This parameter cannot specify the name of a directory. - The name of the existing file. This parameter cannot specify the name of a directory. - Indicates the format of the path parameter(s). - - - [AlphaFS] Compresses a file using NTFS compression. - A path that describes a file to compress. - Indicates the format of the path parameter(s). - - - [AlphaFS] Compresses a file using NTFS compression. - A path that describes a file to compress. - - - [AlphaFS] Compresses a file using NTFS compression. - The transaction. - A path that describes a file to compress. - Indicates the format of the path parameter(s). - - - [AlphaFS] Compresses a file using NTFS compression. - The transaction. - A path that describes a file to compress. - - - [AlphaFS] Decompresses an NTFS compressed file. - A path that describes a file to decompress. - Indicates the format of the path parameter(s). - - - [AlphaFS] Decompresses an NTFS compressed file. - A path that describes a file to decompress. - - - [AlphaFS] Decompresses an NTFS compressed file. - The transaction. - A path that describes a file to decompress. - Indicates the format of the path parameter(s). - - - [AlphaFS] Decompresses an NTFS compressed file. - The transaction. - A path that describes a file to decompress. - - - Deletes the specified file. - If the file to be deleted does not exist, no exception is thrown. - - The name of the file to be deleted. Wildcard characters are not supported. - - - - - - - - [AlphaFS] Deletes the specified file. - If the file to be deleted does not exist, no exception is thrown. - - The name of the file to be deleted. Wildcard characters are not supported. - - - overrides the read only of the file. - - Indicates the format of the path parameter(s). - - - - - - - [AlphaFS] Deletes the specified file. - If the file to be deleted does not exist, no exception is thrown. - - The name of the file to be deleted. Wildcard characters are not supported. - - - overrides the read only of the file. - - - - - - - - [AlphaFS] Deletes the specified file. - If the file to be deleted does not exist, no exception is thrown. - The transaction. - - The name of the file to be deleted. Wildcard characters are not supported. - - - - - - - - [AlphaFS] Deletes the specified file. - The transaction. - The name of the file to be deleted. Wildcard characters are not supported. - overrides the read only of the file. - Indicates the format of the path parameter(s). - If the file to be deleted does not exist, no exception is thrown. - - - - - - - [AlphaFS] Deletes the specified file. - The transaction. - The name of the file to be deleted. Wildcard characters are not supported. - overrides the read only of the file. - If the file to be deleted does not exist, no exception is thrown. - - - - - - - Deletes a Non-/Transacted file. - If the file to be deleted does not exist, no exception is thrown. - - - - - The transaction. - The name of the file to be deleted. - overrides the read only of the file. - Indicates the format of the path parameter(s). - - - Decrypts a file that was encrypted by the current account using the Encrypt method. - A path that describes a file to decrypt. - - - [AlphaFS] Decrypts a file that was encrypted by the current account using the Encrypt method. - A path that describes a file to decrypt. - Indicates the format of the path parameter(s). - - - Encrypts a file so that only the account used to encrypt the file can decrypt it. - A path that describes a file to encrypt. - - - [AlphaFS] Encrypts a file so that only the account used to encrypt the file can decrypt it. - A path that describes a file to encrypt. - Indicates the format of the path parameter(s). - - - Decrypts/encrypts a file or directory so that only the account used to encrypt the file can decrypt it. - - Specifies that is a file or directory. - A path that describes a file to encrypt. - encrypt, decrypt. - Indicates the format of the path parameter(s). - - - Creates or opens a file for writing UTF-8 encoded text. - The file to be opened for writing. - A StreamWriter that writes to the specified file using UTF-8 encoding. - - - [AlphaFS] Creates or opens a file for writing UTF-8 encoded text. - The file to be opened for writing. - Indicates the format of the path parameter(s). - A StreamWriter that writes to the specified file using UTF-8 encoding. - - - [AlphaFS] Creates or opens a file for writing encoded text. - The file to be opened for writing. - The encoding that is applied to the contents of the file. - Indicates the format of the path parameter(s). - A StreamWriter that writes to the specified file using UTF-8 encoding. - - - [AlphaFS] Creates or opens a file for writing UTF-8 encoded text. - The transaction. - The file to be opened for writing. - A StreamWriter that writes to the specified file using UTF-8 encoding. - - - [AlphaFS] Creates or opens a file for writing encoded text. - The transaction. - The file to be opened for writing. - The encoding that is applied to the contents of the file. - Indicates the format of the path parameter(s). - A StreamWriter that writes to the specified file using UTF-8 encoding. - - - Creates or opens a file for writing encoded text. - The transaction. - The file to be opened for writing. - The applied to the contents of the file. - Indicates the format of the path parameter(s). - A that writes to the specified file using NativeMethods.DefaultFileBufferSize encoding. - - - Copies an existing file to a new file. Overwriting a file of the same name is not allowed. - - The attributes of the original file are retained in the copied file. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - - - - - - - The file to copy. - The name of the destination file. This cannot be a directory or an existing file. - - - Copies an existing file to a new file. Overwriting a file of the same name is allowed. - - The attributes of the original file are retained in the copied file. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - - - - - - - The file to copy. - The name of the destination file. This cannot be a directory. - if the destination file should ignoring the read-only and hidden attributes and overwrite; otherwise, . - - - [AlphaFS] Copies an existing file to a new file. Overwriting a file of the same name is not allowed. - - The attributes of the original file are retained in the copied file. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - - - - - - - The file to copy. - The name of the destination file. This cannot be a directory. - Indicates the format of the path parameter(s). - - - [AlphaFS] Copies an existing file to a new file. Overwriting a file of the same name is allowed. - - The attributes of the original file are retained in the copied file. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - - - - - - - The file to copy. - The name of the destination file. This cannot be a directory. - if the destination file should ignoring the read-only and hidden attributes and overwrite; otherwise, . - Indicates the format of the path parameter(s). - - - [AlphaFS] Copies an existing file to a new file. Overwriting a file of the same name is not allowed. - - The attributes of the original file are retained in the copied file. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - - - - - - - The transaction. - The file to copy. - The name of the destination file. This cannot be a directory or an existing file. - - - [AlphaFS] Copies an existing file to a new file. Overwriting a file of the same name is not allowed. - - The attributes of the original file are retained in the copied file. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - - - - - - - The transaction. - The file to copy. - The name of the destination file. This cannot be a directory. - Indicates the format of the path parameter(s). - - - [AlphaFS] Copies an existing file to a new file. Overwriting a file of the same name is allowed. - - The attributes of the original file are retained in the copied file. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - - - - - - - The transaction. - The file to copy. - The name of the destination file. This cannot be a directory. - if the destination file should ignoring the read-only and hidden attributes and overwrite; otherwise, . - - - [AlphaFS] Copies an existing file to a new file. Overwriting a file of the same name is allowed. - - The attributes of the original file are retained in the copied file. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - - - - - - - The transaction. - The file to copy. - The name of the destination file. This cannot be a directory. - if the destination file should ignoring the read-only and hidden attributes and overwrite; otherwise, . - Indicates the format of the path parameter(s). - - - [AlphaFS] Copies an existing file to a new file. Overwriting a file of the same name is allowed. can be specified. - - Option is recommended for very large file transfers. - The attributes of the original file are retained in the copied file. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - - - - - - - The file to copy. - The name of the destination file. This cannot be a directory. - that specify how the file is to be copied. This parameter can be . - - - [AlphaFS] Copies an existing file to a new file. Overwriting a file of the same name is allowed. can be specified. - - Option is recommended for very large file transfers. - The attributes of the original file are retained in the copied file. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - - - - - - - The file to copy. - The name of the destination file. This cannot be a directory. - that specify how the file is to be copied. This parameter can be . - Indicates the format of the path parameter(s). - - - [AlphaFS] Copies an existing file to a new file. Overwriting a file of the same name is allowed. can be specified. - - Option is recommended for very large file transfers. - The attributes of the original file are retained in the copied file. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - - - - - - - The file to copy. - The name of the destination file. This cannot be a directory. - that specify how the file is to be copied. This parameter can be . - if original Timestamps must be preserved, otherwise. - - - [AlphaFS] Copies an existing file to a new file. Overwriting a file of the same name is allowed. can be specified. - - Option is recommended for very large file transfers. - The attributes of the original file are retained in the copied file. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - - - - - - - The file to copy. - The name of the destination file. This cannot be a directory. - that specify how the file is to be copied. This parameter can be . - if original Timestamps must be preserved, otherwise. - Indicates the format of the path parameter(s). - - - [AlphaFS] Copies an existing file to a new file. Overwriting a file of the same name is allowed. can be specified, - and the possibility of notifying the application of its progress through a callback function. - - A class with details of the Copy action. - - Option is recommended for very large file transfers. - The attributes of the original file are retained in the copied file. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - - - - - - - The file to copy. - The name of the destination file. This cannot be a directory. - that specify how the file is to be copied. This parameter can be . - A callback function that is called each time another portion of the file has been copied. This parameter can be . - The argument to be passed to the callback function. This parameter can be . - - - [AlphaFS] Copies an existing file to a new file. Overwriting a file of the same name is allowed. can be specified, - and the possibility of notifying the application of its progress through a callback function. - - A class with details of the Copy action. - - Option is recommended for very large file transfers. - The attributes of the original file are retained in the copied file. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - - - - - - - The file to copy. - The name of the destination file. This cannot be a directory. - that specify how the file is to be copied. This parameter can be . - A callback function that is called each time another portion of the file has been copied. This parameter can be . - The argument to be passed to the callback function. This parameter can be . - Indicates the format of the path parameter(s). - - - [AlphaFS] Copies an existing file to a new file. Overwriting a file of the same name is allowed. can be specified, - and the possibility of notifying the application of its progress through a callback function. - - A class with details of the Copy action. - - Option is recommended for very large file transfers. - The attributes of the original file are retained in the copied file. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - - - - - - - The file to copy. - The name of the destination file. This cannot be a directory. - that specify how the file is to be copied. This parameter can be . - if original Timestamps must be preserved, otherwise. - A callback function that is called each time another portion of the file has been copied. This parameter can be . - The argument to be passed to the callback function. This parameter can be . - - - [AlphaFS] Copies an existing file to a new file. Overwriting a file of the same name is allowed. can be specified, - and the possibility of notifying the application of its progress through a callback function. - - A class with details of the Copy action. - - Option is recommended for very large file transfers. - The attributes of the original file are retained in the copied file. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - - - - - - - The file to copy. - The name of the destination file. This cannot be a directory. - that specify how the file is to be copied. This parameter can be . - if original Timestamps must be preserved, otherwise. - A callback function that is called each time another portion of the file has been copied. This parameter can be . - The argument to be passed to the callback function. This parameter can be . - Indicates the format of the path parameter(s). - - - [AlphaFS] Copies an existing file to a new file. Overwriting a file of the same name is allowed. can be specified. - - Option is recommended for very large file transfers. - The attributes of the original file are retained in the copied file. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - - - - - - - The transaction. - The file to copy. - The name of the destination file. This cannot be a directory. - that specify how the file is to be copied. This parameter can be . - - - [AlphaFS] Copies an existing file to a new file. Overwriting a file of the same name is allowed. can be specified. - - Option is recommended for very large file transfers. - The attributes of the original file are retained in the copied file. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - - - - - - - The transaction. - The file to copy. - The name of the destination file. This cannot be a directory. - that specify how the file is to be copied. This parameter can be . - Indicates the format of the path parameter(s). - - - [AlphaFS] Copies an existing file to a new file. Overwriting a file of the same name is allowed. can be specified. - - Option is recommended for very large file transfers. - The attributes of the original file are retained in the copied file. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - - - - - - - The transaction. - The file to copy. - The name of the destination file. This cannot be a directory. - that specify how the file is to be copied. This parameter can be . - if original Timestamps must be preserved, otherwise. - - - [AlphaFS] Copies an existing file to a new file. Overwriting a file of the same name is allowed. can be specified. - - Option is recommended for very large file transfers. - The attributes of the original file are retained in the copied file. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - - - - - - - The transaction. - The file to copy. - The name of the destination file. This cannot be a directory. - that specify how the file is to be copied. This parameter can be . - if original Timestamps must be preserved, otherwise. - Indicates the format of the path parameter(s). - - - [AlphaFS] Copies an existing file to a new file. Overwriting a file of the same name is allowed. can be specified, - and the possibility of notifying the application of its progress through a callback function. - - A class with details of the Copy action. - - Option is recommended for very large file transfers. - The attributes of the original file are retained in the copied file. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - - - - - - - The transaction. - The file to copy. - The name of the destination file. This cannot be a directory. - that specify how the file is to be copied. This parameter can be . - A callback function that is called each time another portion of the file has been copied. This parameter can be . - The argument to be passed to the callback function. This parameter can be . - - - [AlphaFS] Copies an existing file to a new file. Overwriting a file of the same name is allowed. can be specified, - and the possibility of notifying the application of its progress through a callback function. - - A class with details of the Copy action. - - Option is recommended for very large file transfers. - The attributes of the original file are retained in the copied file. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - - - - - - - The transaction. - The file to copy. - The name of the destination file. This cannot be a directory. - that specify how the file is to be copied. This parameter can be . - A callback function that is called each time another portion of the file has been copied. This parameter can be . - The argument to be passed to the callback function. This parameter can be . - Indicates the format of the path parameter(s). - - - [AlphaFS] Copies an existing file to a new file. Overwriting a file of the same name is allowed. can be specified, - and the possibility of notifying the application of its progress through a callback function. - - A class with details of the Copy action. - - Option is recommended for very large file transfers. - The attributes of the original file are retained in the copied file. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - - - - - - - The transaction. - The file to copy. - The name of the destination file. This cannot be a directory. - that specify how the file is to be copied. This parameter can be . - if original Timestamps must be preserved, otherwise. - A callback function that is called each time another portion of the file has been copied. This parameter can be . - The argument to be passed to the callback function. This parameter can be . - - - [AlphaFS] Copies an existing file to a new file. Overwriting a file of the same name is allowed. can be specified, - and the possibility of notifying the application of its progress through a callback function. - - A class with details of the Copy action. - - Option is recommended for very large file transfers. - The attributes of the original file are retained in the copied file. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - The transaction. - The file to copy. - The name of the destination file. This cannot be a directory. - that specify how the file is to be copied. This parameter can be . - if original Timestamps must be preserved, otherwise. - A callback function that is called each time another portion of the file has been copied. This parameter can be . - The argument to be passed to the callback function. This parameter can be . - Indicates the format of the path parameter(s). - - - - - - - - - - Moves a specified file to a new location, providing the option to specify a new file name. - - This method works across disk volumes, and it does not throw an exception if the source and destination are the same. - Note that if you attempt to replace a file by moving a file of the same name into that directory, you get an . - You cannot use the Move method to overwrite an existing file. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - - - - - - - The name of the file to move. - The new path for the file. - - - [AlphaFS] Moves a specified file to a new location, providing the option to specify a new file name. - - This method works across disk volumes, and it does not throw an exception if the source and destination are the same. - Note that if you attempt to replace a file by moving a file of the same name into that directory, you get an . - You cannot use the Move method to overwrite an existing file. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - - - - - - - The name of the file to move. - The new path for the file. - Indicates the format of the path parameter(s). - - - [AlphaFS] Moves a specified file to a new location, providing the option to specify a new file name. - - This method works across disk volumes, and it does not throw an exception if the source and destination are the same. - Note that if you attempt to replace a file by moving a file of the same name into that directory, you get an . - You cannot use the Move method to overwrite an existing file. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - - - - - - - The transaction. - The name of the file to move. - The new path for the file. - - - [AlphaFS] Moves a specified file to a new location, providing the option to specify a new file name. - - This method works across disk volumes, and it does not throw an exception if the source and destination are the same. - Note that if you attempt to replace a file by moving a file of the same name into that directory, you get an . - You cannot use the Move method to overwrite an existing file. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - - - - - - - The transaction. - The name of the file to move. - The new path for the file. - Indicates the format of the path parameter(s). - - - [AlphaFS] Moves a specified file to a new location, providing the option to specify a new file name. - - This method works across disk volumes, and it does not throw an exception if the source and destination are the same. - Note that if you attempt to replace a file by moving a file of the same name into that directory, you get an . - You cannot use the Move method to overwrite an existing file. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - - - - - - - The name of the file to move. - The new path for the file. - that specify how the file is to be moved. This parameter can be . - - - [AlphaFS] Moves a specified file to a new location, providing the option to specify a new file name. - - This method works across disk volumes, and it does not throw an exception if the source and destination are the same. - Note that if you attempt to replace a file by moving a file of the same name into that directory, you get an . - You cannot use the Move method to overwrite an existing file. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - - - - - - - The name of the file to move. - The new path for the file. - that specify how the file is to be moved. This parameter can be . - Indicates the format of the path parameter(s). - - - [AlphaFS] Moves a specified file to a new location, providing the option to specify a new file name. - A class with the status of the Move action. - - This method works across disk volumes, and it does not throw an exception if the source and destination are the same. - Note that if you attempt to replace a file by moving a file of the same name into that directory, you get an . - You cannot use the Move method to overwrite an existing file. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - - - - - - - The name of the file to move. - The new path for the file. - that specify how the file is to be moved. This parameter can be . - A callback function that is called each time another portion of the file has been moved. This parameter can be . - The argument to be passed to the callback function. This parameter can be . - - - [AlphaFS] Moves a specified file to a new location, providing the option to specify a new file name. - A class with the status of the Move action. - - This method works across disk volumes, and it does not throw an exception if the source and destination are the same. - Note that if you attempt to replace a file by moving a file of the same name into that directory, you get an . - You cannot use the Move method to overwrite an existing file. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - - - - - - - The name of the file to move. - The new path for the file. - that specify how the file is to be moved. This parameter can be . - A callback function that is called each time another portion of the file has been moved. This parameter can be . - The argument to be passed to the callback function. This parameter can be . - Indicates the format of the path parameter(s). - - - [AlphaFS] Moves a specified file to a new location, providing the option to specify a new file name. - - This method works across disk volumes, and it does not throw an exception if the source and destination are the same. - Note that if you attempt to replace a file by moving a file of the same name into that directory, you get an . - You cannot use the Move method to overwrite an existing file. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - - - - - - - The transaction. - The name of the file to move. - The new path for the file. - that specify how the file is to be moved. This parameter can be . - - - [AlphaFS] Moves a specified file to a new location, providing the option to specify a new file name. - - This method works across disk volumes, and it does not throw an exception if the source and destination are the same. - Note that if you attempt to replace a file by moving a file of the same name into that directory, you get an . - You cannot use the Move method to overwrite an existing file. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - - - - - - - The transaction. - The name of the file to move. - The new path for the file. - that specify how the file is to be moved. This parameter can be . - Indicates the format of the path parameter(s). - - - [AlphaFS] Moves a specified file to a new location, providing the option to specify a new file name. - A class with the status of the Move action. - - This method works across disk volumes, and it does not throw an exception if the source and destination are the same. - Note that if you attempt to replace a file by moving a file of the same name into that directory, you get an . - You cannot use the Move method to overwrite an existing file. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - - - - - - - The transaction. - The name of the file to move. - The new path for the file. - that specify how the file is to be moved. This parameter can be . - A callback function that is called each time another portion of the file has been moved. This parameter can be . - The argument to be passed to the callback function. This parameter can be . - - - [AlphaFS] Moves a specified file to a new location, providing the option to specify a new file name. - A class with the status of the Move action. - - This method works across disk volumes, and it does not throw an exception if the source and destination are the same. - Note that if you attempt to replace a file by moving a file of the same name into that directory, you get an . - You cannot use the Move method to overwrite an existing file. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - - - - - - - The transaction. - The name of the file to move. - The new path for the file. - that specify how the file is to be moved. This parameter can be . - A callback function that is called each time another portion of the file has been moved. This parameter can be . - The argument to be passed to the callback function. This parameter can be . - Indicates the format of the path parameter(s). - - - Determine the Copy or Move action. - - - Copy/move a Non-/Transacted file or directory including its children to a new location, or can be specified, - and the possibility of notifying the application of its progress through a callback function. - - A class with the status of the Copy or Move action. - - Option is recommended for very large file transfers. - You cannot use the Move method to overwrite an existing file, unless - contains . - This Move method works across disk volumes, and it does not throw an exception if the - source and destination are the same. - Note that if you attempt to replace a file by moving a file of the same name into - that directory, you get an IOException. - - - - - - - - - Specifies that and are a file or directory. - The transaction. - The source directory path. - The destination directory path. - if original Timestamps must be preserved, otherwise. This parameter is ignored for move operations. - that specify how the file is to be copied. This parameter can be . - Flags that specify how the file or directory is to be moved. This parameter can be . - A callback function that is called each time another portion of the file has been copied/moved. This parameter can be . - The argument to be passed to the callback function. This parameter can be . - - Indicates the format of the path parameter(s). - - - [AlphaFS] Determines whether the specified file is in use (locked). - Returns if the specified file is in use (locked); otherwise, - - - The file to check. - - - [AlphaFS] Determines whether the specified file is in use (locked). - Returns if the specified file is in use (locked); otherwise, - - - - The file to check. - Indicates the format of the path parameter(s). - - - [AlphaFS] Determines whether the specified file is in use (locked). - Returns if the specified file is in use (locked); otherwise, - - - - The transaction. - The file to check. - - - [AlphaFS] Determines whether the specified file is in use (locked). - Returns if the specified file is in use (locked); otherwise, - - - - The transaction. - The file to check. - Indicates the format of the path parameter(s). - - - [AlphaFS] Determines whether the specified file is in use (locked). - Returns if the specified file is in use (locked); otherwise, - - - - The transaction. - The file to check. - Indicates the format of the path parameter(s). - - - Appends lines to a file, and then closes the file. If the specified file does not exist, this method creates a file, writes the - specified lines to the file, and then closes the file. - - - The method creates the file if it doesn't exist, but it doesn't create new directories. Therefore, the value of the path parameter - must contain existing directories. - - - - - - - - - - - - The file to append the lines to. The file is created if it doesn't already exist. - The lines to append to the file. - - - Appends lines to a file, and then closes the file. If the specified file does not exist, this method creates a file, writes the - specified lines to the file, and then closes the file. - - - The method creates the file if it doesn't exist, but it doesn't create new directories. Therefore, the value of the path parameter - must contain existing directories. - - - - - - - - - - - - The file to append the lines to. The file is created if it doesn't already exist. - The lines to append to the file. - The character to use. - - - [AlphaFS] Appends lines to a file, and then closes the file. If the specified file does not exist, this method creates a file, - writes the specified lines to the file, and then closes the file. - - - The method creates the file if it doesn't exist, but it doesn't create new directories. Therefore, the value of the path parameter - must contain existing directories. - - - - - - - - - - - - The file to append the lines to. The file is created if it doesn't already exist. - The lines to append to the file. - Indicates the format of the path parameter(s). - - - [AlphaFS] Appends lines to a file, and then closes the file. If the specified file does not - exist, this method creates a file, writes the specified lines to the file, and then closes - the file. - - - The method creates the file if it doesn't exist, but it doesn't create new directories. - Therefore, the value of the path parameter must contain existing directories. - - - - - - - - - - - - - The file to append the lines to. The file is created if it doesn't already exist. - - The lines to append to the file. - The character to use. - Indicates the format of the path parameter(s). - - - [AlphaFS] Appends lines to a file, and then closes the file. If the specified file does not exist, this method creates a file, - writes the specified lines to the file, and then closes the file. - - - The method creates the file if it doesn't exist, but it doesn't create new directories. Therefore, the value of the path parameter - must contain existing directories. - - - - - - - - - - - - The transaction. - The file to append the lines to. The file is created if it doesn't already exist. - The lines to append to the file. - - - [AlphaFS] Appends lines to a file, and then closes the file. If the specified file does not exist, this method creates a file, - writes the specified lines to the file, and then closes the file. - - - The method creates the file if it doesn't exist, but it doesn't create new directories. Therefore, the value of the path parameter - must contain existing directories. - - - - - - - - - - - - The transaction. - The file to append the lines to. The file is created if it doesn't already exist. - The lines to append to the file. - The character to use. - - - [AlphaFS] Appends lines to a file, and then closes the file. If the specified file does not exist, this method creates a file, writes the - specified lines to the file, and then closes the file. - - - The method creates the file if it doesn't exist, but it doesn't create new directories. Therefore, the value of the path parameter - must contain existing directories. - - - - - - - - - - - - The transaction. - The file to append the lines to. The file is created if it doesn't already exist. - The lines to append to the file. - Indicates the format of the path parameter(s). - - - [AlphaFS] Appends lines to a file, and then closes the file. If the specified file does not exist, this method creates a file, - writes the specified lines to the file, and then closes the file. - - - The method creates the file if it doesn't exist, but it doesn't create new directories. Therefore, the value of the path parameter - must contain existing directories. - - - - - - - - - - - - The transaction. - The file to append the lines to. The file is created if it doesn't already exist. - The lines to append to the file. - The character to use. - Indicates the format of the path parameter(s). - - - Appends the specified stringto the file, creating the file if it does not already exist. - - - - - - - - - - - The file to append the specified string to. - The string to append to the file. - - - Appends the specified string to the file, creating the file if it does not already exist. - - - - - - - - - - - The file to append the specified string to. - The string to append to the file. - The character to use. - - - [AlphaFS] Appends the specified stringto the file, creating the file if it does not already exist. - - - - - - - - - - - The file to append the specified string to. - The string to append to the file. - Indicates the format of the path parameter(s). - - - [AlphaFS] Appends the specified string to the file, creating the file if it does not already exist. - - - - - - - - - - - The file to append the specified string to. - The string to append to the file. - The character to use. - Indicates the format of the path parameter(s). - - - [AlphaFS] Appends the specified stringto the file, creating the file if it does not already exist. - - - - - - - - - - - The transaction. - The file to append the specified string to. - The string to append to the file. - - - [AlphaFS] Appends the specified string to the file, creating the file if it does not already exist. - - - - - - - - - - - The transaction. - The file to append the specified string to. - The string to append to the file. - The character to use. - - - [AlphaFS] Appends the specified stringto the file, creating the file if it does not already exist. - - - - - - - - - - - The transaction. - The file to append the specified string to. - The string to append to the file. - Indicates the format of the path parameter(s). - - - [AlphaFS] Appends the specified string to the file, creating the file if it does not already exist. - - - - - - - - - - - The transaction. - The file to append the specified string to. - The string to append to the file. - The character to use. - Indicates the format of the path parameter(s). - - - Creates a new file, writes a collection of strings to the file, and then closes the file. - The default behavior of the method is to write out data by using UTF-8 encoding without a byte order mark (BOM). - - - - - - - - - - - The file to write to. - The lines to write to the file. - - - Creates a new file by using the specified encoding, writes a collection of strings to the file, and then closes the file. - The file to write to. - The string array to write to the file. - - - Creates a new file by using the specified encoding, writes a collection of strings to the file, and then closes the file. - - - - - - - - - - - The file to write to. - The lines to write to the file. - The character to use. - - - Creates a new file by using the specified encoding, writes a collection of strings to the file, and then closes the file. - - - - - - - - - - - The file to write to. - The string array to write to the file. - The character to use. - - - [AlphaFS] Creates a new file, writes a collection of strings to the file, and then closes the file. - The default behavior of the method is to write out data by using UTF-8 encoding without a byte order mark (BOM). - - - - - - - - - - - The file to write to. - The lines to write to the file. - Indicates the format of the path parameter(s). - - - [AlphaFS] Creates a new file by using the specified encoding, writes a collection of strings to the file, and then closes the file. - - - - - - - - - - - The file to write to. - The string array to write to the file. - Indicates the format of the path parameter(s). - - - [AlphaFS] Creates a new file by using the specified encoding, writes a collection of strings to the file, and then closes the file. - - - - - - - - - - - The file to write to. - The lines to write to the file. - The character to use. - Indicates the format of the path parameter(s). - - - [AlphaFS] Creates a new file by using the specified encoding, writes a collection of strings to the file, and then closes the file. - - - - - - - - - - - The file to write to. - The string array to write to the file. - The character to use. - Indicates the format of the path parameter(s). - - - [AlphaFS] Creates a new file, writes a collection of strings to the file, and then closes the file. - The default behavior of the method is to write out data by using UTF-8 encoding without a byte order mark (BOM). - - - - - - - - - - - The transaction. - The file to write to. - The lines to write to the file. - - - [AlphaFS] Creates a new file, writes a collection of strings to the file, and then closes the file. - The default behavior of the method is to write out data by using UTF-8 encoding without a byte order mark (BOM). - - - - - - - - - - - The transaction. - The file to write to. - The string array to write to the file. - - - [AlphaFS] Creates a new file by using the specified encoding, writes a collection of strings to the file, and then closes the file. - - - - - - - - - - - The transaction. - The file to write to. - The lines to write to the file. - The character to use. - - - [AlphaFS] Creates a new file by using the specified encoding, writes a collection of strings to the file, and then closes the file. - - - - - - - - - - - The transaction. - The file to write to. - The string array to write to the file. - The character to use. - - - [AlphaFS] Creates a new file, writes a collection of strings to the file, and then closes the file. - The default behavior of the method is to write out data by using UTF-8 encoding without a byte order mark (BOM). - - - - - - - - - - - The transaction. - The file to write to. - The lines to write to the file. - Indicates the format of the path parameter(s). - - - [AlphaFS] Creates a new file by using the specified encoding, writes a collection of strings to the file, and then closes the file. - - - - - - - - - - - The transaction. - The file to write to. - The string array to write to the file. - Indicates the format of the path parameter(s). - - - [AlphaFS] Creates a new file by using the specified encoding, writes a collection of strings to the file, and then closes the file. - - - - - - - - - - - The transaction. - The file to write to. - The lines to write to the file. - The character to use. - Indicates the format of the path parameter(s). - - - [AlphaFS] Creates a new file by using the specified encoding, writes a collection of strings to the file, and then closes the file. - - - - - - - - - - - The transaction. - The file to write to. - The string array to write to the file. - The character to use. - Indicates the format of the path parameter(s). - - - Creates a new file, writes the specified string to the file, and then closes the file. If the target file already exists, it is overwritten. - This method uses UTF-8 encoding without a Byte-Order Mark (BOM) - - - - - - - - - - - The file to write to. - The string to write to the file. - - - Creates a new file, writes the specified string to the file using the specified encoding, and then closes the file. If the target file already exists, it is overwritten. - The file to write to. - The string to write to the file. - The applied to the contents of the file. - - - [AlphaFS] Creates a new file, writes the specified string to the file, and then closes the file. If the target file already exists, it is overwritten. - This method uses UTF-8 encoding without a Byte-Order Mark (BOM) - - - - - - - - - - - The file to write to. - The string to write to the file. - Indicates the format of the path parameter(s). - - - [AlphaFS] Creates a new file, writes the specified string to the file using the specified encoding, and then closes the file. If the target file already exists, it is overwritten. - - - - - - - - - - - The file to write to. - The string to write to the file. - The applied to the contents of the file. - Indicates the format of the path parameter(s). - - - [AlphaFS] Creates a new file as part of a transaction, write the contents to the file, and then closes the file. If the target file already exists, it is overwritten. - This method uses UTF-8 encoding without a Byte-Order Mark (BOM) - - - - - - - - - - - The transaction. - The file to write to. - The string to write to the file. - - - [AlphaFS] Creates a new file as part of a transaction, writes the specified string to the file using the specified encoding, and then closes the file. If the target file already exists, it is overwritten. - - - - - - - - - - - The transaction. - The file to write to. - The string to write to the file. - The applied to the contents of the file. - - - [AlphaFS] Creates a new file as part of a transaction, write the contents to the file, and then closes the file. If the target file already exists, it is overwritten. - This method uses UTF-8 encoding without a Byte-Order Mark (BOM) - - - - - - - - - - - The transaction. - The file to write to. - The string to write to the file. - Indicates the format of the path parameter(s). - - - [AlphaFS] Creates a new file as part of a transaction, writes the specified string to the file using the specified encoding, and then closes the file. If the target file already exists, it is overwritten. - - - - - - - - - - - The transaction. - The file to write to. - The string to write to the file. - The applied to the contents of the file. - Indicates the format of the path parameter(s). - - - Creates/appends a new file by using the specified encoding, writes a collection of strings to the file, and then closes the file. - - - - - - - - - - - The transaction. - The file to write to. - The lines to write to the file. - The character to use. - for file Append, for file Write. - to a line terminator, to ommit the line terminator. - Indicates the format of the path parameter(s). - - - - Creates a that appends NativeMethods.DefaultFileEncoding encoded text to an existing file, or to a new - file if the specified file does not exist. - - The path to the file to append to. - - A stream writer that appends NativeMethods.DefaultFileEncoding encoded text to the specified file or to a new file. - - - - - Creates a that appends NativeMethods.DefaultFileEncoding encoded text to an existing file, or - to a new file if the specified file does not exist. - - The path to the file to append to. - Indicates the format of the path parameter(s). - - A stream writer that appends NativeMethods.DefaultFileEncoding encoded text to the specified file or to a new file. - - - - - Creates a that appends NativeMethods.DefaultFileEncoding encoded text to an existing file, or - to a new file if the specified file does not exist. - - The path to the file to append to. - The character to use. - Indicates the format of the path parameter(s). - - A stream writer that appends NativeMethods.DefaultFileEncoding encoded text to the specified file or to a new file. - - - - - Creates a that appends NativeMethods.DefaultFileEncoding encoded text to an existing file, or - to a new file if the specified file does not exist. - - The path to the file to append to. - The character to use. - - A stream writer that appends NativeMethods.DefaultFileEncoding encoded text to the specified file or to a new file. - - - - - Creates a that appends NativeMethods.DefaultFileEncoding encoded text to an existing file, or - to a new file if the specified file does not exist. - - The transaction. - The path to the file to append to. - - A stream writer that appends NativeMethods.DefaultFileEncoding encoded text to the specified file or to a new file. - - - - - Creates a that appends NativeMethods.DefaultFileEncoding encoded text to an existing file, or - to a new file if the specified file does not exist. - - The transaction. - The path to the file to append to. - Indicates the format of the path parameter(s). - - A stream writer that appends NativeMethods.DefaultFileEncoding encoded text to the specified file or to a new file. - - - - - Creates a that appends NativeMethods.DefaultFileEncoding encoded text to an existing file, or - to a new file if the specified file does not exist. - - The transaction. - The path to the file to append to. - The character to use. - Indicates the format of the path parameter(s). - - A stream writer that appends NativeMethods.DefaultFileEncoding encoded text to the specified file or to a new file. - - - - - Creates a that appends NativeMethods.DefaultFileEncoding encoded text to an existing file, or - to a new file if the specified file does not exist. - - The transaction. - The path to the file to append to. - The character to use. - - A stream writer that appends NativeMethods.DefaultFileEncoding encoded text to the specified file or to a new file. - - - - Creates a that appends NativeMethods.DefaultFileEncoding encoded text to an existing file, or to a new file if the specified file does not exist. - - The transaction. - The path to the file to append to. - The character to use. - Indicates the format of the path parameter(s). - - A stream writer that appends NativeMethods.DefaultFileEncoding encoded text to the specified file or to a new file. - - - - Creates or overwrites a file in the specified path. - The path and name of the file to create. - A that provides read/write access to the file specified in . - - - Creates or overwrites the specified file. - The name of the file. - The number of bytes buffered for reads and writes to the file. - - A with the specified buffer size that provides read/write access to the file specified in - . - - - - - Creates or overwrites the specified file, specifying a buffer size and a - value that describes how to create or overwrite the file. - - The name of the file. - The number of bytes buffered for reads and writes to the file. - One of the values that describes how to create or overwrite the file. - A new file with the specified buffer size. - - - - Creates or overwrites the specified file, specifying a buffer size and a - value that describes how to create or overwrite the file. - - The name of the file. - The number of bytes buffered for reads and writes to the file. - One of the values that describes how to create or overwrite the file. - - One of the values that determines the access control and audit security for the file. - - A new file with the specified buffer size, file options, and file security. - - - Creates or overwrites a file in the specified path. - The path and name of the file to create. - Indicates the format of the path parameter(s). - - A that provides read/write access to the file specified in - . - - - - Creates or overwrites the specified file. - The name of the file. - The number of bytes buffered for reads and writes to the file. - Indicates the format of the path parameter(s). - - A with the specified buffer size that provides read/write access to the file specified in - . - - - - - Creates or overwrites the specified file, specifying a buffer size and a - value that describes how to create or overwrite the file. - - The name of the file. - - The number of bytes buffered for reads and writes to the file. - - - One of the values that describes how to create or overwrite the - file. - - Indicates the format of the path parameter(s). - A new file with the specified buffer size. - - - - Creates or overwrites the specified file, specifying a buffer size and a - value that describes how to create or overwrite the file. - - The name of the file. - - The number of bytes buffered for reads and writes to the file. - - - One of the values that describes how to create or overwrite the - file. - - - One of the values that determines the access control and audit - security for the file. - - Indicates the format of the path parameter(s). - - A new file with the specified buffer size, file options, and file security. - - - - Creates or overwrites a file in the specified path. - The transaction. - The path and name of the file to create. - - A that provides read/write access to the file specified in - . - - - - Creates or overwrites the specified file. - The transaction. - The name of the file. - - The number of bytes buffered for reads and writes to the file. - - - A with the specified buffer size that provides read/write access - to the file specified in . - - - - - Creates or overwrites the specified file, specifying a buffer size and a - value that describes how to create or overwrite the file. - - The transaction. - The name of the file. - The number of bytes buffered for reads and writes to the file. - One of the values that describes how to create or overwrite the file. - A new file with the specified buffer size. - - - - Creates or overwrites the specified file, specifying a buffer size and a - value that describes how to create or overwrite the file. - - The transaction. - The name of the file. - The number of bytes buffered for reads and writes to the file. - One of the values that describes how to create or overwrite the file. - - One of the values that determines the access control and audit security for the file. - - A new file with the specified buffer size, file options, and file security. - - - Creates or overwrites a file in the specified path. - The transaction. - The path and name of the file to create. - Indicates the format of the path parameter(s). - - A that provides read/write access to the file specified in - . - - - - Creates or overwrites the specified file. - The transaction. - The name of the file. - The number of bytes buffered for reads and writes to the file. - Indicates the format of the path parameter(s). - - A with the specified buffer size that provides read/write access to the file specified in - . - - - - - Creates or overwrites the specified file, specifying a buffer size and a - value that describes how to create or overwrite the file. - - The transaction. - The name of the file. - The number of bytes buffered for reads and writes to the file. - One of the values that describes how to create or overwrite the file. - Indicates the format of the path parameter(s). - A new file with the specified buffer size. - - - - Creates or overwrites the specified file, specifying a buffer size and a - value that describes how to create or overwrite the file. - - The transaction. - The name of the file. - The number of bytes buffered for reads and writes to the file. - One of the values that describes how to create or overwrite the file. - - One of the values that determines the access control and audit security for the file. - - Indicates the format of the path parameter(s). - A new file with the specified buffer size, file options, and file security. - - - Creates or overwrites a file in the specified path. - The transaction. - The name of the file. - The additional advanced options to create a file. - - A instance that determines the access control and audit security for the file. - - The option gives you more precise control over how you want to create a file. - - The allow you additionally specify to default read/write capability - just write, bypassing any cache. - - - The option controls how you would like to share created file with other requesters. - - Indicates the format of the parameter. - The number of bytes buffered for reads and writes to the file. - A that provides read/write access to the file specified in path. - - - Creates or opens a file, directory or I/O device. - A that provides read/write access to the file or directory specified by . - - To obtain a directory handle using CreateFile, specify the FILE_FLAG_BACKUP_SEMANTICS flag as part of dwFlagsAndAttributes. - The most commonly used I/O devices are as follows: file, file stream, directory, physical disk, volume, console buffer, tape drive, communications resource, mailslot, and pipe. - - - - - The transaction. - The path and name of the file or directory to create. - One of the values that describes how to create or overwrite the file or directory. - A instance that determines the access control and audit security for the file or directory. - A constant that determines how to open or create the file or directory. - A constant that determines the access rights to use when creating access and audit rules for the file or directory. - A constant that determines how the file or directory will be shared by processes. - . - Indicates the format of the parameter. - - - Determines whether the specified file exists. - - MSDN: .NET 3.5+: Trailing spaces are removed from the end of the - parameter before checking whether the directory exists. - The Exists method returns if any error occurs while trying to - determine if the specified file exists. - This can occur in situations that raise exceptions such as passing a file name with - invalid characters or too many characters, a failing or missing disk, or if the caller does not have permission to read the - file. - The Exists method should not be used for path validation, - this method merely checks if the file specified in path exists. - Passing an invalid path to Exists returns false. - Be aware that another process can potentially do something with the file in - between the time you call the Exists method and perform another operation on the file, such as Delete. - - The file to check. - - Returns if the caller has the required permissions and - contains the name of an existing file; otherwise, - - - - - [AlphaFS] Determines whether the specified file exists. - - MSDN: .NET 3.5+: Trailing spaces are removed from the end of the - parameter before checking whether the directory exists. - The Exists method returns if any error occurs while trying to - determine if the specified file exists. - This can occur in situations that raise exceptions such as passing a file name with - invalid characters or too many characters, - a failing or missing disk, or if the caller does not have permission to read the - file. - The Exists method should not be used for path validation, this method merely checks - if the file specified in path exists. - Passing an invalid path to Exists returns false. - Be aware that another process can potentially do something with the file in - between the time you call the Exists method and perform another operation on the file, such - as Delete. - - The file to check. - Indicates the format of the path parameter(s). - - Returns if the caller has the required permissions and - contains the name of an existing file; otherwise, - - - - - - [AlphaFS] Determines whether the specified file exists. - - - MSDN: .NET 3.5+: Trailing spaces are removed from the end of the - parameter before checking whether the directory exists. - The Exists method returns if any error occurs while trying to - determine if the specified file exists. - This can occur in situations that raise exceptions such as passing a file name with - invalid characters or too many characters, - a failing or missing disk, or if the caller does not have permission to read the - file. - The Exists method should not be used for path validation, - this method merely checks if the file specified in path exists. - Passing an invalid path to Exists returns false. - Be aware that another process can potentially do something with the file in - between - the time you call the Exists method and perform another operation on the file, such - as Delete. - - The transaction. - The file to check. - - Returns if the caller has the required permissions - and contains the name of an existing file; otherwise, - - - - - - [AlphaFS] Determines whether the specified file exists. - - - MSDN: .NET 3.5+: Trailing spaces are removed from the end of the - parameter before checking whether the directory exists. - The Exists method returns if any error occurs while trying to - determine if the specified file exists. - This can occur in situations that raise exceptions such as passing a file name with - invalid characters or too many characters, - a failing or missing disk, or if the caller does not have permission to read the - file. - The Exists method should not be used for path validation, - this method merely checks if the file specified in path exists. - Passing an invalid path to Exists returns false. - Be aware that another process can potentially do something with the file in - between - the time you call the Exists method and perform another operation on the file, such - as Delete. - - The transaction. - The file to check. - Indicates the format of the path parameter(s). - - Returns if the caller has the required permissions - and contains the name of an existing file; otherwise, - - - - - Determines whether the specified file or directory exists. - - MSDN: .NET 3.5+: Trailing spaces are removed from the end of the parameter before checking whether - the directory exists. - The Exists method returns if any error occurs while trying to determine if the specified file - exists. - This can occur in situations that raise exceptions such as passing a file name with invalid characters or too many characters, - - a failing or missing disk, or if the caller does not have permission to read the file. - The Exists method should not be used for path validation, - this method merely checks if the file specified in path exists. - Passing an invalid path to Exists returns false. - Be aware that another process can potentially do something with the file in between - the time you call the Exists method and perform another operation on the file, such as Delete. - - Specifies that is a file or directory. - The transaction. - The file to check. - Indicates the format of the path parameter(s). - - Returns if the caller has the required permissions - and contains the name of an existing file or directory; otherwise, - - - - Gets a object that encapsulates the access control list (ACL) entries for a specified file. - A object that encapsulates the access control rules for the file described by the parameter. - - - - The path to a file containing a object that describes the file's access control list (ACL) information. - - - Gets a object that encapsulates the access control list (ACL) entries for a specified file. - A object that encapsulates the access control rules for the file described by the parameter. - - - - The path to a file containing a object that describes the file's access control list (ACL) information. - One (or more) of the values that specifies the type of access control list (ACL) information to receive. - - - [AlphaFS] Gets a object that encapsulates the access control list (ACL) entries for a specified file. - A object that encapsulates the access control rules for the file described by the parameter. - - - - The path to a file containing a object that describes the file's access control list (ACL) information. - Indicates the format of the path parameter(s). - - - [AlphaFS] Gets a object that encapsulates the access control list (ACL) entries for a specified file. - A object that encapsulates the access control rules for the file described by the parameter. - - - - The path to a file containing a object that describes the file's access control list (ACL) information. - One (or more) of the values that specifies the type of access control list (ACL) information to receive. - Indicates the format of the path parameter(s). - - - [AlphaFS] Gets a object that encapsulates the access control list (ACL) entries for a specified file handle. - A object that encapsulates the access control rules for the file described by the parameter. - - - - A to a file containing a object that describes the file's access control list (ACL) information. - - - [AlphaFS] Gets a object that encapsulates the access control list (ACL) entries for a specified file handle. - A object that encapsulates the access control rules for the file described by the parameter. - - - - A to a file containing a object that describes the file's access control list (ACL) information. - One (or more) of the values that specifies the type of access control list (ACL) information to receive. - - - [AlphaFS] Gets an object for a particular file or directory. - An object that encapsulates the access control rules for the file or directory described by the parameter. - - - - Generic type parameter. - Specifies that is a file or directory. - The path to a file/directory containing a / object that describes the file's/directory's access control list (ACL) information. - One (or more) of the values that specifies the type of access control list (ACL) information to receive. - Indicates the format of the path parameter(s). - - - Gets the of the file on the path. - The path to the file. - The of the file on the path. - - - [AlphaFS] Gets the of the file on the path. - The path to the file. - Indicates the format of the path parameter(s). - The of the file on the path. - - - [AlphaFS] Gets the of the file on the path. - The transaction. - The path to the file. - The of the file on the path. - - - [AlphaFS] Gets the of the file on the path. - The transaction. - The path to the file. - Indicates the format of the path parameter(s). - The of the file on the path. - - - Gets the or of the specified file or directory. - The or of the specified file or directory. - - - Generic type parameter. - The transaction. - The path to the file or directory. - Indicates the format of the path parameter(s). - - - - - Calls NativeMethods.GetFileAttributesEx to retrieve WIN32_FILE_ATTRIBUTE_DATA. - Note that classes should use -1 as the uninitialized state for dataInitialized when relying on this method. - - No path (null, empty string) checking or normalization is performed. - . - . - [in,out]. - . - . - 0 on success, otherwise a Win32 error code. - - - Gets the creation date and time of the specified file. - The file for which to obtain creation date and time information. - - A structure set to the creation date and time for the specified file. This value is expressed in - local time. - - - - [AlphaFS] Gets the creation date and time of the specified file. - The file for which to obtain creation date and time information. - Indicates the format of the path parameter(s). - - A structure set to the creation date and time for the specified file. This value is expressed in - local time. - - - - [AlphaFS] Gets the creation date and time of the specified file. - The transaction. - The file for which to obtain creation date and time information. - - A structure set to the creation date and time for the specified file. This value is expressed in - local time. - - - - [AlphaFS] Gets the creation date and time of the specified file. - The transaction. - The file for which to obtain creation date and time information. - Indicates the format of the path parameter(s). - - A structure set to the creation date and time for the specified file. This value is expressed in - local time. - - - - Gets the creation date and time, in Coordinated Universal Time (UTC) format, of the specified file. - - The file for which to obtain creation date and time information, in Coordinated Universal Time (UTC) format. - - - A structure set to the creation date and time for the specified file. This value is expressed in UTC - time. - - - - [AlphaFS] Gets the creation date and time, in Coordinated Universal Time (UTC) format, of the specified file. - - The file for which to obtain creation date and time information, in Coordinated Universal Time (UTC) format. - - Indicates the format of the path parameter(s). - - A structure set to the creation date and time for the specified file. This value is expressed in UTC - time. - - - - [AlphaFS] Gets the creation date and time, in Coordinated Universal Time (UTC) format, of the specified file. - The transaction. - - The file for which to obtain creation date and time information, in Coordinated Universal Time (UTC) format. - - - A structure set to the creation date and time for the specified file. This value is expressed in UTC - time. - - - - [AlphaFS] Gets the creation date and time, in Coordinated Universal Time (UTC) format, of the specified file. - The transaction. - - The file for which to obtain creation date and time information, in Coordinated Universal Time (UTC) format. - - Indicates the format of the path parameter(s). - - A structure set to the creation date and time for the specified file. This value is expressed in UTC - time. - - - - - [AlphaFS] Gets the creation date and time, in Coordinated Universal Time (UTC) or local time, of the specified file or directory. - - The transaction. - The file or directory for which to obtain creation date and time information. - - gets the Coordinated Universal Time (UTC), gets the local time. - - Indicates the format of the path parameter(s). - - A structure set to the creation date and time for the specified file or directory. Depending on - this value is expressed in UTC- or local time. - - - - Gets the date and time that the specified file was last accessed. - The file for which to obtain access date and time information. - - A structure set to the date and time that the specified file was last accessed. This value is - expressed in local time. - - - - [AlphaFS] Gets the date and time that the specified file was last accessed. - The file for which to obtain access date and time information. - Indicates the format of the path parameter(s). - - A structure set to the date and time that the specified file was last accessed. This value is - expressed in local time. - - - - [AlphaFS] Gets the date and time that the specified file was last accessed. - The transaction. - The file for which to obtain access date and time information. - - A structure set to the date and time that the specified file was last accessed. This value is - expressed in local time. - - - - [AlphaFS] Gets the date and time that the specified file was last accessed. - The transaction. - The file for which to obtain access date and time information. - Indicates the format of the path parameter(s). - - A structure set to the date and time that the specified file was last accessed. This value is - expressed in local time. - - - - Gets the date and time, in coordinated universal time (UTC), that the specified file was last accessed. - The file for which to obtain access date and time information. - - A structure set to the date and time that the specified file was last accessed. This value is - expressed in UTC time. - - - - [AlphaFS] Gets the date and time, in coordinated universal time (UTC), that the specified file was last accessed. - The file for which to obtain access date and time information. - Indicates the format of the path parameter(s). - - A structure set to the date and time that the specified file was last accessed. This value is - expressed in UTC time. - - - - [AlphaFS] Gets the date and time, in coordinated universal time (UTC), that the specified file was last accessed. - The transaction. - The file for which to obtain access date and time information. - - A structure set to the date and time that the specified file was last accessed. This value is - expressed in UTC time. - - - - [AlphaFS] Gets the date and time, in coordinated universal time (UTC), that the specified file was last accessed. - The transaction. - The file for which to obtain access date and time information. - Indicates the format of the path parameter(s). - - A structure set to the date and time that the specified file was last accessed. This value is - expressed in UTC time. - - - - - [AlphaFS] Gets the date and time, in coordinated universal time (UTC) or local time, that the specified file or directory was last - accessed. - - The transaction. - The file or directory for which to obtain access date and time information. - - gets the Coordinated Universal Time (UTC), gets the local time. - - Indicates the format of the path parameter(s). - - A structure set to the date and time that the specified file or directory was last accessed. - Depending on this value is expressed in UTC- or local time. - - - - Gets the date and time that the specified file was last written to. - The file for which to obtain write date and time information. - - A structure set to the date and time that the specified file was last written to. This value is - expressed in local time. - - - - [AlphaFS] Gets the date and time that the specified file was last written to. - The file for which to obtain write date and time information. - Indicates the format of the path parameter(s). - - A structure set to the date and time that the specified file was last written to. This value is - expressed in local time. - - - - [AlphaFS] Gets the date and time that the specified file was last written to. - The transaction. - The file for which to obtain write date and time information. - - A structure set to the date and time that the specified file was last written to. This value is - expressed in local time. - - - - [AlphaFS] Gets the date and time that the specified file was last written to. - The transaction. - The file for which to obtain write date and time information. - Indicates the format of the path parameter(s). - - A structure set to the date and time that the specified file was last written to. This value is - expressed in local time. - - - - Gets the date and time, in coordinated universal time (UTC) time, that the specified file was last written to. - The file for which to obtain write date and time information. - - A structure set to the date and time that the specified file was last written to. This value is - expressed in UTC time. - - - - - [AlphaFS] Gets the date and time, in coordinated universal time (UTC) time, that the specified file was last written to. - - The file for which to obtain write date and time information. - Indicates the format of the path parameter(s). - - A structure set to the date and time that the specified file was last written to. This value is - expressed in UTC time. - - - - - [AlphaFS] Gets the date and time, in coordinated universal time (UTC) time, that the specified file was last written to. - - The transaction. - The file for which to obtain write date and time information. - - A structure set to the date and time that the specified file was last written to. This value is - expressed in UTC time. - - - - - [AlphaFS] Gets the date and time, in coordinated universal time (UTC) time, that the specified file was last written to. - - The transaction. - The file for which to obtain write date and time information. - Indicates the format of the path parameter(s). - - A structure set to the date and time that the specified file was last written to. This value is - expressed in UTC time. - - - - - [AlphaFS] Gets the date and time, in coordinated universal time (UTC) or local time, that the specified file or directory was last - written to. - - The transaction. - The file or directory for which to obtain write date and time information. - - gets the Coordinated Universal Time (UTC), gets the local time. - - Indicates the format of the path parameter(s). - - A structure set to the date and time that the specified file or directory was last written to. - Depending on this value is expressed in UTC- or local time. - - - - Opens a on the specified path with read/write access. - The file to open. - A value that specifies whether a file is created if one does not exist, and determines whether the contents of existing files are retained or overwritten. - A opened in the specified mode and path, with read/write access and not shared. - - - Opens a on the specified path, with the specified mode and access. - The file to open. - A value that specifies whether a file is created if one does not exist, and determines whether the contents of existing files are retained or overwritten. - A value that specifies the operations that can be performed on the file. - An unshared that provides access to the specified file, with the specified mode and access. - - - Opens a on the specified path, having the specified mode with read, write, or read/write access and the specified sharing option. - The file to open. - A value that specifies whether a file is created if one does not exist, and determines whether the contents of existing files are retained or overwritten. - A value that specifies the operations that can be performed on the file. - A value specifying the type of access other threads have to the file. - A on the specified path, having the specified mode with read, write, or read/write access and the specified sharing option. - - - [AlphaFS] Opens a on the specified path with read/write access. - The file to open. - - A value that specifies whether a file is created if one does not exist, and determines whether the contents - of existing files are retained or overwritten. - - Indicates the format of the path parameter(s). - A opened in the specified mode and path, with read/write access and not shared. - - - [AlphaFS] Opens a on the specified path, with the specified mode and access. - The file to open. - - A value that specifies whether a file is created if one does not exist, and determines whether the contents - of existing files are retained or overwritten. - - A value that specifies the operations that can be performed on the file. - Indicates the format of the path parameter(s). - - An unshared that provides access to the specified file, with the specified mode and access. - - - - [AlphaFS] Opens a on the specified path, having the specified mode with read, write, or read/write access and the specified sharing option. - The file to open. - - A value that specifies whether a file is created if one does not exist, and determines whether the contents - of existing files are retained or overwritten. - - A value that specifies the operations that can be performed on the file. - A value specifying the type of access other threads have to the file. - Indicates the format of the path parameter(s). - - A on the specified path, having the specified mode with read, write, or read/write access and the - specified sharing option. - - - - [AlphaFS] Opens a on the specified path, having the specified mode with read, write, or read/write access and the specified sharing option. - The file to open. - - A value that specifies whether a file is created if one does not exist, and determines whether the contents - of existing files are retained or overwritten. - - A value that specifies the operations that can be performed on the file. - A value specifying the type of access other threads have to the file. - The extended attributes. - Indicates the format of the path parameter(s). - - A on the specified path, having the specified mode with read, write, or read/write access and the - specified sharing option. - - - - [AlphaFS] Opens a on the specified path using the specified creation mode, read/write and sharing permission, and buffer size. - The file to open. - A constant that determines how to open or create the file. - A value that specifies the operations that can be performed on the - file. - A constant that determines how the file will be shared by processes. - A positive value greater than 0 indicating the buffer size. The default buffer size is 4096. - - A on the specified path, having the specified mode with read, write, or read/write - access and the specified sharing option. - - - - [AlphaFS] Opens a on the specified path using the specified creation mode, read/write and sharing permission, and buffer size. - The file to open. - A constant that determines how to open or create the file. - A value that specifies the operations that can be performed on the - file. - A constant that determines how the file will be shared by processes. - A positive value greater than 0 indicating the buffer size. The - default buffer size is 4096. - Specifies whether to use asynchronous I/O or synchronous I/O. However, note that the - underlying operating system might not support asynchronous I/O, so when specifying true, the handle might be - opened synchronously depending on the platform. When opened asynchronously, the BeginRead and BeginWrite methods - perform better on large reads or writes, but they might be much slower for small reads or writes. If the - application is designed to take advantage of asynchronous I/O, set the useAsync parameter to true. Using - asynchronous I/O correctly can speed up applications by as much as a factor of 10, but using it without - redesigning the application for asynchronous I/O can decrease performance by as much as a factor of 10. - - A on the specified path, having the specified mode with read, write, or read/write - access and the specified sharing option. - - - - [AlphaFS] Opens a on the specified path using the specified creation mode, read/write and sharing permission, and buffer size. - The file to open. - A constant that determines how to open or create the file. - A value that specifies the operations that can be performed on the - file. - A constant that determines how the file will be shared by processes. - A positive value greater than 0 indicating the buffer size. The - default buffer size is 4096. - A value that specifies additional file options. - - A on the specified path, having the specified mode with read, write, or read/write - access and the specified sharing option. - - - - [AlphaFS] Opens a on the specified path using the specified creation mode, read/write and sharing permission, and buffer size. - The file to open. - A constant that determines how to open or create the file. - A value that specifies the operations that can be performed on the - file. - A constant that determines how the file will be shared by processes. - A positive value greater than 0 indicating the buffer size. The - default buffer size is 4096. - The extended attributes specifying additional options. - - A on the specified path, having the specified mode with read, write, or read/write - access and the specified sharing option. - - - - [AlphaFS] Opens a on the specified path using the specified creation mode, read/write and sharing permission, and buffer size. - The file to open. - A constant that determines how to open or create the file. - A value that specifies the operations that can be performed on the - file. - A constant that determines how the file will be shared by processes. - A positive value greater than 0 indicating the buffer size. The - default buffer size is 4096. - Indicates the format of the path parameter. - - A on the specified path, having the specified mode with read, write, or read/write - access and the specified sharing option. - - - - [AlphaFS] Opens a on the specified path using the specified creation mode, read/write and sharing permission, and buffer size. - The file to open. - A constant that determines how to open or create the file. - A value that specifies the operations that can be performed on the - file. - A constant that determines how the file will be shared by processes. - A positive value greater than 0 indicating the buffer size. The - default buffer size is 4096. - Specifies whether to use asynchronous I/O or synchronous I/O. However, note that the - underlying operating system might not support asynchronous I/O, so when specifying true, the handle might be - opened synchronously depending on the platform. When opened asynchronously, the BeginRead and BeginWrite methods - perform better on large reads or writes, but they might be much slower for small reads or writes. If the - application is designed to take advantage of asynchronous I/O, set the useAsync parameter to true. Using - asynchronous I/O correctly can speed up applications by as much as a factor of 10, but using it without - redesigning the application for asynchronous I/O can decrease performance by as much as a factor of 10. - Indicates the format of the path parameter. - - A on the specified path, having the specified mode with read, write, or read/write - access and the specified sharing option. - - - - [AlphaFS] Opens a on the specified path using the specified creation mode, read/write and sharing permission, and buffer size. - The file to open. - A constant that determines how to open or create the file. - A value that specifies the operations that can be performed on the - file. - A constant that determines how the file will be shared by processes. - A positive value greater than 0 indicating the buffer size. The - default buffer size is 4096. - A value that specifies additional file options. - Indicates the format of the path parameter. - - A on the specified path, having the specified mode with read, write, or read/write - access and the specified sharing option. - - - - [AlphaFS] Opens a on the specified path using the specified creation mode, read/write and sharing permission, and buffer size. - The file to open. - A constant that determines how to open or create the file. - A value that specifies the operations that can be performed on the - file. - A constant that determines how the file will be shared by processes. - A positive value greater than 0 indicating the buffer size. The - default buffer size is 4096. - The extended attributes specifying additional options. - Indicates the format of the path parameter. - - A on the specified path, having the specified mode with read, write, or read/write - access and the specified sharing option. - - - - [AlphaFS] Opens a on the specified path using the specified creation mode, read/write and sharing permission, and buffer size. - The file to open. - A constant that determines how to open or create the file. - A value that specifies the operations that can be performed on the - file. - A constant that determines how the file will be shared by processes. - A positive value greater than 0 indicating the buffer size. The - default buffer size is 4096. - A value that specifies additional file options. - - A on the specified path, having the specified mode with read, write, or read/write - access and the specified sharing option. - - - - [AlphaFS] Opens a on the specified path using the specified creation mode, read/write and sharing permission, and buffer size. - The file to open. - A constant that determines how to open or create the file. - A value that specifies the operations that can be performed on the - file. - A constant that determines how the file will be shared by processes. - A positive value greater than 0 indicating the buffer size. The - default buffer size is 4096. - Extended attributes specifying additional options. - - A on the specified path, having the specified mode with read, write, or read/write - access and the specified sharing option. - - - - [AlphaFS] Opens a on the specified path using the specified creation mode, read/write and sharing permission, and buffer size. - The file to open. - A constant that determines how to open or create the file. - A value that specifies the operations that can be performed on the - file. - A constant that determines how the file will be shared by processes. - A positive value greater than 0 indicating the buffer size. The - default buffer size is 4096. - A value that specifies additional file options. - A value that determines the access control and audit security for the file. - - A on the specified path, having the specified mode with read, write, or read/write - access and the specified sharing option. - - - - [AlphaFS] Opens a on the specified path using the specified creation mode, read/write and sharing permission, and buffer size. - The file to open. - A constant that determines how to open or create the file. - A value that specifies the operations that can be performed on the - file. - A constant that determines how the file will be shared by processes. - A positive value greater than 0 indicating the buffer size. The - default buffer size is 4096. - Extended attributes specifying additional options. - A value that determines the access control and audit security for the file. - - A on the specified path, having the specified mode with read, write, or read/write - access and the specified sharing option. - - - - [AlphaFS] Opens a on the specified path using the specified creation mode, read/write and sharing permission, and buffer size. - The file to open. - A constant that determines how to open or create the file. - A value that specifies the operations that can be performed on the - file. - A constant that determines how the file will be shared by processes. - A positive value greater than 0 indicating the buffer size. The - default buffer size is 4096. - A value that specifies additional file options. - Indicates the format of the path parameter. - - A on the specified path, having the specified mode with read, write, or read/write - access and the specified sharing option. - - - - [AlphaFS] Opens a on the specified path using the specified creation mode, read/write and sharing permission, and buffer size. - The file to open. - A constant that determines how to open or create the file. - A value that specifies the operations that can be performed on the - file. - A constant that determines how the file will be shared by processes. - A positive value greater than 0 indicating the buffer size. The - default buffer size is 4096. - Extended attributes specifying additional options. - Indicates the format of the path parameter. - - A on the specified path, having the specified mode with read, write, or read/write - access and the specified sharing option. - - - - [AlphaFS] Opens a on the specified path using the specified creation mode, access rights and sharing permission, the buffer size, additional file options, access control and audit security. - The file to open. - A constant that determines how to open or create the file. - A value that specifies the operations that can be performed on the - file. - A constant that determines how the file will be shared by processes. - A positive value greater than 0 indicating the buffer size. The - default buffer size is 4096. - A value that specifies additional file options. - A value that determines the access control and audit security for the file. - Indicates the format of the path parameter. - - A on the specified path, having the specified mode with read, write, or read/write - access and the specified sharing option. - - - - [AlphaFS] Opens a on the specified path using the specified creation mode, access rights and sharing permission, the buffer size, additional file options, access control and audit security. - The file to open. - A constant that determines how to open or create the file. - A value that specifies the operations that can be performed on the - file. - A constant that determines how the file will be shared by processes. - A positive value greater than 0 indicating the buffer size. The - default buffer size is 4096. - Extended attributes specifying additional options. - A value that determines the access control and audit security for the file. - Indicates the format of the path parameter. - - A on the specified path, having the specified mode with read, write, or read/write - access and the specified sharing option. - - - - [AlphaFS] (Transacted) Opens a on the specified path with read/write access. - The transaction. - The file to open. - - A value that specifies whether a file is created if one does not exist, and determines whether the contents - of existing files are retained or overwritten. - - A opened in the specified mode and path, with read/write access and not shared. - - - [AlphaFS] (Transacted) Opens a on the specified path with read/write access. - The transaction. - The file to open. - - A value that specifies whether a file is created if one does not exist, and determines whether the contents - of existing files are retained or overwritten. - - Indicates the format of the path parameter(s). - A opened in the specified mode and path, with read/write access and not shared. - - - [AlphaFS] (Transacted) Opens a on the specified path, with the specified mode and access. - The transaction. - The file to open. - - A value that specifies whether a file is created if one does not exist, and determines whether the contents - of existing files are retained or overwritten. - - A value that specifies the operations that can be performed on the file. - - An unshared that provides access to the specified file, with the specified mode and access. - - - - [AlphaFS] (Transacted) Opens a on the specified path, having the specified mode with read, write, or read/write access and the specified sharing option. - The transaction. - The file to open. - - A value that specifies whether a file is created if one does not exist, and determines whether the contents - of existing files are retained or overwritten. - - A value that specifies the operations that can be performed on the file. - A value specifying the type of access other threads have to the file. - - A on the specified path, having the specified mode with read, write, or read/write access and the - specified sharing option. - - - - [AlphaFS] (Transacted) Opens a on the specified path, with the specified mode and access. - The transaction. - The file to open. - - A value that specifies whether a file is created if one does not exist, and determines whether the contents - of existing files are retained or overwritten. - - A value that specifies the operations that can be performed on the file. - Indicates the format of the path parameter(s). - - An unshared that provides access to the specified file, with the specified mode and access. - - - - [AlphaFS] (Transacted) Opens a on the specified path, having the specified mode with read, write, or read/write access and the specified sharing option. - The transaction. - The file to open. - A value that specifies whether a file is created if one does not exist, and determines whether the contents of existing files are retained or overwritten. - A value that specifies the operations that can be performed on the file. - A value specifying the type of access other threads have to the file. - Indicates the format of the path parameter(s). - A on the specified path, having the specified mode with read, write, or read/write access and the specified sharing option. - - - [AlphaFS] (Transacted) Opens a on the specified path, having the specified mode with read, write, or read/write access and the specified sharing option. - The transaction. - The file to open. - - A value that specifies whether a file is created if one does not exist, and determines whether the contents - of existing files are retained or overwritten. - - A value that specifies the operations that can be performed on the file. - A value specifying the type of access other threads have to the file. - The extended attributes. - Indicates the format of the path parameter(s). - - A on the specified path, having the specified mode with read, write, or read/write access and the - specified sharing option. - - - - [AlphaFS] (Transacted) Opens a on the specified path using the specified creation mode, read/write and sharing permission, and buffer size. - The transaction. - The file to open. - A constant that determines how to open or create the file. - A value that specifies the operations that can be performed on the - file. - A constant that determines how the file will be shared by processes. - A positive value greater than 0 indicating the buffer size. The - default buffer size is 4096. - - A on the specified path, having the specified mode with read, write, or read/write - access and the specified sharing option. - - - - [AlphaFS] (Transacted) Opens a on the specified path using the specified creation mode, read/write and sharing permission, and buffer size. - The transaction. - The file to open. - A constant that determines how to open or create the file. - A value that specifies the operations that can be performed on the - file. - A constant that determines how the file will be shared by processes. - A positive value greater than 0 indicating the buffer size. The - default buffer size is 4096. - Specifies whether to use asynchronous I/O or synchronous I/O. However, note that the - underlying operating system might not support asynchronous I/O, so when specifying true, the handle might be - opened synchronously depending on the platform. When opened asynchronously, the BeginRead and BeginWrite methods - perform better on large reads or writes, but they might be much slower for small reads or writes. If the - application is designed to take advantage of asynchronous I/O, set the useAsync parameter to true. Using - asynchronous I/O correctly can speed up applications by as much as a factor of 10, but using it without - redesigning the application for asynchronous I/O can decrease performance by as much as a factor of 10. - - A on the specified path, having the specified mode with read, write, or read/write - access and the specified sharing option. - - - - [AlphaFS] (Transacted) Opens a on the specified path using the specified creation mode, read/write and sharing permission, and buffer size. - The transaction. - The file to open. - A constant that determines how to open or create the file. - A value that specifies the operations that can be performed on the - file. - A constant that determines how the file will be shared by processes. - A positive value greater than 0 indicating the buffer size. The - default buffer size is 4096. - A value that specifies additional file options. - - A on the specified path, having the specified mode with read, write, or read/write - access and the specified sharing option. - - - - [AlphaFS] (Transacted) Opens a on the specified path using the specified creation mode, read/write and sharing permission, and buffer size. - The transaction. - The file to open. - A constant that determines how to open or create the file. - A value that specifies the operations that can be performed on the - file. - A constant that determines how the file will be shared by processes. - A positive value greater than 0 indicating the buffer size. The - default buffer size is 4096. - The extended attributes specifying additional options. - - A on the specified path, having the specified mode with read, write, or read/write - access and the specified sharing option. - - - - [AlphaFS] (Transacted) Opens a on the specified path using the specified creation mode, read/write and sharing permission, and buffer size. - The transaction. - The file to open. - A constant that determines how to open or create the file. - A value that specifies the operations that can be performed on the - file. - A constant that determines how the file will be shared by processes. - A positive value greater than 0 indicating the buffer size. The - default buffer size is 4096. - Indicates the format of the path parameter. - - A on the specified path, having the specified mode with read, write, or read/write - access and the specified sharing option. - - - - [AlphaFS] (Transacted) Opens a on the specified path using the specified creation mode, read/write and sharing permission, and buffer size. - The transaction. - The file to open. - A constant that determines how to open or create the file. - A value that specifies the operations that can be performed on the - file. - A constant that determines how the file will be shared by processes. - A positive value greater than 0 indicating the buffer size. The - default buffer size is 4096. - Specifies whether to use asynchronous I/O or synchronous I/O. However, note that the - underlying operating system might not support asynchronous I/O, so when specifying true, the handle might be - opened synchronously depending on the platform. When opened asynchronously, the BeginRead and BeginWrite methods - perform better on large reads or writes, but they might be much slower for small reads or writes. If the - application is designed to take advantage of asynchronous I/O, set the useAsync parameter to true. Using - asynchronous I/O correctly can speed up applications by as much as a factor of 10, but using it without - redesigning the application for asynchronous I/O can decrease performance by as much as a factor of 10. - Indicates the format of the path parameter. - - A on the specified path, having the specified mode with read, write, or read/write - access and the specified sharing option. - - - - [AlphaFS] (Transacted) Opens a on the specified path using the specified creation mode, read/write and sharing permission, and buffer size. - The transaction. - The file to open. - A constant that determines how to open or create the file. - A value that specifies the operations that can be performed on the - file. - A constant that determines how the file will be shared by processes. - A positive value greater than 0 indicating the buffer size. The - default buffer size is 4096. - A value that specifies additional file options. - Indicates the format of the path parameter. - - A on the specified path, having the specified mode with read, write, or read/write - access and the specified sharing option. - - - - [AlphaFS] (Transacted) Opens a on the specified path using the specified creation mode, read/write and sharing permission, and buffer size. - The transaction. - The file to open. - A constant that determines how to open or create the file. - A value that specifies the operations that can be performed on the - file. - A constant that determines how the file will be shared by processes. - A positive value greater than 0 indicating the buffer size. The - default buffer size is 4096. - The extended attributes specifying additional options. - Indicates the format of the path parameter. - - A on the specified path, having the specified mode with read, write, or read/write - access and the specified sharing option. - - - - [AlphaFS] (Transacted) Opens a on the specified path using the specified creation mode, read/write and sharing permission, and buffer size. - The transaction. - The file to open. - A constant that determines how to open or create the file. - A value that specifies the operations that can be performed on the - file. - A constant that determines how the file will be shared by processes. - A positive value greater than 0 indicating the buffer size. The - default buffer size is 4096. - A value that specifies additional file options. - - A on the specified path, having the specified mode with read, write, or read/write - access and the specified sharing option. - - - - [AlphaFS] (Transacted) Opens a on the specified path using the specified creation mode, read/write and sharing permission, and buffer size. - The transaction. - The file to open. - A constant that determines how to open or create the file. - A value that specifies the operations that can be performed on the - file. - A constant that determines how the file will be shared by processes. - A positive value greater than 0 indicating the buffer size. The - default buffer size is 4096. - Extended attributes specifying additional options. - - A on the specified path, having the specified mode with read, write, or read/write - access and the specified sharing option. - - - - [AlphaFS] (Transacted) Opens a on the specified path using the specified creation mode, read/write and sharing permission, and buffer size. - The transaction. - The file to open. - A constant that determines how to open or create the file. - A value that specifies the operations that can be performed on the - file. - A constant that determines how the file will be shared by processes. - A positive value greater than 0 indicating the buffer size. The - default buffer size is 4096. - A value that specifies additional file options. - A value that determines the access control and audit security for the file. - - A on the specified path, having the specified mode with read, write, or read/write - access and the specified sharing option. - - - - [AlphaFS] (Transacted) Opens a on the specified path using the specified creation mode, read/write and sharing permission, and buffer size. - The transaction. - The file to open. - A constant that determines how to open or create the file. - A value that specifies the operations that can be performed on the - file. - A constant that determines how the file will be shared by processes. - A positive value greater than 0 indicating the buffer size. The - default buffer size is 4096. - Extended attributes specifying additional options. - A value that determines the access control and audit security for the file. - - A on the specified path, having the specified mode with read, write, or read/write - access and the specified sharing option. - - - - [AlphaFS] (Transacted) Opens a on the specified path using the specified creation mode, read/write and sharing permission, and buffer size. - The transaction. - The file to open. - A constant that determines how to open or create the file. - A value that specifies the operations that can be performed on the - file. - A constant that determines how the file will be shared by processes. - A positive value greater than 0 indicating the buffer size. The - default buffer size is 4096. - A value that specifies additional file options. - Indicates the format of the path parameter. - - A on the specified path, having the specified mode with read, write, or read/write - access and the specified sharing option. - - - - [AlphaFS] (Transacted) Opens a on the specified path using the specified creation mode, read/write and sharing permission, and buffer size. - The transaction. - The file to open. - A constant that determines how to open or create the file. - A value that specifies the operations that can be performed on the - file. - A constant that determines how the file will be shared by processes. - A positive value greater than 0 indicating the buffer size. The - default buffer size is 4096. - Extended attributes specifying additional options. - Indicates the format of the path parameter. - - A on the specified path, having the specified mode with read, write, or read/write - access and the specified sharing option. - - - - [AlphaFS] (Transacted) Opens a on the specified path using the specified creation mode, access rights and sharing permission, the buffer size, additional file options, access control and audit security. - The transaction. - The file to open. - A constant that determines how to open or create the file. - A value that specifies the operations that can be performed on the - file. - A constant that determines how the file will be shared by processes. - A positive value greater than 0 indicating the buffer size. The - default buffer size is 4096. - A value that specifies additional file options. - A value that determines the access control and audit security for the file. - Indicates the format of the path parameter. - - A on the specified path, having the specified mode with read, write, or read/write - access and the specified sharing option. - - - - [AlphaFS] (Transacted) Opens a on the specified path using the specified creation mode, access rights and sharing permission, the buffer size, additional file options, access control and audit security. - The transaction. - The file to open. - A constant that determines how to open or create the file. - A value that specifies the operations that can be performed on the - file. - A constant that determines how the file will be shared by processes. - A positive value greater than 0 indicating the buffer size. The - default buffer size is 4096. - Extended attributes specifying additional options. - A value that determines the access control and audit security for the file. - Indicates the format of the path parameter. - - A on the specified path, having the specified mode with read, write, or read/write - access and the specified sharing option. - - - - [AlphaFS] Opens a on the specified path, having the specified mode with read, write, or read/write access, the specified sharing option and additional options specified. - The transaction. - The file to open. - A value that specifies whether a file is created if one does not exist, and determines whether the contents of existing files are retained or overwritten. - A value that specifies the operations that can be performed on the file. - A value specifying the type of access other threads have to the file. - Advanced options for this file. - A positive value greater than 0 indicating the buffer size. The default buffer size is 4096. - The security. - Indicates the format of the path parameter(s). - - A instance on the specified path, having the specified mode with - read, write, or read/write access and the specified sharing option. - - - - Opens a on the specified path, having the specified mode with read, write, or read/write access, the specified sharing option and additional options specified. - The transaction. - The file to open. - A value that specifies whether a file is created if one does not exist, and determines whether the contents of existing files are retained or overwritten. - A value that specifies whether a file is created if one does not exist, and determines whether the contents of existing files are retained or overwritten along with additional options. - A value specifying the type of access other threads have to the file. - Advanced options for this file. - A positive value greater than 0 indicating the buffer size. The default buffer size is 4096. - The security. - Indicates the format of the path parameter(s). - - A instance on the specified path, having the specified mode with - read, write, or read/write access and the specified sharing option. - - - - Opens a binary file, reads the contents of the file into a byte array, and then closes the file. - The file to open for reading. - A byte array containing the contents of the file. - - - [AlphaFS] Opens a binary file, reads the contents of the file into a byte array, and then closes the file. - The file to open for reading. - Indicates the format of the path parameter(s). - A byte array containing the contents of the file. - - - [AlphaFS] Opens a binary file, reads the contents of the file into a byte array, and then closes the file. - The transaction. - The file to open for reading. - A byte array containing the contents of the file. - - - [AlphaFS] Opens a binary file, reads the contents of the file into a byte array, and then closes the file. - The transaction. - The file to open for reading. - Indicates the format of the path parameter(s). - A byte array containing the contents of the file. - - - Opens a binary file, reads the contents of the file into a byte array, and then closes the file. - - The transaction. - The file to open for reading. - Indicates the format of the path parameter(s). - A byte array containing the contents of the file. - - - Opens a text file, reads all lines of the file, and then closes the file. - The file to open for reading. - All lines of the file. - - - Opens a file, reads all lines of the file with the specified encoding, and then closes the file. - The file to open for reading. - The applied to the contents of the file. - All lines of the file. - - - [AlphaFS] Opens a text file, reads all lines of the file, and then closes the file. - The file to open for reading. - Indicates the format of the path parameter(s). - All lines of the file. - - - [AlphaFS] Opens a file, reads all lines of the file with the specified encoding, and then closes the file. - The file to open for reading. - The applied to the contents of the file. - Indicates the format of the path parameter(s). - All lines of the file. - - - [AlphaFS] Opens a text file, reads all lines of the file, and then closes the file. - The transaction. - The file to open for reading. - All lines of the file. - - - [AlphaFS] Opens a file, reads all lines of the file with the specified encoding, and then closes the file. - The transaction. - The file to open for reading. - The applied to the contents of the file. - All lines of the file. - - - [AlphaFS] Opens a text file, reads all lines of the file, and then closes the file. - The transaction. - The file to open for reading. - Indicates the format of the path parameter(s). - All lines of the file. - - - [AlphaFS] Opens a file, reads all lines of the file with the specified encoding, and then closes the file. - The transaction. - The file to open for reading. - The applied to the contents of the file. - Indicates the format of the path parameter(s). - All lines of the file. - - - Opens a file, read all lines of the file with the specified encoding, and then close the file. - The transaction. - The file to open for reading. - The applied to the contents of the file. - Indicates the format of the path parameter(s). - An IEnumerable string containing all lines of the file. - - - Opens a text file, reads all lines of the file, and then closes the file. - The file to open for reading. - All lines of the file. - - - Opens a file, reads all lines of the file with the specified encoding, and then closes the file. - The file to open for reading. - The applied to the contents of the file. - All lines of the file. - - - [AlphaFS] Opens a text file, reads all lines of the file, and then closes the file. - The file to open for reading. - Indicates the format of the path parameter(s). - All lines of the file. - - - [AlphaFS] Opens a file, reads all lines of the file with the specified encoding, and then closes the file. - The file to open for reading. - The applied to the contents of the file. - Indicates the format of the path parameter(s). - All lines of the file. - - - [AlphaFS] Opens a text file, reads all lines of the file, and then closes the file. - The transaction. - The file to open for reading. - All lines of the file. - - - [AlphaFS] Opens a file, reads all lines of the file with the specified encoding, and then closes the file. - The transaction. - The file to open for reading. - The applied to the contents of the file. - All lines of the file. - - - [AlphaFS] Opens a text file, reads all lines of the file, and then closes the file. - The transaction. - The file to open for reading. - Indicates the format of the path parameter(s). - All lines of the file. - - - [AlphaFS] Opens a file, reads all lines of the file with the specified encoding, and then closes the file. - The transaction. - The file to open for reading. - The applied to the contents of the file. - Indicates the format of the path parameter(s). - All lines of the file. - - - Open a file, read all lines of the file with the specified encoding, and then close the file. - The transaction. - The file to open for reading. - The applied to the contents of the file. - Indicates the format of the path parameter(s). - All lines of the file. - - - Reads the lines of a file. - The file to read. - All the lines of the file, or the lines that are the result of a query. - - - Read the lines of a file that has a specified encoding. - The file to read. - The encoding that is applied to the contents of the file. - All the lines of the file, or the lines that are the result of a query. - - - [AlphaFS] Reads the lines of a file. - The file to read. - Indicates the format of the path parameter(s). - All the lines of the file, or the lines that are the result of a query. - - - [AlphaFS] Read the lines of a file that has a specified encoding. - The file to read. - The encoding that is applied to the contents of the file. - Indicates the format of the path parameter(s). - All the lines of the file, or the lines that are the result of a query. - - - [AlphaFS] Reads the lines of a file. - The transaction. - The file to read. - All the lines of the file, or the lines that are the result of a query. - - - [AlphaFS] Read the lines of a file that has a specified encoding. - The transaction. - The file to read. - The encoding that is applied to the contents of the file. - All the lines of the file, or the lines that are the result of a query. - - - [AlphaFS] Reads the lines of a file. - The transaction. - The file to read. - Indicates the format of the path parameter(s). - All the lines of the file, or the lines that are the result of a query. - - - [AlphaFS] Read the lines of a file that has a specified encoding. - The transaction. - The file to read. - The encoding that is applied to the contents of the file. - Indicates the format of the path parameter(s). - All the lines of the file, or the lines that are the result of a query. - - - Reads the lines of a file that has a specified encoding. - The transaction. - The file to read. - The encoding that is applied to the contents of the file. - Indicates the format of the path parameter(s). - All the lines of the file, or the lines that are the result of a query. - - - - Replaces the contents of a specified file with the contents of another file, deleting the original file, and creating a backup of - the replaced file. - - - The Replace method replaces the contents of a specified file with the contents of another file. It also creates a backup of the - file that was replaced. - - - If the and are on different volumes, this method will - raise an exception. If the is on a different volume from the source file, the backup - file will be deleted. - - - Pass null to the parameter if you do not want to create a backup of the file being - replaced. - - The name of a file that replaces the file specified by . - The name of the file being replaced. - The name of the backup file. - - - - Replaces the contents of a specified file with the contents of another file, deleting the original file, and creating a backup of - the replaced file and optionally ignores merge errors. - - - The Replace method replaces the contents of a specified file with the contents of another file. It also creates a backup of the - file that was replaced. - - - If the and are on different volumes, this method will - raise an exception. If the is on a different volume from the source file, the backup - file will be deleted. - - - Pass null to the parameter if you do not want to create a backup of the file being - replaced. - - The name of a file that replaces the file specified by . - The name of the file being replaced. - The name of the backup file. - - to ignore merge errors (such as attributes and access control lists (ACLs)) from the replaced file to the - replacement file; otherwise, . - - - - - [AlphaFS] Replaces the contents of a specified file with the contents of another file, deleting the original file, and creating a - backup of the replaced file and optionally ignores merge errors. - - - The Replace method replaces the contents of a specified file with the contents of another file. It also creates a backup of the - file that was replaced. - - - If the and are on different volumes, this method will - raise an exception. If the is on a different volume from the source file, the backup - file will be deleted. - - - Pass null to the parameter if you do not want to create a backup of the file being - replaced. - - The name of a file that replaces the file specified by . - The name of the file being replaced. - The name of the backup file. - - to ignore merge errors (such as attributes and access control lists (ACLs)) from the replaced file to the - replacement file; otherwise, . - - Indicates the format of the path parameter(s). - - - Replaces the contents of a specified file with the contents of another file, deleting - the original file, and creating a backup of the replaced file and optionally ignores merge errors. - - - The Replace method replaces the contents of a specified file with the contents of another file. It also creates a backup of the - file that was replaced. - - - If the and are on different volumes, this method will - raise an exception. If the is on a different volume from the source file, the backup - file will be deleted. - - - Pass null to the parameter if you do not want to create a backup of the file being - replaced. - - The name of a file that replaces the file specified by . - The name of the file being replaced. - The name of the backup file. - - to ignore merge errors (such as attributes and access control lists (ACLs)) from the replaced file to the - replacement file; otherwise, . - - Indicates the format of the path parameter(s). - - - Applies access control list (ACL) entries described by a FileSecurity object to the specified file. - - - - A file to add or remove access control list (ACL) entries from. - A object that describes an ACL entry to apply to the file described by the parameter. - - - Applies access control list (ACL) entries described by a object to the specified directory. - - - - A directory to add or remove access control list (ACL) entries from. - A object that describes an ACL entry to apply to the directory described by the path parameter. - One or more of the values that specifies the type of access control list (ACL) information to set. - - - [AlphaFS] Applies access control list (ACL) entries described by a FileSecurity object to the specified file. - - - - A file to add or remove access control list (ACL) entries from. - A object that describes an ACL entry to apply to the file described by the parameter. - Indicates the format of the path parameter(s). - - - [AlphaFS] Applies access control list (ACL) entries described by a object to the specified directory. - - - - A directory to add or remove access control list (ACL) entries from. - A object that describes an ACL entry to apply to the directory described by the path parameter. - One or more of the values that specifies the type of access control list (ACL) information to set. - Indicates the format of the path parameter(s). - - - Applies access control list (ACL) entries described by a FileSecurity object to the specified file. - - - - A to a file to add or remove access control list (ACL) entries from. - A object that describes an ACL entry to apply to the file described by the parameter. - - - Applies access control list (ACL) entries described by a FileSecurity object to the specified file. - - - - A to a file to add or remove access control list (ACL) entries from. - A object that describes an ACL entry to apply to the file described by the parameter. - One or more of the values that specifies the type of access control list (ACL) information to set. - - - [AlphaFS] Applies access control list (ACL) entries described by a / object to the specified file or directory. - Use either or , not both. - - - - A file/directory to add or remove access control list (ACL) entries from. This parameter This parameter may be . - A to add or remove access control list (ACL) entries from. This parameter This parameter may be . - A / object that describes an ACL entry to apply to the file/directory described by the / parameter. - One or more of the values that specifies the type of access control list (ACL) information to set. - Indicates the format of the path parameter(s). - - - Sets the specified of the file or directory on the specified path. - - Certain file attributes, such as and , can be combined. - Other attributes, such as , must be used alone. - - - It is not possible to change the status of a File object using this method. - - The path to the file or directory. - A bitwise combination of the enumeration values. - Sets the specified of the file or directory on the specified path. - - - [AlphaFS] Sets the specified of the file or directory on the specified path. - - Certain file attributes, such as and , can be combined. - Other attributes, such as , must be used alone. - - - It is not possible to change the status of a File object using this method. - - The path to the file or directory. - A bitwise combination of the enumeration values. - Indicates the format of the path parameter(s). - - - [AlphaFS] Sets the specified of the file on the specified path. - - Certain file attributes, such as and , can be combined. - Other attributes, such as , must be used alone. - - - It is not possible to change the status of a File object using this method. - - The transaction. - The path to the file. - A bitwise combination of the enumeration values. - - - [AlphaFS] Sets the specified of the file on the specified path. - - Certain file attributes, such as and , can be combined. - Other attributes, such as , must be used alone. - - - It is not possible to change the status of a File object using this method. - - The transaction. - The path to the file. - A bitwise combination of the enumeration values. - Indicates the format of the path parameter(s). - - - Sets the attributes for a Non-/Transacted file/directory. - - Certain file attributes, such as and , can be combined. - Other attributes, such as , must be used alone. - - - It is not possible to change the status of a File object using the SetAttributes method. - - - Specifies that is a file or directory. - The transaction. - The name of the file or directory whose attributes are to be set. - - The attributes to set for the file or directory. Note that all other values override . - - - does not throw an Exception when the file system object does not exist. - - Indicates the format of the path parameter(s). - - - Sets the date and time the file was created. - The file for which to set the creation date and time information. - - A containing the value to set for the creation date and time of . This value - is expressed in local time. - - - - [AlphaFS] Sets the date and time the file was created. - The file for which to set the creation date and time information. - - A containing the value to set for the creation date and time of . This value - is expressed in local time. - - Indicates the format of the path parameter(s). - - - [AlphaFS] Sets the date and time the file was created. - The file for which to set the creation date and time information. - - A containing the value to set for the creation date and time of . This value - is expressed in local time. - - If , the date and time information will apply to the reparse point (symlink or junction) and not the file or directory linked to. No effect if does not refer to a reparse point. - Indicates the format of the path parameter(s). - - - [AlphaFS] Sets the date and time the file was created. - The transaction. - The file for which to set the creation date and time information. - - A containing the value to set for the creation date and time of . This value - is expressed in local time. - - - - [AlphaFS] Sets the date and time the file was created. - The transaction. - The file for which to set the creation date and time information. - - A containing the value to set for the creation date and time of . This value - is expressed in local time. - - Indicates the format of the path parameter(s). - - - [AlphaFS] Sets the date and time the file was created. - The transaction. - The file for which to set the creation date and time information. - - A containing the value to set for the creation date and time of . This value - is expressed in local time. - - If , the date and time information will apply to the reparse point (symlink or junction) and not the file or directory linked to. No effect if does not refer to a reparse point. - Indicates the format of the path parameter(s). - - - Sets the date and time, in coordinated universal time (UTC), that the file was created. - The file for which to set the creation date and time information. - - A containing the value to set for the creation date and time of . This value - is expressed in UTC time. - - - - [AlphaFS] Sets the date and time, in coordinated universal time (UTC), that the file was created. - The file for which to set the creation date and time information. - - A containing the value to set for the creation date and time of . This value - is expressed in UTC time. - - Indicates the format of the path parameter(s). - - - [AlphaFS] Sets the date and time, in coordinated universal time (UTC), that the file was created. - The file for which to set the creation date and time information. - - A containing the value to set for the creation date and time of . This value - is expressed in UTC time. - - If , the date and time information will apply to the reparse point (symlink or junction) and not the file or directory linked to. No effect if does not refer to a reparse point. - Indicates the format of the path parameter(s). - - - [AlphaFS] Sets the date and time, in coordinated universal time (UTC), that the file was created. - The transaction. - The file for which to set the creation date and time information. - - A containing the value to set for the creation date and time of . This value - is expressed in UTC time. - - - - [AlphaFS] Sets the date and time, in coordinated universal time (UTC), that the file was created. - The transaction. - The file for which to set the creation date and time information. - - A containing the value to set for the creation date and time of . This value - is expressed in UTC time. - - Indicates the format of the path parameter(s). - - - [AlphaFS] Sets the date and time, in coordinated universal time (UTC), that the file was created. - The transaction. - The file for which to set the creation date and time information. - - A containing the value to set for the creation date and time of . This value - is expressed in UTC time. - - If , the date and time information will apply to the reparse point (symlink or junction) and not the file or directory linked to. No effect if does not refer to a reparse point. - Indicates the format of the path parameter(s). - - - Sets the date and time that the specified file was last accessed. - The file for which to set the access date and time information. - - A containing the value to set for the last access date and time of . This - value is expressed in local time. - - - - [AlphaFS] Sets the date and time that the specified file was last accessed. - The file for which to set the access date and time information. - - A containing the value to set for the last access date and time of . This - value is expressed in local time. - - Indicates the format of the path parameter(s). - - - [AlphaFS] Sets the date and time that the specified file was last accessed. - The file for which to set the access date and time information. - - A containing the value to set for the last access date and time of . This - value is expressed in local time. - - If , the date and time information will apply to the reparse point (symlink or junction) and not the file or directory linked to. No effect if does not refer to a reparse point. - Indicates the format of the path parameter(s). - - - [AlphaFS] Sets the date and time that the specified file was last accessed. - The transaction. - The file for which to set the access date and time information. - - A containing the value to set for the last access date and time of . This - value is expressed in local time. - - - - [AlphaFS] Sets the date and time that the specified file was last accessed. - The transaction. - The file for which to set the access date and time information. - - A containing the value to set for the last access date and time of . This - value is expressed in local time. - - Indicates the format of the path parameter(s). - - - [AlphaFS] Sets the date and time that the specified file was last accessed. - The transaction. - The file for which to set the access date and time information. - - A containing the value to set for the last access date and time of . This - value is expressed in local time. - - If , the date and time information will apply to the reparse point (symlink or junction) and not the file or directory linked to. No effect if does not refer to a reparse point. - Indicates the format of the path parameter(s). - - - Sets the date and time, in coordinated universal time (UTC), that the specified file was last accessed. - The file for which to set the access date and time information. - - A containing the value to set for the last access date and time of . This - value is expressed in UTC time. - - - - [AlphaFS] Sets the date and time, in coordinated universal time (UTC), that the specified file was last accessed. - The file for which to set the access date and time information. - - A containing the value to set for the last access date and time of . This - value is expressed in UTC time. - - Indicates the format of the path parameter(s). - - - [AlphaFS] Sets the date and time, in coordinated universal time (UTC), that the specified file was last accessed. - The file for which to set the access date and time information. - - A containing the value to set for the last access date and time of . This - value is expressed in UTC time. - - If , the date and time information will apply to the reparse point (symlink or junction) and not the file or directory linked to. No effect if does not refer to a reparse point. - Indicates the format of the path parameter(s). - - - [AlphaFS] Sets the date and time, in coordinated universal time (UTC), that the specified file was last accessed. - The transaction. - The file for which to set the access date and time information. - - A containing the value to set for the last access date and time of . This - value is expressed in UTC time. - - - - [AlphaFS] Sets the date and time, in coordinated universal time (UTC), that the specified file was last accessed. - The transaction. - The file for which to set the access date and time information. - - A containing the value to set for the last access date and time of . This - value is expressed in UTC time. - - Indicates the format of the path parameter(s). - - - [AlphaFS] Sets the date and time, in coordinated universal time (UTC), that the specified file was last accessed. - The transaction. - The file for which to set the access date and time information. - - A containing the value to set for the last access date and time of . This - value is expressed in UTC time. - - If , the date and time information will apply to the reparse point (symlink or junction) and not the file or directory linked to. No effect if does not refer to a reparse point. - Indicates the format of the path parameter(s). - - - Sets the date and time that the specified file was last written to. - The file for which to set the date and time information. - - A containing the value to set for the last write date and time of . This value - is expressed in local time. - - - - [AlphaFS] Sets the date and time that the specified file was last written to. - The file for which to set the date and time information. - - A containing the value to set for the last write date and time of . This value - is expressed in local time. - - Indicates the format of the path parameter(s). - - - [AlphaFS] Sets the date and time that the specified file was last written to. - The file for which to set the date and time information. - - A containing the value to set for the last write date and time of . This value - is expressed in local time. - - If , the date and time information will apply to the reparse point (symlink or junction) and not the file or directory linked to. No effect if does not refer to a reparse point. - Indicates the format of the path parameter(s). - - - [AlphaFS] Sets the date and time that the specified file was last written to. - The transaction. - The file for which to set the date and time information. - - A containing the value to set for the last write date and time of . This value - is expressed in local time. - - - - [AlphaFS] Sets the date and time that the specified file was last written to. - The transaction. - The file for which to set the date and time information. - - A containing the value to set for the last write date and time of . This value - is expressed in local time. - - Indicates the format of the path parameter(s). - - - [AlphaFS] Sets the date and time that the specified file was last written to. - The transaction. - The file for which to set the date and time information. - - A containing the value to set for the last write date and time of . This value - is expressed in local time. - - If , the date and time information will apply to the reparse point (symlink or junction) and not the file or directory linked to. No effect if does not refer to a reparse point. - Indicates the format of the path parameter(s). - - - Sets the date and time, in coordinated universal time (UTC), that the specified file was last written to. - The file for which to set the date and time information. - - A containing the value to set for the last write date and time of . This value - is expressed in UTC time. - - - - - [AlphaFS] Sets the date and time, in coordinated universal time (UTC), that the specified file was last written to. - - The file for which to set the date and time information. - - A containing the value to set for the last write date and time of . This value - is expressed in UTC time. - - Indicates the format of the path parameter(s). - - - - [AlphaFS] Sets the date and time, in coordinated universal time (UTC), that the specified file was last written to. - - The file for which to set the date and time information. - - A containing the value to set for the last write date and time of . This value - is expressed in UTC time. - - If , the date and time information will apply to the reparse point (symlink or junction) and not the file or directory linked to. No effect if does not refer to a reparse point. - Indicates the format of the path parameter(s). - - - - [AlphaFS] Sets the date and time, in coordinated universal time (UTC), that the specified file was last written to. - - The transaction. - The file for which to set the date and time information. - - A containing the value to set for the last write date and time of . This value - is expressed in UTC time. - - - - - [AlphaFS] Sets the date and time, in coordinated universal time (UTC), that the specified file was last written to. - - The transaction. - The file for which to set the date and time information. - - A containing the value to set for the last write date and time of . This value - is expressed in UTC time. - - Indicates the format of the path parameter(s). - - - - [AlphaFS] Sets the date and time, in coordinated universal time (UTC), that the specified file was last written to. - - The transaction. - The file for which to set the date and time information. - - A containing the value to set for the last write date and time of . This value - is expressed in UTC time. - - If , the date and time information will apply to the reparse point (symlink or junction) and not the file or directory linked to. No effect if does not refer to a reparse point. - Indicates the format of the path parameter(s). - - - [AlphaFS] Sets all the date and time stamps for the specified file, at once. - The file for which to set the dates and times information. - - A containing the value to set for the creation date and time of . This value - is expressed in local time. - - - A containing the value to set for the last access date and time of . This - value is expressed in local time. - - - A containing the value to set for the last write date and time of . This value - is expressed in local time. - - Indicates the format of the path parameter(s). - - - [AlphaFS] Sets all the date and time stamps for the specified file, at once. - The file for which to set the dates and times information. - - A containing the value to set for the creation date and time of . This value - is expressed in local time. - - - A containing the value to set for the last access date and time of . This - value is expressed in local time. - - - A containing the value to set for the last write date and time of . This value - is expressed in local time. - - - - [AlphaFS] Sets all the date and time stamps for the specified file, at once. - The file for which to set the dates and times information. - - A containing the value to set for the creation date and time of . This value - is expressed in local time. - - - A containing the value to set for the last access date and time of . This - value is expressed in local time. - - - A containing the value to set for the last write date and time of . This value - is expressed in local time. - - If , the date and time information will apply to the reparse point (symlink or junction) and not the file or directory linked to. No effect if does not refer to a reparse point. - Indicates the format of the path parameter(s). - - - [AlphaFS] Sets all the date and time stamps for the specified file, at once. - The transaction. - The file for which to set the dates and times information. - - A containing the value to set for the creation date and time of . This value - is expressed in local time. - - - A containing the value to set for the last access date and time of . This - value is expressed in local time. - - - A containing the value to set for the last write date and time of . This value - is expressed in local time. - - Indicates the format of the path parameter(s). - - - [AlphaFS] Sets all the date and time stamps for the specified file, at once. - The transaction. - The file for which to set the dates and times information. - - A containing the value to set for the creation date and time of . This value - is expressed in local time. - - - A containing the value to set for the last access date and time of . This - value is expressed in local time. - - - A containing the value to set for the last write date and time of . This value - is expressed in local time. - - - - [AlphaFS] Sets all the date and time stamps for the specified file, at once. - The transaction. - The file for which to set the dates and times information. - - A containing the value to set for the creation date and time of . This value - is expressed in local time. - - - A containing the value to set for the last access date and time of . This - value is expressed in local time. - - - A containing the value to set for the last write date and time of . This value - is expressed in local time. - - If , the date and time information will apply to the reparse point (symlink or junction) and not the file or directory linked to. No effect if does not refer to a reparse point. - Indicates the format of the path parameter(s). - - - [AlphaFS] Sets all the date and time stamps, in coordinated universal time (UTC), for the specified file, at once. - The file for which to set the dates and times information. - - A containing the value to set for the creation date and time of . This value - is expressed in UTC time. - - - A containing the value to set for the last access date and time of . This - value is expressed in UTC time. - - - A containing the value to set for the last write date and time of . This value - is expressed in UTC time. - - Indicates the format of the path parameter(s). - - - [AlphaFS] Sets all the date and time stamps, in coordinated universal time (UTC), for the specified file, at once. - The file for which to set the dates and times information. - - A containing the value to set for the creation date and time of . This value - is expressed in UTC time. - - - A containing the value to set for the last access date and time of . This - value is expressed in UTC time. - - - A containing the value to set for the last write date and time of . This value - is expressed in UTC time. - - - - [AlphaFS] Sets all the date and time stamps, in coordinated universal time (UTC), for the specified file, at once. - The file for which to set the dates and times information. - - A containing the value to set for the creation date and time of . This value - is expressed in UTC time. - - - A containing the value to set for the last access date and time of . This - value is expressed in UTC time. - - - A containing the value to set for the last write date and time of . This value - is expressed in UTC time. - - If , the date and time information will apply to the reparse point (symlink or junction) and not the file or directory linked to. No effect if does not refer to a reparse point. - Indicates the format of the path parameter(s). - - - [AlphaFS] Sets all the date and time stamps, in coordinated universal time (UTC), for the specified file, at once. - The transaction. - The file for which to set the dates and times information. - - A containing the value to set for the creation date and time of . This value - is expressed in UTC time. - - - A containing the value to set for the last access date and time of . This - value is expressed in UTC time. - - - A containing the value to set for the last write date and time of . This value - is expressed in UTC time. - - Indicates the format of the path parameter(s). - - - [AlphaFS] Sets all the date and time stamps, in coordinated universal time (UTC), for the specified file, at once. - The transaction. - The file for which to set the dates and times information. - - A containing the value to set for the creation date and time of . This value - is expressed in UTC time. - - - A containing the value to set for the last access date and time of . This - value is expressed in UTC time. - - - A containing the value to set for the last write date and time of . This value - is expressed in UTC time. - - - - [AlphaFS] Sets all the date and time stamps, in coordinated universal time (UTC), for the specified file, at once. - The transaction. - The file for which to set the dates and times information. - - A containing the value to set for the creation date and time of . This value - is expressed in UTC time. - - - A containing the value to set for the last access date and time of . This - value is expressed in UTC time. - - - A containing the value to set for the last write date and time of . This value - is expressed in UTC time. - - If , the date and time information will apply to the reparse point (symlink or junction) and not the file or directory linked to. No effect if does not refer to a reparse point. - Indicates the format of the path parameter(s). - - - Set the date and time, in coordinated universal time (UTC), that the file or directory was created and/or last accessed and/or written to. - - - Specifies that is a file or directory. - The transaction. - The file or directory for which to set the date and time information. - A containing the value to set for the creation date and time of . This value is expressed in UTC time. - A containing the value to set for the last access date and time of . This value is expressed in UTC time. - A containing the value to set for the last write date and time of . This value is expressed in UTC time. - If , the date and time information will apply to the reparse point (symlink or junction) and not the file or directory linked to. No effect if does not refer to a reparse point. - Indicates the format of the path parameter(s). - - - - Creates a new file, writes the specified byte array to the file, and then closes the file. If the target file already exists, it is - overwritten. - - The file to write to. - The bytes to write to the file. - - - - [AlphaFS] Creates a new file, writes the specified byte array to the file, and then closes the file. If the target file already - exists, it is overwritten. - - The file to write to. - The bytes to write to the file. - Indicates the format of the path parameter(s). - - - - [AlphaFS] Creates a new file, writes the specified byte array to the file, and then closes the file. If the target file already - exists, it is overwritten. - - The transaction. - The file to write to. - The bytes to write to the file. - - - - [AlphaFS] Creates a new file, writes the specified byte array to the file, and then closes the file. If the target file already - exists, it is overwritten. - - The transaction. - The file to write to. - The bytes to write to the file. - Indicates the format of the path parameter(s). - - - Creates a new file as part of a transaction, writes the specified byte array to - the file, and then closes the file. If the target file already exists, it is overwritten. - - - The transaction. - The file to write to. - The bytes to write to the file. - Indicates the format of the path parameter(s). - - - [AlphaFS] Gets the change date and time of the specified file. - A structure set to the change date and time for the specified file. This value is expressed in local time. - The file for which to obtain creation date and time information. - Indicates the format of the path parameter(s). - - - [AlphaFS] Gets the change date and time of the specified file. - A structure set to the change date and time for the specified file. This value is expressed in local time. - The file for which to obtain creation date and time information. - - - [AlphaFS] Gets the change date and time of the specified file. - A structure set to the change date and time for the specified file. This value is expressed in local time. - An open handle to the file or directory from which to retrieve information. - - - [AlphaFS] Gets the change date and time of the specified file. - A structure set to the change date and time for the specified file. This value is expressed in local time. - The transaction. - The file for which to obtain creation date and time information. - Indicates the format of the path parameter(s). - - - [AlphaFS] Gets the change date and time of the specified file. - A structure set to the change date and time for the specified file. This value is expressed in local time. - The transaction. - The file for which to obtain creation date and time information. - - - [AlphaFS] Gets the change date and time, in Coordinated Universal Time (UTC) format, of the specified file. - A structure set to the change date and time for the specified file. This value is expressed in UTC time. - The file for which to obtain change date and time information, in Coordinated Universal Time (UTC) format. - Indicates the format of the path parameter(s). - - - [AlphaFS] Gets the change date and time, in Coordinated Universal Time (UTC) format, of the specified file. - A structure set to the change date and time for the specified file. This value is expressed in UTC time. - The file for which to obtain change date and time information, in Coordinated Universal Time (UTC) format. - - - [AlphaFS] Gets the change date and time, in Coordinated Universal Time (UTC) format, of the specified file. - A structure set to the change date and time for the specified file. This value is expressed in UTC time. - An open handle to the file or directory from which to retrieve information. - - - [AlphaFS] Gets the change date and time, in Coordinated Universal Time (UTC) format, of the specified file. - A structure set to the change date and time for the specified file. This value is expressed in UTC time. - The transaction. - The file for which to obtain change date and time information, in Coordinated Universal Time (UTC) format. - Indicates the format of the path parameter(s). - - - [AlphaFS] Gets the change date and time, in Coordinated Universal Time (UTC) format, of the specified file. - A structure set to the change date and time for the specified file. This value is expressed in UTC time. - The transaction. - The file for which to obtain change date and time information, in Coordinated Universal Time (UTC) format. - - - Gets the change date and time of the specified file. - A structure set to the change date and time for the specified file. This value is expressed in local time. - Use either or , not both. - - - - Specifies that is a file or directory. - The transaction. - An open handle to the file or directory from which to retrieve information. - The file or directory for which to obtain creation date and time information. - gets the Coordinated Universal Time (UTC), gets the local time. - Indicates the format of the path parameter(s). - - - [AlphaFS] Retrieves the actual number of bytes of disk storage used to store a specified file. - - If the file is located on a volume that supports compression and the file is compressed, the value obtained is the compressed size - of the specified file. If the file is located on a volume that supports sparse files and the file is a sparse file, the value - obtained is the sparse size of the specified file. - - The name of the file. - Indicates the format of the path parameter(s). - The actual number of bytes of disk storage used to store the specified file. - - - [AlphaFS] Retrieves the actual number of bytes of disk storage used to store a specified file. - - If the file is located on a volume that supports compression and the file is compressed, the value obtained is the compressed size - of the specified file. If the file is located on a volume that supports sparse files and the file is a sparse file, the value - obtained is the sparse size of the specified file. - - The name of the file. - The actual number of bytes of disk storage used to store the specified file. - - - - [AlphaFS] Retrieves the actual number of bytes of disk storage used to store a specified file as part of a transaction. If the file - is located on a volume that supports compression and the file is compressed, the value obtained is the compressed size of the - specified file. If the file is located on a volume that supports sparse files and the file is a sparse file, the value obtained is - the sparse size of the specified file. - - The transaction. - The name of the file. - Indicates the format of the path parameter(s). - The actual number of bytes of disk storage used to store the specified file. - - - - [AlphaFS] Retrieves the actual number of bytes of disk storage used to store a specified file as part of a transaction. If the file - is located on a volume that supports compression and the file is compressed, the value obtained is the compressed size of the - specified file. If the file is located on a volume that supports sparse files and the file is a sparse file, the value obtained is - the sparse size of the specified file. - - The transaction. - The name of the file. - The actual number of bytes of disk storage used to store the specified file. - - - Retrieves the actual number of bytes of disk storage used to store a - specified file as part of a transaction. If the file is located on a volume that supports compression and the file is compressed, - the value obtained is the compressed size of the specified file. If the file is located on a volume that supports sparse files and - the file is a sparse file, the value obtained is the sparse size of the specified file. - - - The transaction. - The name of the file. - Indicates the format of the path parameter(s). - The actual number of bytes of disk storage used to store the specified file. - - - [AlphaFS] Retrieves the encryption status of the specified file. - The name of the file. - Indicates the format of the path parameter(s). - The of the specified . - - - [AlphaFS] Retrieves the encryption status of the specified file. - The name of the file. - The of the specified . - - - Retrieves the encryption status of the specified file. - The name of the file. - Indicates the format of the path parameter(s). - The of the specified . - - - [AlphaFS] Retrieves file information for the specified . - A connected to the open file from which to retrieve the information. - A object containing the requested information. - - - [AlphaFS] Gets the of the file on the path. - The instance of the file or directory. - The path to the file or directory. - Indicates the format of the path parameter(s). - - - [AlphaFS] Gets the of the file on the path. - The instance of the file or directory. - The path to the file or directory. - - - [AlphaFS] Gets the of the file on the path. - The instance of the file or directory. - The transaction. - The path to the file or directory. - Indicates the format of the path parameter(s). - - - [AlphaFS] Gets the of the file on the path. - The instance of the file or directory. - The transaction. - The path to the file or directory. - - - Gets a FileSystemEntryInfo from a Non-/Transacted directory/file. - The instance of the file or directory, or null on Exception when is true. - BasicSearch and LargeCache are used by default, if possible. - - - Specifies that is a file or directory. - The transaction. - The path to the file or directory. - - true suppress any Exception that might be thrown as a result from a failure, - such as ACLs protected directories or non-accessible reparse points. - - Indicates the format of the path parameter(s). - - - [AlphaFS] Gets information about the target of a mount point or symbolic link on an NTFS file system. - The path to the reparse point. - Indicates the format of the path parameter(s). - - An instance of or containing information about the symbolic link - or mount point pointed to by . - - - - [AlphaFS] Gets information about the target of a mount point or symbolic link on an NTFS file system. - The path to the reparse point. - - An instance of or containing information about the symbolic link - or mount point pointed to by . - - - - [AlphaFS] Gets information about the target of a mount point or symbolic link on an NTFS file system. - The transaction. - The path to the reparse point. - Indicates the format of the path parameter(s). - - An instance of or containing information about the symbolic link - or mount point pointed to by . - - - - [AlphaFS] Gets information about the target of a mount point or symbolic link on an NTFS file system. - The transaction. - The path to the reparse point. - - An instance of or containing information about the symbolic link - or mount point pointed to by . - - - - Gets information about the target of a mount point or symbolic link on an NTFS file system. - The transaction. - The path to the reparse point. - Indicates the format of the path parameter(s). - - An instance of or containing information about the symbolic link - or mount point pointed to by . - - - - [AlphaFS] Retrieves the file size, in bytes to store a specified file. - The path to the file. - Indicates the format of the path parameter(s). - The file size, in bytes. - - - [AlphaFS] Retrieves the file size, in bytes to store a specified file. - The path to the file. - The file size, in bytes. - - - [AlphaFS] Retrieves the file size, in bytes to store a specified file. - The to the file. - The file size, in bytes. - - - [AlphaFS] Retrieves the file size, in bytes to store a specified file. - The transaction. - The path to the file. - Indicates the format of the path parameter(s). - The number of bytes of disk storage used to store the specified file. - - - [AlphaFS] Retrieves the file size, in bytes to store a specified file. - The transaction. - The path to the file. - The number of bytes of disk storage used to store the specified file. - - - Retrieves the file size, in bytes to store a specified file. - Use either or , not both. - The transaction. - The to the file. - The path to the file. - Indicates the format of the path parameter(s). - The number of bytes of disk storage used to store the specified file. - - - [AlphaFS] Transfers the date and time stamps for the specified files. - This method does not change last access time for the source file. - The source file to get the date and time stamps from. - The destination file to set the date and time stamps. - Indicates the format of the path parameter(s). - - - [AlphaFS] Transfers the date and time stamps for the specified files. - This method does not change last access time for the source file. - The source file to get the date and time stamps from. - The destination file to set the date and time stamps. - - - [AlphaFS] Transfers the date and time stamps for the specified files. - This method does not change last access time for the source file. - The transaction. - The source file to get the date and time stamps from. - The destination file to set the date and time stamps. - Indicates the format of the path parameter(s). - - - [AlphaFS] Transfers the date and time stamps for the specified files. - This method does not change last access time for the source file. - The transaction. - The source file to get the date and time stamps from. - The destination file to set the date and time stamps. - - - Transfer the date and time stamps for the specified files and directories. - - This method does not change last access time for the source file. - This method uses BackupSemantics flag to get Timestamp changed for directories. - - Specifies that and are a file or directory. - The transaction. - The source path. - The destination path. - Indicates the format of the path parameter(s). - - - Opens an existing file for reading. - The file to be opened for reading. - A read-only on the specified path. - - This method is equivalent to the (string, FileMode, FileAccess, FileShare) constructor overload with a - value of Open, a value of Read and a value of Read. - - - - [AlphaFS] Opens an existing file for reading. - The file to be opened for reading. - Indicates the format of the path parameter(s). - A read-only on the specified path. - - This method is equivalent to the (string, FileMode, FileAccess, FileShare) constructor overload with a - value of Open, a value of Read and a value of Read. - - - - [AlphaFS] Opens an existing file for reading. - The transaction. - The file to be opened for reading. - A read-only on the specified path. - - This method is equivalent to the (string, FileMode, FileAccess, FileShare) constructor overload with a - value of Open, a value of Read and a value of Read. - - - - [AlphaFS] Opens an existing file for reading. - The transaction. - The file to be opened for reading. - Indicates the format of the path parameter(s). - A read-only on the specified path. - - This method is equivalent to the (string, FileMode, FileAccess, FileShare) constructor overload with a - value of Open, a value of Read and a value of Read. - - - - Opens an existing UTF-8 encoded text file for reading. - The file to be opened for reading. - A on the specified path. - This method is equivalent to the (String) constructor overload. - - - [AlphaFS] Opens an existing UTF-8 encoded text file for reading. - The file to be opened for reading. - Indicates the format of the path parameter(s). - A on the specified path. - This method is equivalent to the (String) constructor overload. - - - [AlphaFS] Opens an existing encoded text file for reading. - The file to be opened for reading. - The applied to the contents of the file. - Indicates the format of the path parameter(s). - A on the specified path. - This method is equivalent to the (String) constructor overload. - - - [AlphaFS] Opens an existing encoded text file for reading. - The file to be opened for reading. - The applied to the contents of the file. - A on the specified path. - This method is equivalent to the (String) constructor overload. - - - [AlphaFS] Opens an existing UTF-8 encoded text file for reading. - The transaction. - The file to be opened for reading. - A on the specified path. - This method is equivalent to the (String) constructor overload. - - - [AlphaFS] Opens an existing UTF-8 encoded text file for reading. - The transaction. - The file to be opened for reading. - Indicates the format of the path parameter(s). - A on the specified path. - This method is equivalent to the (String) constructor overload. - - - [AlphaFS] Opens an existing encoded text file for reading. - The transaction. - The file to be opened for reading. - The applied to the contents of the file. - Indicates the format of the path parameter(s). - A on the specified path. - This method is equivalent to the (String) constructor overload. - - - [AlphaFS] Opens an existing encoded text file for reading. - The transaction. - The file to be opened for reading. - The applied to the contents of the file. - A on the specified path. - This method is equivalent to the (String) constructor overload. - - - Opens an existing file or creates a new file for writing. - The file to be opened for writing. - An unshared object on the specified path with access. - This method is equivalent to the (String, FileMode, FileAccess, FileShare) constructor overload with file mode set to OpenOrCreate, the access set to Write, and the share mode set to None. - - - [AlphaFS] Opens an existing file or creates a new file for writing. - The file to be opened for writing. - Indicates the format of the path parameter(s). - An unshared object on the specified path with access. - This method is equivalent to the (String, FileMode, FileAccess, FileShare) constructor overload with file mode set to OpenOrCreate, the access set to Write, and the share mode set to None. - - - [AlphaFS] Opens an existing file or creates a new file for writing. - The transaction. - The file to be opened for writing. - An unshared object on the specified path with access. - This method is equivalent to the (String, FileMode, FileAccess, FileShare) constructor overload with file mode set to OpenOrCreate, the access set to Write, and the share mode set to None. - - - [AlphaFS] Opens an existing file or creates a new file for writing. - The transaction. - The file to be opened for writing. - Indicates the format of the path parameter(s). - An unshared object on the specified path with access. - This method is equivalent to the (String, FileMode, FileAccess, FileShare) constructor overload with file mode set to OpenOrCreate, the access set to Write, and the share mode set to None. - - - [AlphaFS] Opens the specified file for reading purposes bypassing security attributes. - The file path to open. - Indicates the format of the path parameter(s). - A on the specified path, having the read-only mode and sharing options. - - - [AlphaFS] Opens the specified file for reading purposes bypassing security attributes. This method is simpler to use then BackupFileStream to read only file's data stream. - The file path to open. - A on the specified path, having the read-only mode and sharing options. - - - [AlphaFS] Opens the specified file for reading purposes bypassing security attributes. - The transaction. - The file path to open. - Indicates the format of the path parameter(s). - A on the specified path, having the read-only mode and sharing options. - - - [AlphaFS] Opens the specified file for reading purposes bypassing security attributes. - The transaction. - The file path to open. - A on the specified path, having the read-only mode and sharing options. - - - Provides access to information of a device, on a local or remote host. - - - Initializes a DeviceInfo class. - - - Initializes a DeviceInfo class. - The DNS or NetBIOS name of the remote server. refers to the local host. - - - Enumerates all available devices on the local host. - One of the devices. - instances of type from the local host. - - - Represents the value of the base container identifier (ID) .The Windows Plug and Play (PnP) manager assigns this value to the device node (devnode). - - - Represents the name of the device setup class that a device instance belongs to. - - - Represents the of the device setup class that a device instance belongs to. - - - Represents the list of compatible identifiers for a device instance. - - - Represents a description of a device instance. - - - The device interface path. - - - Represents the registry entry name of the driver key for a device instance. - - - Represents the name of the enumerator for a device instance. - - - Represents the friendly name of a device instance. - - - Represents the list of hardware identifiers for a device instance. - - - The host name that was passed to the class constructor. - - - Gets the instance Id of the device. - - - Represents the bus-specific physical location of a device instance. - - - Represents the location of a device instance in the device tree. - - - Represents the name of the manufacturer of a device instance. - - - Encapsulates the physical device location information provided by a device's firmware to Windows. - - - Represents the name of the service that is installed for a device instance. - - - Retrieves information about the amount of space that is available on a disk volume, which is the total amount of space, - the total amount of free space, and the total amount of free space available to the user that is associated with the calling thread. - This class cannot be inherited. - - - - Initializes a DiskSpaceInfo instance. - A valid drive path or drive letter. This can be either uppercase or lowercase, 'a' to 'z' or a network share in the format: \\server\share - This is a Lazyloading object; call to populate all properties first before accessing. - - - Initializes a DiskSpaceInfo instance. - A valid drive path or drive letter. This can be either uppercase or lowercase, 'a' to 'z' or a network share in the format: \\server\share - gets both size- and disk cluster information. Get only disk cluster information, Get only size information. - Refreshes the state of the object. - suppress any Exception that might be thrown as a result from a failure, such as unavailable resources. - - - Refreshes the state of the object. - - - Initializes all properties to 0. - - - Returns the drive name. - A string that represents this object. - - - Indicates the amount of available free space on a drive, formatted as percentage. - - - Indicates the amount of available free space on a drive, formatted as a unit size. - - - Returns the Clusters size. - - - Gets the name of a drive. - The name of the drive. - This property is the name assigned to the drive, such as C:\ or E:\ - - - The total number of bytes on a disk that are available to the user who is associated with the calling thread, formatted as a unit size. - - - Indicates the amount of used space on a drive, formatted as percentage. - - - Indicates the amount of used space on a drive, formatted as a unit size. - - - The total number of free bytes on a disk that are available to the user who is associated with the calling thread. - - - The total number of bytes on a disk that are available to the user who is associated with the calling thread. - - - The total number of free bytes on a disk. - - - The number of bytes per sector. - - - The total number of free clusters on the disk that are available to the user who is associated with the calling thread. - - - The number of sectors per cluster. - - - The total number of clusters on the disk that are available to the user who is associated with the calling thread. - If per-user disk quotas are in use, this value may be less than the total number of clusters on the disk. - - - - Provides access to information on a local or remote drive. - - This class models a drive and provides methods and properties to query for drive information. - Use DriveInfo to determine what drives are available, and what type of drives they are. - You can also query to determine the capacity and available free space on the drive. - - - - Provides access to information on the specified drive. - - - - A valid drive path or drive letter. - This can be either uppercase or lowercase, - 'a' to 'z' or a network share in the format: \\server\share - - - - Indicates the amount of available free space on a drive. - The amount of free space available on the drive, in bytes. - This property indicates the amount of free space available on the drive. Note that this number may be different from the number because this property takes into account disk quotas. - - - Gets the name of the file system, such as NTFS or FAT32. - Use DriveFormat to determine what formatting a drive uses. - - - Gets the drive type. - One of the values. - - The DriveType property indicates whether a drive is any of: CDRom, Fixed, Unknown, Network, NoRootDirectory, - Ram, Removable, or Unknown. Values are listed in the enumeration. - - - - Gets a value indicating whether a drive is ready. - if the drive is ready; otherwise, . - - IsReady indicates whether a drive is ready. For example, it indicates whether a CD is in a CD drive or whether - a removable storage device is ready for read/write operations. If you do not test whether a drive is ready, and - it is not ready, querying the drive using DriveInfo will raise an IOException. - - Do not rely on IsReady() to avoid catching exceptions from other members such as TotalSize, TotalFreeSpace, and DriveFormat. - Between the time that your code checks IsReady and then accesses one of the other properties - (even if the access occurs immediately after the check), a drive may have been disconnected or a disk may have been removed. - - - - Gets the name of the drive. - The name of the drive. - This property is the name assigned to the drive, such as C:\ or E:\ - - - Gets the root directory of a drive. - A DirectoryInfo object that contains the root directory of the drive. - - - Gets the total amount of free space available on a drive. - The total free space available on a drive, in bytes. - This property indicates the total amount of free space available on the drive, not just what is available to the current user. - - - Gets the total size of storage space on a drive. - The total size of the drive, in bytes. - This property indicates the total size of the drive in bytes, not just what is available to the current user. - - - Gets or sets the volume label of a drive. - The volume label. - - The label length is determined by the operating system. For example, NTFS allows a volume label - to be up to 32 characters long. Note that is a valid VolumeLabel. - - - - [AlphaFS] Returns the instance. - - - [AlphaFS] The MS-DOS device name. - - - [AlphaFS] Indicates if this drive is a SUBST.EXE / DefineDosDevice drive mapping. - - - [AlphaFS] Indicates if this drive is a UNC path. - Only retrieve this information if we're dealing with a real network share mapping: http://alphafs.codeplex.com/discussions/316583 - - - [AlphaFS] Determines whether the specified volume name is a defined volume on the current computer. - - - [AlphaFS] Contains information about a file-system volume. - A VolumeInfo object that contains file-system volume information of the drive. - - - Retrieves the drive names of all logical drives on a computer. - An array of type that represents the logical drives on a computer. - - - Returns a drive name as a string. - The name of the drive. - This method returns the Name property. - - - [AlphaFS] Enumerates the drive names of all logical drives on a computer. - Retrieve logical drives as known by the Environment. - Retrieve only when accessible (IsReady) logical drives. - - An IEnumerable of type that represents - the logical drives on a computer. - - - - [AlphaFS] Gets the first available drive letter on the local system. - A drive letter as . When no drive letters are available, an exception is thrown. - The letters "A" and "B" are reserved for floppy drives and will never be returned by this function. - - - Gets an available drive letter on the local system. - When get the last available drive letter. When gets the first available drive letter. - A drive letter as . When no drive letters are available, an exception is thrown. - The letters "A" and "B" are reserved for floppy drives and will never be returned by this function. - - - Retrieves information about the file system and volume associated with the specified root file or directorystream. - - - Used by CopyFileXxx and MoveFileXxx. The function should return one of the following values. - - - PROGRESS_CONTINUE - Continue the copy operation. - - - - PROGRESS_CANCEL - Cancel the copy operation and delete the destination file. - - - - PROGRESS_STOP - Stop the copy operation. It can be restarted at a later time. - - - - PROGRESS_QUIET - Continue the copy operation, but stop invoking to report progress. - - - - [AlphaFS] Directory enumeration options, flags that specify how a directory is to be enumerated. - - - None (do not use). - - - Enumerate files only. - - - Enumerate directories only. - - - Enumerate files and directories. - - - Return full path as long full path (Unicode format), only valid when return type is . - - - Skip reparse points during directory enumeration. - - - Suppress any Exception that might be thrown as a result from a failure, such as ACLs protected directories or non-accessible reparse points. - - - Specifies whether to search the current directory, or the current directory and all subdirectories. - - - Enumerates the directory without querying the short file name, improving overall enumeration speed. - This option is enabled by default if supported. This value is not supported until Windows Server 2008 R2 and Windows 7. - - - Enumerates the directory using a larger buffer for directory queries, which can increase performance of the find operation. - This option is enabled by default if supported. This value is not supported until Windows Server 2008 R2 and Windows 7. - - - System-Defined Device Interface Classes - http://msdn.microsoft.com/en-us/library/windows/hardware/ff541389%28v=vs.85%29.aspx - - - The BUS1394_CLASS_GUID device interface class is defined for 1394 bus devices. - - - The GUID_61883_CLASS device interface class is defined for devices in the 61883 device setup class. - - - The GUID_DEVICE_APPLICATIONLAUNCH_BUTTON device interface class is defined for Advanced Configuration and Power Interface (ACPI) application start buttons. - - - The GUID_DEVICE_BATTERY device interface class is defined for battery devices. - - - The GUID_DEVICE_LID device interface class is defined for Advanced Configuration and Power Interface (ACPI) lid devices. - - - The GUID_DEVICE_MEMORY device interface class is defined for Advanced Configuration and Power Interface (ACPI) memory devices. - - - The GUID_DEVICE_MESSAGE_INDICATOR device interface class is defined for Advanced Configuration and Power Interface (ACPI) message indicator devices. - - - The GUID_DEVICE_PROCESSOR device interface class is defined for Advanced Configuration and Power Interface (ACPI) processor devices. - - - The GUID_DEVICE_SYS_BUTTON device interface classis defined for Advanced Configuration and Power Interface (ACPI) system power button devices. - - - The GUID_DEVICE_THERMAL_ZONE device interface class is defined for Advanced Configuration and Power Interface (ACPI) thermal zone devices. - - - The GUID_BTHPORT_DEVICE_INTERFACE device interface class is defined for Bluetooth radios. - - - The GUID_DEVINTERFACE_BRIGHTNESS device interface class is defined for display adapter drivers that operate in the context of the Windows Vista Display Driver Model and support brightness control of monitor child devices. - - - The GUID_DEVINTERFACE_DISPLAY_ADAPTER device interface class is defined for display views that are supported by display adapters. - - - The GUID_DEVINTERFACE_I2C device interface class is defined for display adapter drivers that operate in the context of the Windows Vista Display Driver Model and perform I2C transactions with monitor child devices. - - - The GUID_DEVINTERFACE_IMAGE device interface class is defined for WIA devices and Still Image (STI) devices, including digital cameras and scanners. - - - The GUID_DEVINTERFACE_MONITOR device interface class is defined for monitor devices. - - - The GUID_DEVINTERFACE_OPM device interface class is defined for display adapter drivers that operate in the context of the Windows Vista Display Driver Model and support output protection management (OPM) for monitor child devices. - - - The GUID_DEVINTERFACE_VIDEO_OUTPUT_ARRIVAL device interface class is defined for child devices of display devices. - - - The GUID_DISPLAY_DEVICE_ARRIVAL device interface class is defined for display adapters. - - - The GUID_DEVINTERFACE_HID device interface class is defined for HID collections. - - - The GUID_DEVINTERFACE_KEYBOARD device interface class is defined for keyboard devices. - - - The GUID_DEVINTERFACE_MOUSE device interface class is defined for mouse devices. - - - The GUID_DEVINTERFACE_MODEM device interface class is defined for modem devices. - - - The GUID_DEVINTERFACE_NET device interface class is defined for network devices. - - - The GUID_DEVINTERFACE_COMPORT device interface class is defined for COM ports. - - - The GUID_DEVINTERFACE_PARALLEL device interface class is defined for parallel ports that support an IEEE 1284-compatible hardware interface. - - - The GUID_DEVINTERFACE_PARCLASS device interface class is defined for devices that are attached to a parallel port. - - - The GUID_DEVINTERFACE_SERENUM_BUS_ENUMERATOR device interface class is defined for Plug and Play (PnP) serial ports. - - - The GUID_DEVINTERFACE_CDCHANGER device interface class is defined for CD-ROM changer devices. - - - The GUID_DEVINTERFACE_CDROM device interface class is defined for CD-ROM storage devices. - - - The GUID_DEVINTERFACE_DISK device interface class is defined for hard disk storage devices. - - - The GUID_DEVINTERFACE_FLOPPY device interface class is defined for floppy disk storage devices. - - - The GUID_DEVINTERFACE_MEDIUMCHANGER device interface class is defined for medium changer devices. - - - The GUID_DEVINTERFACE_PARTITION device interface class is defined for partition devices. - - - The GUID_DEVINTERFACE_STORAGEPORT device interface class is defined for storage port devices. - - - The GUID_DEVINTERFACE_TAPE device interface class is defined for tape storage devices. - - - The GUID_DEVINTERFACE_VOLUME device interface class is defined for volume devices. - - - The GUID_DEVINTERFACE_WRITEONCEDISK device interface class is defined for write-once disk devices. - - - The GUID_DEVINTERFACE_USB_DEVICE device interface class is defined for USB devices that are attached to a USB hub. - - - The GUID_DEVINTERFACE_USB_HOST_CONTROLLER device interface class is defined for USB host controller devices. - - - The GUID_DEVINTERFACE_USB_HUB device interface class is defined for USB hub devices. - - - Defines the controllable aspects of the Volume.DefineDosDevice() method. - - - DDD_EXACT_MATCH_ON_REMOVE - Default. - - - - DDD_RAW_TARGET_PATH - Uses the targetPath string as is. Otherwise, it is converted from an MS-DOS path to a path. - - - - DDD_REMOVE_DEFINITION - Removes the specified definition for the specified device. - To determine which definition to remove, the function walks the list of mappings for the device, looking for a match of targetPath against a prefix of each mapping associated with this device. - The first mapping that matches is the one removed, and then the function returns. - If targetPath is null or a pointer to a null string, the function will remove the first mapping associated with the device and pop the most recent one pushed.If there is nothing left to pop, the device name will be removed. - If this value is not specified, the string pointed to by the targetPath parameter will become the new mapping for this device. - - - - DDD_EXACT_MATCH_ON_REMOVE - If this value is specified along with , the function will use an exact match to determine which mapping to remove. - Use this value to ensure that you do not delete something that you did not define. - - - - DDD_NO_BROADCAST_SYSTEM - Do not broadcast the WM_SETTINGCHANGE message. - By default, this message is broadcast to notify the shell and applications of the change. - - - - Determines the format to convert a path to using - - - (FileNameNormalized / VolumeNameDos) Return the normalized drive name. This is the default. - - - Return the path with a volume GUID path instead of the drive name. - - - Return the path with the volume device path. - - - Return the path with no drive information. - - - Return the opened file name (not normalized). - - - Enumeration specifying the different reparse point tags. - - Reparse tags, with the exception of IO_REPARSE_TAG_SYMLINK, are processed on the server and are not processed by a client after transmission over the wire. - Clients should treat associated reparse data as opaque data. - - - - The entry is not a reparse point. - - - IO_REPARSE_APPXSTREAM - - - IO_REPARSE_TAG_CSV - - - IO_REPARSE_TAG_DRIVER_EXTENDER - Used by Home server drive extender. - - - - IO_REPARSE_TAG_DEDUP - - - IO_REPARSE_TAG_DFS - Used by the DFS filter. - - - - IO_REPARSE_TAG_DFSR - Used by the DFS filter. - - - - IO_REPARSE_TAG_FILTER_MANAGER - Used by filter manager test harness. - - - - IO_REPARSE_TAG_HSM - (Obsolete) Used by legacy Hierarchical Storage Manager Product. - - - - IO_REPARSE_TAG_HSM2 - (Obsolete) Used by legacy Hierarchical Storage Manager Product. - - - - IO_REPARSE_TAG_NFS - NFS symlinks, Windows 8 / SMB3 and later. - - - - IO_REPARSE_TAG_MOUNT_POINT - Used for mount point support. - - - - IO_REPARSE_TAG_SIS - Used by single-instance storage (SIS) filter driver. - - - - IO_REPARSE_TAG_SYMLINK - Used for symbolic link support. - - - - IO_REPARSE_TAG_WIM - - - WIN32_STREAM_ID Attributes of data to facilitate cross-operating system transfer. - - - STREAM_NORMAL_ATTRIBUTE - This backup stream has no special attributes. - - - - STREAM_MODIFIED_WHEN_READ - Attribute set if the stream contains data that is modified when read. - Allows the backup application to know that verification of data will fail. - - - - STREAM_CONTAINS_SECURITY - The backup stream contains security information. - This attribute applies only to backup stream of type . - - - - Reserved. - - - STREAM_SPARSE_ATTRIBUTE - The backup stream is part of a sparse file stream. - This attribute applies only to backup stream of type , , and . - - - - The type of the data contained in the backup stream. - - - This indicates an error. - - - BACKUP_DATA - Standard data. This corresponds to the NTFS $DATA stream type on the default (unnamed) data stream. - - - - BACKUP_EA_DATA - Extended attribute data. This corresponds to the NTFS $EA stream type. - - - - BACKUP_SECURITY_DATA - Security descriptor data. - - - - BACKUP_ALTERNATE_DATA - Alternative data streams. This corresponds to the NTFS $DATA stream type on a named data stream. - - - - BACKUP_LINK - Hard link information. This corresponds to the NTFS $FILE_NAME stream type. - - - - BACKUP_PROPERTY_DATA - Property data. - - - - BACKUP_OBJECT_ID - Objects identifiers. This corresponds to the NTFS $OBJECT_ID stream type. - - - - BACKUP_REPARSE_DATA - Reparse points. This corresponds to the NTFS $REPARSE_POINT stream type. - - - - BACKUP_SPARSE_BLOCK - Sparse file. This corresponds to the NTFS $DATA stream type for a sparse file. - - - - BACKUP_TXFS_DATA - Transactional NTFS (TxF) data stream. - - Windows Server 2003 and Windows XP: This value is not supported. - - - Flags that specify how a file or directory is to be copied. - - - No CopyOptions used, this allows overwriting the file. - - - COPY_FILE_FAIL_IF_EXISTS - The copy operation fails immediately if the target file already exists. - - - - COPY_FILE_RESTARTABLE - - Progress of the copy is tracked in the target file in case the copy fails. The failed copy can be restarted at a later time by specifying the same values - forexisting file name and new file name as those used in the call that failed. This can significantly slow down the copy operation as the new file may be - flushed multiple times during the copy operation. - - - - - COPY_FILE_OPEN_SOURCE_FOR_WRITE - The file is copied and the original file is opened for write access. - - - - COPY_FILE_ALLOW_DECRYPTED_DESTINATION - An attempt to copy an encrypted file will succeed even if the destination copy cannot be encrypted. - - - - COPY_FILE_COPY_SYMLINK - If the source file is a symbolic link, the destination file is also a symbolic link pointing to the same file that the source symbolic link is pointing to. - - - - COPY_FILE_NO_BUFFERING - The copy operation is performed using unbuffered I/O, bypassing system I/O cache resources. Recommended for very large file transfers. - - - - Used by CopyFileXxx and MoveFileXxx. The reason that was called. - - - CALLBACK_CHUNK_FINISHED - Another part of the data file was copied. - - - - CALLBACK_STREAM_SWITCH - Another stream was created and is about to be copied. This is the callback reason given when the callback routine is first invoked. - - - - Provides static methods to retrieve device resource information from a local or remote host. - - - Enumerates all available devices on the local host. - instances of type from the local host. - One of the devices. - - - Enumerates all available devices of type on the local or remote host. - instances of type for the specified . - The name of the local or remote host on which the device resides. refers to the local host. - One of the devices. - - - Enumerates all available devices on the local or remote host. - - - Get information about the target of a mount point or symbolic link on an NTFS file system. - - - Sets the NTFS compression state of a file or directory on a volume whose file system supports per-file and per-directory compression. - Specifies that is a file or directory. - The transaction. - A path that describes a folder or file to compress or decompress. - = compress, = decompress - Indicates the format of the path parameter(s). - - - Builds a DeviceInfo Data structure. - An initialized NativeMethods.SP_DEVINFO_DATA instance. - - - Builds a Device Interface Data structure. - An initialized NativeMethods.SP_DEVICE_INTERFACE_DATA instance. - - - Builds a Device Interface Detail Data structure. - An initialized NativeMethods.SP_DEVICE_INTERFACE_DETAIL_DATA instance. - - - Repeatedly invokes InvokeIoControl with the specified input until enough memory has been allocated. - - - The provides access to data associated with a specific file or directory, including security information and alternative data streams, for backup and restore operations. - This class uses the BackupRead, - BackupSeek and - BackupWrite functions from the Win32 API to provide access to the file or directory. - - - - Initializes a new instance of the class with the specified path and creation mode. - A relative or absolute path for the file that the current object will encapsulate. - A constant that determines how to open or create the file. - The file will be opened for exclusive access for both reading and writing. - - - Initializes a new instance of the class with the specified path, creation mode and access rights. - A relative or absolute path for the file that the current object will encapsulate. - A constant that determines how to open or create the file. - A constant that determines the access rights to use when creating access and audit rules for the file. - The file will be opened for exclusive access. - - - Initializes a new instance of the class with the specified path, creation mode, access rights and sharing permission. - A relative or absolute path for the file that the current object will encapsulate. - A constant that determines how to open or create the file. - A constant that determines the access rights to use when creating access and audit rules for the file. - A constant that determines how the file will be shared by processes. - - - Initializes a new instance of the class with the specified path, creation mode, access rights and sharing permission, and additional file attributes. - A relative or absolute path for the file that the current object will encapsulate. - A constant that determines how to open or create the file. - A constant that determines the access rights to use when creating access and audit rules for the file. - A constant that determines how the file will be shared by processes. - A constant that specifies additional file attributes. - - - Initializes a new instance of the class with the specified path, creation mode, access rights and sharing permission, additional file attributes, access control and audit security. - A relative or absolute path for the file that the current object will encapsulate. - A constant that determines how to open or create the file. - A constant that determines the access rights to use when creating access and audit rules for the file. - A constant that determines how the file will be shared by processes. - A constant that specifies additional file attributes. - A constant that determines the access control and audit security for the file. This parameter This parameter may be . - - - Initializes a new instance of the class with the specified path and creation mode. - The transaction. - A relative or absolute path for the file that the current object will encapsulate. - A constant that determines how to open or create the file. - The file will be opened for exclusive access for both reading and writing. - - - Initializes a new instance of the class with the specified path, creation mode and access rights. - The transaction. - A relative or absolute path for the file that the current object will encapsulate. - A constant that determines how to open or create the file. - A constant that determines the access rights to use when creating access and audit rules for the file. - The file will be opened for exclusive access. - - - Initializes a new instance of the class with the specified path, creation mode, access rights and sharing permission. - The transaction. - A relative or absolute path for the file that the current object will encapsulate. - A constant that determines how to open or create the file. - A constant that determines the access rights to use when creating access and audit rules for the file. - A constant that determines how the file will be shared by processes. - - - Initializes a new instance of the class with the specified path, creation mode, access rights and sharing permission, and additional file attributes. - The transaction. - A relative or absolute path for the file that the current object will encapsulate. - A constant that determines how to open or create the file. - A constant that determines the access rights to use when creating access and audit rules for the file. - A constant that determines how the file will be shared by processes. - A constant that specifies additional file attributes. - - - Initializes a new instance of the class with the specified path, creation mode, access rights and sharing permission, additional file attributes, access control and audit security. - The transaction. - A relative or absolute path for the file that the current object will encapsulate. - A constant that determines how to open or create the file. - A constant that determines the access rights to use when creating access and audit rules for the file. - A constant that determines how the file will be shared by processes. - A constant that specifies additional file attributes. - A constant that determines the access control and audit security for the file. This parameter This parameter may be . - - - Initializes a new instance of the class for the specified file handle, with the specified read/write permission. - A file handle for the file that this object will encapsulate. - A constant that gets the and properties of the object. - - - When overridden in a derived class, gets the length in bytes of the stream. - This method always throws an exception. - - - - When overridden in a derived class, gets or sets the position within the current stream. - This method always throws an exception. - - - - When overridden in a derived class, sets the position within the current stream. - A byte offset relative to the parameter. - A value of type indicating the reference point used to obtain the new position. - The new position within the current stream. - This stream does not support seeking using this method, and calling this method will always throw . See for an alternative way of seeking forward. - - - - When overridden in a derived class, sets the length of the current stream. - The desired length of the current stream in bytes. - This method is not supported by the class, and calling it will always generate a . - - - - Gets a value indicating whether the current stream supports reading. - if the stream supports reading, otherwise. - - - Gets a value indicating whether the current stream supports seeking. - This method always returns . - - - Gets a value indicating whether the current stream supports writing. - if the stream supports writing, otherwise. - - - Gets a object that represents the operating system file handle for the file that the current object encapsulates. - A object that represents the operating system file handle for the file that - the current object encapsulates. - - - Reads a sequence of bytes from the current stream and advances the position within the stream by the number of bytes read. - This method will not backup the access-control list (ACL) data for the file or directory. - - An array of bytes. When this method returns, the buffer contains the specified byte array with the values between - and ( + - 1) replaced by the bytes read from the - current source. - - - The zero-based byte offset in at which to begin storing the data read from the current stream. - - The maximum number of bytes to be read from the current stream. - - The total number of bytes read into the buffer. This can be less than the number of bytes requested if that many bytes are not - currently available, or zero (0) if the end of the stream has been reached. - - - - - - - - - - When overridden in a derived class, reads a sequence of bytes from the current stream and advances the position within the stream by the number of bytes read. - An array of bytes. When this method returns, the buffer contains the specified byte array with the values - between and ( + - 1) replaced by the bytes read from the current source. - The zero-based byte offset in at which to begin storing the data read from the current stream. - The maximum number of bytes to be read from the current stream. - Indicates whether the function will backup the access-control list (ACL) data for the file or directory. - - The total number of bytes read into the buffer. This can be less than the number of bytes requested if that many bytes are not - currently available, or zero (0) if the end of the stream has been reached. - - - - - - - - - Writes a sequence of bytes to the current stream and advances the current position within this stream by the number of bytes written. - - Writes a sequence of bytes to the current stream and advances the current position within this stream by the number of bytes written. - - An array of bytes. This method copies bytes from to the current stream. - The zero-based byte offset in at which to begin copying bytes to the current stream. - The number of bytes to be written to the current stream. - - - - - - This method will not process the access-control list (ACL) data for the file or directory. - - - When overridden in a derived class, writes a sequence of bytes to the current stream and advances the current position within this stream by the number of bytes written. - An array of bytes. This method copies bytes from to the current stream. - The zero-based byte offset in at which to begin copying bytes to the current stream. - The number of bytes to be written to the current stream. - Specifies whether the function will restore the access-control list (ACL) data for the file or directory. - If this is you need to specify and access when - opening the file or directory handle. If the handle does not have those access rights, the operating system denies - access to the ACL data, and ACL data restoration will not occur. - - - - - - - - Clears all buffers for this stream and causes any buffered data to be written to the underlying device. - - - Skips ahead the specified number of bytes from the current stream. - This method represents the Win32 API implementation of BackupSeek. - - Applications use the method to skip portions of a data stream that cause errors. This function does not - seek across stream headers. For example, this function cannot be used to skip the stream name. If an application - attempts to seek past the end of a substream, the function fails, the return value indicates the actual number of bytes - the function seeks, and the file position is placed at the start of the next stream header. - - - The number of bytes to skip. - The number of bytes actually skipped. - - - Gets a object that encapsulates the access control list (ACL) entries for the file described by the current object. - - - A object that encapsulates the access control list (ACL) entries for the file described by the current - object. - - - - Applies access control list (ACL) entries described by a object to the file described by the current object. - A object that describes an ACL entry to apply to the current file. - - - Prevents other processes from changing the while permitting read access. - The beginning of the range to lock. The value of this parameter must be equal to or greater than zero (0). - The range to be locked. - - - - - Allows access by other processes to all or part of a file that was previously locked. - The beginning of the range to unlock. - The range to be unlocked. - - - - - - Reads a stream header from the current . - The stream header read from the current , or if the end-of-file - was reached before the required number of bytes of a header could be read. - - The stream must be positioned at where an actual header starts for the returned object to represent valid - information. - - - Releases the unmanaged resources used by the and optionally releases the managed resources. - to release both managed and unmanaged resources; to release only unmanaged resources. - - - Releases unmanaged resources and performs other cleanup operations before the is reclaimed by garbage collection. - - - Represents the encryption status of the specified file. - - - The file can be encrypted. - - - The file is encrypted. - - - The file is a system file. System files cannot be encrypted. - - - The file is a root directory. Root directories cannot be encrypted. - - - The file is a system directory. System directories cannot be encrypted. - - - The encryption status is unknown. The file may be encrypted. - - - The file system does not support file encryption. - - - Reserved for future use. - - - The file is a read-only file. - - - Contains information that the GetFileInformationByHandle function retrieves. - - - Gets the file attributes. - The file attributes. - - - Gets the time this entry was created. - The time this entry was created. - - - Gets the time, in coordinated universal time (UTC), this entry was created. - The time, in coordinated universal time (UTC), this entry was created. - - - Gets the time this entry was last accessed. - For a file, the structure specifies the last time that a file is read from or written to. - For a directory, the structure specifies when the directory is created. - For both files and directories, the specified date is correct, but the time of day is always set to midnight. - If the underlying file system does not support the last access time, this member is zero (0). - - The time this entry was last accessed. - - - Gets the time, in coordinated universal time (UTC), this entry was last accessed. - For a file, the structure specifies the last time that a file is read from or written to. - For a directory, the structure specifies when the directory is created. - For both files and directories, the specified date is correct, but the time of day is always set to midnight. - If the underlying file system does not support the last access time, this member is zero (0). - - The time, in coordinated universal time (UTC), this entry was last accessed. - - - Gets the time this entry was last modified. - For a file, the structure specifies the last time that a file is written to. - For a directory, the structure specifies when the directory is created. - If the underlying file system does not support the last access time, this member is zero (0). - - The time this entry was last modified. - - - Gets the time, in coordinated universal time (UTC), this entry was last modified. - For a file, the structure specifies the last time that a file is written to. - For a directory, the structure specifies when the directory is created. - If the underlying file system does not support the last access time, this member is zero (0). - - The time, in coordinated universal time (UTC), this entry was last modified. - - - Gets the serial number of the volume that contains a file. - The serial number of the volume that contains a file. - - - Gets the size of the file. - The size of the file. - - - Gets the number of links to this file. For the FAT file system this member is always 1. For the NTFS file system, it can be more than 1. - The number of links to this file. - - - - Gets the unique identifier associated with the file. The identifier and the volume serial number uniquely identify a - file on a single computer. To determine whether two open handles represent the same file, combine the identifier - and the volume serial number for each file and compare them. - - The unique identifier of the file. - - - Contains information about files in the specified directory. Used for directory handles. - - - The number of bytes that are allocated for the file. This value is usually a multiple of the sector or cluster size of the underlying physical device. - - - Gets the time this entry was changed. - The time this entry was changed. - - - Gets the time, in coordinated universal time (UTC), this entry was changed. - The time, in coordinated universal time (UTC), this entry was changed. - - - Gets the time this entry was created. - The time this entry was created. - - - Gets the time, in coordinated universal time (UTC), this entry was created. - The time, in coordinated universal time (UTC), this entry was created. - - - The size of the extended attributes for the file. - - - The absolute new end-of-file position as a byte offset from the start of the file to the end of the file. - Because this value is zero-based, it actually refers to the first free byte in the file. In other words, EndOfFile is the offset to - the byte that immediately follows the last valid byte in the file. - - - - The file attributes. - - - The file ID. - - - The byte offset of the file within the parent directory. This member is undefined for file systems, such as NTFS, - in which the position of a file within the parent directory is not fixed and can be changed at any time to maintain sort order. - - - - The name of the file. - - - Gets the time this entry was last accessed. - The time this entry was last accessed. - - - Gets the time, in coordinated universal time (UTC), this entry was last accessed. - The time, in coordinated universal time (UTC), this entry was last accessed. - - - Gets the time this entry was last modified. - The time this entry was last modified. - - - Gets the time, in coordinated universal time (UTC), this entry was last modified. - The time, in coordinated universal time (UTC), this entry was last modified. - - - The short 8.3 file naming convention (for example, FILENAME.TXT) name of the file. - - - Provides properties and instance methods for the creation, copying, deletion, moving, and opening of files, and aids in the creation of objects. This class cannot be inherited. - - - [AlphaFS] Calculates the hash/checksum. - One of the values. - - - Refreshes the state of the EntryInfo instance. - - - [AlphaFS] Returns an enumerable collection of instances for the file. - An enumerable collection of instances for the file. - - - [AlphaFS] Decompresses an NTFS compressed file. - - - [AlphaFS] Compresses a file using NTFS compression. - - - Returns the path as a string. - The path. - - - Applies access control list (ACL) entries described by a FileSecurity object to the file described by the current FileInfo object. - - The SetAccessControl method applies access control list (ACL) entries to the current file that represents the noninherited ACL - list. Use the SetAccessControl method whenever you need to add or remove ACL entries from a file. - - A object that describes an access control list (ACL) entry to apply to the current file. - - - Applies access control list (ACL) entries described by a FileSecurity object to the file described by the current FileInfo object. - - The SetAccessControl method applies access control list (ACL) entries to the current file that represents the noninherited ACL - list. Use the SetAccessControl method whenever you need to add or remove ACL entries from a file. - - A object that describes an access control list (ACL) entry to apply to the current file. - One or more of the values that specifies the type of access control list (ACL) information to set. - - - Replaces the contents of a specified file with the file described by the current object, deleting the original file, and creating a backup of the replaced file. - A object that encapsulates information about the file described by the parameter. - - The Replace method replaces the contents of a specified file with the contents of the file described by the current - object. It also creates a backup of the file that was replaced. Finally, it returns a new - object that describes the overwritten file. - - Pass null to the parameter if you do not want to create a backup of the file being replaced. - The name of a file to replace with the current file. - The name of a file with which to create a backup of the file described by the parameter. - - - Replaces the contents of a specified file with the file described by the current object, deleting the original file, and creating a backup of the replaced file. Also specifies whether to ignore merge errors. - A object that encapsulates information about the file described by the parameter. - - The Replace method replaces the contents of a specified file with the contents of the file described by the current - object. It also creates a backup of the file that was replaced. Finally, it returns a new - object that describes the overwritten file. - - Pass null to the parameter if you do not want to create a backup of the file being replaced. - The name of a file to replace with the current file. - The name of a file with which to create a backup of the file described by the parameter. - to ignore merge errors (such as attributes and ACLs) from the replaced file to the replacement file; otherwise, . - - - [AlphaFS] Replaces the contents of a specified file with the file described by the current object, deleting the original file, and creating a backup of the replaced file. Also specifies whether to ignore merge errors. - A object that encapsulates information about the file described by the parameter. - - The Replace method replaces the contents of a specified file with the contents of the file described by the current - object. It also creates a backup of the file that was replaced. Finally, it returns a new - object that describes the overwritten file. - - Pass null to the parameter if you do not want to create a backup of the file being replaced. - The name of a file to replace with the current file. - The name of a file with which to create a backup of the file described by the parameter. - Indicates the format of the path parameter(s). - - - [AlphaFS] Replaces the contents of a specified file with the file described by the current object, deleting the original file, and creating a backup of the replaced file. Also specifies whether to ignore merge errors. - A object that encapsulates information about the file described by the parameter. - - The Replace method replaces the contents of a specified file with the contents of the file described by the current - object. It also creates a backup of the file that was replaced. Finally, it returns a new - object that describes the overwritten file. - - Pass null to the parameter if you do not want to create a backup of the file being replaced. - The name of a file to replace with the current file. - The name of a file with which to create a backup of the file described by the parameter. - to ignore merge errors (such as attributes and ACLs) from the replaced file to the replacement file; otherwise, . - Indicates the format of the path parameter(s). - - - Refreshes the state of the object. - - - Creates a write-only . - A write-only unshared object for a new or existing file. - - - Creates a with NativeMethods.DefaultFileEncoding encoding that reads from an existing text file. - A new with NativeMethods.DefaultFileEncoding encoding. - - - [AlphaFS] Creates a with that reads from an existing text file. - A new with the specified . - The applied to the contents of the file. - - - Creates a read-only . - A new read-only object. - This method returns a read-only object with the mode set to Read. - - - Opens a file in the specified mode. - A file opened in the specified mode, with read/write access and unshared. - A constant specifying the mode (for example, Open or Append) in which to open the file. - - - Opens a file in the specified mode with read, write, or read/write access. - A object opened in the specified mode and access, and unshared. - A constant specifying the mode (for example, Open or Append) in which to open the file. - A constant specifying whether to open the file with Read, Write, or ReadWrite file access. - - - Opens a file in the specified mode with read, write, or read/write access and the specified sharing option. - A object opened with the specified mode, access, and sharing options. - A constant specifying the mode (for example, Open or Append) in which to open the file. - A constant specifying whether to open the file with Read, Write, or ReadWrite file access. - A constant specifying the type of access other objects have to this file. - - - [AlphaFS] Opens a file in the specified mode with read, write, or read/write access. - A object opened in the specified mode and access, and unshared. - A constant specifying the mode (for example, Open or Append) in which to open the file. - A value that specifies whether a file is created if one does not exist, and determines whether the contents of existing files are retained or overwritten along with additional options. - - - [AlphaFS] Opens a file in the specified mode with read, write, or read/write access and the specified sharing option. - A object opened with the specified mode, access, and sharing options. - A constant specifying the mode (for example, Open or Append) in which to open the file. - A value that specifies whether a file is created if one does not exist, and determines whether the contents of existing files are retained or overwritten along with additional options. - A constant specifying the type of access other objects have to this file. - - - Gets a object that encapsulates the access control list (ACL) entries for the file described by the current object. - A FileSecurity object that encapsulates the access control rules for the current file. - - - Gets a object that encapsulates the specified type of access control list (ACL) entries for the file described by the current FileInfo object. - object that encapsulates the specified type of access control list (ACL) entries for the file described by the current FileInfo object. - One of the values that specifies which group of access control entries to retrieve. - - - Encrypts a file so that only the account used to encrypt the file can decrypt it. - - - Permanently deletes a file. - If the file does not exist, this method does nothing. - - - - - [AlphaFS] Permanently deletes a file. - If the file does not exist, this method does nothing. - overrides the read only of the file. - - - Decrypts a file that was encrypted by the current account using the Encrypt method. - - - Creates a instance that writes a new text file. - A new - - - Creates a file. - A new file. - - - Copies an existing file to a new file, disallowing the overwriting of an existing file. - A new instance with a fully qualified path. - - Use this method to prevent overwriting of an existing file by default. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - A new instance with a fully qualified path. - - - - - - - - The name of the new file to copy to. - - - Copies an existing file to a new file, allowing the overwriting of an existing file. - - Use this method to allow or prevent overwriting of an existing file. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - A new instance with a fully qualified path. - - - - - - - - The name of the new file to copy to. - to allow an existing file to be overwritten; otherwise, . - - - [AlphaFS] Copies an existing file to a new file, disallowing the overwriting of an existing file. - - Use this method to prevent overwriting of an existing file by default. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - A new instance with a fully qualified path. - - - - - - - - The name of the new file to copy to. - Indicates the format of the path parameter(s). - - - [AlphaFS] Copies an existing file to a new file, allowing the overwriting of an existing file. - - Use this method to allow or prevent overwriting of an existing file. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - A new instance with a fully qualified path. - - - - - - - - The name of the new file to copy to. - to allow an existing file to be overwritten; otherwise, . - Indicates the format of the path parameter(s). - - - [AlphaFS] Copies an existing file to a new file, allowing the overwriting of an existing file, can be specified. - - Option is recommended for very large file transfers. - Use this method to allow or prevent overwriting of an existing file. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - A new instance with a fully qualified path. - - - - - - - - The name of the new file to copy to. - that specify how the file is to be copied. - - - [AlphaFS] Copies an existing file to a new file, allowing the overwriting of an existing file, can be specified. - - Option is recommended for very large file transfers. - Use this method to allow or prevent overwriting of an existing file. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - A new instance with a fully qualified path. - - - - - - - - The name of the new file to copy to. - that specify how the file is to be copied. - Indicates the format of the path parameter(s). - - - [AlphaFS] Copies an existing file to a new file, allowing the overwriting of an existing file, can be specified. - - Option is recommended for very large file transfers. - Use this method to allow or prevent overwriting of an existing file. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - A new instance with a fully qualified path. - - - - - - - - The name of the new file to copy to. - that specify how the file is to be copied. - if original Timestamps must be preserved, otherwise. - - - [AlphaFS] Copies an existing file to a new file, allowing the overwriting of an existing file, can be specified. - - Option is recommended for very large file transfers. - Use this method to allow or prevent overwriting of an existing file. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - A new instance with a fully qualified path. - - - - - - - - The name of the new file to copy to. - that specify how the file is to be copied. - if original Timestamps must be preserved, otherwise. - Indicates the format of the path parameter(s). - - - [AlphaFS] Copies an existing file to a new file, allowing the overwriting of an existing file, can be specified. - and the possibility of notifying the application of its progress through a callback function. - - Option is recommended for very large file transfers. - Use this method to allow or prevent overwriting of an existing file. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - A class with details of the Copy action. - - - - - - - - The name of the new file to copy to. - that specify how the file is to be copied. - A callback function that is called each time another portion of the file has been copied. This parameter can be . - The argument to be passed to the callback function. This parameter can be . - - - [AlphaFS] Copies an existing file to a new file, allowing the overwriting of an existing file, can be specified. - - Option is recommended for very large file transfers. - Use this method to allow or prevent overwriting of an existing file. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - A class with details of the Copy action. - - - - - - - - The name of the new file to copy to. - that specify how the file is to be copied. - A callback function that is called each time another portion of the file has been copied. This parameter can be . - The argument to be passed to the callback function. This parameter can be . - Indicates the format of the path parameter(s). - - - [AlphaFS] Copies an existing file to a new file, allowing the overwriting of an existing file, can be specified. - and the possibility of notifying the application of its progress through a callback function. - - Option is recommended for very large file transfers. - Use this method to allow or prevent overwriting of an existing file. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - A class with details of the Copy action. - - - - - - - - The name of the new file to copy to. - that specify how the file is to be copied. - if original Timestamps must be preserved, otherwise. - A callback function that is called each time another portion of the file has been copied. This parameter can be . - The argument to be passed to the callback function. This parameter can be . - - - [AlphaFS] Copies an existing file to a new file, allowing the overwriting of an existing file, can be specified. - and the possibility of notifying the application of its progress through a callback function. - - Option is recommended for very large file transfers. - Use this method to allow or prevent overwriting of an existing file. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - A class with details of the Copy action. - - - - - - - - The name of the new file to copy to. - that specify how the file is to be copied. - if original Timestamps must be preserved, otherwise. - A callback function that is called each time another portion of the file has been copied. This parameter can be . - The argument to be passed to the callback function. This parameter can be . - Indicates the format of the path parameter(s). - - - Moves a specified file to a new location, providing the option to specify a new file name. - - Use this method to prevent overwriting of an existing file by default. - This method works across disk volumes. - For example, the file c:\MyFile.txt can be moved to d:\public and renamed NewFile.txt. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - A class with details of the Move action. - - - - - - - - The path to move the file to, which can specify a different file name. - - - [AlphaFS] Moves a specified file to a new location, providing the option to specify a new file name. - Returns a new instance with a fully qualified path when successfully moved, - - Use this method to prevent overwriting of an existing file by default. - This method works across disk volumes. - For example, the file c:\MyFile.txt can be moved to d:\public and renamed NewFile.txt. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable - behavior. - - - - - - - - - - The path to move the file to, which can specify a different file name. - Indicates the format of the path parameter(s). - - - [AlphaFS] Moves a specified file to a new location, providing the option to specify a new file name, can be specified. - Returns a new instance with a fully qualified path when successfully moved, - - Use this method to allow or prevent overwriting of an existing file. - This method works across disk volumes. - For example, the file c:\MyFile.txt can be moved to d:\public and renamed NewFile.txt. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable - behavior. - - - - - - - - - - The path to move the file to, which can specify a different file name. - that specify how the directory is to be moved. This parameter can be . - - - [AlphaFS] Moves a specified file to a new location, providing the option to specify a new file name, can be specified. - Returns a new instance with a fully qualified path when successfully moved, - - Use this method to allow or prevent overwriting of an existing file. - This method works across disk volumes. - For example, the file c:\MyFile.txt can be moved to d:\public and renamed NewFile.txt. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable - behavior. - - - - - - - - - - The path to move the file to, which can specify a different file name. - that specify how the directory is to be moved. This parameter can be . - Indicates the format of the path parameter(s). - - - [AlphaFS] Moves a specified file to a new location, providing the option to specify a new file name, can be specified, - and the possibility of notifying the application of its progress through a callback function. - - Use this method to allow or prevent overwriting of an existing file. - This method works across disk volumes. - For example, the file c:\MyFile.txt can be moved to d:\public and renamed NewFile.txt. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - A class with the status of the Move action. - - - - - - - - The path to move the file to, which can specify a different file name. - that specify how the directory is to be moved. This parameter can be . - A callback function that is called each time another portion of the directory has been moved. This parameter can be . - The argument to be passed to the callback function. This parameter can be . - - - [AlphaFS] Moves a specified file to a new location, providing the option to specify a new file name, can be specified. - - Use this method to allow or prevent overwriting of an existing file. - This method works across disk volumes. - For example, the file c:\MyFile.txt can be moved to d:\public and renamed NewFile.txt. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - A class with the status of the Move action. - - - - - - - - The path to move the file to, which can specify a different file name. - that specify how the directory is to be moved. This parameter can be . - A callback function that is called each time another portion of the directory has been moved. This parameter can be . - The argument to be passed to the callback function. This parameter can be . - Indicates the format of the path parameter(s). - - - Copy/move an existing file to a new file, allowing the overwriting of an existing file. - - Option is recommended for very large file transfers. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - A class with the status of the Copy or Move action. - A full path string to the destination directory - if original Timestamps must be preserved, otherwise. - This parameter can be . Use to specify how the file is to be copied. - This parameter can be . Use that specify how the file is to be moved. - This parameter can be . A callback function that is called each time another portion of the file has been copied. - This parameter can be . The argument to be passed to the callback function. - [out] Returns the retrieved long full path. - Indicates the format of the path parameter(s). - - - - - - - - - Creates a that appends text to the file represented by this instance of the . - A new - - - Creates a that appends text to the file represented by this instance of the . - The character to use. - A new - - - Initializes a new instance of the class, which acts as a wrapper for a file path. - The fully qualified name of the new file, or the relative file name. Do not end the path with the directory separator character. - This constructor does not check if a file exists. This constructor is a placeholder for a string that is used to access the file in subsequent operations. - - - [AlphaFS] Initializes a new instance of the class, which acts as a wrapper for a file path. - The fully qualified name of the new file, or the relative file name. Do not end the path with the directory separator character. - Indicates the format of the path parameter(s). - This constructor does not check if a file exists. This constructor is a placeholder for a string that is used to access the file in subsequent operations. - - - [AlphaFS] Initializes a new instance of the class, which acts as a wrapper for a file path. - The transaction. - The fully qualified name of the new file, or the relative file name. Do not end the path with the directory separator character. - This constructor does not check if a file exists. This constructor is a placeholder for a string that is used to access the file in subsequent operations. - - - [AlphaFS] Initializes a new instance of the class, which acts as a wrapper for a file path. - The transaction. - The fully qualified name of the new file, or the relative file name. Do not end the path with the directory separator character. - Indicates the format of the path parameter(s). - This constructor does not check if a file exists. This constructor is a placeholder for a string that is used to access the file in subsequent operations. - - - Gets an instance of the parent directory. - A object representing the parent directory of this file. - To get the parent directory as a string, use the DirectoryName property. - - - - Gets a string representing the directory's full path. - A string representing the directory's full path. - - To get the parent directory as a DirectoryInfo object, use the Directory property. - When first called, FileInfo calls Refresh and caches information about the file. - On subsequent calls, you must call Refresh to get the latest copy of the information. - - - - - Gets a value indicating whether the file exists. - if the file exists; otherwise, . - - The property returns if any error occurs while trying to determine if the specified file exists. - This can occur in situations that raise exceptions such as passing a file name with invalid characters or too many characters, - a failing or missing disk, or if the caller does not have permission to read the file. - - - - Gets or sets a value that determines if the current file is read only. - if the current file is read only; otherwise, . - - Use the IsReadOnly property to quickly determine or change whether the current file is read only. - When first called, FileInfo calls Refresh and caches information about the file. - On subsequent calls, you must call Refresh to get the latest copy of the information. - - - - - - Gets the size, in bytes, of the current file. - The size of the current file in bytes. - - The value of the Length property is pre-cached - To get the latest value, call the Refresh method. - - - - - - Gets the name of the file. - The name of the file. - - The name of the file includes the file extension. - When first called, calls Refresh and caches information about the file. - On subsequent calls, you must call Refresh to get the latest copy of the information. - The name of the file includes the file extension. - - - - Specifies how the operating system should open a file. - - - If you pass , the set of attributes is unspecified. explicitly sets no attributes. - - - The file is read only. Applications can read the file, but cannot write to or delete it. - Equals 1 - - - The file is hidden. Do not include it in an ordinary directory listing. - Equals 2 - - - The file is part of or used exclusively by an operating system. - Equals 4 - - - The handle that identifies a directory. - Equals 16 - - - The file should be archived. Applications use this attribute to mark files for backup or removal. - Equals 32 - - - The file should be archived. Applications use this attribute to mark files for backup or removal. - Equals 64 - - - The file does not have other attributes set. This attribute is valid only if used alone. - Equals 128 - - - The file is being used for temporary storage. - Equals 256 - - - A file that is a sparse file. - Equals 512 - - - A file or directory that has an associated reparse point, or a file that is a symbolic link. - Equals 1024 - - - A file or directory that is compressed. For a file, all of the data in the file is compressed. For a directory, compression is the default for newly created files and subdirectories. - Equals 2048 - - - The data of a file is not immediately available. This attribute indicates that file data is physically moved to offline storage. This attribute is used by Remote Storage, the hierarchical storage management software. Applications should not arbitrarily change this attribute. - Equals 4096 - - - The file or directory is not to be indexed by the content indexing service. - Equals 8192 - - - The file or directory is encrypted. For a file, this means that all data in the file is encrypted. For a directory, this means that encryption is the default for newly created files and subdirectories. - Equals 16384 - - - The directory or user data stream is configured with integrity (only supported on ReFS volumes). It is not included in an ordinary directory listing. The integrity setting persists with the file if it's renamed. If a file is copied the destination file will have integrity set if either the source file or destination directory have integrity set. - This flag is not supported until Windows Server 2012. - - - The user data stream not to be read by the background data integrity scanner (AKA scrubber). When set on a directory it only provides inheritance. This flag is only supported on Storage Spaces and ReFS volumes. It is not included in an ordinary directory listing. - This flag is not supported until Windows Server 2012. - - - ... - - - The file data is requested, but it should continue to be located in remote storage. It should not be transported back to local storage. This flag is for use by remote storage systems. - - - Normal reparse point processing will not occur; an attempt to open the reparse point will be made. When a file is opened, a file handle is returned, whether or not the filter that controls the reparse point is operational. See MSDN documentation for more information. - - - Access will occur according to POSIX rules. This includes allowing multiple files with names, differing only in case, for file systems that support that naming. Use care when using this option, because files created with this flag may not be accessible by applications that are written for MS-DOS or 16-bit Windows. - - - The file is being opened or created for a backup or restore operation. The system ensures that the calling process overrides file security checks when the process has SE_BACKUP_NAME and SE_RESTORE_NAME privileges. You must set this flag to obtain a handle to a directory. A directory handle can be passed to some functions instead of a file handle. - - - The file is to be deleted immediately after all of its handles are closed, which includes the specified handle and any other open or duplicated handles. If there are existing open handles to a file, the call fails unless they were all opened with the share mode. Subsequent open requests for the file fail, unless the share mode is specified. - Equals 67108864 - - - Access is intended to be sequential from beginning to end. The system can use this as a hint to optimize file caching. - Equals 134217728 - - - Access is intended to be random. The system can use this as a hint to optimize file caching. - Equals 268435456 - - - There are strict requirements for successfully working with files opened with the flag, for details see the section on "File Buffering" in the online MSDN documentation. - - - The file or device is being opened or created for asynchronous I/O. - Equals 1073741824 - - - Write operations will not go through any intermediate cache, they will go directly to disk. - Equals .NET -2147483648 - - - Class that retrieves file system entries (i.e. files and directories) using Win32 API FindFirst()/FindNext(). - - - Get an enumerator that returns all of the file system objects that match the wildcards that are in any of the directories to be searched. - An instance: FileSystemEntryInfo, DirectoryInfo, FileInfo or string (full path). - - - Gets a specific file system object. - - The return type is based on C# inference. Possible return types are: - - (full path), - ( or ), instance - or null in case an Exception is raised and is . - - - - Gets or sets the ability to return the object as a instance. - returns the object as a instance. - - - Gets or sets the ability to return the full path in long full path format. - returns the full path in long full path format, returns the full path in regular path format. - - - Gets or sets the ability to return the object instance as a . - returns the full path of the object as a - - - Gets the value indicating which to use. - - - Gets or sets the ability to skip on access errors. - suppress any Exception that might be thrown as a result from a failure, such as ACLs protected directories or non-accessible reparse points. - - - Gets the file system object type. - - = Return files and directories. - = Return only directories. - = Return only files. - - - - Gets or sets if the path is an absolute or relative path. - Gets a value indicating whether the specified path string contains absolute or relative path information. - - - Gets or sets the initial path to the folder. - The initial path to the file or folder in long path format. - - - Gets or sets the path to the folder. - The path to the file or folder in long path format. - - - Gets or sets a value indicating which to use. - indicates a folder object, indicates a file object. - - - Gets the value indicating which to use. - - - Specifies whether the search should include only the current directory or should include all subdirectories. - to all subdirectories. - - - Search for file system object-name using a pattern. - The path which has wildcard characters, for example, an asterisk () or a question mark (). - - - skips ReparsePoints, will follow ReparsePoints. - - - Get or sets the KernelTransaction instance. - The transaction. - - - Represents information about a file system entry. - This class cannot be inherited. - - - - Initializes a new instance of the class. - The NativeMethods.WIN32_FIND_DATA structure. - - - Gets the 8.3 version of the filename. - the 8.3 version of the filename. - - - Gets the attributes. - The attributes. - - - Gets the time this entry was created. - The time this entry was created. - - - Gets the time, in coordinated universal time (UTC), this entry was created. - The time, in coordinated universal time (UTC), this entry was created. - - - Gets the name of the file. - The name of the file. - - - Gets the size of the file. - The size of the file. - - - The full path of the file system object. - - - Gets a value indicating whether this instance is compressed. - if this instance is compressed; otherwise, . - - It is not possible to change the compression status of a File object by using the SetAttributes method. - Instead, you must actually compress the file using either a compression tool or one of the classes in the namespace. - - - - Gets a value indicating whether this instance is hidden, and thus is not included in an ordinary directory listing. - if this instance is hidden; otherwise, . - - - Gets a value indicating whether this instance represents a directory. - if this instance represents a directory; otherwise, . - - - Gets a value indicating whether this instance is encrypted (EFS). - if this instance is encrypted (EFS); otherwise, . - - For a file, this means that all data in the file is encrypted. - For a directory, this means that encryption is the default for newly created files and directories. - - - - Gets a value indicating whether this instance is a mount point. - if this instance is a mount point; otherwise, . - - - Gets a value indicating whether this instance is offline. The data of the file is not immediately available. - if this instance is offline; otherwise, . - - - Gets a value indicating whether this instance is read-only. - if this instance is read-only; otherwise, . - - - Gets a value indicating whether this instance contains a reparse point, which is a block of user-defined data associated with a file or a directory. - if this instance contains a reparse point; otherwise, . - - - Gets a value indicating whether this instance is a symbolic link. - if this instance is a symbolic link; otherwise, . - - - Gets the time this entry was last accessed. - The time this entry was last accessed. - - - Gets the time, in coordinated universal time (UTC), this entry was last accessed. - The time, in coordinated universal time (UTC), this entry was last accessed. - - - Gets the time this entry was last modified. - The time this entry was last modified. - - - Gets the time, in coordinated universal time (UTC), this entry was last modified. - The time, in coordinated universal time (UTC), this entry was last modified. - - - The full path of the file system object in Unicode (LongPath) format. - - - Gets the reparse point tag of this entry. - The reparse point tag of this entry. - - - Gets internal WIN32 FIND Data - - - Returns the of the instance. - The instance as a string. - - - Provides the base class for both and objects. - - - Deletes a file or directory. - - - Refreshes the state of the object. - - FileSystemInfo.Refresh() takes a snapshot of the file from the current file system. - Refresh cannot correct the underlying file system even if the file system returns incorrect or outdated information. - This can happen on platforms such as Windows 98. - Calls must be made to Refresh() before attempting to get the attribute information, or the information will be - outdated. - - - - Returns a string that represents the current object. - - ToString is the major formatting method in the .NET Framework. It converts an object to its string representation so that it is - suitable for display. - - A string that represents this instance. - - - Determines whether the specified Object is equal to the current Object. - Another object to compare to. - if the specified Object is equal to the current Object; otherwise, . - - - Serves as a hash function for a particular type. - A hash code for the current Object. - - - Implements the operator == - A. - B. - The result of the operator. - - - Implements the operator != - A. - B. - The result of the operator. - - - Refreshes the state of the EntryInfo instance. - - FileSystemInfo.RefreshEntryInfo() takes a snapshot of the file from the current file system. - Refresh cannot correct the underlying file system even if the file system returns incorrect or outdated information. - This can happen on platforms such as Windows 98. - Calls must be made to Refresh() before attempting to get the attribute information, or the information will be outdated. - - - - [AlphaFS] Resets the state of the file system object to uninitialized. - - - Initializes the specified file name. - - - Specifies that is a file or directory. - The transaction. - The full path and name of the file. - Indicates the format of the path parameter(s). - - - - Gets or sets the attributes for the current file or directory. - - - The value of the CreationTime property is pre-cached - To get the latest value, call the Refresh method. - - of the current . - - - - - - - Gets or sets the creation time of the current file or directory. - - The value of the CreationTime property is pre-cached To get the latest value, call the Refresh method. - This method may return an inaccurate value, because it uses native functions whose values may not be continuously updated by - the operating system. - If the file described in the FileSystemInfo object does not exist, this property will return - 12:00 midnight, January 1, 1601 A.D. (C.E.) Coordinated Universal Time (UTC), adjusted to local time. - NTFS-formatted drives may cache file meta-info, such as file creation time, for a short period of time. - This process is known as file tunneling. As a result, it may be necessary to explicitly set the creation time of a file if you are - overwriting or replacing an existing file. - - The creation date and time of the current object. - - - - - - Gets or sets the creation time, in coordinated universal time (UTC), of the current file or directory. - - The value of the CreationTimeUtc property is pre-cached - To get the latest value, call the Refresh method. - This method may return an inaccurate value, because it uses native functions - whose values may not be continuously updated by the operating system. - To get the latest value, call the Refresh method. - If the file described in the FileSystemInfo object does not exist, this property will return - 12:00 midnight, January 1, 1601 A.D. (C.E.) Coordinated Universal Time (UTC). - NTFS-formatted drives may cache file meta-info, such as file creation time, for a short period of time. - This process is known as file tunneling. As a result, it may be necessary to explicitly set the creation time - of a file if you are overwriting or replacing an existing file. - - The creation date and time in UTC format of the current object. - - - - - - - Gets a value indicating whether the file or directory exists. - - - The property returns if any error occurs while trying to determine if the - specified file or directory exists. - This can occur in situations that raise exceptions such as passing a directory- or file name with invalid characters or too - many characters, - a failing or missing disk, or if the caller does not have permission to read the file or directory. - - if the file or directory exists; otherwise, . - - - - Gets the string representing the extension part of the file. - - - The Extension property returns the extension, including the period (.). - For example, for a file c:\NewFile.txt, this property returns ".txt". - - A string containing the extension. - - - - Gets the full path of the directory or file. - - A string containing the full path. - - - Gets or sets the time the current file or directory was last accessed. - - The value of the LastAccessTime property is pre-cached - To get the latest value, call the Refresh method. - This method may return an inaccurate value, because it uses native functions - whose values may not be continuously updated by the operating system. - If the file described in the FileSystemInfo object does not exist, this property will return - 12:00 midnight, January 1, 1601 A.D. (C.E.) Coordinated Universal Time (UTC), adjusted to local time. - - The time that the current file or directory was last accessed. - - - - - Gets or sets the time, in coordinated universal time (UTC), that the current file or directory was last accessed. - - The value of the LastAccessTimeUtc property is pre-cached. - To get the latest value, call the Refresh method. - This method may return an inaccurate value, because it uses native functions - whose values may not be continuously updated by the operating system. - If the file described in the FileSystemInfo object does not exist, this property will return - 12:00 midnight, January 1, 1601 A.D. (C.E.) Coordinated Universal Time (UTC), adjusted to local time. - - The UTC time that the current file or directory was last accessed. - - - - - Gets or sets the time when the current file or directory was last written to. - - The value of the LastWriteTime property is pre-cached. - To get the latest value, call the Refresh method. - This method may return an inaccurate value, because it uses native functions - whose values may not be continuously updated by the operating system. - If the file described in the FileSystemInfo object does not exist, this property will return - 12:00 midnight, January 1, 1601 A.D. (C.E.) Coordinated Universal Time (UTC), adjusted to local time. - - The time the current file was last written. - - - - - Gets or sets the time, in coordinated universal time (UTC), when the current file or directory was last written to. - - The value of the LastWriteTimeUtc property is pre-cached. To get the latest value, call the Refresh method. - This method may return an inaccurate value, because it uses native functions whose values may not be continuously updated by - the operating system. - If the file described in the FileSystemInfo object does not exist, this property will return 12:00 midnight, January 1, 1601 - A.D. (C.E.) Coordinated Universal Time (UTC), adjusted to local time. - - The UTC time when the current file was last written to. - - - - For files, gets the name of the file. For directories, gets the name of the last directory in the hierarchy if a hierarchy exists. - Otherwise, the Name property gets the name of the directory. - - - For a directory, Name returns only the name of the parent directory, such as Dir, not c:\Dir. - For a subdirectory, Name returns only the name of the subdirectory, such as Sub1, not c:\Dir\Sub1. - For a file, Name returns only the file name and file name extension, such as MyFile.txt, not c:\Dir\Myfile.txt. - - - A string that is the name of the parent directory, the name of the last directory in the hierarchy, - or the name of a file, including the file name extension. - - - - Returns the path as a string. - - - [AlphaFS] Gets the instance of the class. - - - [AlphaFS] The initial "IsDirectory" indicator that was passed to the constructor. - - - The full path of the file system object in Unicode (LongPath) format. - - - [AlphaFS] Represents the KernelTransaction that was passed to the constructor. - - - Represents the fully qualified path of the file or directory. - - Classes derived from can use the FullPath field - to determine the full path of the object being manipulated. - - - - The path originally specified by the user, whether relative or absolute. - - - A bitfield of flags for specifying options for various internal operations that convert paths to full paths. - - - No special options applies. - - - Remove any trailing whitespace from the path. - - - Add a trailing directory separator to the path (if one does not already exist). - - - Remove the trailing directory separator from the path (if one exists). - - - Return full path as long full path (Unicode format). Not valid for . - - - Prevents any exception from being thrown if a filesystem object does not exist. Not valid for . - - - Check that the path contains only valid path-characters. - - - Also check for wildcard (? and *) characters. - - - Do not trim the trailing dot or space. - - - Performs both and checks. - - - Performs operations on String instances that contain file or directory path information. These operations are performed in a cross-platform manner. - - - Determines whether a path includes a file name extension. - if the characters that follow the last directory separator (\\ or /) or volume separator (:) in the path include a period (.) followed by one or more characters; otherwise, . - - The path to search for an extension. The path cannot contain any of the characters defined in . - - - Gets a value indicating whether the specified path string contains absolute or relative path information. - if contains a root; otherwise, . - - The IsPathRooted method returns if the first character is a directory separator character such as - , or if the path starts with a drive letter and colon (). - For example, it returns true for path strings such as "\\MyDir\\MyFile.txt", "C:\\MyDir", or "C:MyDir". - It returns for path strings such as "MyDir". - - This method does not verify that the path or file name exists. - - - The path to test. The path cannot contain any of the characters defined in . - - - [AlphaFS] Gets a value indicating whether the specified path string contains absolute or relative path information. - if contains a root; otherwise, . - - The IsPathRooted method returns true if the first character is a directory separator character such as - , or if the path starts with a drive letter and colon (). - For example, it returns for path strings such as "\\MyDir\\MyFile.txt", "C:\\MyDir", or "C:MyDir". - It returns for path strings such as "MyDir". - - This method does not verify that the path or file name exists. - - - The path to test. The path cannot contain any of the characters defined in . - will check for invalid path characters. - - - [AlphaFS] Check if file or folder name has any invalid characters. - - File or folder name. - if name contains any invalid characters. Otherwise - - - Checks that the given path format is supported. - - - A path to the file or directory. - Checks that the path contains only valid path-characters. - . - - - Checks that the path contains only valid path-characters. - - - A path to the file or directory. - also checks for ? and * characters. - When , throws an . - - - Tranlates DosDevicePath, Volume GUID. For example: "\Device\HarddiskVolumeX\path\filename.ext" can translate to: "\path\filename.ext" or: "\\?\Volume{GUID}\path\filename.ext". - A translated dos path. - A DosDevicePath, for example: \Device\HarddiskVolumeX\path\filename.ext. - Alternate path/device text, usually string.Empty or . - - - Check if is a directory- and/or volume-separator character. - if is a separator character. - The character to check. - - If , checks for all separator characters: , - and - If , only checks for: and - If only checks for: - - - - Changes the extension of a path string. - The modified path information. - - The path information to modify. The path cannot contain any of the characters defined in . - The new extension (with or without a leading period). Specify to remove an existing extension from path. - - - Returns the directory information for the specified path string. - - Directory information for , or if denotes a root directory or is - . - Returns if does not contain directory information. - - - The path of a file or directory. - - - [AlphaFS] Returns the directory information for the specified path string. - - Directory information for , or if denotes a root directory or is - . Returns if does not contain directory information. - - - The path of a file or directory. - will check for invalid path characters. - - - [AlphaFS] Returns the directory information for the specified path string without the root information, for example: "C:\Windows\system32" returns: "Windows". - The without the file name part and without the root information (if any), or if is or if denotes a root (such as "\", "C:", or * "\\server\share"). - The path. - - - [AlphaFS] Returns the directory information for the specified path string without the root information, for example: "C:\Windows\system32" returns: "Windows". - The without the file name part and without the root information (if any), or if is or if denotes a root (such as "\", "C:", or * "\\server\share"). - The transaction. - The path. - - - Returns the extension of the specified path string. - - The extension of the specified path (including the period "."), or null, or . - If is null, this method returns null. - If does not have extension information, - this method returns . - - - - The path string from which to get the extension. The path cannot contain any of the characters defined in . - - - Returns the extension of the specified path string. - - The extension of the specified path (including the period "."), or null, or . - If is null, this method returns null. - If does not have extension information, - this method returns . - - - The path string from which to get the extension. The path cannot contain any of the characters defined in . - will check for invalid path characters. - - - Returns the file name and extension of the specified path string. - - The characters after the last directory character in . If the last character of is a - directory or volume separator character, this method returns string.Empty. If path is null, this method returns null. - - - The path string from which to obtain the file name and extension. The path cannot contain any of the characters defined in . - - - [AlphaFS] Returns the file name and extension of the specified path string. - - The characters after the last directory character in . If the last character of is a - directory or volume separator character, this method returns string.Empty. If path is null, this method returns null. - - - The path string from which to obtain the file name and extension. - will check for invalid path characters. - - - Returns the file name of the specified path string without the extension. - The string returned by GetFileName, minus the last period (.) and all characters following it. - - The path of the file. The path cannot contain any of the characters defined in . - - - [AlphaFS] Returns the file name of the specified path string without the extension. - The string returned by GetFileName, minus the last period (.) and all characters following it. - - The path of the file. The path cannot contain any of the characters defined in . - will check for invalid path characters. - - - Gets an array containing the characters that are not allowed in file names. - An array containing the characters that are not allowed in file names. - - - Gets an array containing the characters that are not allowed in path names. - An array containing the characters that are not allowed in path names. - - - Gets the root directory information of the specified path. - - Returns the root directory of , such as "C:\", - or if is , - or an empty string if does not contain root directory information. - - - The path from which to obtain root directory information. - - - [AlphaFS] Gets the root directory information of the specified path. - - Returns the root directory of , such as "C:\", - or if is , - or an empty string if does not contain root directory information. - - - The path from which to obtain root directory information. - will check for invalid path characters. - - - [AlphaFS] Retrieves the final path for the specified file, formatted as . - The final path as a string. - - A final path is the path that is returned when a path is fully resolved. For example, for a symbolic link named "C:\tmp\mydir" that - points to "D:\yourdir", the final path would be "D:\yourdir". - - Then handle to a instance. - - - [AlphaFS] Retrieves the final path for the specified file, formatted as . - The final path as a string. - - A final path is the path that is returned when a path is fully resolved. For example, for a symbolic link named "C:\tmp\mydir" that - points to "D:\yourdir", the final path would be "D:\yourdir". - - Then handle to a instance. - The final path, formatted as - - - Retrieves the final path for the specified file, formatted as . - The final path as a string. - - A final path is the path that is returned when a path is fully resolved. For example, for a symbolic link named "C:\tmp\mydir" that - points to "D:\yourdir", the final path would be "D:\yourdir". The string that is returned by this function uses the - syntax. - - Then handle to a instance. - The final path, formatted as - - - Combines an array of strings into a path. - The combined paths. - - - An array of parts of the path. - - - Combines an array of strings into a path. - The combined paths. - - The parameters are not parsed if they have white space. - Therefore, if path2 includes white space (for example, " c:\\ "), - the Combine method appends path2 to path1 instead of returning only path2. - - - - will not check for invalid path characters. - An array of parts of the path. - - - AltDirectorySeparatorChar = '/' Provides a platform-specific alternate character used to separate directory levels in a path string that reflects a hierarchical file system organization. - - - DirectorySeparatorChar = '\' Provides a platform-specific character used to separate directory levels in a path string that reflects a hierarchical file system organization. - - - PathSeparator = ';' A platform-specific separator character used to separate path strings in environment variables. - - - VolumeSeparatorChar = ':' Provides a platform-specific Volume Separator character. - - - [AlphaFS] AltDirectorySeparatorChar = "/" Provides a platform-specific alternate string used to separate directory levels in a path string that reflects a hierarchical file system organization. - - - [AlphaFS] CurrentDirectoryPrefix = '.' Provides a current directory character. - - - [AlphaFS] CurrentDirectoryPrefix = "." Provides a current directory string. - - - [AlphaFS] DirectorySeparator = "\" Provides a platform-specific string used to separate directory levels in a path string that reflects a hierarchical file system organization. - - - [AlphaFS] ExtensionSeparatorChar = '.' Provides an Extension Separator character. - - - [AlphaFS] ParentDirectoryPrefix = ".." Provides a parent directory string. - - - [AlphaFS] StreamSeparator = ':' Provides a platform-specific Stream-name character. - - - [AlphaFS] StreamSeparator = ':' Provides a platform-specific Stream-name character. - - - [AlphaFS] StreamDataLabel = ':$DATA' Provides a platform-specific Stream :$DATA label. - - - [AlphaFS] StringTerminatorChar = '\0' String Terminator Suffix. - - - [AlphaFS] Characters to trim from the SearchPattern. - - - [AlphaFS] VolumeSeparatorChar = ':' Provides a platform-specific Volume Separator character. - - - [AlphaFS] WildcardStarMatchAll = "*" Provides a match-all-items string. - - - [AlphaFS] WildcardStarMatchAll = '*' Provides a match-all-items character. - - - [AlphaFS] WildcardQuestion = "?" Provides a replace-item string. - - - [AlphaFS] WildcardQuestion = '?' Provides a replace-item string. - - - [AlphaFS] UncPrefix = "\\" Provides standard Windows Path UNC prefix. - - - [AlphaFS] LongPathPrefix = "\\?\" Provides standard Windows Long Path prefix. - - - [AlphaFS] LongPathUncPrefix = "\\?\UNC\" Provides standard Windows Long Path UNC prefix. - - - [AlphaFS] GlobalRootPrefix = "\\?\GLOBALROOT\" Provides standard Windows Volume prefix. - - - [AlphaFS] MsDosNamespacePrefix = "\\.\" Provides standard logical drive prefix. - - - [AlphaFS] SubstitutePrefix = "\??\" Provides a SUBST.EXE Path prefix to a Logical Drive. - - - [AlphaFS] VolumePrefix = "\\?\Volume" Provides standard Windows Volume prefix. - - - [AlphaFS] DevicePrefix = "\Device\" Provides standard Windows Device prefix. - - - [AlphaFS] DosDeviceLanmanPrefix = "\Device\LanmanRedirector\" Provides a MS-Dos Lanman Redirector Path UNC prefix to a network share. - - - [AlphaFS] DosDeviceMupPrefix = "\Device\Mup\" Provides a MS-Dos Mup Redirector Path UNC prefix to a network share. - - - [AlphaFS] DosDeviceUncPrefix = "\??\UNC\" Provides a SUBST.EXE Path UNC prefix to a network share. - - - Returns the absolute path for the specified path string. - The fully qualified location of path, such as "C:\MyFile.txt". - - GetFullPathName merges the name of the current drive and directory with a specified file name to determine the full path and file name of a specified file. - It also calculates the address of the file name portion of the full path and file name. -   - This method does not verify that the resulting path and file name are valid, or that they see an existing file on the associated volume. - The .NET Framework does not support direct access to physical disks through paths that are device names, such as "\\.\PHYSICALDRIVE0". -   - MSDN: Multithreaded applications and shared library code should not use the GetFullPathName function and - should avoid using relative path names. The current directory state written by the SetCurrentDirectory function is stored as a global variable in each process, - therefore multithreaded applications cannot reliably use this value without possible data corruption from other threads that may also be reading or setting this value. - This limitation also applies to the SetCurrentDirectory and GetCurrentDirectory functions. The exception being when the application is guaranteed to be running in a single thread, - for example parsing file names from the command line argument string in the main thread prior to creating any additional threads. - Using relative path names in multithreaded applications or shared library code can yield unpredictable results and is not supported. - - - - - The file or directory for which to obtain absolute path information. - - - Returns the absolute path for the specified path string. - The fully qualified location of path, such as "C:\MyFile.txt". - - GetFullPathName merges the name of the current drive and directory with a specified file name to determine the full path and file name of a specified file. - It also calculates the address of the file name portion of the full path and file name. -   - This method does not verify that the resulting path and file name are valid, or that they see an existing file on the associated volume. - The .NET Framework does not support direct access to physical disks through paths that are device names, such as "\\.\PHYSICALDRIVE0". -   - MSDN: Multithreaded applications and shared library code should not use the GetFullPathName function and - should avoid using relative path names. The current directory state written by the SetCurrentDirectory function is stored as a global variable in each process, - therefore multithreaded applications cannot reliably use this value without possible data corruption from other threads that may also be reading or setting this value. - This limitation also applies to the SetCurrentDirectory and GetCurrentDirectory functions. The exception being when the application is guaranteed to be running in a single thread, - for example parsing file names from the command line argument string in the main thread prior to creating any additional threads. - Using relative path names in multithreaded applications or shared library code can yield unpredictable results and is not supported. - - - - - The file or directory for which to obtain absolute path information. - Options for controlling the full path retrieval. - - - [AlphaFS] Returns the absolute path for the specified path string. - The fully qualified location of path, such as "C:\MyFile.txt". - - GetFullPathName merges the name of the current drive and directory with a specified file name to determine the full path and file name of a specified file. - It also calculates the address of the file name portion of the full path and file name. -   - This method does not verify that the resulting path and file name are valid, or that they see an existing file on the associated volume. - The .NET Framework does not support direct access to physical disks through paths that are device names, such as "\\.\PHYSICALDRIVE0". -   - MSDN: Multithreaded applications and shared library code should not use the GetFullPathName function and - should avoid using relative path names. The current directory state written by the SetCurrentDirectory function is stored as a global variable in each process, - therefore multithreaded applications cannot reliably use this value without possible data corruption from other threads that may also be reading or setting this value. - This limitation also applies to the SetCurrentDirectory and GetCurrentDirectory functions. The exception being when the application is guaranteed to be running in a single thread, - for example parsing file names from the command line argument string in the main thread prior to creating any additional threads. - Using relative path names in multithreaded applications or shared library code can yield unpredictable results and is not supported. - - - - - The transaction. - The file or directory for which to obtain absolute path information. - - - [AlphaFS] Returns the absolute path for the specified path string. - The fully qualified location of path, such as "C:\MyFile.txt". - - GetFullPathName merges the name of the current drive and directory with a specified file name to determine the full path and file name of a specified file. - It also calculates the address of the file name portion of the full path and file name. -   - This method does not verify that the resulting path and file name are valid, or that they see an existing file on the associated volume. - The .NET Framework does not support direct access to physical disks through paths that are device names, such as "\\.\PHYSICALDRIVE0". -   - MSDN: Multithreaded applications and shared library code should not use the GetFullPathName function and - should avoid using relative path names. The current directory state written by the SetCurrentDirectory function is stored as a global variable in each process, - therefore multithreaded applications cannot reliably use this value without possible data corruption from other threads that may also be reading or setting this value. - This limitation also applies to the SetCurrentDirectory and GetCurrentDirectory functions. The exception being when the application is guaranteed to be running in a single thread, - for example parsing file names from the command line argument string in the main thread prior to creating any additional threads. - Using relative path names in multithreaded applications or shared library code can yield unpredictable results and is not supported. - - - - - The transaction. - The file or directory for which to obtain absolute path information. - Options for controlling the full path retrieval. - - - Retrieves the absolute path for the specified string. - The fully qualified location of , such as "C:\MyFile.txt". - - GetFullPathName merges the name of the current drive and directory with a specified file name to determine the full path and file name of a specified file. - It also calculates the address of the file name portion of the full path and file name. -   - This method does not verify that the resulting path and file name are valid, or that they see an existing file on the associated volume. - The .NET Framework does not support direct access to physical disks through paths that are device names, such as "\\.\PHYSICALDRIVE0". -   - MSDN: Multithreaded applications and shared library code should not use the GetFullPathName function and - should avoid using relative path names. The current directory state written by the SetCurrentDirectory function is stored as a global variable in each process, - therefore multithreaded applications cannot reliably use this value without possible data corruption from other threads that may also be reading or setting this value. - This limitation also applies to the SetCurrentDirectory and GetCurrentDirectory functions. The exception being when the application is guaranteed to be running in a single thread, - for example parsing file names from the command line argument string in the main thread prior to creating any additional threads. - Using relative path names in multithreaded applications or shared library code can yield unpredictable results and is not supported. - - - - The transaction. - The file or directory for which to obtain absolute path information. - Options for controlling the full path retrieval. - - - Applies the to - with applied . - - - - - - - [AlphaFS] Adds a trailing character to the string, when absent. - A text string with a trailing character. The function returns when is . - A text string to which the trailing is to be added, when absent. - - - [AlphaFS] Adds a trailing or character to the string, when absent. - A text string with a trailing or character. The function returns when is . - A text string to which the trailing or is to be added, when absent. - If the character will be added instead. - - - [AlphaFS] Removes the trailing character from the string, when present. - A text string where the trailing character has been removed. The function returns when is . - A text string from which the trailing is to be removed, when present. - - - [AlphaFS] Removes the trailing or character from the string, when present. - A text string where the trailing or character has been removed. The function returns when is . - A text string from which the trailing or is to be removed, when present. - If the trailing character will be removed instead. - - - [AlphaFS] Returns the directory information for the specified with a trailing character. - - The suffixed directory information for the specified with a trailing character, - or if is or if denotes a root (such as "\", "C:", or * "\\server\share"). - - This method is similar to calling Path.GetDirectoryName() + Path.AddTrailingDirectorySeparator() - The path. - - - [AlphaFS] Returns the directory information for the specified with a trailing character. - - The suffixed directory information for the specified with a trailing character, - or if is or if denotes a root (such as "\", "C:", or * "\\server\share"). - - This method is similar to calling Path.GetDirectoryName() + Path.AddTrailingDirectorySeparator() - The transaction. - The path. - - - [AlphaFS] Returns the directory information for the specified without the root and with a trailing character. - - The directory information for the specified without the root and with a trailing character, - or if is or if is . - - The path. - - - [AlphaFS] Returns the directory information for the specified without the root and with a trailing character. - - The directory information for the specified without the root and with a trailing character, - or if is or if is . - - The transaction. - The path. - - - Returns the directory information for the specified with a trailing character. - - The suffixed directory information for the specified with a trailing character, - or if is or if denotes a root (such as "\", "C:", or * "\\server\share"). - - This method is similar to calling Path.GetDirectoryName() + Path.AddTrailingDirectorySeparator() - The transaction. - The path. - - - Returns the directory information for the specified without the root and with a trailing character. - - The directory information for the specified without the root and with a trailing character, - or if is or if is . - - The transaction. - The path. - - - [AlphaFS] Gets the connection name of the locally mapped drive. - The server and share as: \\servername\sharename. - - - - - The local path with drive name. - - - [AlphaFS] Gets the network share name from the locally mapped path. - The network share connection name of . - - - - - The local path with drive name. - - - [AlphaFS] Determines if a path string is a valid Universal Naming Convention (UNC) path. - if the specified path is a Universal Naming Convention (UNC) path, otherwise. - The path to check. - - - [AlphaFS] Determines if a path string is a valid Universal Naming Convention (UNC) path, optionally skip invalid path character check. - if the specified path is a Universal Naming Convention (UNC) path, otherwise. - The path to check. - will check for invalid path characters. - - - [AlphaFS] Converts a local path to a network share path. - A Local path, e.g.: "C:\Windows" will be returned as: "\\MachineName\C$\Windows". - If a logical drive points to a network share path, the share path will be returned instead. - - On successful conversion a UNC path is returned. - If the conversion fails, is returned. - If is an empty string or , is returned. - - - - - A local path, e.g.: "C:\Windows". - - - [AlphaFS] Converts a local path to a network share path, optionally returning it in a long path format. - A Local path, e.g.: "C:\Windows" will be returned as: "\\MachineName\C$\Windows". - If a logical drive points to a network share path, the share path will be returned instead. - - On successful conversion a UNC path is returned. - If the conversion fails, is returned. - If is an empty string or , is returned. - - - - - A local path, e.g.: "C:\Windows". - returns the path in long path (Unicode) format, when returns the path as a regular path. - - - [AlphaFS] Converts a local path to a network share path, optionally returning it in a long path format and the ability to add or remove a trailing backslash. - A Local path, e.g.: "C:\Windows" will be returned as: "\\MachineName\C$\Windows". - If a logical drive points to a network share path, the share path will be returned instead. - - On successful conversion a UNC path is returned. - If the conversion fails, is returned. - If is an empty string or , is returned. - - - - - A local path, e.g.: "C:\Windows". - returns the path in long path (Unicode) format, when returns the path as a regular path. - adds a trailing character to , when absent. - removes the trailing character from , when present. - - - [AlphaFS] Determines if a path string is a valid Universal Naming Convention (UNC) path, optionally skip invalid path character check. - if the specified path is a Universal Naming Convention (UNC) path, otherwise. - The path to check. - When indicates that is already in regular path format. - will check for invalid path characters. - - - Converts a local path to a network share path. - A Local path, e.g.: "C:\Windows" will be returned as: "\\MachineName\C$\Windows". - If a logical drive points to a network share path, the share path will be returned instead. - - On successful conversion a UNC path is returned. - If the conversion fails, is returned. - If is an empty string or , is returned. - - - - - A local path, e.g.: "C:\Windows". - returns the path in long path (Unicode) format, when returns the path as a regular path. - adds a trailing character to , when absent. - removes the trailing character from , when present. - - - Makes an extended long path from the specified by prefixing . - The prefixed with a , the minimum required full path is: "C:\". - This method does not verify that the resulting path and file name are valid, or that they see an existing file on the associated volume. - - - The path to the file or directory, this can also be an UNC path. - - - [AlphaFS] Converts the specified existing path to its regular long form. - An existing path to a folder or file. - The regular full path. - - - [AlphaFS] Converts the specified existing path to its regular long form. - The transaction. - An existing path to a folder or file. - The regular full path. - - - [AlphaFS] Gets the regular path from long prefixed one. i.e.: "\\?\C:\Temp\file.txt" to C:\Temp\file.txt" or: "\\?\UNC\Server\share\file.txt" to "\\Server\share\file.txt". - Regular form path string. - This method does not handle paths with volume names, eg. \\?\Volume{GUID}\Folder\file.txt. - The path. - - - [AlphaFS] Retrieves the short path form of the specified path. - A path that has the 8.3 path form. - Will fail on NTFS volumes with disabled 8.3 name generation. - The path must actually exist to be able to get the short path name. - An existing path to a folder or file. - - - [AlphaFS] Retrieves the short path form of the specified path. - A path that has the 8.3 path form. - Will fail on NTFS volumes with disabled 8.3 name generation. - The path must actually exist to be able to get the short path name. - The transaction. - An existing path to a folder or file. - - - [AlphaFS] Determines whether the specified path starts with a or . - if the specified path has a long path (UNC) prefix, otherwise. - The path to the file or directory. - - - Makes an extended long path from the specified by prefixing . - The prefixed with a , the minimum required full path is: "C:\". - This method does not verify that the resulting path and file name are valid, or that they see an existing file on the associated volume. - - - The path to the file or directory, this can also be an UNC path. - Options for controlling the full path retrieval. - - - Retrieves the short path form, or the regular long form of the specified . - If is , a path of the 8.3 form otherwise the regular long form. - - Will fail on NTFS volumes with disabled 8.3 name generation. - The path must actually exist to be able to get the short- or long path name. - - The transaction. - An existing path to a folder or file. - to retrieve the short path form, to retrieve the regular long form from the 8.3 . - - - Gets the regular path from a long path. - - Returns the regular form of a long . - For example: "\\?\C:\Temp\file.txt" to: "C:\Temp\file.txt", or: "\\?\UNC\Server\share\file.txt" to: "\\Server\share\file.txt". - - - MSDN: String.TrimEnd Method notes to Callers: http://msdn.microsoft.com/en-us/library/system.string.trimend%28v=vs.110%29.aspx - - - - The path. - Options for controlling the full path retrieval. - When , throws an . - - - Gets the path as a long full path. - The path as an extended length path. - - The transaction. - Full pathname of the source path to convert. - The path format to use. - Options for controlling the operation. Note that on .NET 3.5 the TrimEnd option has no effect. - - - Returns a random folder name or file name. - A random folder name or file name. - - - Creates a uniquely named, zero-byte temporary file on disk and returns the full path of that file. - The full path of the temporary file. - - - Returns the path of the current user's temporary folder. - The path to the temporary folder, ending with a backslash. - - - [AlphaFS] Returns the path of the current user's temporary folder. - The folder name to append to the temporary folder. - The path to the temporary folder, combined with . - - - Represents a wrapper class for a handle used by the CM_Connect_Machine/CM_Disconnect_Machine Win32 API functions. - - - Initializes a new instance of the class. - - - Represents a wrapper class for a handle used by the FindFirstFile/FindNextFile Win32 API functions. - - - Constructor that prevents a default instance of this class from being created. - - - Constructor that prevents a default instance of this class from being created. - The handle. - true to reliably release the handle during the finalization phase; false to prevent - reliable release (not recommended). - - - When overridden in a derived class, executes the code required to free the handle. - if the handle is released successfully; otherwise, in the event of a catastrophic failure, . In this case, it generates a ReleaseHandleFailed Managed Debugging Assistant. - - - Contains Shell32 information about a file. - - - Initializes a Shell32Info instance. - Shell32 is limited to MAX_PATH length. - This constructor does not check if a file exists. This constructor is a placeholder for a string that is used to access the file in subsequent operations. - - The fully qualified name of the new file, or the relative file name. Do not end the path with the directory separator character. - - - Initializes a Shell32Info instance. - Shell32 is limited to MAX_PATH length. - This constructor does not check if a file exists. This constructor is a placeholder for a string that is used to access the file in subsequent operations. - - The fully qualified name of the new file, or the relative file name. Do not end the path with the directory separator character. - Indicates the format of the path parameter(s). - - - Gets an handle to the Shell icon that represents the file. - Icon size or . Can also be combined with and others. - An handle to the Shell icon that represents the file. - Caller is responsible for destroying this handle with DestroyIcon() when no longer needed. - - - Gets the Shell command association from the registry. - The shell verb. - - Returns the associated file- or protocol-related Shell command from the registry or string.Empty if no association can be - found. - - - - Refreshes the state of the object. - - - Returns the path as a string. - The path. - - - Gets the Shell file or protocol association from the registry. - - - The attributes of the file object. - - - Gets the Shell command association from the registry. - - - Gets the Shell command association from the registry. - - - Gets the Shell DDE association from the registry. - - - Gets the Shell default icon association from the registry. - - - Represents the fully qualified path of the file. - - - Gets the Shell friendly application name association from the registry. - - - Gets the Shell friendly document name association from the registry. - - - Reflects the initialization state of the instance. - - - Gets the Shell "Open With" command association from the registry. - - - Class for CopyMoveResult that contains the results for the Copy or Move action. - - - Create a CopyMoveResult class instance for the Copy or Move action. - Indicates the source file or directory. - Indicates the destination file or directory. - Indicates if the action was canceled. - The error code encountered during the Copy or Move action. - - - The error code encountered during the Copy or Move action. - 0 (zero) indicates success. - - - The error message from the that was encountered during the Copy or Move action. - A message describing the error. - - - When true indicates that the Copy or Move action was canceled. - when the Copy/Move action was canceled. Otherwise . - - - Indicates the source file or directory. - - - Indicates the destination file or directory. - - - The total number of folders copied. - - - The total number of files copied. - - - The total number of bytes copied. - - - Information about the target of a symbolic link or mount point. - - - The print name. - - - The substitute name. - - - Used by MoveFileXxx.Flags that specify how a file or directory is to be moved. - - - No MoveOptions used, this fails when the file name already exists. - - - MOVE_FILE_REPLACE_EXISTSING - If the destination file name already exists, the function replaces its contents with the contents of the source file. - This value cannot be used if lpNewFileName or lpExistingFileName names a directory. - This value cannot be used if either source or destination names a directory. - - - - MOVE_FILE_COPY_ALLOWED - If the file is to be moved to a different volume, the function simulates the move by using the CopyFile and DeleteFile functions. - This value cannot be used with . - - - - MOVE_FILE_DELAY_UNTIL_REBOOT - - The system does not move the file until the operating system is restarted. - The system moves the file immediately after AUTOCHK is executed, but before creating any paging files. - - - Consequently, this parameter enables the function to delete paging files from previous startups. - This value can only be used if the process is in the context of a user who belongs to the administrators group or the LocalSystem account. - - This value cannot be used with . - - - - MOVE_FILE_WRITE_THROUGH - The function does not return until the file has actually been moved on the disk. - - Setting this value guarantees that a move performed as a copy and delete operation is flushed to disk before the function returns. - The flush occurs at the end of the copy operation. - - This value has no effect if is set. - - - - MOVE_FILE_CREATE_HARDLINK - Reserved for future use. - - - - MOVE_FILE_FAIL_IF_NOT_TRACKABLE - The function fails if the source file is a link source, but the file cannot be tracked after the move. - This situation can occur if the destination is a volume formatted with the FAT file system. - - - - The file or directory was not a reparse point. - - - Initializes a new instance of the class. - - - Initializes a new instance of the class. - The message. - - - Initializes a new instance of the class. - The message. - The inner exception. - - - Initializes a new instance of the class. - The info. - The context. - - - Provides access to a file system object, using Shell32. - - - Provides information for the IQueryAssociations interface methods, used by Shell32. - - - None. - - - Instructs not to map CLSID values to ProgID values. - - - Identifies the value of the supplied file parameter (3rd parameter of function GetFileAssociation()) as an executable file name. - If this flag is not set, the root key will be set to the ProgID associated with the .exe key instead of the executable file's ProgID. - - - Specifies that when an IQueryAssociation method does not find the requested value under the root key, it should attempt to retrieve the comparable value from the * subkey. - - - Specifies that when an IQueryAssociation method does not find the requested value under the root key, it should attempt to retrieve the comparable value from the Folder subkey. - - - Specifies that only HKEY_CLASSES_ROOT should be searched, and that HKEY_CURRENT_USER should be ignored. - - - Specifies that the return string should not be truncated. Instead, return an error value and the required size for the complete string. - - - - Instructs IQueryAssociations methods to verify that data is accurate. - This setting allows IQueryAssociations methods to read data from the user's hard disk for verification. - For example, they can check the friendly name in the registry against the one stored in the .exe file. - - Setting this flag typically reduces the efficiency of the method. - - - - Instructs IQueryAssociations methods to ignore Rundll.exe and return information about its target. - Typically IQueryAssociations methods return information about the first .exe or .dll in a command string. - If a command uses Rundll.exe, setting this flag tells the method to ignore Rundll.exe and return information about its target. - - - - Instructs IQueryAssociations methods not to fix errors in the registry, such as the friendly name of a function not matching the one found in the .exe file. - - - Specifies that the BaseClass value should be ignored. - - - Specifies that the "Unknown" ProgID should be ignored; instead, fail. - Introduced in Windows 7. - - - Specifies that the supplied ProgID should be mapped using the system defaults, rather than the current user defaults. - Introduced in Windows 8. - - - Specifies that the value is a protocol, and should be mapped using the current user defaults. - Introduced in Windows 8. - - - ASSOCSTR enumeration - Used by the AssocQueryString() function to define the type of string that is to be returned. - - - None. - - - A command string associated with a Shell verb. - - - - An executable from a Shell verb command string. - For example, this string is found as the (Default) value for a subkey such as HKEY_CLASSES_ROOT\ApplicationName\shell\Open\command. - If the command uses Rundll.exe, set the flag in the attributes parameter of IQueryAssociations::GetString to retrieve the target executable. - - - - The friendly name of a document type. - - - The friendly name of an executable file. - - - Ignore the information associated with the open subkey. - - - Look under the ShellNew subkey. - - - A template for DDE commands. - - - The DDE command to use to create a process. - - - The application name in a DDE broadcast. - - - The topic name in a DDE broadcast. - - - - Corresponds to the InfoTip registry value. - Returns an info tip for an item, or list of properties in the form of an IPropertyDescriptionList from which to create an info tip, such as when hovering the cursor over a file name. - The list of properties can be parsed with PSGetPropertyDescriptionListFromString. - - - - - Corresponds to the QuickTip registry value. This is the same as , except that it always returns a list of property names in the form of an IPropertyDescriptionList. - The difference between this value and is that this returns properties that are safe for any scenario that causes slow property retrieval, such as offline or slow networks. - Some of the properties returned from might not be appropriate for slow property retrieval scenarios. - The list of properties can be parsed with PSGetPropertyDescriptionListFromString. - - - - - Corresponds to the TileInfo registry value. Contains a list of properties to be displayed for a particular file type in a Windows Explorer window that is in tile view. - This is the same as , but, like , it also returns a list of property names in the form of an IPropertyDescriptionList. - The list of properties can be parsed with PSGetPropertyDescriptionListFromString. - - - - - Describes a general type of MIME file association, such as image and bmp, - so that applications can make general assumptions about a specific file type. - - - - - Returns the path to the icon resources to use by default for this association. - Positive numbers indicate an index into the dll's resource table, while negative numbers indicate a resource ID. - An example of the syntax for the resource is "c:\myfolder\myfile.dll,-1". - - - - - For an object that has a Shell extension associated with it, - you can use this to retrieve the CLSID of that Shell extension object by passing a string representation - of the IID of the interface you want to retrieve as the pwszExtra parameter of IQueryAssociations::GetString. - For example, if you want to retrieve a handler that implements the IExtractImage interface, - you would specify "{BB2E617C-0920-11d1-9A0B-00C04FC2D6C1}", which is the IID of IExtractImage. - - - - - For a verb invoked through COM and the IDropTarget interface, you can use this flag to retrieve the IDropTarget object's CLSID. - This CLSID is registered in the DropTarget subkey. - The verb is specified in the supplied file parameter in the call to IQueryAssociations::GetString. - - - - - For a verb invoked through COM and the IExecuteCommand interface, you can use this flag to retrieve the IExecuteCommand object's CLSID. - This CLSID is registered in the verb's command subkey as the DelegateExecute entry. - The verb is specified in the supplied file parameter in the call to IQueryAssociations::GetString. - - - - (No description available on MSDN) - Introduced in Windows 8. - - - The maximum defined value, used for validation purposes. - - - Shell32 FileAttributes structure, used to retrieve the different types of a file system object. - - - 0x000000000 - Get file system object large icon. - The flag must also be set. - - - 0x000000001 - Get file system object small icon. - The flag must also be set. - - - 0x000000002 - Get file system object open icon. - A container object displays an open icon to indicate that the container is open. - The and/or flag must also be set. - - - 0x000000004 - Get file system object Shell-sized icon. - If this attribute is not specified the function sizes the icon according to the system metric values. - - - 0x000000008 - Get file system object by its PIDL. - Indicate that the given file contains the address of an ITEMIDLIST structure rather than a path name. - - - 0x000000010 - Indicates that the given file should not be accessed. Rather, it should act as if the given file exists and use the supplied attributes. - This flag cannot be combined with the , or attributes. - - - 0x000000020 - Apply the appropriate overlays to the file's icon. - The flag must also be set. - - - 0x000000040 - Returns the index of the overlay icon. - The value of the overlay index is returned in the upper eight bits of the iIcon member of the structure specified by psfi. - - - 0x000000100 - Retrieve the handle to the icon that represents the file and the index of the icon within the system image list. The handle is copied to the member of the structure, and the index is copied to the member. - - - 0x000000200 - Retrieve the display name for the file. The name is copied to the member of the structure. - The returned display name uses the long file name, if there is one, rather than the 8.3 form of the file name. - - - 0x000000400 - Retrieve the string that describes the file's type. - - - 0x000000800 - Retrieve the item attributes. The attributes are copied to the member of the structure. - Will touch every file, degrading performance. - - - 0x000001000 - Retrieve the name of the file that contains the icon representing the file specified by pszPath. The name of the file containing the icon is copied to the member of the structure. The icon's index is copied to that structure's member. - - - 0x000002000 - Retrieve the type of the executable file if pszPath identifies an executable file. - This flag cannot be specified with any other attributes. - - - 0x000004000 - Retrieve the index of a system image list icon. - - - 0x000008000 - Add the link overlay to the file's icon. - The flag must also be set. - - - 0x000010000 - Blend the file's icon with the system highlight color. - - - 0x000020000 - Modify to indicate that contains specific attributes that are desired. - This flag cannot be specified with the attribute. Will touch every file, degrading performance. - - - SHFILEINFO structure, contains information about a file system object. - - - A handle to the icon that represents the file. - Caller is responsible for destroying this handle with DestroyIcon() when no longer needed. - - - The index of the icon image within the system image list. - - - An array of values that indicates the attributes of the file object. - - - The name of the file as it appears in the Windows Shell, or the path and file name of the file that contains the icon representing the file. - - - The type of file. - - - SFGAO - Attributes that can be retrieved from a file system object. - - - 0x00000000 - None. - - - 0x00000001 - The specified items can be copied. - - - 0x00000002 - The specified items can be moved. - - - 0x00000004 - Shortcuts can be created for the specified items. - - - 0x00000008 - The specified items can be bound to an IStorage object through IShellFolder::BindToObject. For more information about namespace manipulation capabilities, see IStorage. - - - 0x00000010 - The specified items can be renamed. Note that this value is essentially a suggestion; not all namespace clients allow items to be renamed. However, those that do must have this attribute set. - - - 0x00000020 - The specified items can be deleted. - - - 0x00000040 - The specified items have property sheets. - - - 0x00000100 - The specified items are drop targets. - - - 0x00001000 - The specified items are system items. - Windows 7 and later. - - - 0x00002000 - The specified items are encrypted and might require special presentation. - - - 0x00004000 - Accessing the item (through IStream or other storage interfaces) is expected to be a slow operation. - - - 0x00008000 - The specified items are shown as dimmed and unavailable to the user. - - - 0x00010000 - The specified items are shortcuts. - - - 0x00020000 - The specified objects are shared. - - - 0x00040000 - The specified items are read-only. In the case of folders, this means that new items cannot be created in those folders. - - - 0x00080000 - The item is hidden and should not be displayed unless the Show hidden files and folders option is enabled in Folder Settings. - - - 0x00100000 - The items are nonenumerated items and should be hidden. They are not returned through an enumerator such as that created by the IShellFolder::EnumObjects method. - - - 0x00200000 - The items contain new content, as defined by the particular application. - - - 0x00400000 - Indicates that the item has a stream associated with it. - - - 0x00800000 - Children of this item are accessible through IStream or IStorage. - - - 0x01000000 - When specified as input, instructs the folder to validate that the items contained in a folder or Shell item array exist. - - - 0x02000000 - The specified items are on removable media or are themselves removable devices. - - - 0x04000000 - The specified items are compressed. - - - 0x08000000 - The specified items can be hosted inside a web browser or Windows Explorer frame. - - - 0x10000000 - The specified folders are either file system folders or contain at least one descendant (child, grandchild, or later) that is a file system folder. - - - 0x20000000 - The specified items are folders. - - - 0x40000000 - The specified folders or files are part of the file system (that is, they are files, directories, or root directories). - - - 0x80000000 - The specified folders have subfolders. - - - Used by method UrlIs() to define a URL type. - - - Is the URL valid? - - - Is the URL opaque? - - - Is the URL a URL that is not typically tracked in navigation history? - - - Is the URL a file URL? - - - Attempt to determine a valid scheme for the URL. - - - Does the URL string end with a directory? - - - Does the URL have an appended query string? - - - Destroys an icon and frees any memory the icon occupied. - An handle to an icon. - - - Gets the file or protocol that is associated with from the registry. - A path to the file. - The associated file- or protocol-related string from the registry or string.Empty if no association can be found. - - - Gets the content-type that is associated with from the registry. - A path to the file. - The associated file- or protocol-related content-type from the registry or string.Empty if no association can be found. - - - Gets the default icon that is associated with from the registry. - A path to the file. - The associated file- or protocol-related default icon from the registry or string.Empty if no association can be found. - - - Gets the friendly application name that is associated with from the registry. - A path to the file. - The associated file- or protocol-related friendly application name from the registry or string.Empty if no association can be found. - - - Gets the friendly document name that is associated with from the registry. - A path to the file. - The associated file- or protocol-related friendly document name from the registry or string.Empty if no association can be found. - - - Gets an handle to the Shell icon that represents the file. - Caller is responsible for destroying this handle with DestroyIcon() when no longer needed. - - The path to the file system object which should not exceed maximum path length. Both absolute and - relative paths are valid. - - - Icon size or . Can also be combined - with and others. - - An handle to the Shell icon that represents the file, or IntPtr.Zero on failure. - - - Retrieves information about an object in the file system, such as a file, folder, directory, or drive root. - A struct instance. - - You should call this function from a background thread. - Failure to do so could cause the UI to stop responding. - Unicode path are supported. - - The path to the file system object which should not exceed the maximum path length. Both absolute and relative paths are valid. - A attribute. - One ore more attributes. - - suppress any Exception that might be thrown as a result from a failure, - such as ACLs protected directories or non-accessible reparse points. - - - - Retrieves an instance of containing information about the specified file. - A path to the file. - A class instance. - - - Retrieves an instance of containing information about the specified file. - A path to the file. - Indicates the format of the path parameter(s). - A class instance. - - - Gets the "Open With" command that is associated with from the registry. - A path to the file. - The associated file- or protocol-related "Open With" command from the registry or string.Empty if no association can be found. - - - Gets the Shell command that is associated with from the registry. - A path to the file. - The associated file- or protocol-related Shell command from the registry or string.Empty if no association can be found. - - - Converts a file URL to a Microsoft MS-DOS path. - The file URL. - - The Microsoft MS-DOS path. If no path can be created, string.Empty is returned. - If is , will also be returned. - - - - Creates a path from a file URL. - The URL. - - The file path. If no path can be created, string.Empty is returned. - If is , will also be returned. - - - - Determines whether a path to a file system object such as a file or folder is valid. - The full path of maximum length the maximum path length to the object to verify. - if the file exists; otherwise - - - Tests whether a URL is a specified type. - The URL. - - - For all but one of the URL types, UrlIs returns if the URL is the specified type, or otherwise. - If UrlIs is set to , UrlIs will attempt to determine the URL scheme. - If the function is able to determine a scheme, it returns , or otherwise. - - - - Converts a Microsoft MS-DOS path to a canonicalized URL. - The full MS-DOS path of maximum length . - - The URL. If no URL can be created string.Empty is returned. - If is , will also be returned. - - - - Tests a URL to determine if it is a file URL. - The URL. - if the URL is a file URL, or otherwise. - - - Returns whether a URL is a URL that browsers typically do not include in navigation history. - The URL. - if the URL is a URL that is not included in navigation history, or otherwise. - - - Returns whether a URL is opaque. - The URL. - if the URL is opaque, or otherwise. - - - Searches for and retrieves a file or protocol association-related string from the registry. - A path to a file. - One or more attributes. Only one "InitXXX" attribute can be used. - A attribute. - The associated file- or protocol-related string from the registry or string.Empty if no association can be found. - - - - Retrieve information about an object in the file system, such as a file, folder, directory, or drive root. - A struct instance. - - You should call this function from a background thread. - Failure to do so could cause the UI to stop responding. - Unicode path are not supported. - - The path to the file system object which should not exceed the maximum path length in length. Both absolute and relative paths are valid. - A attribute. - A attribute. - Checks that the path contains only valid path-characters. - - suppress any Exception that might be thrown as a result from a failure, - such as ACLs protected directories or non-accessible reparse points. - - - - Indicates whether the link target is a file or directory. - Used by Win32 API CreateSymbolicLink()/CreateSymbolicLinkTransacted() - - - The link target is a file. - - - The link target is a directory. - - - Represents information about a symbolic link. - - - Gets the type of the link. - The type of the link. - - - Specifies the type of a symbolic link. - - - The symbolic link is absolute. - - - The symbolic link is relative. - - - The function attempted to use a name that is reserved for use by another transaction. - - - Initializes a new instance of the class. - - - Initializes a new instance of the class. - The message. - - - Initializes a new instance of the class. - The message. - The inner exception. - - - Initializes a new instance of the class. - The info. - The context. - - - The function attempted to use a name that is reserved for use by another transaction. - - - Initializes a new instance of the class. - - - Initializes a new instance of the class. - The message. - - - Initializes a new instance of the class. - The message. - The inner exception. - - - Initializes a new instance of the class. - The info. - The context. - - - The remote server or share does not support transacted file operations. - - - Initializes a new instance of the class. - - - Initializes a new instance of the class. - The message. - - - Initializes a new instance of the class. - The message. - The inner exception. - - - Initializes a new instance of the class. - The object that holds the serialized object data. - The contextual information about the source or destination. - - - The transaction handle associated with this operation is not valid. - - - Initializes a new instance of the class. - - - Initializes a new instance of the class. - The message. - - - Initializes a new instance of the class. - The message. - The inner exception. - - - Initializes a new instance of the class. - The data for serializing or deserializing the object. - The source and destination for the object. - - - A KTM transaction object for use with the transacted operations in - - - Initializes a new instance of the class, internally using the specified . - This method allows the usage of methods accepting a with an instance of . - - The transaction to use for any transactional operations. - - - Initializes a new instance of the class with a default security descriptor, infinite timeout and no description. - - - Initializes a new instance of the class with a default security descriptor. - The time, in milliseconds, when the transaction will be aborted if it has not already reached the prepared state. - A user-readable description of the transaction. This parameter may be . - - - Initializes a new instance of the class. - The security descriptor. - The time, in milliseconds, when the transaction will be aborted if it has not already reached the prepared state. - Specify 0 to provide an infinite timeout. - A user-readable description of the transaction. This parameter may be . - - - Requests that the specified transaction be committed. - - - - - - Requests that the specified transaction be rolled back. This function is synchronous. - - - - - Gets the safe handle. - The safe handle. - - - Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. - - - Represents a wrapper class for a handle used by the FindFirstFile/FindNextFile Win32 API functions. - - - Initializes a new instance of the class. - - - Initializes a new instance of the class. - The handle. - [owns handle]. - - - When overridden in a derived class, executes the code required to free the handle. - if the handle is released successfully; otherwise, in the event of a catastrophic failure, . In this case, it generates a ReleaseHandleFailed Managed Debugging Assistant. - - - Represents a wrapper class for a handle used by the FindFirstVolumeMountPoint/FindVolumeMountPointClose methods of the Win32 API. - - - Initializes a new instance of the class. - - - Initializes a new instance of the class. - The handle. - [owns handle]. - - - When overridden in a derived class, executes the code required to free the handle. - if the handle is released successfully; otherwise, in the event of a catastrophic failure, . - - - - Represents a wrapper class for a handle used by the FindFirstVolume/FindNextVolume methods of the Win32 API. - - - Initializes a new instance of the class. - - - Initializes a new instance of the class. - The handle. - [owns handle]. - - - When overridden in a derived class, executes the code required to free the handle. - if the handle is released successfully; otherwise, in the event of a catastrophic failure, . In this case, it generates a ReleaseHandleFailed Managed Debugging Assistant. - - - - Provides a concrete implementation of SafeHandle supporting transactions. - - - Initializes a new instance of the class. - - - When overridden in a derived class, executes the code required to free the handle. - if the handle is released successfully; otherwise, in the event of a catastrophic failure, . In this case, it generates a ReleaseHandleFailed Managed Debugging Assistant. - - - It is too late to perform the requested operation, since the Transaction has already been aborted. - - - Initializes a new instance of the class. - - - Initializes a new instance of the class. - The message. - - - Initializes a new instance of the class. - The message. - The inner exception. - - - Initializes a new instance of the class. - The info. - The context. - - - It is too late to perform the requested operation, since the Transaction has already been committed. - - - Initializes a new instance of the class. - - - Initializes a new instance of the class. - The message. - - - Initializes a new instance of the class. - The message. - The inner exception. - - - Initializes a new instance of the class. - The object that holds the serialized object data. - The contextual information about the source or destination. - - - The exception that is thrown when an attempt to create a file or directory that already exists was made. - - - Initializes a new instance of the class. - - - Initializes a new instance of the class. - The message. - - - Initializes a new instance of the class. - The message. - The inner exception. - - - Initializes a new instance of the class. - The data for serializing or deserializing the object. - The source and destination for the object. - - - Static class providing utility methods for working with Microsoft Windows devices and volumes. - - - Defines, redefines, or deletes MS-DOS device names. - An MS-DOS device name string specifying the device the function is defining, redefining, or deleting. - An MS-DOS path that will implement this device. - - - Defines, redefines, or deletes MS-DOS device names. - - An MS-DOS device name string specifying the device the function is defining, redefining, or deleting. - - - >An MS-DOS path that will implement this device. If parameter has the - flag specified, is used as is. - - - The controllable aspects of the DefineDosDevice function, flags which will be combined with the - default. - - - - Deletes an MS-DOS device name. - An MS-DOS device name specifying the device to delete. - - - Deletes an MS-DOS device name. - An MS-DOS device name string specifying the device to delete. - - A pointer to a path string that will implement this device. The string is an MS-DOS path string unless the - flag is specified, in which case this string is a path string. - - - - Deletes an MS-DOS device name. - An MS-DOS device name string specifying the device to delete. - - A pointer to a path string that will implement this device. The string is an MS-DOS path string unless the - flag is specified, in which case this string is a path string. - - - Only delete MS-DOS device on an exact name match. If is , - must be the same path used to create the mapping. - - - - Deletes an MS-DOS device name. - An MS-DOS device name string specifying the device to delete. - - A pointer to a path string that will implement this device. The string is an MS-DOS path string unless the - flag is specified, in which case this string is a path string. - - - The controllable aspects of the DefineDosDevice function flags which will be combined with the - default. - - - Only delete MS-DOS device on an exact name match. If is , - must be the same path used to create the mapping. - - - - Retrieves a list of all existing MS-DOS device names. - An with one or more existing MS-DOS device names. - - - Retrieves a list of all existing MS-DOS device names. - - (Optional, default: ) An MS-DOS device name string specifying the target of the query. This parameter can be - "sort". In that case a sorted list of all existing MS-DOS device names is returned. This parameter can be . - In that case, the function will store a list of all existing MS-DOS device names into the buffer. - - An with or more existing MS-DOS device names. - - - - Retrieves information about MS-DOS device names. The function can obtain the current mapping for a particular MS-DOS device name. - The function can also obtain a list of all existing MS-DOS device names. - - - An MS-DOS device name string, or part of, specifying the target of the query. This parameter can be . In that - case, the QueryDosDevice function will store a list of all existing MS-DOS device names into the buffer. - - - (Optional, default: ) If options[0] = a sorted list will be returned. - - An with one or more existing MS-DOS device names. - - - Gets the name of the file system, such as NTFS or FAT32. - Use DriveFormat to determine what formatting a drive uses. - - A path to a drive. For example: "C:\", "\\server\share", or "\\?\Volume{c0580d5e-2ad6-11dc-9924-806e6f6e6963}\". - - The name of the file system on the specified drive or on failure or if not available. - - - Gets the drive letter from an MS-DOS device name. For example: "\Device\HarddiskVolume2" returns "C:\". - An MS-DOS device name. - The drive letter from an MS-DOS device name. - - - - Determines, based on the root of the current directory, whether a disk drive is a removable, fixed, CD-ROM, RAM disk, or network - drive. - - A object. - - - Determines whether a disk drive is a removable, fixed, CD-ROM, RAM disk, or network drive. - A path to a drive. For example: "C:\", "\\server\share", or "\\?\Volume{c0580d5e-2ad6-11dc-9924-806e6f6e6963}\" - A object. - - - - Retrieves information about the amount of space that is available on a disk volume, which is the total amount of space, the total - amount of free space, and the total amount of free space available to the user that is associated with the calling thread. - - The calling application must have FILE_LIST_DIRECTORY access rights for this directory. - - A path to a drive. For example: "C:\", "\\server\share", or "\\?\Volume{c0580d5e-2ad6-11dc-9924-806e6f6e6963}\". - - A class instance. - - - - Retrieves information about the amount of space that is available on a disk volume, which is the total amount of space, the total - amount of free space, and the total amount of free space available to the user that is associated with the calling thread. - - The calling application must have FILE_LIST_DIRECTORY access rights for this directory. - - A path to a drive. For example: "C:\", "\\server\share", or "\\?\Volume{c0580d5e-2ad6-11dc-9924-806e6f6e6963}\". - - - gets both size- and disk cluster information. Get only disk cluster information, - Get only size information. - - A class instance. - - - Gets a value indicating whether a drive is ready. - - A path to a drive. For example: "C:\", "\\server\share", or "\\?\Volume{c0580d5e-2ad6-11dc-9924-806e6f6e6963}\". - - if is ready; otherwise, . - - - Deletes the label of the file system volume that is the root of the current directory. - - - - Deletes the label of a file system volume. - - The root directory of a file system volume. This is the volume the function will remove the label. - - - Deletes a Drive letter or mounted folder. - Deleting a mounted folder does not cause the underlying directory to be deleted. - - If the parameter is a directory that is not a mounted folder, the function does nothing. The - directory is not deleted. - - - It's not an error to attempt to unmount a volume from a volume mount point when there is no volume actually mounted at that volume - mount point. - - The Drive letter or mounted folder to be deleted. For example, X:\ or Y:\MountX\. - - - - Returns an enumerable collection of of all mounted folders (volume mount points) on the specified volume. - - - - A containing the volume . - An enumerable collection of of all volume mount points on the specified volume. - - - - Returns an enumerable collection of drive letters and mounted folder paths for the specified volume. - - - - A volume path: \\?\Volume{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}\. - An enumerable collection of containing the path names for the specified volume. - - - Returns an enumerable collection of volumes on the computer. - An enumerable collection of volume names on the computer. - - - - Get the unique volume name for the given path. - - - - A path string. Both absolute and relative file and directory names, for example "..", is acceptable in this path. If you specify a - relative file or directory name without a volume qualifier, GetUniqueVolumeNameForPath returns the Drive letter of the current - volume. - - - Returns the unique volume name in the form: "\\?\Volume{GUID}\", - or on error or if unavailable. - - - - Retrieves the Win32 Device name from the Volume name. - - Name of the Volume. - - The Win32 Device name from the Volume name (for example: "\Device\HarddiskVolume2"), or on error or if - unavailable. - - - - Gets the shortest display name for the specified . - This method basically returns the shortest string returned by - A volume path: \\?\Volume{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}\. - - The shortest display name for the specified volume found, or if no display names were found. - - - - - Retrieves a volume path for the volume that is associated with the specified volume mount point (drive letter, - volume GUID path, or mounted folder). - - - - The path of a mounted folder (for example, "Y:\MountX\") or a drive letter (for example, "X:\"). - - The unique volume name of the form: "\\?\Volume{GUID}\". - - - - Tranlates DosDevicePath to a Volume GUID. For example: "\Device\HarddiskVolumeX\path\filename.ext" can translate to: "\path\ - filename.ext" or: "\\?\Volume{GUID}\path\filename.ext". - - A DosDevicePath, for example: \Device\HarddiskVolumeX\path\filename.ext. - A translated dos path. - - - Retrieves information about the file system and volume associated with the specified root file or directorystream. - A path that contains the root directory. - A instance describing the volume associatied with the specified root directory. - - - Retrieves information about the file system and volume associated with the specified root file or directorystream. - An instance to a handle. - A instance describing the volume associatied with the specified root directory. - - - Retrieve the label of a file system volume. - - A path to a volume. For example: "C:\", "\\server\share", or "\\?\Volume{c0580d5e-2ad6-11dc-9924-806e6f6e6963}\". - - - The the label of the file system volume. This function can return string.Empty since a volume label is generally not - mandatory. - - - - Retrieves the volume mount point where the specified path is mounted. - - The path to the volume, for example: "C:\Windows". - - Returns the nearest volume root path for a given directory. - The volume path name, for example: "C:\Windows" returns: "C:\". - - - - Determines whether the volume of two file system objects is the same. - The first filesystem ojbect with full path information. - The second file system object with full path information. - if both filesytem objects reside on the same volume, otherwise. - - - Determines whether the specified volume name is a defined volume on the current computer. - - A path to a volume. For example: "C:\", "\\server\share", or "\\?\Volume{c0580d5e-2ad6-11dc-9924-806e6f6e6963}\". - - on success, otherwise. - - - Sets the label of the file system volume that is the root of the current directory. - - A name for the volume. - - - Sets the label of a file system volume. - - A path to a volume. For example: "C:\", "\\server\share", or "\\?\Volume{c0580d5e-2ad6-11dc-9924-806e6f6e6963}\" - If this parameter is , the function uses the current drive. - - - A name for the volume. - If this parameter is , the function deletes any existing label - from the specified volume and does not assign a new label. - - - - Associates a volume with a Drive letter or a directory on another volume. - - - - The user-mode path to be associated with the volume. This may be a Drive letter (for example, "X:\") - or a directory on another volume (for example, "Y:\MountX\"). - - A containing the volume . - - - Defines, redefines, or deletes MS-DOS device names. - - - defines a new MS-DOS device. deletes a previously defined MS-DOS device. - - - An MS-DOS device name string specifying the device the function is defining, redefining, or deleting. - - - A pointer to a path string that will implement this device. The string is an MS-DOS path string unless the - flag is specified, in which case this string is a path string. - - - The controllable aspects of the DefineDosDevice function, flags which will be combined with the - default. - - - Only delete MS-DOS device on an exact name match. If is , - must be the same path used to create the mapping. - - - on success, otherwise. - - - Deletes a Drive letter or mounted folder. - - It's not an error to attempt to unmount a volume from a volume mount point when there is no volume actually mounted at that volume mount point. - Deleting a mounted folder does not cause the underlying directory to be deleted. - - - The Drive letter or mounted folder to be deleted. For example, X:\ or Y:\MountX\. - - suppress any Exception that might be thrown as a result from a failure, such as unavailable resources. - - If completed successfully returns , otherwise the last error number. - - - Contains information about a filesystem Volume. - - - Initializes a VolumeInfo instance. - - - A valid drive path or drive letter. This can be either uppercase or lowercase, 'a' to 'z' or a network share in the format: \\server\share. - - - Initializes a VolumeInfo instance. - A valid drive path or drive letter. This can be either uppercase or lowercase, 'a' to 'z' or a network share in the format: "\\server\share". - Refreshes the state of the object. - suppress any Exception that might be thrown as a result from a failure, such as unavailable resources. - - - Initializes a VolumeInfo instance. - An instance to a handle. - - - Initializes a VolumeInfo instance. - An instance to a handle. - Refreshes the state of the object. - suppress any Exception that might be thrown as a result from a failure, such as unavailable resources. - - - Refreshes the state of the object. - - - Returns the full path of the volume. - A string that represents this instance. - - - The specified volume supports preserved case of file names when it places a name on disk. - - - The specified volume supports case-sensitive file names. - - - The specified volume supports file-based compression. - - - Gets the name of the file system, for example, the FAT file system or the NTFS file system. - The name of the file system. - - - The full path to the volume. - - - The volume GUID. - - - Gets the maximum length of a file name component that the file system supports. - The maximum length of a file name component that the file system supports. - - - Gets the label of the volume. - The label of the volume. - This property is the label assigned to the volume, such "MyDrive" - - - The specified volume supports named streams. - - - The specified volume preserves and enforces access control lists (ACL). - - - The specified volume is read-only. - - - The specified volume supports a single sequential write. - - - Gets the volume serial number that the operating system assigns when a hard disk is formatted. - The volume serial number that the operating system assigns when a hard disk is formatted. - - - The specified volume supports the Encrypted File System (EFS). - - - The specified volume supports extended attributes. - - - The specified volume supports hard links. - - - The specified volume supports object identifiers. - - - The file system supports open by FileID. - - - The specified volume supports remote storage. (This property does not appear on MSDN) - - - The specified volume supports re-parse points. - - - The specified volume supports sparse files. - - - The specified volume supports transactions. - - - The specified volume supports update sequence number (USN) journals. - - - The specified volume supports Unicode in file names as they appear on disk. - - - The specified volume is a compressed volume, for example, a DoubleSpace volume. - - - The specified volume supports disk quotas. - - - Contains information about a Distributed File System (DFS) root or link. This class cannot be inherited. - This structure contains the name, status, GUID, time-out, number of targets, and information about each target of the root or link. - - - - Initializes a new instance of the class which acts as a wrapper for a DFS root or link target. - - - Initializes a new instance of the class, which acts as a wrapper for a DFS root or link target. - An initialized instance. - - - Returns the Universal Naming Convention (UNC) path of the DFS root or link. - A string that represents this instance. - - - The instance of the DFS root or link. - - - The comment of the DFS root or link. - - - The Universal Naming Convention (UNC) path of the DFS root or link. - - - Specifies the GUID of the DFS root or link. - - - The collection of DFS targets of the DFS root or link. - - - An enum that specifies a set of bit flags that describe the DFS root or link. - - - Specifies the time-out, in seconds, of the DFS root or link. - - - Specifies a set of flags that describe specific properties of a DFS namespace, root, or link. - - - For domain-based DFS namespaces, this member specifies the size of the corresponding Active Directory data blob, in bytes. - For stand-alone DFS namespaces, this field specifies the size of the metadata stored in the registry, - including the key names and value names, in addition to the specific data items associated with them. This field is valid for DFS roots only. - - - - Pointer to a SECURITY_DESCRIPTOR structure that specifies a self-relative security descriptor to be associated with the DFS link's reparse point. - This field is valid for DFS links only. - - - - Contains information about a DFS root or link target in a DFS namespace or from the cache maintained by the DFS client. - This class cannot be inherited. - - - - Initializes a new instance of the class, which acts as a wrapper for a DFS root or link target. - - - Initializes a new instance of the class, which acts as a wrapper for a DFS root or link target. - An initialized instance. - - - The share name of the DFS root target or link target. - A string that represents this instance. - - - The server name of the DFS root target or link target. - - - The share name of the DFS root target or link target. - - - An enum of the DFS root target or link target. - - - Contains a DFS target's priority class and rank. - - - Specifies the priority rank value of the target. The default value is 0, which indicates the highest priority rank within a priority class. - - - A set of bit flags that describe specific properties of a DFS namespace, root, or link. - - - No property flag. - - - DFS_PROPERTY_FLAG_INSITE_REFERRALS - - Scope: Domain roots, stand-alone roots, and links. - If this flag is set at the DFS root, it applies to all links; otherwise, the value of this flag is considered for each individual link. - - - When this flag is set, a DFS referral response from a DFS server for a DFS root or link with the "INSITE" option enabled contains only - those targets which are in the same site as the DFS client requesting the referral. - Targets in the two global priority classes are always returned, regardless of their site location. - - - - - DFS_PROPERTY_FLAG_ROOT_SCALABILITY - - Scope: The entire DFS namespace for a domain-based DFS namespace only. - - - By default, a DFS root target server polls the PDS to detect changes to the DFS metadata. - To prevent heavy server load on the PDC, root scalability can be enabled for the DFS namespace. - Setting this flag will cause the DFS server to poll the nearest domain controller instead of the PDC for DFS metadata changes for the common namespace. - Note that any changes made to the metadata must still occur on the PDC, however. - - - - - DFS_PROPERTY_FLAG_SITE_COSTING - - Scope: The entire DFS namespace for both domain-based and stand-alone DFS namespaces. - - - By default, targets returned in a referral response from a DFS server to a DFS client for a DFS root or link - consists of two groups: targets in the same site as the client, and targets outside the site. - - - If site-costing is enabled for the Active Directory, the response can have more than two groups, - with each group containing targets with the same site cost for the specific DFS client requesting the referral. - The groups are ordered by increasing site cost. For more information about how site-costing is used to prioritize targets. - - - - - DFS_PROPERTY_FLAG_TARGET_FAILBACK - - Scope: Domain-based DFS roots, stand-alone DFS roots, and DFS links. - If this flag is set at the DFS root, it applies to all links; otherwise, the value of this flag is considered for each individual link. - - - When this flag is set, optimal target failback is enabled for V4 DFS clients, - allowing them to fail back to an optimal target after failing over to a non-optimal one. - The target failback setting is provided to the DFS client in a V4 referral response by a DFS server. - - - - - DFS_PROPERTY_FLAG_CLUSTER_ENABLED - Scope: Stand-alone DFS roots and links only. - The DFS root is clustered to provide high availability for storage failover. - - - - DFS_PROPERTY_FLAG_ABDE - Scope: Domain-based DFS roots and stand-alone DFS roots. - When this flag is set, Access-Based Directory Enumeration (ABDE) mode support is enabled on the entire DFS root target share of the DFS namespace. - - - - Defines the set of possible DFS target priority class settings. - - - The priority class is not valid. - - - The middle or "normal" site cost priority class for a DFS target. - - - The highest priority class for a DFS target. Targets assigned this class receive global preference. - - - The highest site cost priority class for a DFS target. Targets assigned this class receive the most preference among targets of the same site cost for a given DFS client. - - - The lowest site cost priority class for a DFS target. Targets assigned this class receive the least preference among targets of the same site cost for a given DFS client. - - - The lowest level of priority class for a DFS target. Targets assigned this class receive the least preference globally. - - - The information level. - - - No specific information level used. - - - Contains information about the shared resource, including the name and type of the resource, and a comment associated with the resource. - - - Contains information about the shared resource, including the name, type, and permissions of the resource, comments associated with the resource, - the maximum number of concurrent connections, the number of current connections, the local path for the resource, and a password for the current connection. - - - - Contains information about the shared resource, including the server name, name of the resource, type, and permissions, - the number of connections, and other pertinent information. - - - - Contains information about the shared resource. - - - NETRESOURCE structure. - ResourceUsage: A set of bit flags describing how the resource can be used. - - Note that this member can be specified only if the member is equal to . - - - RESOURCEUSAGE_CONNECTABLE - The resource is a connectable resource. - The name pointed to by the lpRemoteName member can be passed to the WNetAddConnection function to make a network connection. - - - - RESOURCEUSAGE_CONTAINER - The resource is a container resource. - The name pointed to by the lpRemoteName member can be passed to the WNetAddConnection function to make a network connection. - - - - RESOURCEUSAGE_NOLOCALDEVICE - The resource is not a local device. - - - - RESOURCEUSAGE_SIBLING - The resource is a sibling. - This value is not used by Windows. - - - - RESOURCEUSAGE_ATTACHED - The resource must be attached. - This value specifies that a function to enumerate this resource should fail - if the caller is not authenticated, even if the network permits enumeration without authentication. - - - - RESOURCEUSAGE_ALL - Setting this value is equivalent to setting: , , and . - - - - NETRESOURCE structure. - ResourceType: The type of resource. - - If a network provider cannot distinguish between - print and disk resources, it can enumerate all resources. - - - - - RESOURCETYPE_ANY - ResourceType: All resources. - - If a network provider cannot distinguish between print and disk resources, it can enumerate all resources. - This value cannot be combined with or . - - - - - RESOURCETYPE_DISK - All disk resources. - - - - RESOURCETYPE_PRINT - All print resources. - - - - NETRESOURCE structure. - ResourceScope: The scope of the enumeration. - - - - RESOURCE_CONNECTED - Enumerate all currently connected resources. - The function ignores the parameter. - - - - RESOURCE_GLOBALNET - Enumerate all resources on the network. - - - - RESOURCE_REMEMBERED - Enumerate all remembered (persistent) connections. - The function ignores the parameter. - - - - RESOURCE_RECENT - - - RESOURCE_CONTEXT - Enumerate only resources in the network context of the caller. Specify this value for a Network Neighborhood view. - The function ignores the parameter. - - - - The display options for the network object in a network browsing user interface. - - - RESOURCEDISPLAYTYPE_GENERIC - The method used to display the object does not matter. - - - - RESOURCEDISPLAYTYPE_DOMAIN - The object should be displayed as a domain. - - - - RESOURCEDISPLAYTYPE_SERVER - The object should be displayed as a server. - - - - RESOURCEDISPLAYTYPE_SHARE - The object should be displayed as a share - - - - RESOURCEDISPLAYTYPE_FILE - The object should be displayed as a file. - - - - RESOURCEDISPLAYTYPE_GROUP - The object should be displayed as a group. - - - - RESOURCEDISPLAYTYPE_NETWORK - The object should be displayed as a network. - - - - RESOURCEDISPLAYTYPE_ROOT - The object should be displayed as a logical root for the entire network. - - - - RESOURCEDISPLAYTYPE_SHAREADMIN - The object should be displayed as a administrative share. - - - - RESOURCEDISPLAYTYPE_DIRECTORY - The object should be displayed as a directory. - - - - RESOURCEDISPLAYTYPE_TREE - The object should be displayed as a tree. - - - - RESOURCEDISPLAYTYPE_NDSCONTAINER - The object should be displayed as a Netware Directory Service container. - - - - Used by function WNetUseConnection(); Set of bit flags describing the connection. This parameter can be any combination of the following values. - - - No Connect options are used. - - - This flag instructs the operating system to store the network resource connection. If this bit flag is set, the operating system automatically attempts to restore the connection when the user logs on. The system remembers only successful connections that redirect local devices. It does not remember connections that are unsuccessful or deviceless connections. - - - If this flag is set, the operating system may interact with the user for authentication purposes. - - - This flag instructs the system not to use any default settings for user names or passwords without offering the user the opportunity to supply an alternative. This flag is ignored unless is also set. - - - This flag forces the redirection of a local device when making the connection. - - - If this flag is set, and the operating system prompts for a credential, the credential should be saved by the credential manager. If the credential manager is disabled for the caller's logon session, or if the network provider does not support saving credentials, this flag is ignored. This flag is also ignored unless you set the "CommandLine" flag. - - - Contains the name and type (domain-based or stand-alone) of a DFS namespace. - Minimum supported client: Windows XP with SP1 [desktop apps only] - Minimum supported server: Windows Server 2003 [desktop apps only] - - - - - - DFS_VOLUME_FLAVOR_STANDALONE - Specifies a stand-alone DFS namespace. - - - - DFS_VOLUME_FLAVOR_AD_BLOB - Specifies a domain-based DFS namespace. - - - - DFS_VOLUME_FLAVORS bitmask (0x00000300) - Used to extract the DFS namespace flavor. - - - - The WNetCancelConnection function cancels an existing network connection. You can also call the function to remove remembered network connections that are not currently connected. - - If the function succeeds, the return value is - If the function fails, the return value is a system error code. - - - Minimum supported client: Windows 2000 Professional [desktop apps only] - Minimum supported server: Windows 2000 Server [desktop apps only] - - - - The WNetGetUniversalName function takes a drive-based path for a network resource and returns an information structure that contains a more universal form of the name. - - If the function succeeds, the return value is - If the function fails, the return value is a system error code. - - - Minimum supported client: Windows 2000 Professional [desktop apps only] - Minimum supported server: Windows 2000 Server [desktop apps only] - - - - The WNetUseConnection function creates a connection to a network resource. The function can redirect a local device to a network resource. - - If the function succeeds, the return value is - If the function fails, the return value is a system error code. - - - Minimum supported client: Windows 2000 Professional [desktop apps only] - Minimum supported server: Windows 2000 Server [desktop apps only] - - - - Lists all connections made to a shared resource on the server or all connections established from a particular computer. - - If the function succeeds, the return value is NERR_Success. - If the function fails, the return value is a system error code. - - - If there is more than one user using this connection, then it is possible to get more than one structure for the same connection, but with a different user name. - Administrator, Server or Print Operator, or Power User group membership is required to successfully execute the NetConnectionEnum function. - Minimum supported client: Windows XP [desktop apps only] - Minimum supported server: Windows Server 2003 [desktop apps only] - - - - Forces a resource to close. This function can be used when an error prevents closure by any other means. - - If the function succeeds, the return value is NERR_Success. - If the function fails, the return value is a system error code. - - - You should use NetFileClose with caution because it does not write data cached on the client system to the file before closing the file. - Only members of the Administrators or Server Operators local group can successfully execute the NetFileEnum function. - Minimum supported client: Windows XP [desktop apps only] - Minimum supported server: Windows Server 2003 [desktop apps only] - - - - Returns information about some or all open files on a server, depending on the parameters specified. - - If the function succeeds, the return value is NERR_Success. - If the function fails, the return value is a system error code. - - - Only members of the Administrators or Server Operators local group can successfully execute the NetFileEnum function. - Minimum supported client: Windows XP [desktop apps only] - Minimum supported server: Windows Server 2003 [desktop apps only] - - - - Retrieves information about each (hidden) Server Message Block (SMB) resource/share on a server. - - If the function succeeds, the return value is NERR_Success. - If the function fails, the return value is a system error code. - - - For interactive users (users who are logged on locally to the machine), no special group membership is required to execute the NetShareEnum function. - For non-interactive users, Administrator, Power User, Print Operator, or Server Operator group membership is required to successfully execute the NetShareEnum function at levels 2, 502, and 503. No special group membership is required for level 0 or level 1 calls. - This function applies only to Server Message Block (SMB) shares. - Windows Server 2003 and Windows XP: For all users, Administrator, Power User, Print Operator, or Server Operator group membership is required to successfully execute the NetShareEnum function at levels 2 and 502. - Minimum supported client: Windows XP [desktop apps only] - Minimum supported server: Windows Server 2003 [desktop apps only] - - - - Retrieves information about a particular Server Message Block (SMB) shared resource on a server. - - If the function succeeds, the return value is NERR_Success. - If the function fails, the return value is a system error code. - - - For interactive users (users who are logged on locally to the machine), no special group membership is required to execute the NetShareGetInfo function. - For non-interactive users, Administrator, Power User, Print Operator, or Server Operator group membership is required to successfully execute the NetShareGetInfo function at levels 2, 502, and 503. - This function applies only to Server Message Block (SMB) shares. - Windows Server 2003 and Windows XP: For all users, Administrator, Power User, Print Operator, or Server Operator group membership is required to successfully execute the NetShareGetInfo function at levels 2 and 502. - Minimum supported client: Windows XP [desktop apps only] - Minimum supported server: Windows Server 2003 [desktop apps only] - - - - The NetServerDiskEnum function retrieves a list of disk drives on a server. - - If the function succeeds, the return value is NERR_Success. - If the function fails, the return value is a system error code. - - - The function returns an array of three-character strings (a drive letter, a colon, and a terminating null character). - Only members of the Administrators or Server Operators local group can successfully execute the NetServerDiskEnum function on a remote computer. - Minimum supported client: Windows 2000 Professional [desktop apps only] - Minimum supported server: Windows 2000 Server [desktop apps only] - - - - Enumerates the Distributed File System (DFS) namespaces hosted on a server or DFS links of a namespace hosted by a server. - - If the function succeeds, the return value is NERR_Success. - If the function fails, the return value is a system error code. - - - No special group membership is required for using the NetDfsEnum function. - Minimum supported client: Windows Vista - Minimum supported server: Windows Server 2003 - - - - Retrieves information about a Distributed File System (DFS) root or link from the cache maintained by the DFS client. - - If the function succeeds, the return value is NERR_Success. - If the function fails, the return value is a system error code. - - - No special group membership is required for using the NetDfsGetClientInfo function. - Minimum supported client: Windows Vista - Minimum supported server: Windows Server 2003 - - - - Retrieves information about a specified Distributed File System (DFS) root or link in a DFS namespace. - - If the function succeeds, the return value is NERR_Success. - If the function fails, the return value is a system error code. - - - No special group membership is required for using the NetDfsGetInfo function. - Minimum supported client: Windows Vista - Minimum supported server: Windows Server 2003 - - - - A constant of type DWORD that is set to –1. This value is valid as an input parameter to any method in section 3.1.4 that takes a PreferedMaximumLength parameter. When specified as an input parameter, this value indicates that the method MUST allocate as much space as the data requires. - MSDN "2.2.2.2 MAX_PREFERRED_LENGTH": http://msdn.microsoft.com/en-us/library/cc247107.aspx - - - Contains the name, status, GUID, time-out, property flags, metadata size, DFS target information, link reparse point security descriptor, and a list of DFS targets for a root or link. - Minimum supported client: Windows Vista with SP1 - Minimum supported server: Windows Server 2008 - - - The Universal Naming Convention (UNC) path of a DFS root or link. - - - The comment associated with the DFS root or link. - - - A that specifies a set of bit flags that describe the DFS root or link. - - - Specifies the time-out, in seconds, of the DFS root or link. - - - Specifies the GUID of the DFS root or link. - - - Specifies a set of flags that describe specific properties of a DFS namespace, root, or link. - - - For domain-based DFS namespaces, this member specifies the size of the corresponding Active Directory data blob, in bytes. - For stand-alone DFS namespaces, this field specifies the size of the metadata stored in the registry, - including the key names and value names, in addition to the specific data items associated with them. - This field is valid for DFS roots only. - - - - This member is reserved for system use. - - - Pointer to a SECURITY_DESCRIPTOR structure that specifies a self-relative security descriptor to be associated with the DFS link's reparse point. - This field is valid for DFS links only. - - - - Specifies the number of DFS targets. - - - An array of structures. - - - Contains the priority class and rank of a specific DFS target. - Minimum supported client: Windows Vista - Minimum supported server: Windows Server 2008, Windows Server 2003 with SP1 - - - DFS_TARGET_PRIORITY_CLASS enumeration value that specifies the priority class of the target. - - - Specifies the priority rank value of the target. The default value is 0, which indicates the highest priority rank within a priority class. - - - This member is reserved and must be zero. - - - Contains information about a DFS target, including the DFS target server name and share name as well as the target's state and priority. - Minimum supported client: Windows Vista - Minimum supported server: Windows Server 2008, Windows Server 2003 with SP1 - - - State of the target. - - - The DFS root target or link target server name. - - - The DFS root target or link target share name. - - - DFS_TARGET_PRIORITY structure that contains a DFS target's priority class and rank. - - - Contains information about a network resource. - The NETRESOURCE structure is returned during an enumeration of network resources. - The NETRESOURCE structure is also specified when making or querying - a network connection with calls to various Windows Networking functions. - - - - The scope of the enumeration. - - - The type of resource - - - The display options for the network object in a network browsing user interface. - - - A set of bit flags describing how the resource can be used. - - - If the member is equal to or , - this member is a pointer to a -terminated character string that specifies the name of a local device. - This member is if the connection does not use a device. - - - - If the entry is a network resource, this member is a that specifies the remote network name. - If the entry is a current or persistent connection, member points to - the network name associated with the name pointed to by the member. - The can be characters in length, - and it must follow the network provider's naming conventions. - - - - A that contains a comment supplied by the network provider. - - - A that contains the name of the provider that owns the resource. - This member can be if the provider name is unknown. - - - - Contains the identifier and other pertinent information about files, devices, and pipes. - This structure is only for use with the NetFileEnum function. - Minimum supported client: Windows XP [desktop apps only] - Minimum supported server: Windows Server 2003 [desktop apps only] - - - The identification number assigned to the resource when it is opened. - - - The access permissions associated with the opening application. This member can be one or more of the following values. - - - The number of file locks on the file, device, or pipe. - - - The path of the opened resource. - - - Specifies which user (on servers that have user-level security) or which computer (on servers that have share-level security) opened the resource. - - - Contains the name of a domain-based Distributed File System (DFS) namespace. - This structure is only for use with the NetDfsEnum, NetDfsGetClientInfo, and NetDfsGetInfo functions. - Minimum supported client: Windows XP [desktop apps only] - Minimum supported server: Windows Server 2003 [desktop apps only] - - - The name of a domain-based DFS namespace. - - - Contains the name and type (domain-based or stand-alone) of a DFS namespace. - The DFS functions use the structure to enumerate DFS namespaces hosted on a machine. - Minimum supported client: Windows XP with SP1 [desktop apps only] - Minimum supported server: Windows Server 2003 [desktop apps only] - - - Value that specifies the type of the DFS namespace. This member can be one of the values. - - - The name of a DFS namespace. - This member can have one of the following two formats: - The first format is: \ServerName\DfsName - where ServerName is the name of the root target server that hosts the stand-alone DFS namespace and DfsName is the name of the DFS namespace. - The second format is: - \DomainName\DomDfsName - where DomainName is the name of the domain that hosts the domain-based DFS namespace and DomDfsname is the name of the DFS namespace. - - - - Contains path and name information for a network resource. - - - Identifies a network resource. - - - The name of a network connection. - - - The remaing path. - - - Contains the identification number of a connection, number of open files, connection time, number of users on the connection, and the type of connection. - Minimum supported client: Windows XP [desktop apps only] - Minimum supported server: Windows Server 2003 [desktop apps only] - - - Specifies a connection identification number. - - - A combination of values that specify the type of connection made from the local device name to the shared resource. - - - Specifies the number of files currently open as a result of the connection. - - - Specifies the number of users on the connection. - - - Specifies the number of seconds that the connection has been established. - - - If the server sharing the resource is running with user-level security, the UserName member describes which user made the connection. If the server is running with share-level security, coni1_username describes which computer (computername) made the connection. - Note that Windows does not support share-level security. - - - String that specifies either the share name of the server's shared resource or the computername of the client. The value of this member depends on which name was specified as the qualifier parameter to the NetConnectionEnum function. - - - Contains information about the shared resource. - This structure can be retrieved by calling the NetShareGetInfo function. - Minimum supported client: Windows XP [desktop apps only] - Minimum supported server: Windows Server 2003 [desktop apps only] - - - A bitmask of flags that specify information about the shared resource. - - - Contains information about the shared resource, including the name and type of the resource, and a comment associated with the resource. - Minimum supported client: Windows XP [desktop apps only] - Minimum supported server: Windows Server 2003 [desktop apps only] - - - The name of a shared resource. - - - The type of share. - - - An optional comment about the shared resource. - - - Contains information about the shared resource, including the name, type, and permissions of the resource, comments associated with the resource, - the maximum number of concurrent connections, the number of current connections, the local path for the resource, and a password for the current connection. - - Share information, NT, level 2, requires admin rights to work. - Minimum supported client: Windows XP [desktop apps only] - Minimum supported server: Windows Server 2003 [desktop apps only] - - - The name of a shared resource. - - - The type of share. - - - An optional comment about the shared resource. - - - The shared resource's permissions for servers running with share-level security. - Note that Windows does not support share-level security. This member is ignored on a server running user-level security. - - - The maximum number of concurrent connections that the shared resource can accommodate. - The number of connections is unlimited if the value specified in this member is –1. - - - The number of current connections to the resource. - - - The local path for the shared resource. - For disks, this member is the path being shared. For print queues, this member is the name of the print queue being shared. - - - The share's password (when the server is running with share-level security). - - - Contains information about the shared resource, including the server name, name of the resource, type, and permissions, - the number of connections, and other pertinent information. - - Minimum supported client: Windows XP [desktop apps only] - Minimum supported server: Windows Server 2003 [desktop apps only] - - - The name of a shared resource. - - - The type of share. - - - An optional comment about the shared resource. - - - The shared resource's permissions for servers running with share-level security. - Note that Windows does not support share-level security. This member is ignored on a server running user-level security. - - - The maximum number of concurrent connections that the shared resource can accommodate. - The number of connections is unlimited if the value specified in this member is –1. - - - The number of current connections to the resource. - - - The local path for the shared resource. - For disks, this member is the path being shared. For print queues, this member is the name of the print queue being shared. - - - The share's password (when the server is running with share-level security). - - - The DNS or NetBIOS name of the remote server on which the shared resource resides. - A value of "*" indicates no configured server name. - - - Reserved; must be zero. - - - Specifies the SECURITY_DESCRIPTOR associated with this share. - - - A set of bit flags that describe the storage state of the DFS root or link target. - - - No storage state. - - - DFS_STORAGE_STATE_OFFLINE - The DFS root or link target is offline. - - Windows Server 2003: The state of a root target cannot be set to DFS_STORAGE_STATE_OFFLINE. - - - DFS_STORAGE_STATE_ONLINE - The DFS root or link target is online. - - - - DFS_STORAGE_STATE_ACTIVE - The DFS root or link target is the active target. - - - - A set of bit flags that describe the state of the DFS root or link; - the state of the DFS namespace root cannot be changed. - One flag is set, and one DFS_VOLUME_FLAVOR flag is set. - - - - No volume state. - - - DFS_VOLUME_STATE_OK - The specified DFS root or link is in the normal state. - - - - DFS_VOLUME_STATE_INCONSISTENT - The internal DFS database is inconsistent with the specified DFS root or link. - Attempts to repair the inconsistency have failed. - - - - DFS_VOLUME_STATE_OFFLINE - The specified DFS root or link is offline or unavailable. - - - - DFS_VOLUME_STATE_ONLINE - The specified DFS root or link is available. - - - - DFS_VOLUME_FLAVOR_STANDALONE - The system sets this flag if the root is associated with a stand-alone DFS namespace. - - Windows XP: This value is not supported. - - - DFS_VOLUME_FLAVOR_AD_BLOB - The system sets this flag if the root is associated with a domain-based DFS namespace. - - Windows XP: This value is not supported. - - - A set of bit flags that describe the permissions for the shared resource's on servers running with share-level security. - Note that Windows does not support share-level security. This member is ignored on a server running user-level security. - - - No permissions. - - - ACCESS_READ - Permission to read data from a resource and, by default, to execute the resource. - - - - ACCESS_WRITE - Permission to write data to the resource. - - - - ACCESS_CREATE - Permission to create an instance of the resource (such as a file); data can be written to the resource as the resource is created. - - - - ACCESS_EXEC - Permission to execute the resource. - - - - ACCESS_DELETE - Permission to delete the resource. - - - - ACCESS_ATRIB - Permission to modify the resource's attributes, such as the date and time when a file was last modified. - - - - ACCESS_PERM - Permission to modify the permissions (read, write, create, execute, and delete) assigned to a resource for a user or application. - - - - ACCESS_ALL - Permission to read, write, create, execute, and delete resources, and to modify their attributes and permissions. - - - - Contains information about the shared resource. - - Minimum supported client: Windows XP [desktop apps only] - Minimum supported server: Windows Server 2003 [desktop apps only] - - - - No specific resource type used. - - - SHI1005_FLAGS_DFS - The specified share is present in a DFS tree structure. This flag cannot be set with NetShareSetInfo. - - - - SHI1005_FLAGS_DFS_ROOT - The specified share is the root volume in a DFS tree structure. This flag cannot be set with NetShareSetInfo. - - - - SHI1005_FLAGS_RESTRICT_EXCLUSIVE_OPENS - The specified share disallows exclusive file opens, where reads to an open file are disallowed. - - - - SHI1005_FLAGS_FORCE_SHARED_DELETE - Shared files in the specified share can be forcibly deleted. - - - - SHI1005_FLAGS_ALLOW_NAMESPACE_CACHING - Clients are allowed to cache the namespace of the specified share. - - - - SHI1005_FLAGS_ACCESS_BASED_DIRECTORY_ENUM - The server will filter directory entries based on the access permissions that the user on the client computer has for the server on which the files reside. - Only files for which the user has read access and directories for which the user has FILE_LIST_DIRECTORY access will be returned. If the user has SeBackupPrivilege, all available information will be returned. - - This flag is supported only on servers running Windows Server 2003 with SP1 or later. - - - SHI1005_FLAGS_FORCE_LEVELII_OPLOCK - Prevents exclusive caching modes that can cause delays for highly shared read-only data. - - This flag is supported only on servers running Windows Server 2008 R2 or later. - - - SHI1005_FLAGS_ENABLE_HASH - Enables server-side functionality needed for peer caching support. - Clients on high-latency or low-bandwidth connections can use alternate methods to retrieve data from peers if available, instead of sending requests to the server. - This is only supported on shares configured for manual caching (CSC_CACHE_MANUAL_REINT). - This flag is supported only on servers running Windows Server 2008 R2 or later. - - - SHI1005_FLAGS_ENABLE_CA (0X4000) - Enables server-side functionality needed for peer caching support. Clients on high-latency or low-bandwidth connections can use alternate methods to retrieve data from peers if available, instead of sending requests to the server. This is only supported on shares configured for manual caching (CSC_CACHE_MANUAL_REINT). - Windows 7, Windows Server 2008 R2, Windows Vista, Windows Server 2008, and Windows Server 2003: This flag is not supported. - - - The type of the shared resource. - MSDN: 2.2.2.4 Share Types - http://msdn.microsoft.com/en-us/library/cc247110.aspx - - - - Disk drive. - - - Print queue. - - - Communication device. - - - Interprocess communication (IPC). - - - A cluster share. - - - A Scale-Out cluster share. - - - A DFS share in a cluster. - - - Special share reserved for interprocess communication (IPC$) or remote administration of the server (ADMIN$). - Can also refer to administrative shares such as C$, D$, E$, and so forth. - - - - A temporary share that is not persisted for creation each time the file server initializes. - - - Retriev all known - - - Provides static methods to retrieve network resource information from a local- or remote host. - - - Enumerates open resources from the local host. - open resources from the local host. - - - - - Enumerates open resources from the specified host. - open resources from the specified . - - - The DNS or NetBIOS name of the remote server. refers to the local host. - - This parameter may be . Enumerates only resources that have the value of the basepath parameter as a prefix. - (A prefix is the portion of a path that comes before a backslash.) - - - This parameter may be . The name of the user or the name of the connection; If - does not begin with two backslashes ("\\") it indicates the name of the user. If begins with two - backslashes ("\\") it indicates the name of the connection. - - suppress any Exception that might be thrown as a result from a failure, such as unavailable resources. - - - >Enumerates open resources from the specified host. - open resources from the specified . - - - The DNS or NetBIOS name of the remote server. refers to the local host. - - This parameter may be . Enumerates only resources that have the value of the basepath parameter as a prefix. - (A prefix is the portion of a path that comes before a backslash.) - - - This parameter may be . The name of the user or the name of the connection; If - does not begin with two backslashes ("\\") it indicates the name of the user. If begins with two - backslashes ("\\") it indicates the name of the connection. - - suppress any Exception that might be thrown as a result from a failure, such as unavailable resources. - - - Enumerates drives from the local host. - drives from the local host. - - - - Enumerates local drives from the specified host. - drives from the specified host. - - The DNS or NetBIOS name of the remote server. refers to the local host. - - suppress any Exception that might be thrown as a result from a failure, - such as unavailable resources. - - - - Enumerates local drives from the specified host. - drives from the specified host. - - - The DNS or NetBIOS name of the remote server. refers to the local host. - - suppress any Exception that might be thrown as a result from a failure, - such as unavailable resources. - - - - Enumerates open connections from the local host. - connection information from the local host. - - - - - Enumerates open connections from the specified host. - connection information from the specified . - - - The DNS or NetBIOS name of the remote server. refers to the local host. - The name of the Server Message Block (SMB) share. - - suppress any Exception that might be thrown as a result from a failure, - such as unavailable resources. - - - - Enumerates Server Message Block (SMB) shares from the local host. - shares from the specified host. - This method also enumerates hidden shares. - - - Enumerates Server Message Block (SMB) shares from the local host. - shares from the specified host. - This method also enumerates hidden shares. - suppress any Exception that might be thrown as a result from a failure, such as unavailable resources. - - - Enumerates Server Message Block (SMB) shares from the local host. - shares from the specified host. - This method also enumerates hidden shares. - The type of the shared resource to retrieve. - suppress any Exception that might be thrown as a result from a failure, such as unavailable resources. - - - Enumerates Server Message Block (SMB) shares from the specified . - shares from the specified host. - This method also enumerates hidden shares. - The DNS or NetBIOS name of the specified host. - - - Enumerates Server Message Block (SMB) shares from the specified . - shares from the specified host. - This method also enumerates hidden shares. - The DNS or NetBIOS name of the specified host. - suppress any Exception that might be thrown as a result from a failure, such as unavailable resources. - - - Enumerates Server Message Block (SMB) shares from the specified . - shares from the specified host. - This method also enumerates hidden shares. - The DNS or NetBIOS name of the specified host. - The type of the shared resource to retrieve. - suppress any Exception that might be thrown as a result from a failure, such as unavailable resources. - - - Gets the host and share path name for the given . - The share in the format: \\host\share. - The host and share path. For example, if is: "\\SERVER001\C$\WINDOWS\System32", - its is returned as string[0] = "SERVER001" and string[1] = "\C$\WINDOWS\System32". - If the conversion from local path to UNC path fails, is returned. - - - - Retrieves information about the Server Message Block (SMB) share as defined on the specified host. - A class, or on failure or when not available, and is . - The share in the format: \\host\share. - to suppress any Exception that might be thrown as a result from a failure, such as unavailable resources. - - - Retrieves information about the Server Message Block (SMB) share as defined on the specified host. - A class, or on failure or when not available, and is . - One of the options. - The share in the format: \\host\share. - to suppress any Exception that might be thrown as a result from a failure, such as unavailable resources. - - - Retrieves information about the Server Message Block (SMB) share as defined on the specified host. - A class, or on failure or when not available, and is . - The DNS or NetBIOS name of the specified host. - The name of the Server Message Block (SMB) share. - to suppress any Exception that might be thrown as a result from a failure, such as unavailable resources. - - - Retrieves information about the Server Message Block (SMB) share as defined on the specified host. - A class, or on failure or when not available, and is . - One of the options. - A string that specifies the DNS or NetBIOS name of the specified . - A string that specifies the name of the Server Message Block (SMB) share. - to suppress any Exception that might be thrown as a result from a failure, such as unavailable resources. - - - Enumerates open connections from the specified host. - connection information from the specified . - - - The DNS or NetBIOS name of the remote server. refers to the local host. - The name of the Server Message Block (SMB) share. - suppress any Exception that might be thrown as a result from a failure, such as unavailable resources. - - - Enumerates Server Message Block (SMB) shares from a local or remote host. - shares from the specified host. - This method also enumerates hidden shares. - - - The DNS or NetBIOS name of the specified host. - The type of the shared resource to retrieve. - suppress any Exception that might be thrown as a result from a failure, such as unavailable resources. - - - Gets the structure of a Server Message Block (SMB) share. - A class, or on failure or when not available, and is . - - One of the options. - A string that specifies the DNS or NetBIOS name of the specified . - A string that specifies the name of the Server Message Block (SMB) share. - to suppress any Exception that might be thrown as a result from a failure, such as unavailable resources. - - - Enumerates the DFS Links from a DFS namespace. - of DFS namespaces. - - - - The Universal Naming Convention (UNC) path of a DFS root or link. - - - Enumerates the DFS namespaces from the local host. - of DFS Root namespaces from the local host. - - - - - Enumerates the DFS namespaces from a host. - of DFS Root namespaces from a host. - - - The DNS or NetBIOS name of a host. - suppress any Exception that might be thrown as a result from a failure, such as unavailable resources. - - - Enumerates the DFS namespaces from the domain. - of DFS Root namespaces from the domain. - - - - - Enumerates the DFS namespaces from a domain. - of DFS Root namespaces from a domain. - - - A domain name. - suppress any Exception that might be thrown as a result from a failure, such as unavailable resources. - - - Gets information about a DFS root or link from the cache maintained by the DFS client. - A instance. - - - The Universal Naming Convention (UNC) path of a DFS root or link. - - - Gets information about a DFS root or link from the cache maintained by the DFS client. - A instance. - - - The Universal Naming Convention (UNC) path of a DFS root or link. - The name of the DFS root target or link target server. - The name of the share corresponding to the DFS root target or link target. - - - Gets information about a specified DFS root or link in a DFS namespace. - A instance. - - - The Universal Naming Convention (UNC) path of a DFS root or link. - - - Enumerates the DFS namespaces from a host. - of DFS Root namespaces from a host. - - - - The DNS or NetBIOS name of a host. - suppress any Exception that might be thrown as a result from a failure, such as unavailable resources. - - - Enumerates the DFS namespaces from a domain. - of DFS Root namespaces from a domain. - - - - A domain name. - suppress any Exception that might be thrown as a result from a failure, such as unavailable resources. - - - Retrieves information about a specified DFS root or link in a DFS namespace. - A instance. - - - - - retrieves information about a Distributed File System (DFS) root or link from the cache maintained by the - DFS client. When retrieves information about a specified Distributed File System (DFS) root or link in a - DFS namespace. - - The Universal Naming Convention (UNC) path of a DFS root or link. - - The name of the DFS root target or link target server. If is , this - parameter is always . - - - The name of the share corresponding to the DFS root target or link target. If is - , this parameter is always . - - - - Creates a connection to a network resource. The function can redirect a local device to a network resource. - If is or string.Empty, returns the last available drive letter, otherwise. - - The name of a local device to be redirected, such as "F:". When is or - string.Empty, the last available drive letter will be used. Letters are assigned beginning with Z:, then Y: and so on. - - The network resource to connect to. The string can be up to MAX_PATH characters in length. - - - Creates a connection to a network resource. The function can redirect a local device to a network resource. - If is or string.Empty, returns the last available drive letter, null otherwise. - - The name of a local device to be redirected, such as "F:". When is or - string.Empty, the last available drive letter will be used. Letters are assigned beginning with Z:, then Y: and so on. - - The network resource to connect to. The string can be up to MAX_PATH characters in length. - - The user name for making the connection. If is , the function uses the default - user name. (The user context for the process provides the default user name) - - - The password to be used for making the network connection. If is , the function - uses the current default password associated with the user specified by . - - always pops-up an authentication dialog box. - successful network resource connections will be saved. - - When the operating system prompts for a credential, the credential should be saved by the credential manager when true. - - - - Creates a connection to a network resource. The function can redirect a local device to a network resource. - If is or string.Empty, returns the last available drive letter, null otherwise. - - The name of a local device to be redirected, such as "F:". When is or - string.Empty, the last available drive letter will be used. Letters are assigned beginning with Z:, then Y: and so on. - - The network resource to connect to. The string can be up to MAX_PATH characters in length. - - An instance of which provides credentials for password-based authentication schemes such as basic, - digest, NTLM, and Kerberos authentication. - - always pops-up an authentication dialog box. - successful network resource connections will be saved. - - When the operating system prompts for a credential, the credential should be saved by the credential manager when true. - - - - Creates a connection to a network resource. The function can redirect a local device to a network resource. - If is or string.Empty, returns the last available drive letter, null otherwise. - Handle to a window that the provider of network resources can use as an owner window for dialog boxes. - - The name of a local device to be redirected, such as "F:". When is or - string.Empty, the last available drive letter will be used. Letters are assigned beginning with Z:, then Y: and so on. - - The network resource to connect to. The string can be up to MAX_PATH characters in length. - - The user name for making the connection. If is , the function uses the default - user name. (The user context for the process provides the default user name) - - - The password to be used for making the network connection. If is , the function - uses the current default password associated with the user specified by . - - always pops-up an authentication dialog box. - successful network resource connections will be saved. - - When the operating system prompts for a credential, the credential should be saved by the credential manager when true. - - - - Creates a connection to a network resource. The function can redirect a local device to a network resource. - If is or string.Empty, returns the last available drive letter, null otherwise. - Handle to a window that the provider of network resources can use as an owner window for dialog boxes. - - The name of a local device to be redirected, such as "F:". When is or - string.Empty, the last available drive letter will be used. Letters are assigned beginning with Z:, then Y: and so on. - - The network resource to connect to. The string can be up to MAX_PATH characters in length. - - An instance of which provides credentials for password-based authentication schemes such as basic, - digest, NTLM, and Kerberos authentication. - - always pops-up an authentication dialog box. - successful network resource connections will be saved. - - When the operating system prompts for a credential, the credential should be saved by the credential manager when true. - - - - Creates a connection to a network resource. - - A network resource to connect to, for example: \\server or \\server\share. - - - Creates a connection to a network resource. - - A network resource to connect to, for example: \\server or \\server\share. - - The user name for making the connection. If is , the function uses the default - user name. (The user context for the process provides the default user name) - - - The password to be used for making the network connection. If is , the function - uses the current default password associated with the user specified by . - - always pops-up an authentication dialog box. - successful network resource connections will be saved. - - When the operating system prompts for a credential, the credential should be saved by the credential manager when true. - - - - Creates a connection to a network resource. - A network resource to connect to, for example: \\server or \\server\share. - An instance of which provides credentials for password-based authentication schemes such as basic, digest, NTLM, and Kerberos authentication. - always pops-up an authentication dialog box. - successful network resource connections will be saved. - When the operating system prompts for a credential, the credential should be saved by the credential manager when true. - - - - - Creates a connection to a network resource. - - Handle to a window that the provider of network resources can use as an owner window for dialog boxes. - A network resource to connect to, for example: \\server or \\server\share. - - The user name for making the connection. If is , the function uses the default - user name. (The user context for the process provides the default user name) - - - The password to be used for making the network connection. If is , the function - uses the current default password associated with the user specified by . - - always pops-up an authentication dialog box. - successful network resource connections will be saved. - When the operating system prompts for a credential, the credential should be saved by the credential manager when true. - - - Creates a connection to a network resource. - - Handle to a window that the provider of network resources can use as an owner window for dialog boxes. - A network resource to connect to, for example: \\server or \\server\share. - An instance of which provides credentials for password-based authentication schemes such as basic, digest, NTLM, and Kerberos authentication. - always pops-up an authentication dialog box. - successful network resource connections will be saved. - When the operating system prompts for a credential, the credential should be saved by the credential manager when true. - - - Cancels an existing network connection. You can also call the function to remove remembered network connections that are not currently connected. - The name of a local device to be disconnected, such as "F:". - - - Cancels an existing network connection. You can also call the function to remove remembered network connections that are not currently connected. - The name of a local device to be disconnected, such as "F:". - - Specifies whether the disconnection should occur if there are open files or jobs on the connection. - If this parameter is , the function fails if there are open files or jobs. - - successful removal of network resource connections will be saved. - - - Cancels an existing network connection. You can also call the function to remove remembered network connections that are not currently connected. - A network resource to disconnect from, for example: \\server or \\server\share. - - - Cancels an existing network connection. You can also call the function to remove remembered network connections that are not currently connected. - A network resource to disconnect from, for example: \\server or \\server\share. - - Specifies whether the disconnection should occur if there are open files or jobs on the connection. - If this parameter is , the function fails if there are open files or jobs. - - successful removal of network resource connections will be saved. - - - Connects to/disconnects from a network resource. The function can redirect a local device to a network resource. - If is or string.Empty, returns the last available drive letter, null otherwise. - - - The . - - - Return the host name in UNC format, for example: \\hostname. - The unc name. - - - Return the host name in UNC format, for example: \\hostname. - Name of the computer. - The unc name. - - - Structure is used to pass additional data to the Win32 function. - - - This method uses level to retieve full REMOTE_NAME_INFO structure. - A structure. - AlphaFS regards network drives created using SUBST.EXE as invalid. - - - - - The local path with drive name. - suppress any Exception that might be thrown as a result from a failure, such as unavailable resources. - - - Handle to a window that the provider of network resources can use as an owner window for dialog boxes. - - - The name of a local device to be redirected, such as "F:". When is or string.Empty, the last available drive letter will be used. Letters are assigned beginning with Z:, then Y: and so on. - - - A network resource to connect to/disconnect from, for example: \\server or \\server\share - - - A instance. Use either this or the combination of and . - - - The user name for making the connection. If is , the function uses the default user name. (The user context for the process provides the default user name) - - - The password to be used for making the network connection. If is , the function uses the current default password associated with the user specified by . - - - always pops-up an authentication dialog box. - - - successful network resource connections will be saved. - - - When the operating system prompts for a credential, the credential should be saved by the credential manager when true. - - - indicates that the operation concerns a drive mapping. - - - indicates that the operation needs to disconnect from the network resource, otherwise connect. - - - Used to create a temporary connection to a network resource that will be disconnected once this instance is disposed. - - - Creates a temporary connection to a network resource. The function can redirect a local device to a network resource, using the current user credentials. - The network resource to connect to. The string can be up to MAX_PATH characters in length. - - - Creates a temporary connection to a network resource. The function can redirect a local device to a network resource, using a user name and password. - The network resource to connect to. The string can be up to MAX_PATH characters in length. - - The user name for making the connection. If is , the function uses the default - user name. (The user context for the process provides the default user name) - - - The password to be used for making the network connection. If is , the function - uses the current default password associated with the user specified by . - - always pops-up an authentication dialog box. - - - Creates a temporary connection to a network resource. The function can redirect a local device to a network resource, can be supplied. - The network resource to connect to. The string can be up to MAX_PATH characters in length. - An instance of which provides credentials for password-based authentication schemes such as basic, digest, NTLM, and Kerberos authentication. - always pops-up an authentication dialog box. - - - class destructor. - - - Releases all resources used by the class. - - - Returns the last available drive letter used for this connection. - A string that represents this instance. - - - The last available drive letter used for this connection. - The last available drive letter used for this connection. - - - The path originally specified by the user. - The path originally specified by the user. - - - Contains the identification number of a connection, number of open files, connection time, number of users on the connection, and the type of connection. - - - Create a OpenConnectionInfo instance. - - - Returns the full path to the share. - A string that represents this instance. - - - The local or remote Host. - - - Specifies a connection identification number. - - - The type of share. - - - Specifies the number of files currently open as a result of the connection. - - - Specifies the number of users on the connection. - - - Specifies the number of seconds that the connection has been established. - - - If the server sharing the resource is running with user-level security, the UserName member describes which user made the connection. If the server is running with share-level security, coni1_username describes which computer (computername) made the connection. - - - String that specifies either the share name of the server's shared resource or the computername of the client. The value of this member depends on which name was specified as the qualifier parameter to the NetConnectionEnum function. - - - Contains the identification number and other pertinent information about files, devices, and pipes. This class cannot be inherited. - - - Create a OpenResourceInfo instance. - - - Forces the open resource to close. - You should this method with caution because it does not write data cached on the client system to the file before closing the file. - - - Returns the full path to the share. - A string that represents this instance. - - - The local or remote Host. - - - The identification number assigned to the resource when it is opened. - - - The path of the opened resource. - - - The access permissions associated with the opening application. This member can be one or more of the following values. - - - The number of file locks on the file, device, or pipe. - - - Specifies which user (on servers that have user-level security) or which computer (on servers that have share-level security) opened the resource. - - - Contains information about Server Message Block (SMB) shares. This class cannot be inherited. - - - Creates a instance. - A host to retrieve shares from. - One of the options. - A or instance. - - - Returns the full path to the share. - A string that represents this instance. - - - The number of current connections to the resource. - - - The instance associated with this share. - - - Returns the full UNC path to the share. - - - The maximum number of concurrent connections that the shared resource can accommodate. - The number of connections is unlimited if the value specified in this member is –1. - - - The name of a shared resource. - - - The share's password (when the server is running with share-level security). - - - The local path for the shared resource. - For disks, this member is the path being shared. For print queues, this member is the name of the print queue being shared. - - - The shared resource's permissions for servers running with share-level security. - Note that Windows does not support share-level security. This member is ignored on a server running user-level security. - - - An optional comment about the shared resource. - - - Specifies the SECURITY_DESCRIPTOR associated with this share. - - - A pointer to a string that specifies the DNS or NetBIOS name of the remote server on which the shared resource resides. - A value of "*" indicates no configured server name. - - - The type of share. - - - The type of share resource. - - - The structure level for the ShareInfo instance. - - - Static class providing access to information about the operating system under which the assembly is executing. - - - A set of flags that describe the named Windows versions. - The values of the enumeration are ordered. A later released operating system version has a higher number, so comparisons between named versions are meaningful. - - - A Windows version earlier than Windows 2000. - - - Windows 2000 (Server or Professional). - - - Windows XP. - - - Windows Server 2003. - - - Windows Vista. - - - Windows Server 2008. - - - Windows 7. - - - Windows Server 2008 R2. - - - Windows 8. - - - Windows Server 2012. - - - Windows 8.1. - - - Windows Server 2012 R2 - - - Windows 10 - - - Windows Server - - - A later version of Windows than currently installed. - - - A set of flags to indicate the current processor architecture for which the operating system is targeted and running. - - - PROCESSOR_ARCHITECTURE_INTEL - The system is running a 32-bit version of Windows. - - - - PROCESSOR_ARCHITECTURE_IA64 - The system is running on a Itanium processor. - - - - PROCESSOR_ARCHITECTURE_AMD64 - The system is running a 64-bit version of Windows. - - - - PROCESSOR_ARCHITECTURE_UNKNOWN - Unknown architecture. - - - - Gets a value indicating whether the operating system is a server operating system. - if the current operating system is a server operating system; otherwise, . - - - Gets a value indicating whether the current process is running under WOW64. - if the current process is running under WOW64; otherwise, . - - - Gets the numeric version of the operating system. - The numeric version of the operating system. - - - Gets the named version of the operating system. - The named version of the operating system. - - - Gets the processor architecture for which the operating system is targeted. - The processor architecture for which the operating system is targeted. - If running under WOW64 this will return a 32-bit processor. Use to determine if this is the case. - - - Gets the version of the service pack currently installed on the operating system. - The version of the service pack currently installed on the operating system. - Only the and fields are used. - - - Determines whether the operating system is of the specified version or later. - if the operating system is of the specified or later; otherwise, . - The lowest version for which to return true. - - - Determines whether the operating system is of the specified version or later, allowing specification of a minimum service pack that must be installed on the lowest version. - if the operating system matches the specified with the specified service pack, or if the operating system is of a later version; otherwise, . - The minimum required version. - The major version of the service pack that must be installed on the minimum required version to return true. This can be 0 to indicate that no service pack is required. - - - The RtlGetVersion routine returns version information about the currently running operating system. - RtlGetVersion returns STATUS_SUCCESS. - Available starting with Windows 2000. - - - Retrieves information about the current system to an application running under WOW64. - If the function is called from a 64-bit application, it is equivalent to the GetSystemInfo function. - - This function does not return a value. - To determine whether a Win32-based application is running under WOW64, call the function. - Minimum supported client: Windows XP [desktop apps | Windows Store apps] - Minimum supported server: Windows Server 2003 [desktop apps | Windows Store apps] - - - Determines whether the specified process is running under WOW64. - - If the function succeeds, the return value is a nonzero value. - If the function fails, the return value is zero. To get extended error information, call GetLastError. - - Minimum supported client: Windows Vista, Windows XP with SP2 [desktop apps only] - Minimum supported server: Windows Server 2008, Windows Server 2003 with SP1 [desktop apps only] - - - - A strongly-typed resource class, for looking up localized strings, etc. - - - - - Returns the cached ResourceManager instance used by this class. - - - - - Overrides the current thread's CurrentUICulture property for all - resource lookups using this strongly typed resource class. - - - - - Looks up a localized string similar to Buffer is not large enough for the requested operation.. - - - - - Looks up a localized string similar to Cannot create directory.. - - - - - Looks up a localized string similar to Cannot determine Copy or Move action.. - - - - - Looks up a localized string similar to Destination buffer not large enough for the requested operation.. - - - - - Looks up a localized string similar to The device is not ready.. - - - - - Looks up a localized string similar to Incorrectly implemented function attempting to generate exception from successful operation. - . - - - - - Looks up a localized string similar to The specified file is hidden: [{0}]. - - - - - Looks up a localized string similar to The file or directory already exists.. - - - - - Looks up a localized string similar to The handle is closed.. - - - - - Looks up a localized string similar to The handle is invalid.. - - - - - Looks up a localized string similar to The handle is invalid. Win32Error: [{0}]. - - - - - Looks up a localized string similar to Creating hard-links on non-NTFS partitions is not supported.. - - - - - Looks up a localized string similar to Illegal characters: [{0}] in path.. - - - - - Looks up a localized string similar to An attempt to set an invalid file attribute failed.. - - - - - Looks up a localized string similar to Invalid stream name.. - - - - - Looks up a localized string similar to Invalid Subpath. - - - - - Looks up a localized string similar to Invalid transaction request.. - - - - - Looks up a localized string similar to Count cannot be negative.. - - - - - Looks up a localized string similar to Destination offset cannot be negative.. - - - - - Looks up a localized string similar to Length cannot be negative.. - - - - - Looks up a localized string similar to Lock length cannot be negative.. - - - - - Looks up a localized string similar to Offset cannot be negative.. - - - - - Looks up a localized string similar to This stream does not support seeking.. - - - - - Looks up a localized string similar to The file or directory is not a reparse point.. - - - - - Looks up a localized string similar to Argument is not a valid Volume GUID.. - - - - - Looks up a localized string similar to Path is a zero-length string or contains only white space.. - - - - - Looks up a localized string similar to Privilege name cannot be empty.. - - - - - Looks up a localized string similar to Incomplete header read.. - - - - - Looks up a localized string similar to This method requires Windows Vista or higher.. - - - - - Looks up a localized string similar to Invalid security descriptor returned from system.. - - - - - Looks up a localized string similar to Source offset and length outside the bounds of the array. - - - - - Looks up a localized string similar to The target directory is a file, not a directory: [{0}]. - - - - - Looks up a localized string similar to The target file is a directory, not a file: [{0}]. - - - - - Looks up a localized string similar to Transaction already aborted.. - - - - - Looks up a localized string similar to Transaction already committed.. - - - - - Looks up a localized string similar to Invalid transaction object.. - - - - - Looks up a localized string similar to Transaction not active.. - - - - - Looks up a localized string similar to Transaction not requested.. - - - - - Looks up a localized string similar to Transactional conflict.. - - - - - Looks up a localized string similar to Network share path should match the format: \\server\share. - - - - - Looks up a localized string similar to Backup FileStream Unlock Position must not be negative.. - - - - - Looks up a localized string similar to The given path's format is not supported: [{0}]. - - - - Represents a block of native memory of a specified size allocated using the LocalAlloc function from Kernel32.dll. - - - Creates new instance with zero IntPtr. - - - Initializes a new instance of the class allocating the specified number of bytes of unmanaged memory. - The capacity. - - - Called when object is disposed or finalized. - - - Base class for classes representing a block of unmanaged memory. - - - Initializes a new instance of the specifying the allocated capacity of the memory block. - The capacity. - - - Gets the capacity. Only valid if this instance was created using a constructor that specifies the size, - it is not correct if this handle was returned by a native method using p/invoke. - - - - Copies data from a one-dimensional, managed 8-bit unsigned integer array to the unmanaged memory pointer referenced by this instance. - The one-dimensional array to copy from. - The zero-based index into the array where Copy should start. - The number of array elements to copy. - - - Copies data from an unmanaged memory pointer to a managed 8-bit unsigned integer array. - The array to copy to. - The zero-based index in the destination array where copying should start. - The number of array elements to copy. - - - Copies data from this unmanaged memory pointer to a managed 8-bit unsigned integer array. - The offset in the buffer to start copying from. - The array to copy to. - The zero-based index in the destination array where copying should start. - The number of array elements to copy. - - - Marshals data from a managed object to an unmanaged block of memory. - - - Marshals data from an unmanaged block of memory to a newly allocated managed object of the specified type. - A managed object containing the data pointed to by the ptr parameter. - - - Allocates a managed System.String and copies a specified number of characters from an unmanaged Unicode string into it. - A managed string that holds a copy of the unmanaged string if the value of the ptr parameter is not null; otherwise, this method returns null. - - - Allocates a managed System.String and copies all characters up to the first null character from an unmanaged Unicode string into it. - A managed string that holds a copy of the unmanaged string if the value of the ptr parameter is not null; otherwise, this method returns null. - - - Implements an ISO-3309 compliant 64-bit CRC hash algorithm. - - - Initializes a new instance of - - - Initializes a new instance of - The polynomial. - The seed. - - - - Initializes an implementation of the - class. - - - - When overridden in a derived class, routes data written to the object into the hash algorithm for computing the hash. - The input to compute the hash code for.. - The offset into the byte array from which to begin using data. - The number of bytes in the byte array to use as data. - - - - Finalizes the hash computation after the last data is processed by the cryptographic stream - object. - - - This method finalizes any partial computation and returns the correct hash value for the data - stream. - - - - Gets the size, in bits, of the computed hash code. - The size, in bits, of the computed hash code. - - - Calculates the hash. - The seed. - The table. - The buffer. - The start. - The size. - The calculated hash. - - - Int 64 to big endian bytes. - The value. - A byte[]. - - - Initializes the table. - The polynomial. - An ulong[]. - - - Creates a table. - The polynomial. - A new array of ulong. - - - Enum containing the supported hash types. - - - CRC-32 (Cyclic Redundancy Check) - - - CRC-64 ISO-3309 compliant. - - - MD5 (Message digest) - - - RIPEMD-160 is a 160-bit cryptographic hash function. It is intended for use as a replacement for the 128-bit hash functions MD4, MD5, and RIPEMD. - - - SHA-1 (Secure Hash Algorithm) - - - SHA-256 (Secure Hash Algorithm) - - - SHA-384 (Secure Hash Algorithm) - - - SHA-512 (Secure Hash Algorithm) - - - The ObjectType (SE_OBJECT_TYPE) enumeration contains values that correspond to the types of Windows objects that support security. - The functions, such as GetSecurityInfo and SetSecurityInfo, that set and retrieve the security information of an object, use these values to indicate the type of object. - - - - Unknown object type. - - - Indicates a file or directory. The name string that identifies a file or directory object can be in one of the following formats: - A relative path, such as FileName.dat or ..\FileName - An absolute path, such as FileName.dat, C:\DirectoryName\FileName.dat, or G:\RemoteDirectoryName\FileName.dat. - A UNC name, such as \\ComputerName\ShareName\FileName.dat. - - - - Indicates a Windows service. A service object can be a local service, such as ServiceName, or a remote service, such as \\ComputerName\ServiceName. - - - Indicates a printer. A printer object can be a local printer, such as PrinterName, or a remote printer, such as \\ComputerName\PrinterName. - - - Indicates a registry key. A registry key object can be in the local registry, such as CLASSES_ROOT\SomePath or in a remote registry, such as \\ComputerName\CLASSES_ROOT\SomePath. - The names of registry keys must use the following literal strings to identify the predefined registry keys: "CLASSES_ROOT", "CURRENT_USER", "MACHINE", and "USERS". - - - - Indicates a network share. A share object can be local, such as ShareName, or remote, such as \\ComputerName\ShareName. - - - Indicates a local kernel object. The GetSecurityInfo and SetSecurityInfo functions support all types of kernel objects. - The GetNamedSecurityInfo and SetNamedSecurityInfo functions work only with the following kernel objects: semaphore, event, mutex, waitable timer, and file mapping. - - - Indicates a window station or desktop object on the local computer. You cannot use GetNamedSecurityInfo and SetNamedSecurityInfo with these objects because the names of window stations or desktops are not unique. - - - Indicates a directory service object or a property set or property of a directory service object. - The name string for a directory service object must be in X.500 form, for example: CN=SomeObject,OU=ou2,OU=ou1,DC=DomainName,DC=CompanyName,DC=com,O=internet - - - Indicates a directory service object and all of its property sets and properties. - - - Indicates a provider-defined object. - - - Indicates a WMI object. - - - Indicates an object for a registry entry under WOW64. - - - The SECURITY_DESCRIPTOR_CONTROL data type is a set of bit flags that qualify the meaning of a security descriptor or its components. - Each security descriptor has a Control member that stores the SECURITY_DESCRIPTOR_CONTROL bits. - - - - - - SE_OWNER_DEFAULTED (0x0001) - Indicates an SD with a default owner security identifier (SID). You can use this bit to find all of the objects that have default owner permissions set. - - - SE_GROUP_DEFAULTED (0x0002) - Indicates an SD with a default group SID. You can use this bit to find all of the objects that have default group permissions set. - - - SE_DACL_PRESENT (0x0004) - Indicates an SD that has a discretionary access control list (DACL). If this flag is not set, or if this flag is set and the DACL is NULL, the SD allows full access to everyone. - - - SE_DACL_DEFAULTED (0x0008) - Indicates an SD with a default DACL. For example, if an object creator does not specify a DACL, the object receives the default DACL from the access token of the creator. This flag can affect how the system treats the DACL, with respect to access control entry (ACE) inheritance. The system ignores this flag if the SE_DACL_PRESENT flag is not set. - - - SE_SACL_PRESENT (0x0010) - Indicates an SD that has a system access control list (SACL). - - - SE_SACL_DEFAULTED (0x0020) - Indicates an SD with a default SACL. For example, if an object creator does not specify an SACL, the object receives the default SACL from the access token of the creator. This flag can affect how the system treats the SACL, with respect to ACE inheritance. The system ignores this flag if the SE_SACL_PRESENT flag is not set. - - - SE_DACL_AUTO_INHERIT_REQ (0x0100) - Requests that the provider for the object protected by the SD automatically propagate the DACL to existing child objects. If the provider supports automatic inheritance, it propagates the DACL to any existing child objects, and sets the SE_DACL_AUTO_INHERITED bit in the security descriptors of the object and its child objects. - - - SE_SACL_AUTO_INHERIT_REQ (0x0200) - Requests that the provider for the object protected by the SD automatically propagate the SACL to existing child objects. If the provider supports automatic inheritance, it propagates the SACL to any existing child objects, and sets the SE_SACL_AUTO_INHERITED bit in the SDs of the object and its child objects. - - - SE_DACL_AUTO_INHERITED (0x0400) - Windows 2000 only. Indicates an SD in which the DACL is set up to support automatic propagation of inheritable ACEs to existing child objects. The system sets this bit when it performs the automatic inheritance algorithm for the object and its existing child objects. This bit is not set in SDs for Windows NT versions 4.0 and earlier, which do not support automatic propagation of inheritable ACEs. - - - SE_SACL_AUTO_INHERITED (0x0800) - Windows 2000: Indicates an SD in which the SACL is set up to support automatic propagation of inheritable ACEs to existing child objects. The system sets this bit when it performs the automatic inheritance algorithm for the object and its existing child objects. This bit is not set in SDs for Windows NT versions 4.0 and earlier, which do not support automatic propagation of inheritable ACEs. - - - SE_DACL_PROTECTED (0x1000) - Windows 2000: Prevents the DACL of the SD from being modified by inheritable ACEs. - - - SE_SACL_PROTECTED (0x2000) - Windows 2000: Prevents the SACL of the SD from being modified by inheritable ACEs. - - - SE_RM_CONTROL_VALID (0x4000) - Indicates that the resource manager control is valid. - - - SE_SELF_RELATIVE (0x8000) - Indicates an SD in self-relative format with all of the security information in a contiguous block of memory. If this flag is not set, the SD is in absolute format. For more information, see Absolute and Self-Relative Security Descriptors. - - - The SECURITY_INFORMATION data type identifies the object-related security information being set or queried. - This security information includes: - The owner of an object; - The primary group of an object; - The discretionary access control list (DACL) of an object; - The system access control list (SACL) of an object; - - - An unsigned 32-bit integer specifies portions of a SECURITY_DESCRIPTOR by means of bit flags. - Individual bit values (combinable with the bitwise OR operation) are as shown in the following table. - - - - - - - OWNER_SECURITY_INFORMATION (0x00000001) - The owner identifier of the object is being referenced. - - - GROUP_SECURITY_INFORMATION (0x00000002) - The primary group identifier of the object is being referenced. - - - DACL_SECURITY_INFORMATION (0x00000004) - The DACL of the object is being referenced. - - - SACL_SECURITY_INFORMATION (0x00000008) - The SACL of the object is being referenced. - - - LABEL_SECURITY_INFORMATION (0x00000010) - The mandatory integrity label is being referenced. The mandatory integrity label is an ACE in the SACL of the object. - Windows Server 2003 and Windows XP: This bit flag is not available. - - - ATTRIBUTE_SECURITY_INFORMATION (0x00000020) - The resource properties of the object being referenced. - The resource properties are stored in SYSTEM_RESOURCE_ATTRIBUTE_ACE types in the SACL of the security descriptor. - - Windows Server 2008 R2, Windows 7, Windows Server 2008, Windows Vista, Windows Server 2003, and Windows XP: This bit flag is not available. - - - SCOPE_SECURITY_INFORMATION (0x00000040) - The Central Access Policy (CAP) identifier applicable on the object that is being referenced. - Each CAP identifier is stored in a SYSTEM_SCOPED_POLICY_ID_ACE type in the SACL of the SD. - - Windows Server 2008 R2, Windows 7, Windows Server 2008, Windows Vista, Windows Server 2003, and Windows XP: This bit flag is not available. - - - BACKUP_SECURITY_INFORMATION (0x00010000) - All parts of the security descriptor. This is useful for backup and restore software that needs to preserve the entire security descriptor. - Windows Server 2008 R2, Windows 7, Windows Server 2008, Windows Vista, Windows Server 2003, and Windows XP: This bit flag is not available. - - - UNPROTECTED_SACL_SECURITY_INFORMATION (0x10000000) - The SACL inherits ACEs from the parent object. - - - UNPROTECTED_DACL_SECURITY_INFORMATION (0x20000000) - The DACL inherits ACEs from the parent object. - - - PROTECTED_SACL_SECURITY_INFORMATION (0x40000000) - The SACL cannot inherit ACEs. - - - PROTECTED_DACL_SECURITY_INFORMATION (0x80000000) - The DACL cannot inherit access control entries (ACEs). - - - An IntPtr wrapper which can be used as the result of a Marshal.AllocHGlobal operation. - Calls Marshal.FreeHGlobal when disposed or finalized. - - - - Creates new instance with zero IntPtr. - - - Copies data from a one-dimensional, managed 8-bit unsigned integer array to the unmanaged memory pointer referenced by this instance. - The one-dimensional array to copy from. - The zero-based index into the array where Copy should start. - The number of array elements to copy. - - - Called when object is disposed or finalized. - - - The AdjustTokenPrivileges function enables or disables privileges in the specified access token. Enabling or disabling privileges in an access token requires TOKEN_ADJUST_PRIVILEGES access. - - If the function succeeds, the return value is nonzero. - To determine whether the function adjusted all of the specified privileges, call GetLastError. - - Minimum supported client: Windows XP [desktop apps only] - Minimum supported server: Windows Server 2003 [desktop apps only] - - - The LookupPrivilegeDisplayName function retrieves the display name that represents a specified privilege. - - If the function succeeds, the return value is nonzero. - If the function fails, it returns zero. To get extended error information, call GetLastError. - - Minimum supported client: Windows XP [desktop apps only] - Minimum supported server: Windows Server 2003 [desktop apps only] - - - The LookupPrivilegeValue function retrieves the locally unique identifier (LUID) used on a specified system to locally represent the specified privilege name. - - If the function succeeds, the function returns nonzero. - If the function fails, it returns zero. To get extended error information, call GetLastError. - - Minimum supported client: Windows XP [desktop apps only] - Minimum supported server: Windows Server 2003 [desktop apps only] - - - The GetNamedSecurityInfo function retrieves a copy of the security descriptor for an object specified by name. -   - - If the function succeeds, the return value is ERROR_SUCCESS. - If the function fails, the return value is a nonzero error code defined in WinError.h. - -   - - Minimum supported client: Windows XP [desktop apps only] - Minimum supported server: Windows Server 2003 [desktop apps only] - - - - - The GetSecurityInfo function retrieves a copy of the security descriptor for an object specified by a handle. - - If the function succeeds, the function returns nonzero. - If the function fails, it returns zero. To get extended error information, call GetLastError. - - Minimum supported client: Windows XP [desktop apps only] - Minimum supported server: Windows Server 2003 [desktop apps only] - - - The SetSecurityInfo function sets specified security information in the security descriptor of a specified object. - The caller identifies the object by a handle. - - If the function succeeds, the function returns ERROR_SUCCESS. - If the function fails, it returns a nonzero error code defined in WinError.h. - - Minimum supported client: Windows XP [desktop apps only] - Minimum supported server: Windows Server 2003 [desktop apps only] - - - The SetNamedSecurityInfo function sets specified security information in the security descriptor of a specified object. The caller identifies the object by name. -   - - If the function succeeds, the function returns ERROR_SUCCESS. - If the function fails, it returns a nonzero error code defined in WinError.h. - -   - - Minimum supported client: Windows XP [desktop apps only] - Minimum supported server: Windows Server 2003 [desktop apps only] - - - - - The GetSecurityDescriptorDacl function retrieves a pointer to the discretionary access control list (DACL) in a specified security descriptor. - - If the function succeeds, the function returns nonzero. - If the function fails, it returns zero. To get extended error information, call GetLastError. - - Minimum supported client: Windows XP [desktop apps only] - Minimum supported server: Windows Server 2003 [desktop apps only] - - - The GetSecurityDescriptorSacl function retrieves a pointer to the system access control list (SACL) in a specified security descriptor. - - If the function succeeds, the function returns nonzero. - If the function fails, it returns zero. To get extended error information, call GetLastError. - - Minimum supported client: Windows XP [desktop apps only] - Minimum supported server: Windows Server 2003 [desktop apps only] - - - The GetSecurityDescriptorGroup function retrieves the primary group information from a security descriptor. - - If the function succeeds, the function returns nonzero. - If the function fails, it returns zero. To get extended error information, call GetLastError. - - Minimum supported client: Windows XP [desktop apps only] - Minimum supported server: Windows Server 2003 [desktop apps only] - - - The GetSecurityDescriptorControl function retrieves a security descriptor control and revision information. - - If the function succeeds, the function returns nonzero. - If the function fails, it returns zero. To get extended error information, call GetLastError. - - Minimum supported client: Windows XP [desktop apps only] - Minimum supported server: Windows Server 2003 [desktop apps only] - - - The GetSecurityDescriptorOwner function retrieves the owner information from a security descriptor. - - If the function succeeds, the function returns nonzero. - If the function fails, it returns zero. To get extended error information, call GetLastError. - - Minimum supported client: Windows XP [desktop apps only] - Minimum supported server: Windows Server 2003 [desktop apps only] - - - The GetSecurityDescriptorLength function returns the length, in bytes, of a structurally valid security descriptor. The length includes the length of all associated structures. - - If the function succeeds, the function returns the length, in bytes, of the SECURITY_DESCRIPTOR structure. - If the SECURITY_DESCRIPTOR structure is not valid, the return value is undefined. - - Minimum supported client: Windows XP [desktop apps only] - Minimum supported server: Windows Server 2003 [desktop apps only] - - - Frees the specified local memory object and invalidates its handle. - - If the function succeeds, the return value is . - If the function fails, the return value is equal to a handle to the local memory object. To get extended error information, call GetLastError. - - SetLastError is set to . - - Note The local functions have greater overhead and provide fewer features than other memory management functions. - New applications should use the heap functions unless documentation states that a local function should be used. - For more information, see Global and Local Functions. - - Minimum supported client: Windows XP [desktop apps only] - Minimum supported server: Windows Server 2003 [desktop apps only] - - - Class used to represent the SECURITY_ATTRIBUES native Win32 structure. It provides initialization function from an object. - - - Marshals an ObjectSecurity instance to unmanaged memory. - A safe handle containing the marshalled security descriptor. - The security descriptor. - - - Implements a 32-bit CRC hash algorithm compatible with Zip etc. - - Crc32 should only be used for backward compatibility with older file formats - and algorithms. It is not secure enough for new applications. - If you need to call multiple times for the same data either use the HashAlgorithm - interface or remember that the result of one Compute call needs to be ~ (XOR) before - being passed in as the seed for the next Compute call. - - - - - Initializes a new instance of Crc32. - - - - Initializes a new instance of Crc32. - The polynomial. - The seed. - - - - Initializes an implementation of the - class. - - - - When overridden in a derived class, routes data written to the object into the hash algorithm for computing the hash. - The input to compute the hash code for.. - The offset into the byte array from which to begin using data. - The number of bytes in the byte array to use as data. - - - - Finalizes the hash computation after the last data is processed by the cryptographic stream - object. - - - This method finalizes any partial computation and returns the correct hash value for the data - stream. - - - - Gets the size, in bits, of the computed hash code. - The size, in bits, of the computed hash code. - - - Initializes the table. - The polynomial. - The table. - - - Calculates the hash. - The table. - The seed. - The buffer. - The start. - The size. - The calculated hash. - - - Int 32 to big endian bytes. - The second uint 3. - A byte[]. - - - Represents a privilege for an access token. The privileges available on the local machine are available as - static instances from this class. To create a representing a privilege on another system, - use the constructor specifying a system name together with one of these static instances. - - - - - Required to assign the primary token of a process. User Right: Replace a process-level token. - - - Required to generate audit-log entries. Give this privilege to secure servers. User Right: Generate security audits. - - - Required to perform backup operations. This privilege causes the system to grant all read access control to any file, regardless of the access control list (ACL) specified for the file. Any access request other than read is still evaluated with the ACL. User Right: Back up files and directories. - - - Required to receive notifications of changes to files or directories. This privilege also causes the system to skip all traversal access checks. It is enabled by default for all users. User Right: Bypass traverse checking. - - - Required to create named file mapping objects in the global namespace during Terminal Services sessions. This privilege is enabled by default for administrators, services, and the local system account. User Right: Create global objects. - Windows XP/2000: This privilege is not supported. Note that this value is supported starting with Windows Server 2003, Windows XP SP2, and Windows 2000 SP4. - - - Required to create a paging file. User Right: Create a pagefile. - - - Required to create a permanent object. User Right: Create permanent shared objects. - - - Required to create a symbolic link. User Right: Create symbolic links. - - - Required to create a primary token. User Right: Create a token object. - - - Required to debug and adjust the memory of a process owned by another account. User Right: Debug programs. - - - Required to mark user and computer accounts as trusted for delegation. User Right: Enable computer and user accounts to be trusted for delegation. - - - Required to impersonate. User Right: Impersonate a client after authentication. - Windows XP/2000: This privilege is not supported. Note that this value is supported starting with Windows Server 2003, Windows XP SP2, and Windows 2000 SP4. - - - Required to increase the base priority of a process. User Right: Increase scheduling priority. - - - Required to increase the quota assigned to a process. User Right: Adjust memory quotas for a process. - - - Required to allocate more memory for applications that run in the context of users. User Right: Increase a process working set. - - - Required to load or unload a device driver. User Right: Load and unload device drivers. - - - Required to lock physical pages in memory. User Right: Lock pages in memory. - - - Required to create a computer account. User Right: Add workstations to domain. - - - Required to enable volume management privileges. User Right: Manage the files on a volume. - - - Required to gather profiling information for a single process. User Right: Profile single process. - - - Required to modify the mandatory integrity level of an object. User Right: Modify an object label. - - - Required to shut down a system using a network request. User Right: Force shutdown from a remote system. - - - Required to perform restore operations. This privilege causes the system to grant all write access control to any file, regardless of the ACL specified for the file. Any access request other than write is still evaluated with the ACL. Additionally, this privilege enables you to set any valid user or group SID as the owner of a file. User Right: Restore files and directories. - - - Required to perform a number of security-related functions, such as controlling and viewing audit messages. This privilege identifies its holder as a security operator. User Right: Manage auditing and security log. - - - Required to shut down a local system. User Right: Shut down the system. - - - Required for a domain controller to use the LDAP directory synchronization services. This privilege enables the holder to read all objects and properties in the directory, regardless of the protection on the objects and properties. By default, it is assigned to the Administrator and LocalSystem accounts on domain controllers. User Right: Synchronize directory service data. - - - Required to modify the nonvolatile RAM of systems that use this type of memory to store configuration information. User Right: Modify firmware environment values. - - - Required to gather profiling information for the entire system. User Right: Profile system performance. - - - Required to modify the system time. User Right: Change the system time. - - - Required to take ownership of an object without being granted discretionary access. This privilege allows the owner value to be set only to those values that the holder may legitimately assign as the owner of an object. User Right: Take ownership of files or other objects. - - - This privilege identifies its holder as part of the trusted computer base. Some trusted protected subsystems are granted this privilege. User Right: Act as part of the operating system. - - - Required to adjust the time zone associated with the computer's internal clock. User Right: Change the time zone. - - - Required to access Credential Manager as a trusted caller. User Right: Access Credential Manager as a trusted caller. - - - Required to undock a laptop. User Right: Remove computer from docking station. - - - Required to read unsolicited input from a terminal device. User Right: Not applicable. - - - Create a new representing the specified privilege on the specified system. - Name of the system. - The privilege to copy the privilege name from. - - - Gets the system name identifying this privilege. - The system name identifying this privilege. - - - Retrieves the display name that represents this privilege. - The display name that represents this privilege. - - - Retrieves the locally unique identifier (LUID) used on to represent this privilege (on the system from which it originates). - the locally unique identifier (LUID) used on to represent this privilege (on the system from which it originates). - - - Indicates whether the current object is equal to another object of the same type. - An object to compare with this object. - if the current object is equal to the parameter; otherwise, . - - - Determines whether the specified is equal to the current . - The to compare with the current . - if the specified is equal to the current ; otherwise, . - - - - Serves as a hash function for a particular type. - A hash code for the current Object. - - - Returns the system name for this privilege. - This is equivalent to . - A that represents the current . - - - Initializes a new instance of the class, representing a privilege with the specified name on the local system. - The name. - - - Used to enable one or more privileges. The privileges specified will be enabled during the lifetime of the instance. Users create an instance of this object in a using statement to ensure that it is properly disposed when the elevated privileges are no longer needed. - - - Initializes a new instance of the class. - This will enable the privileges specified (unless already enabled), and ensure that they are disabled again when - the object is disposed. (Any privileges already enabled will not be disabled). - - The privilege to enable. - Additional privileges to enable. - - - Makes sure any privileges enabled by this instance are disabled. - - - Gets the enabled privileges. Note that this might not contain all privileges specified to the constructor. Only the privileges actually enabled by this instance is returned. - The enabled privileges. - - - - This object is used to enable a specific privilege for the currently running process during its lifetime. - It should be disposed as soon as the elevated privilege is no longer needed. - For more information see the documentation on AdjustTokenPrivileges on MSDN. - - - - Initializes a new instance of the class and enabling the specified privilege for the currently running process. - The name of the privilege. - - - - Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. - In this case the privilege previously enabled will be disabled. - - - - Adjusts the privilege. - the privilege will be enabled, otherwise disabled. - - - Use this to translate error codes into HRESULTs like 0x80070006 for ERROR_INVALID_HANDLE. - - - (0) The operation completed successfully. - - - (0) The operation completed successfully. - - - (1) Incorrect function. - - - (2) The system cannot find the file specified. - - - (3) The system cannot find the path specified. - - - (5) Access is denied. - - - (15) The system cannot find the drive specified. - - - (17) The system cannot move the file to a different disk drive. - - - (18) There are no more files. - - - (21) The device is not ready. - - - (25) The drive cannot locate a specific area or track on the disk. - - - (32) The process cannot access the file because it is being used by another process. - - - (33) The process cannot access the file because another process has locked a portion of the file. - - - (38) Reached the end of the file. - - - (53) The network path was not found. - - - (65) Network access is denied. - - - (67) The network name cannot be found. - - - (80) The file exists. - - - (87) The parameter is incorrect. - - - (122) The data area passed to a system call is too small. - - - (123) The filename, directory name, or volume label syntax is incorrect. - - - (143) The system cannot join or substitute a drive to or for a directory on the same drive. - - - (145) The directory is not empty. - - - (158) The segment is already unlocked. - - - (183) Cannot create a file when that file already exists. - - - (203) The system could not find the environment option that was entered. - - - (234) More data is available. - - - (267) The directory name is invalid. - - - (995) The I/O operation has been aborted because of either a thread exit or an application request. - - - (997) Overlapped I/O operation is in progress. - - - (1200) The specified device name is invalid. - - - (1208) An extended error has occurred. - - - (1222) The network is not present or not started. - - - (1235) The request was aborted. - - - (1641) The requested operation completed successfully. - The system will be restarted so the changes can take effect. - - - - (1783) The stub received bad data. - - - (3010) The requested operation is successful. - Changes will not be effective until the system is rebooted. - - - - (3011) The requested operation is successful. - Changes will not be effective until the service is restarted. - - - - (4390) The file or directory is not a reparse point. - - - (6009) The specified file is read only. - - - (6012) Recovery policy configured for this system contains invalid recovery certificate. - - - (6700) The transaction handle associated with this operation is not valid. - - - (6701) The requested operation was made in the context - of a transaction that is no longer active. - - - - (6702) The requested operation is not valid - on the Transaction object in its current state. - - - - (6703) The caller has called a response API, but the response is not expected - because the TM did not issue the corresponding request to the caller. - - - - (6704) It is too late to perform the requested operation, - since the Transaction has already been aborted. - - - - (6705) It is too late to perform the requested operation, - since the Transaction has already been committed. - - - - (6800) The function attempted to use a name - that is reserved for use by another transaction. - - - - (6805) The remote server or share does not support transacted file operations. - - - (0) The operation completed successfully. - - - (0) The operation completed successfully. - - - (2250) The network connection could not be found. - - - (2310) This shared resource does not exist. - - - (2314) There is not an open file with that identification number. - - - (0) The operation completed successfully. - - - Gets an attribute on an enum field value. - The description belonging to the enum option, as a string - One of the enum types. - - - Indicates whether a specified string is null, empty, or consists only of white-space characters. - if the parameter is null or , or if consists exclusively of white-space characters. - The string to test. - - - Converts a number of type T to string, suffixed with a unit size. - - - Calculates a percentage value. - - - - - - diff --git a/Security2/bin/Debug/Security2.dll b/Security2/bin/Debug/Security2.dll deleted file mode 100644 index f8fafc44b6d2c287220ae99c945505812327381a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 54784 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 diff --git a/Security2/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache b/Security2/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache deleted file mode 100644 index e5cf8d3ba9e63dcd15ea3c9a5dad18fa39a02561..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6869 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 diff --git a/Security2/obj/Debug/Security2.dll b/Security2/obj/Debug/Security2.dll deleted file mode 100644 index f8fafc44b6d2c287220ae99c945505812327381a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 54784 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 diff --git a/TestClient/Program.cs b/TestClient/Program.cs deleted file mode 100644 index a7b3bc6..0000000 --- a/TestClient/Program.cs +++ /dev/null @@ -1,85 +0,0 @@ -using Alphaleonis.Win32.Filesystem; -using NTFSSecurity; -using Security2; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Management.Automation; -using System.Management.Automation.Runspaces; -using System.Security.AccessControl; -using System.Security.Principal; - -namespace TestClient -{ - class Program - { - static void Main(string[] args) - { - var item1 = new FileInfo("D:\\file1.txt"); - var item2 = new DirectoryInfo("D:\\test3"); - var account1 = new List() { (IdentityReference2)@"raandree1\randr_000" }; - - FileSystemAccessRule2.AddFileSystemAccessRule(item1, account1, FileSystemRights2.FullControl, AccessControlType.Allow, InheritanceFlags.ContainerInherit, PropagationFlags.None); - - return; - var path = @"C:\Windows"; - var account = @"raandree1\randr_000"; - var server = "localhost"; - - var sd = Directory.GetAccessControl(path, AccessControlSections.Access); - var id = new IdentityReference2(account); - EffectiveAccess.GetEffectiveAccess(new FileInfo(path), id, "localhost"); - - var result1 = InvokeCommand("gi2 c:\\windows"); - - var result2 = InvokeCommand(@"gi -Path D:\SingleMachine\ | Get-EffectiveAccess") - .Select(ace => ace.ImmediateBaseObject) - .Cast().ToList(); - - foreach (var ace in result2) - { - Console.WriteLine(string.Format("{0};{1}", ace.Account, ace.IsInherited)); - } - - Console.ReadKey(); - } - - public static List InvokeCommand(string script) - { - var runspace = RunspaceFactory.CreateRunspace(); - runspace.Open(); - var powershell = PowerShell.Create(); - powershell.Runspace = runspace; - - powershell.Commands.AddScript(script); - var result = powershell.Invoke(); - - powershell.Dispose(); - runspace.Close(); - - return result.ToList(); - } - - public static List InvokeCommand(string command, Dictionary parameters) - { - var runspace = RunspaceFactory.CreateRunspace(); - runspace.Open(); - var powershell = PowerShell.Create(); - powershell.Runspace = runspace; - - var cmd = new Command(command); - foreach (var parameter in parameters) - { - cmd.Parameters.Add(parameter.Key, parameter.Value); - } - - powershell.Commands.AddCommand(cmd); - var result = powershell.Invoke(); - - powershell.Dispose(); - runspace.Close(); - - return result.ToList(); - } - } -} \ No newline at end of file diff --git a/TestClient/Properties/AssemblyInfo.cs b/TestClient/Properties/AssemblyInfo.cs deleted file mode 100644 index 5d1cb04..0000000 --- a/TestClient/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,36 +0,0 @@ -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("TestClient")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("Microsoft")] -[assembly: AssemblyProduct("TestClient")] -[assembly: AssemblyCopyright("Copyright © Microsoft 2012")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("300b183b-855e-43f5-bc5c-4bcfb436cdf2")] - -// 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")] diff --git a/TestClient/TestClient.csproj b/TestClient/TestClient.csproj deleted file mode 100644 index 588cd91..0000000 --- a/TestClient/TestClient.csproj +++ /dev/null @@ -1,86 +0,0 @@ - - - - Debug - x86 - 8.0.30703 - 2.0 - {DE60760F-53BD-4C54-9469-BD96DF0C2B20} - Exe - Properties - TestClient - TestClient - v4.5.1 - - - 512 - SAK - SAK - SAK - SAK - - - AnyCPU - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - false - false - - - AnyCPU - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - false - - - - ..\..\..\..\..\..\Program Files (x86)\Reference Assemblies\Microsoft\WindowsPowerShell\v1.0\System.Management.Automation.dll - - - - - - - - - - - - {f0f9af1e-d5b5-4d72-804a-5380622fbdea} - AlphaFS - - - {17768e1a-1422-4bd2-a9a5-42ba9feb82b8} - NTFSSecurity - - - {01EAB41B-B2CE-49FE-AB5A-0F0FF0A9A7EE} - PrivilegeControl - - - {410CAEE5-D287-4A18-9B38-BB87397D218D} - ProcessPrivileges - - - {B437C364-5BC7-42E4-93F7-0F459A5DF0D0} - Security2 - - - - - \ No newline at end of file diff --git a/TestClient/TestClient.csproj.vspscc b/TestClient/TestClient.csproj.vspscc deleted file mode 100644 index b6d3289..0000000 --- a/TestClient/TestClient.csproj.vspscc +++ /dev/null @@ -1,10 +0,0 @@ -"" -{ -"FILE_VERSION" = "9237" -"ENLISTMENT_CHOICE" = "NEVER" -"PROJECT_FILE_RELATIVE_PATH" = "" -"NUMBER_OF_EXCLUDED_FILES" = "0" -"ORIGINAL_PROJECT_FILE_PATH" = "" -"NUMBER_OF_NESTED_PROJECTS" = "0" -"SOURCE_CONTROL_SETTINGS_PROVIDER" = "PROVIDER" -} diff --git a/TestClient/bin/Debug/AlphaFS.dll b/TestClient/bin/Debug/AlphaFS.dll deleted file mode 100644 index ec222ca91d42a63209ec0f2b8852a4020d4a84c9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 312320 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

b}QC#9^3)AZ*S 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
2F#_$7G*x6+c`7=B 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 (chIeEYYQFS*6|0uT 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%0D(cmDJQDtTkw>_)tXxQ7ejA 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 U>-|Wm - - - AlphaFS - - - -

Information about an alternate data stream. - - - - Gets the name of the alternate data stream. - This value is an empty string for the default stream (:$DATA), and for any other data stream it contains the name of the stream. - The name of the stream. - - - Gets the size of the stream. - - - Gets the full path to the stream. - - This is a path in long path format that can be passed to to open the stream if - or - is specified. - - The full path to the stream in long path format. - - - Returns the hash code for this instance. - A 32-bit signed integer that is the hash code for this instance. - - - Indicates whether this instance and a specified object are equal. - The object to compare with the current instance. - - true if and this instance are the same type and represent the same value; otherwise, false. - - - - Equality operator. - The first operand. - The second operand. - The result of the operation. - - - Inequality operator. - The first operand. - The second operand. - The result of the operation. - - - The structure contains stream header data. - - - - Initializes a new instance of the class. - The stream ID. - The name. - - - Gets the size of the data in the substream, in bytes. - The size of the data in the substream, in bytes. - - - Gets a string that specifies the name of the alternative data stream. - A string that specifies the name of the alternative data stream. - - - Gets the type of the data in the stream. - The type of the data in the stream. - - - Gets the attributes of the data to facilitate cross-operating system transfer. - Attributes of the data to facilitate cross-operating system transfer. - - - Callback used by CopyFileXxx and MoveFileXxx to report progress about the copy/move operation. - - - Exposes static methods for creating, moving, and enumerating through directories and subdirectories. - This class cannot be inherited. - - - - [AlphaFS] Copies an existing directory to a new directory. Overwriting a directory of the same name is not allowed. - - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two directories have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - A class with details of the Copy action. - - - - - - - The source directory path. - The destination directory path. - - - [AlphaFS] Copies an existing directory to a new directory. Overwriting a directory of the same name is not allowed. - - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two directories have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - A class with details of the Copy action. - - - - - - - The source directory path. - The destination directory path. - Indicates the format of the path parameter(s). - - - [AlphaFS] Copies an existing directory to a new directory. Overwriting a directory of the same name is allowed. - - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two directories have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - A class with details of the Copy action. - - - - - - - The source directory path. - The destination directory path. - if the destination directory should ignoring the read-only and hidden attributes and overwrite; otherwise, . - - - [AlphaFS] Copies an existing directory to a new directory. Overwriting a directory of the same name is allowed. - - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two directories have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - A class with details of the Copy action. - - - - - - - The source directory path. - The destination directory path. - if the destination directory should ignoring the read-only and hidden attributes and overwrite; otherwise, . - Indicates the format of the path parameter(s). - - - [AlphaFS] Copies an existing directory to a new directory. Overwriting a directory of the same name is not allowed. - - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two directories have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - A class with details of the Copy action. - - - - - - - The transaction. - The source directory path. - The destination directory path. - - - [AlphaFS] Copies an existing directory to a new directory. Overwriting a directory of the same name is not allowed. - - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two directories have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - A class with details of the Copy action. - - - - - - - The transaction. - The source directory path. - The destination directory path. - Indicates the format of the path parameter(s). - - - [AlphaFS] Copies an existing directory to a new directory. Overwriting a directory of the same name is allowed. - - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two directories have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - A class with details of the Copy action. - - - - - - - The transaction. - The source directory path. - The destination directory path. - if the destination directory should ignoring the read-only and hidden attributes and overwrite; otherwise, . - - - [AlphaFS] Copies an existing directory to a new directory. Overwriting a directory of the same name is allowed. - - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two directories have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - A class with details of the Copy action. - - - - - - - The transaction. - The source directory path. - The destination directory path. - if the destination directory should ignoring the read-only and hidden attributes and overwrite; otherwise, . - Indicates the format of the path parameter(s). - - - [AlphaFS] Copies a directory and its contents to a new location, can be specified. - - Option is recommended for very large file transfers. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two directories have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - A class with details of the Copy action. - - - - - - - The source directory path. - The destination directory path. - that specify how the directory is to be copied. This parameter can be . - - - [AlphaFS] Copies a directory and its contents to a new location, can be specified. - - Option is recommended for very large file transfers. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two directories have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - A class with details of the Copy action. - - - - - - - The source directory path. - The destination directory path. - that specify how the directory is to be copied. This parameter can be . - Indicates the format of the path parameter(s). - - - [AlphaFS] Copies a directory and its contents to a new location, can be specified, - and the possibility of notifying the application of its progress through a callback function. - - Option is recommended for very large file transfers. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two directories have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - A class with details of the Copy action. - - - - - - - The source directory path. - The destination directory path. - that specify how the directory is to be copied. This parameter can be . - A callback function that is called each time another portion of the directory has been copied. This parameter can be . - The argument to be passed to the callback function. This parameter can be . - - - [AlphaFS] Copies a directory and its contents to a new location, can be specified, - and the possibility of notifying the application of its progress through a callback function. - - Option is recommended for very large file transfers. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two directories have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - A class with details of the Copy action. - - - - - - - The source directory path. - The destination directory path. - that specify how the directory is to be copied. This parameter can be . - A callback function that is called each time another portion of the directory has been copied. This parameter can be . - The argument to be passed to the callback function. This parameter can be . - Indicates the format of the path parameter(s). - - - [AlphaFS] Copies a directory and its contents to a new location, can be specified. - - Option is recommended for very large file transfers. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two directories have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - A class with details of the Copy action. - - - - - - - The transaction. - The source directory path. - The destination directory path. - that specify how the directory is to be copied. This parameter can be . - - - [AlphaFS] Copies a directory and its contents to a new location, can be specified. - - Option is recommended for very large file transfers. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two directories have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - A class with details of the Copy action. - - - - - - - The transaction. - The source directory path. - The destination directory path. - that specify how the directory is to be copied. This parameter can be . - Indicates the format of the path parameter(s). - - - [AlphaFS] Copies a directory and its contents to a new location, can be specified, - and the possibility of notifying the application of its progress through a callback function. - - Option is recommended for very large file transfers. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two directories have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - A class with details of the Copy action. - - - - - - - The transaction. - The source directory path. - The destination directory path. - that specify how the directory is to be copied. This parameter can be . - A callback function that is called each time another portion of the directory has been copied. This parameter can be . - The argument to be passed to the callback function. This parameter can be . - - - [AlphaFS] Copies a directory and its contents to a new location, can be specified, - and the possibility of notifying the application of its progress through a callback function. - - Option is recommended for very large file transfers. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two directories have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - A class with details of the Copy action. - - - - - - - The transaction. - The source directory path. - The destination directory path. - that specify how the directory is to be copied. This parameter can be . - A callback function that is called each time another portion of the directory has been copied. This parameter can be . - The argument to be passed to the callback function. This parameter can be . - Indicates the format of the path parameter(s). - - - Moves a file or a directory and its contents to a new location. - - This method does not work across disk volumes. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two directories have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - A class with details of the Move action. - - - - - - - The source directory path. - The destination directory path. - - - [AlphaFS] Moves a file or a directory and its contents to a new location. - - This method does not work across disk volumes. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two directories have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - A class with details of the Move action. - - - - - - - The source directory path. - The destination directory path. - Indicates the format of the path parameter(s). - - - [AlphaFS] Moves a file or a directory and its contents to a new location. - - This method does not work across disk volumes. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two directories have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - A class with details of the Move action. - - - - - - - The transaction. - The source directory path. - The destination directory path. - - - [AlphaFS] Moves a file or a directory and its contents to a new location. - - This method does not work across disk volumes. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two directories have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - A class with details of the Move action. - - - - - - - The transaction. - The source directory path. - The destination directory path. - Indicates the format of the path parameter(s). - - - [AlphaFS] Moves a file or a directory and its contents to a new location, can be specified. - - This method does not work across disk volumes unless contains . - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two directories have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - A class with details of the Move action. - - - - - - - The source directory path. - The destination directory path. - that specify how the directory is to be moved. This parameter can be . - - - [AlphaFS] Moves a file or a directory and its contents to a new location, can be specified. - - This method does not work across disk volumes unless contains . - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two directories have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - A class with details of the Move action. - - - - - - - The source directory path. - The destination directory path. - that specify how the directory is to be moved. This parameter can be . - Indicates the format of the path parameter(s). - - - [AlphaFS] Moves a file or a directory and its contents to a new location, can be specified, - and the possibility of notifying the application of its progress through a callback function. - - This method does not work across disk volumes unless contains . - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two directories have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - A class with details of the Move action. - - - - - - - The source directory path. - The destination directory path. - that specify how the directory is to be moved. This parameter can be . - A callback function that is called each time another portion of the directory has been moved. This parameter can be . - The argument to be passed to the callback function. This parameter can be . - - - [AlphaFS] Moves a file or a directory and its contents to a new location, can be specified, - and the possibility of notifying the application of its progress through a callback function. - - This method does not work across disk volumes unless contains . - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two directories have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - A class with details of the Move action. - - - - - - - The source directory path. - The destination directory path. - that specify how the directory is to be moved. This parameter can be . - A callback function that is called each time another portion of the directory has been moved. This parameter can be . - The argument to be passed to the callback function. This parameter can be . - Indicates the format of the path parameter(s). - - - [AlphaFS] Moves a file or a directory and its contents to a new location, can be specified. - - This method does not work across disk volumes unless contains . - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two directories have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - A class with details of the Move action. - - - - - - - The transaction. - The source directory path. - The destination directory path. - that specify how the directory is to be moved. This parameter can be . - - - [AlphaFS] Moves a file or a directory and its contents to a new location, can be specified. - - This method does not work across disk volumes unless contains . - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two directories have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - A class with details of the Move action. - - - - - - - The transaction. - The source directory path. - The destination directory path. - that specify how the directory is to be moved. This parameter can be . - Indicates the format of the path parameter(s). - - - [AlphaFS] Moves a file or a directory and its contents to a new location, can be specified, - and the possibility of notifying the application of its progress through a callback function. - - This method does not work across disk volumes unless contains . - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two directories have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - A class with details of the Move action. - - - - - - - The transaction. - The source directory path. - The destination directory path. - that specify how the directory is to be moved. This parameter can be . - A callback function that is called each time another portion of the directory has been moved. This parameter can be . - The argument to be passed to the callback function. This parameter can be . - - - [AlphaFS] Moves a file or a directory and its contents to a new location, can be specified, - and the possibility of notifying the application of its progress through a callback function. - A class with the status of the Move action. - - This method does not work across disk volumes unless contains . - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two directories have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - A class with details of the Move action. - - - - - - - The transaction. - The source directory path. - The destination directory path. - that specify how the directory is to be moved. This parameter can be . - A callback function that is called each time another portion of the directory has been moved. This parameter can be . - The argument to be passed to the callback function. This parameter can be . - Indicates the format of the path parameter(s). - - - Copy/move a Non-/Transacted file or directory including its children to a new location, - or can be specified, - and the possibility of notifying the application of its progress through a callback function. - - Option is recommended for very large file transfers. - You cannot use the Move method to overwrite an existing file, unless contains . - Note that if you attempt to replace a file by moving a file of the same name into that directory, you get an IOException. - - - A class with the status of the Copy or Move action. - - - - - - - The transaction. - The source directory path. - The destination directory path. - that specify how the directory is to be copied. This parameter can be . - that specify how the directory is to be moved. This parameter can be . - A callback function that is called each time another portion of the file has been copied/moved. This parameter can be . - The argument to be passed to the callback function. This parameter can be . - - Indicates the format of the path parameter(s). - - - [AlphaFS] Counts file system objects: files, folders or both) in a given directory. - The counted number of file system objects. - - - - - - - The directory path. - flags that specify how the directory is to be enumerated. - - - [AlphaFS] Counts file system objects: files, folders or both) in a given directory. - The counted number of file system objects. - - - - - - - The directory path. - flags that specify how the directory is to be enumerated. - Indicates the format of the path parameter(s). - - - [AlphaFS] Counts file system objects: files, folders or both) in a given directory. - The counted number of file system objects. - - - - - - - The directory path. - - The search string to match against the names of directories in . - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - flags that specify how the directory is to be enumerated. - - - [AlphaFS] Counts file system objects: files, folders or both) in a given directory. - The counted number of file system objects. - - - - - - - The directory path. - - The search string to match against the names of directories in . - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - flags that specify how the directory is to be enumerated. - Indicates the format of the path parameter(s). - - - [AlphaFS] Counts file system objects: files, folders or both) in a given directory. - The counted number of file system objects. - - - - - - - The transaction. - The directory path. - flags that specify how the directory is to be enumerated. - - - [AlphaFS] Counts file system objects: files, folders or both) in a given directory. - The counted number of file system objects. - - - - - - - The transaction. - The directory path. - flags that specify how the directory is to be enumerated. - Indicates the format of the path parameter(s). - - - [AlphaFS] Counts file system objects: files, folders or both) in a given directory. - The counted number of file system objects. - - - - - - - The transaction. - The directory path. - - The search string to match against the names of directories in . - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - flags that specify how the directory is to be enumerated. - - - [AlphaFS] Counts file system objects: files, folders or both) in a given directory. - The counted number of file system objects. - - - - - - - The transaction. - The directory path. - - The search string to match against the names of directories in . - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - flags that specify how the directory is to be enumerated. - Indicates the format of the path parameter(s). - - - [AlphaFS] Deletes empty subdirectories from the specified directory. - - - - The name of the directory to remove empty subdirectories from. - deletes empty subdirectories from this directory and its subdirectories. - - - [AlphaFS] Deletes empty subdirectories from the specified directory. - - - - The name of the directory to remove empty subdirectories from. - deletes empty subdirectories from this directory and its subdirectories. - Indicates the format of the path parameter(s). - - - [AlphaFS] Deletes empty subdirectories from the specified directory. - - - - The name of the directory to remove empty subdirectories from. - deletes empty subdirectories from this directory and its subdirectories. - overrides read only of empty directories. - - - [AlphaFS] Deletes empty subdirectories from the specified directory. - - - - The name of the directory to remove empty subdirectories from. - deletes empty subdirectories from this directory and its subdirectories. - overrides read only of empty directories. - Indicates the format of the path parameter(s). - - - [AlphaFS] Deletes empty subdirectories from the specified directory. - - - - The transaction. - The name of the directory to remove empty subdirectories from. - deletes empty subdirectories from this directory and its subdirectories. - - - [AlphaFS] Deletes empty subdirectories from the specified directory. - - - - The transaction. - The name of the directory to remove empty subdirectories from. - deletes empty subdirectories from this directory and its subdirectories. - Indicates the format of the path parameter(s). - - - [AlphaFS] Deletes empty subdirectories from the specified directory. - - - - The transaction. - The name of the directory to remove empty subdirectories from. - deletes empty subdirectories from this directory and its subdirectories. - overrides read only of empty directories. - - - [AlphaFS] Deletes empty subdirectories from the specified directory. - - - - The transaction. - The name of the directory to remove empty subdirectories from. - deletes empty subdirectories from this directory and its subdirectories. - overrides read only of empty directories. - Indicates the format of the path parameter(s). - - - Delete empty subdirectories from the specified directory. - - - - - - - A FileSystemEntryInfo instance. Use either or , not both. - The transaction. - The name of the directory to remove empty subdirectories from. Use either or , not both. - deletes empty subdirectories from this directory and its subdirectories. - overrides read only of empty directories. - When indicates the method is called externally. - Indicates the format of the path parameter(s). - - - Deletes an empty directory from a specified path. - - - - - - - - The name of the empty directory to remove. This directory must be writable and empty. - - - Deletes the specified directory and, if indicated, any subdirectories in the directory. - - - - - - - - The name of the directory to remove. - to remove directories, subdirectories, and files in . otherwise. - - - [AlphaFS] Deletes an empty directory from a specified path. - - - - - - - - The name of the empty directory to remove. This directory must be writable and empty. - Indicates the format of the path parameter(s). - - - [AlphaFS] Deletes the specified directory and, if indicated, any subdirectories in the directory. - - - - - - - - The name of the directory to remove. - to remove directories, subdirectories, and files in . otherwise. - Indicates the format of the path parameter(s). - - - [AlphaFS] Deletes the specified directory and, if indicated, any subdirectories in the directory. - - - - - - - - The name of the directory to remove. - to remove directories, subdirectories, and files in . otherwise. - overrides read only of files and directories. - - - [AlphaFS] Deletes the specified directory and, if indicated, any subdirectories in the directory. - - - - - - - - The name of the directory to remove. - to remove directories, subdirectories, and files in . otherwise. - overrides read only of files and directories. - Indicates the format of the path parameter(s). - - - [AlphaFS] Deletes an empty directory from a specified path. - - - - - - - - The transaction. - The name of the empty directory to remove. This directory must be writable and empty. - - - [AlphaFS] Deletes an empty directory from a specified path. - - - - - - - - The transaction. - The name of the empty directory to remove. This directory must be writable and empty. - Indicates the format of the path parameter(s). - - - [AlphaFS] Deletes the specified directory and, if indicated, any subdirectories in the directory. - - - - - - - - The transaction. - The name of the directory to remove. - to remove directories, subdirectories, and files in . otherwise. - - - [AlphaFS] Deletes the specified directory and, if indicated, any subdirectories in the directory. - - - - - - - - The transaction. - The name of the directory to remove. - to remove directories, subdirectories, and files in . otherwise. - Indicates the format of the path parameter(s). - - - [AlphaFS] Deletes the specified directory and, if indicated, any subdirectories in the directory. - - - - - - - - The transaction. - The name of the directory to remove. - to remove directories, subdirectories, and files in . otherwise. - overrides read only of files and directories. - - - [AlphaFS] Deletes the specified directory and, if indicated, any subdirectories in the directory. - - - - - - - - The transaction. - The name of the directory to remove. - to remove directories, subdirectories, and files in . otherwise. - overrides read only of files and directories. - Indicates the format of the path parameter(s). - - - Deletes the specified directory and, if indicated, any subdirectories in the directory. - The RemoveDirectory function marks a directory for deletion on close. Therefore, the directory is not removed until the last handle to the directory is closed. - - - - - - - - A FileSystemEntryInfo instance. Use either or , not both. - The transaction. - The name of the directory to remove. Use either or , not both. - to remove all files and subdirectories recursively; otherwise only the top level empty directory. - overrides read only attribute of files and directories. - requires the directory must be empty. - does not throw an Exception when the file system object does not exist. - Indicates the format of the path parameter(s). - - - Creates all directories and subdirectories in the specified path unless they already exist. - An object that represents the directory at the specified path. This object is returned regardless of whether a directory at the specified path already exists. - - - - - - - The directory to create. - - - [AlphaFS] Creates all the directories in the specified path, applying the specified Windows security. - An object that represents the directory at the specified path. This object is returned regardless of whether a directory at the specified path already exists. - - - - - - - The directory to create. - Indicates the format of the path parameter(s). - - - [AlphaFS] Creates all the directories in the specified path, applying the specified Windows security. - An object that represents the directory at the specified path. This object is returned regardless of whether a directory at the specified path already exists. - - - - - - - The directory to create. - When compresses the directory. - - - [AlphaFS] Creates all the directories in the specified path, applying the specified Windows security. - An object that represents the directory at the specified path. This object is returned regardless of whether a directory at the specified path already exists. - - - - - - - The directory to create. - When compresses the directory. - Indicates the format of the path parameter(s). - - - Creates all the directories in the specified path, unless the already exist, applying the specified Windows security. - An object that represents the directory at the specified path. This object is returned regardless of whether a directory at the specified path already exists. - - - - - - - The directory to create. - The access control to apply to the directory. - - - [AlphaFS] Creates all the directories in the specified path, applying the specified Windows security. - An object that represents the directory at the specified path. This object is returned regardless of whether a directory at the specified path already exists. - - - - - - - The directory to create. - The access control to apply to the directory. - Indicates the format of the path parameter(s). - - - [AlphaFS] Creates all the directories in the specified path, applying the specified Windows security. - An object that represents the directory at the specified path. This object is returned regardless of whether a directory at the specified path already exists. - - - - - - - The directory to create. - The access control to apply to the directory. - When compresses the directory. - - - [AlphaFS] Creates all the directories in the specified path, applying the specified Windows security. - An object that represents the directory at the specified path. This object is returned regardless of whether a directory at the specified path already exists. - - - - - - - The directory to create. - The access control to apply to the directory. - When compresses the directory. - Indicates the format of the path parameter(s). - - - [AlphaFS] Creates a new directory, with the attributes of a specified template directory. - An object that represents the directory at the specified path. This object is returned regardless of whether a directory at the specified path already exists. - - - - - - - The directory to create. - The path of the directory to use as a template when creating the new directory. - - - [AlphaFS] Creates a new directory, with the attributes of a specified template directory. - An object that represents the directory at the specified path. This object is returned regardless of whether a directory at the specified path already exists. - - - - - - - The directory to create. - The path of the directory to use as a template when creating the new directory. - Indicates the format of the path parameter(s). - - - [AlphaFS] Creates a new directory, with the attributes of a specified template directory. - An object that represents the directory at the specified path. This object is returned regardless of whether a directory at the specified path already exists. - - - - - - - The directory to create. - The path of the directory to use as a template when creating the new directory. - When compresses the directory. - - - [AlphaFS] Creates a new directory, with the attributes of a specified template directory. - An object that represents the directory at the specified path. This object is returned regardless of whether a directory at the specified path already exists. - - - - - - - The directory to create. - The path of the directory to use as a template when creating the new directory. - When compresses the directory. - Indicates the format of the path parameter(s). - - - [AlphaFS] Creates all the directories in the specified path of a specified template directory and applies the specified Windows security. - An object that represents the directory at the specified path. This object is returned regardless of whether a directory at the specified path already exists. - - - - - - - The directory to create. - The path of the directory to use as a template when creating the new directory. - The access control to apply to the directory. - - - [AlphaFS] Creates all the directories in the specified path of a specified template directory and applies the specified Windows security. - An object that represents the directory at the specified path. This object is returned regardless of whether a directory at the specified path already exists. - - - - - - - The directory to create. - The path of the directory to use as a template when creating the new directory. - The access control to apply to the directory. - Indicates the format of the path parameter(s). - - - [AlphaFS] Creates all the directories in the specified path of a specified template directory and applies the specified Windows security. - An object that represents the directory at the specified path. This object is returned regardless of whether a directory at the specified path already exists. - - - - - - - The directory to create. - The path of the directory to use as a template when creating the new directory. - The access control to apply to the directory. - When compresses the directory. - - - [AlphaFS] Creates all the directories in the specified path of a specified template directory and applies the specified Windows security. - An object that represents the directory at the specified path. This object is returned regardless of whether a directory at the specified path already exists. - - - - - - - The directory to create. - The path of the directory to use as a template when creating the new directory. - The access control to apply to the directory. - When compresses the directory. - Indicates the format of the path parameter(s). - - - Creates all directories and subdirectories in the specified path unless they already exist. - An object that represents the directory at the specified path. This object is returned regardless of whether a directory at the specified path already exists. - - - - - - - The transaction. - The directory to create. - - - [AlphaFS] Creates all the directories in the specified path, applying the specified Windows security. - An object that represents the directory at the specified path. This object is returned regardless of whether a directory at the specified path already exists. - - - - - - - The transaction. - The directory to create. - Indicates the format of the path parameter(s). - - - [AlphaFS] Creates all the directories in the specified path, applying the specified Windows security. - An object that represents the directory at the specified path. This object is returned regardless of whether a directory at the specified path already exists. - - - - - - - The transaction. - The directory to create. - When compresses the directory. - - - [AlphaFS] Creates all the directories in the specified path, applying the specified Windows security. - An object that represents the directory at the specified path. This object is returned regardless of whether a directory at the specified path already exists. - - - - - - - The transaction. - The directory to create. - When compresses the directory. - Indicates the format of the path parameter(s). - - - Creates all the directories in the specified path, unless the already exist, applying the specified Windows security. - An object that represents the directory at the specified path. This object is returned regardless of whether a directory at the specified path already exists. - - - - - - - The transaction. - The directory to create. - The access control to apply to the directory. - - - [AlphaFS] Creates all the directories in the specified path, applying the specified Windows security. - An object that represents the directory at the specified path. This object is returned regardless of whether a directory at the specified path already exists. - - - - - - - The transaction. - The directory to create. - The access control to apply to the directory. - Indicates the format of the path parameter(s). - - - [AlphaFS] Creates all the directories in the specified path, applying the specified Windows security. - An object that represents the directory at the specified path. This object is returned regardless of whether a directory at the specified path already exists. - - - - - - - The transaction. - The directory to create. - The access control to apply to the directory. - When compresses the directory. - - - [AlphaFS] Creates all the directories in the specified path, applying the specified Windows security. - An object that represents the directory at the specified path. This object is returned regardless of whether a directory at the specified path already exists. - - - - - - - The transaction. - The directory to create. - The access control to apply to the directory. - When compresses the directory. - Indicates the format of the path parameter(s). - - - [AlphaFS] Creates a new directory, with the attributes of a specified template directory. - An object that represents the directory at the specified path. This object is returned regardless of whether a directory at the specified path already exists. - - - - - - - The transaction. - The directory to create. - The path of the directory to use as a template when creating the new directory. - - - [AlphaFS] Creates a new directory, with the attributes of a specified template directory. - An object that represents the directory at the specified path. This object is returned regardless of whether a directory at the specified path already exists. - - - - - - - The transaction. - The directory to create. - The path of the directory to use as a template when creating the new directory. - Indicates the format of the path parameter(s). - - - [AlphaFS] Creates a new directory, with the attributes of a specified template directory. - An object that represents the directory at the specified path. This object is returned regardless of whether a directory at the specified path already exists. - - - - - - - The transaction. - The directory to create. - The path of the directory to use as a template when creating the new directory. - When compresses the directory. - - - [AlphaFS] Creates a new directory, with the attributes of a specified template directory. - An object that represents the directory at the specified path. This object is returned regardless of whether a directory at the specified path already exists. - - - - - - - The transaction. - The directory to create. - The path of the directory to use as a template when creating the new directory. - When compresses the directory. - Indicates the format of the path parameter(s). - - - [AlphaFS] Creates all the directories in the specified path of a specified template directory and applies the specified Windows security. - An object that represents the directory at the specified path. This object is returned regardless of whether a directory at the specified path already exists. - - - - - - - The transaction. - The directory to create. - The path of the directory to use as a template when creating the new directory. - The access control to apply to the directory. - - - [AlphaFS] Creates all the directories in the specified path of a specified template directory and applies the specified Windows security. - An object that represents the directory at the specified path. This object is returned regardless of whether a directory at the specified path already exists. - - - - - - - The transaction. - The directory to create. - The path of the directory to use as a template when creating the new directory. - The access control to apply to the directory. - Indicates the format of the path parameter(s). - - - [AlphaFS] Creates all the directories in the specified path of a specified template directory and applies the specified Windows security. - An object that represents the directory at the specified path. This object is returned regardless of whether a directory at the specified path already exists. - - - - - - - The transaction. - The directory to create. - The path of the directory to use as a template when creating the new directory. - The access control to apply to the directory. - When compresses the directory. - - - [AlphaFS] Creates all the directories in the specified path of a specified template directory and applies the specified Windows security. - An object that represents the directory at the specified path. This object is returned regardless of whether a directory at the specified path already exists. - - - - - - - The transaction. - The directory to create. - The path of the directory to use as a template when creating the new directory. - The access control to apply to the directory. - When compresses the directory. - Indicates the format of the path parameter(s). - - - Creates a new directory with the attributes of a specified template directory (if one is specified). - If the underlying file system supports security on files and directories, the function applies the specified security descriptor to the new directory. - The new directory retains the other attributes of the specified template directory. - - - Returns an object that represents the directory at the specified path. - This object is returned regardless of whether a directory at the specified path already exists. - - - - - - - - The transaction. - The directory to create. - The path of the directory to use as a template when creating the new directory. May be to indicate that no template should be used. - The access control to apply to the directory, may be null. - When compresses the directory. - Indicates the format of the path parameter(s). - - - Returns an enumerable collection of directory names in a specified . - An enumerable collection of the full names (including paths) for the directories in the directory specified by . - - - - - - - The directory to search. - - - Returns an enumerable collection of directory names that match a in a specified . - An enumerable collection of the full names (including paths) for the directories in the directory specified by and that match the specified . - - - - - - - The directory to search. - - The search string to match against the names of directories in . - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - - - Returns an enumerable collection of directory names that match a in a specified , and optionally searches subdirectories. - An enumerable collection of the full names (including paths) for the directories in the directory specified by and that match the specified and . - - - - - - - The directory to search. - - The search string to match against the names of directories in . - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - - One of the enumeration values that specifies whether the - should include only the current directory or should include all subdirectories. - - - - [AlphaFS] Returns an enumerable collection of directory names in a specified . - An enumerable collection of the full names (including paths) for the directories in the directory specified by . - - - - - - - The directory to search. - Indicates the format of the path parameter(s). - - - [AlphaFS] Returns an enumerable collection of directory names that match a in a specified . - An enumerable collection of the full names (including paths) for the directories in the directory specified by and that match the specified . - - - - - - - The directory to search. - - The search string to match against the names of directories in . - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - Indicates the format of the path parameter(s). - - - [AlphaFS] Returns an enumerable collection of directory names that match a in a specified , and optionally searches subdirectories. - An enumerable collection of the full names (including paths) for the directories in the directory specified by and that match the specified and . - - - - - - - The directory to search. - - The search string to match against the names of directories in . - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - - One of the enumeration values that specifies whether the - should include only the current directory or should include all subdirectories. - - Indicates the format of the path parameter(s). - - - [AlphaFS] Returns an enumerable collection of directory names in a specified . - An enumerable collection of the full names (including paths) for the directories in the directory specified by . - - - - - - - The directory to search. - flags that specify how the directory is to be enumerated. - - - [AlphaFS] Returns an enumerable collection of directory names in a specified . - An enumerable collection of the full names (including paths) for the directories in the directory specified by . - - - - - - - The directory to search. - flags that specify how the directory is to be enumerated. - Indicates the format of the path parameter(s). - - - [AlphaFS] Returns an enumerable collection of directory names in a specified . - An enumerable collection of the full names (including paths) for the directories in the directory specified by . - - - - - - - The directory to search. - - The search string to match against the names of directories in . - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - flags that specify how the directory is to be enumerated. - - - [AlphaFS] Returns an enumerable collection of directory names in a specified . - An enumerable collection of the full names (including paths) for the directories in the directory specified by . - - - - - - - The directory to search. - - The search string to match against the names of directories in . - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - flags that specify how the directory is to be enumerated. - Indicates the format of the path parameter(s). - - - [AlphaFS] Returns an enumerable collection of directory instances in a specified . - An enumerable collection of the full names (including paths) for the directories in the directory specified by . - - - - - - - The transaction. - The directory to search. - - - [AlphaFS] Returns an enumerable collection of directory instances that match a in a specified . - An enumerable collection of the full names (including paths) for the directories in the directory specified by and that match the specified . - - - - - - - The transaction. - The directory to search. - - The search string to match against the names of directories in . - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - - - [AlphaFS] Returns an enumerable collection of directory names that match a in a specified , and optionally searches subdirectories. - An enumerable collection of the full names (including paths) for the directories in the directory specified by and that match the specified and . - - - - - - - The transaction. - The directory to search. - - The search string to match against the names of directories in . - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - - One of the enumeration values that specifies whether the - should include only the current directory or should include all subdirectories. - - - - [AlphaFS] Returns an enumerable collection of directory instances in a specified . - An enumerable collection of the full names (including paths) for the directories in the directory specified by . - - - - - - - The transaction. - The directory to search. - Indicates the format of the path parameter(s). - - - [AlphaFS] Returns an enumerable collection of directory instances that match a in a specified . - An enumerable collection of the full names (including paths) for the directories in the directory specified by and that match the specified . - - - - - - - The transaction. - The directory to search. - - The search string to match against the names of directories in . - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - Indicates the format of the path parameter(s). - - - [AlphaFS] Returns an enumerable collection of directory names that match a in a specified , and optionally searches subdirectories. - An enumerable collection of the full names (including paths) for the directories in the directory specified by and that match the specified and . - - - - - - - The transaction. - The directory to search. - - The search string to match against the names of directories in . - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - - One of the enumeration values that specifies whether the - should include only the current directory or should include all subdirectories. - - Indicates the format of the path parameter(s). - - - [AlphaFS] Returns an enumerable collection of directory instances in a specified . - An enumerable collection of the full names (including paths) for the directories in the directory specified by . - - - - - - - The transaction. - The directory to search. - flags that specify how the directory is to be enumerated. - - - [AlphaFS] Returns an enumerable collection of directory instances in a specified . - An enumerable collection of the full names (including paths) for the directories in the directory specified by . - - - - - - - The transaction. - The directory to search. - flags that specify how the directory is to be enumerated. - Indicates the format of the path parameter(s). - - - [AlphaFS] Returns an enumerable collection of directory instances that match a in a specified . - An enumerable collection of the full names (including paths) for the directories in the directory specified by and that match the specified . - - - - - - - The transaction. - The directory to search. - - The search string to match against the names of directories in . - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - flags that specify how the directory is to be enumerated. - - - [AlphaFS] Returns an enumerable collection of directory instances that match a in a specified . - An enumerable collection of the full names (including paths) for the directories in the directory specified by and that match the specified . - - - - - - - The transaction. - The directory to search. - - The search string to match against the names of directories in . - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - flags that specify how the directory is to be enumerated. - Indicates the format of the path parameter(s). - - - Returns an enumerable collection of file names in a specified . - An enumerable collection of the full names (including paths) for the files in the directory specified by . - - - - - - - The directory to search. - - - Returns an enumerable collection of file names in a specified . - An enumerable collection of the full names (including paths) for the files in the directory specified by and that match the . - - - - - - - The directory to search. - - The search string to match against the names of directories in . - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - - - Returns an enumerable collection of file names that match a in a specified , and optionally searches subdirectories. - An enumerable collection of the full names (including paths) for the files in the directory specified by and that match the specified and . - - - - - - - The directory to search. - - The search string to match against the names of directories in . - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - - One of the enumeration values that specifies whether the - should include only the current directory or should include all subdirectories. - - - - [AlphaFS] Returns an enumerable collection of file names in a specified . - An enumerable collection of the full names (including paths) for the files in the directory specified by . - - - - - - - The directory to search. - Indicates the format of the path parameter(s). - - - [AlphaFS] Returns an enumerable collection of file names in a specified . - An enumerable collection of the full names (including paths) for the files in the directory specified by and that match the . - - - - - - - The directory to search. - - The search string to match against the names of directories in . - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - Indicates the format of the path parameter(s). - - - [AlphaFS] Returns an enumerable collection of file names that match a in a specified , and optionally searches subdirectories. - An enumerable collection of the full names (including paths) for the files in the directory specified by and that match the specified and . - - - - - - - The directory to search. - - The search string to match against the names of directories in . - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - - One of the enumeration values that specifies whether the - should include only the current directory or should include all subdirectories. - - Indicates the format of the path parameter(s). - - - [AlphaFS] Returns an enumerable collection of file names in a specified . - An enumerable collection of the full names (including paths) for the files in the directory specified by . - - - - - - - The directory to search. - flags that specify how the directory is to be enumerated. - - - [AlphaFS] Returns an enumerable collection of file names in a specified . - An enumerable collection of the full names (including paths) for the files in the directory specified by . - - - - - - - The directory to search. - flags that specify how the directory is to be enumerated. - Indicates the format of the path parameter(s). - - - [AlphaFS] Returns an enumerable collection of file names in a specified . - An enumerable collection of the full names (including paths) for the files in the directory specified by and that match the . - - - - - - - The directory to search. - - The search string to match against the names of directories in . - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - flags that specify how the directory is to be enumerated. - - - [AlphaFS] Returns an enumerable collection of file names in a specified . - An enumerable collection of the full names (including paths) for the files in the directory specified by and that match the . - - - - - - - The directory to search. - - The search string to match against the names of directories in . - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - flags that specify how the directory is to be enumerated. - Indicates the format of the path parameter(s). - - - [AlphaFS] Returns an enumerable collection of file names in a specified . - An enumerable collection of the full names (including paths) for the files in the directory specified by . - - - - - - - The transaction. - The directory to search. - - - [AlphaFS] Returns an enumerable collection of file instances that match a in a specified . - An enumerable collection of the full names (including paths) for the files in the directory specified by and that match the . - - - - - - - The transaction. - The directory to search. - - The search string to match against the names of directories in . - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - - - [AlphaFS] Returns an enumerable collection of file instances instances that match a in a specified , and optionally searches subdirectories. - An enumerable collection of the full names (including paths) for the files in the directory specified by and that match the specified and . - - - - - - - The transaction. - The directory to search. - - The search string to match against the names of directories in . - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - - One of the enumeration values that specifies whether the - should include only the current directory or should include all subdirectories. - - - - [AlphaFS] Returns an enumerable collection of file names in a specified . - An enumerable collection of the full names (including paths) for the files in the directory specified by . - - - - - - - The transaction. - The directory to search. - Indicates the format of the path parameter(s). - - - [AlphaFS] Returns an enumerable collection of file instances that match a in a specified . - An enumerable collection of the full names (including paths) for the files in the directory specified by and that match the . - - - - - - - The transaction. - The directory to search. - - The search string to match against the names of directories in . - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - Indicates the format of the path parameter(s). - - - [AlphaFS] Returns an enumerable collection of file instances instances that match a in a specified , and optionally searches subdirectories. - An enumerable collection of the full names (including paths) for the files in the directory specified by and that match the specified and . - - - - - - - The transaction. - The directory to search. - - The search string to match against the names of directories in . - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - - One of the enumeration values that specifies whether the - should include only the current directory or should include all subdirectories. - - Indicates the format of the path parameter(s). - - - [AlphaFS] Returns an enumerable collection of file names in a specified . - An enumerable collection of the full names (including paths) for the files in the directory specified by . - - - - - - - The transaction. - The directory to search. - flags that specify how the directory is to be enumerated. - - - [AlphaFS] Returns an enumerable collection of file names in a specified . - An enumerable collection of the full names (including paths) for the files in the directory specified by . - - - - - - - The transaction. - The directory to search. - flags that specify how the directory is to be enumerated. - Indicates the format of the path parameter(s). - - - [AlphaFS] Returns an enumerable collection of file instances that match a in a specified . - An enumerable collection of the full names (including paths) for the files in the directory specified by and that match the . - - - - - - - The transaction. - The directory to search. - - The search string to match against the names of directories in . - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - flags that specify how the directory is to be enumerated. - - - [AlphaFS] Returns an enumerable collection of file instances that match a in a specified . - An enumerable collection of the full names (including paths) for the files in the directory specified by and that match the . - - - - - - - The transaction. - The directory to search. - - The search string to match against the names of directories in . - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - flags that specify how the directory is to be enumerated. - Indicates the format of the path parameter(s). - - - [AlphaFS] Returns an enumerable collection of file system entries in a specified path. - The matching file system entries. The type of the items is determined by the type . - - - - - - - The type to return. This may be one of the following types: - - - - This method will return instances of instances. - - - - This method will return instances of and instances. - - - - This method will return the full path of each item. - - - - The directory to search. - - - [AlphaFS] Returns an enumerable collection of file system entries in a specified path. - The matching file system entries. The type of the items is determined by the type . - - - - - - - The type to return. This may be one of the following types: - - - - This method will return instances of instances. - - - - This method will return instances of and instances. - - - - This method will return the full path of each item. - - - - The directory to search. - Indicates the format of the path parameter(s). - - - [AlphaFS] Returns an enumerable collection of file system entries in a specified path. - The matching file system entries. The type of the items is determined by the type . - - - - - - - The type to return. This may be one of the following types: - - - - This method will return instances of instances. - - - - This method will return instances of and instances. - - - - This method will return the full path of each item. - - - - The directory to search. - flags that specify how the directory is to be enumerated. - - - [AlphaFS] Returns an enumerable collection of file system entries in a specified path. - The matching file system entries. The type of the items is determined by the type . - - - - - - - The type to return. This may be one of the following types: - - - - This method will return instances of instances. - - - - This method will return instances of and instances. - - - - This method will return the full path of each item. - - - - The directory to search. - flags that specify how the directory is to be enumerated. - Indicates the format of the path parameter(s). - - - [AlphaFS] Returns an enumerable collection of file system entries that match a in a specified path. - The matching file system entries. The type of the items is determined by the type . - - - - - - - The type to return. This may be one of the following types: - - - - This method will return instances of instances. - - - - This method will return instances of and instances. - - - - This method will return the full path of each item. - - - - The directory to search. - - The search string to match against the names of directories in . - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - - - [AlphaFS] Returns an enumerable collection of file system entries that match a in a specified path. - The matching file system entries. The type of the items is determined by the type . - - - - - - - The type to return. This may be one of the following types: - - - - This method will return instances of instances. - - - - This method will return instances of and instances. - - - - This method will return the full path of each item. - - - - The directory to search. - - The search string to match against the names of directories in . - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - Indicates the format of the path parameter(s). - - - [AlphaFS] Returns an enumerable collection of file system entries that match a in a specified path using . - The matching file system entries. The type of the items is determined by the type . - - - - - - - The type to return. This may be one of the following types: - - - - This method will return instances of instances. - - - - This method will return instances of and instances. - - - - This method will return the full path of each item. - - - - The directory to search. - - The search string to match against the names of directories in . - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - flags that specify how the directory is to be enumerated. - - - [AlphaFS] Returns an enumerable collection of file system entries that match a in a specified path using . - The matching file system entries. The type of the items is determined by the type . - - - - - - - The type to return. This may be one of the following types: - - - - This method will return instances of instances. - - - - This method will return instances of and instances. - - - - This method will return the full path of each item. - - - - The directory to search. - - The search string to match against the names of directories in . - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - flags that specify how the directory is to be enumerated. - Indicates the format of the path parameter(s). - - - [AlphaFS] Returns an enumerable collection of file system entries in a specified path. - The matching file system entries. The type of the items is determined by the type . - - - - - - - The type to return. This may be one of the following types: - - - - This method will return instances of instances. - - - - This method will return instances of and instances. - - - - This method will return the full path of each item. - - - - The transaction. - The directory to search. - - - [AlphaFS] Returns an enumerable collection of file system entries in a specified path. - The matching file system entries. The type of the items is determined by the type . - - - - - - - The type to return. This may be one of the following types: - - - - This method will return instances of instances. - - - - This method will return instances of and instances. - - - - This method will return the full path of each item. - - - - The transaction. - The directory to search. - Indicates the format of the path parameter(s). - - - [AlphaFS] Returns an enumerable collection of file system entries in a specified path. - The matching file system entries. The type of the items is determined by the type . - - - - - - - The type to return. This may be one of the following types: - - - - This method will return instances of instances. - - - - This method will return instances of and instances. - - - - This method will return the full path of each item. - - - - The transaction. - The directory to search. - flags that specify how the directory is to be enumerated. - - - [AlphaFS] Returns an enumerable collection of file system entries in a specified path. - The matching file system entries. The type of the items is determined by the type . - - - - - - - The type to return. This may be one of the following types: - - - - This method will return instances of instances. - - - - This method will return instances of and instances. - - - - This method will return the full path of each item. - - - - The transaction. - The directory to search. - flags that specify how the directory is to be enumerated. - Indicates the format of the path parameter(s). - - - [AlphaFS] Returns an enumerable collection of file system entries that match a in a specified path. - The matching file system entries. The type of the items is determined by the type . - - - - - - - The type to return. This may be one of the following types: - - - - This method will return instances of instances. - - - - This method will return instances of and instances. - - - - This method will return the full path of each item. - - - - The transaction. - The directory to search. - - The search string to match against the names of directories in . - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - - - [AlphaFS] Returns an enumerable collection of file system entries that match a in a specified path. - The matching file system entries. The type of the items is determined by the type . - - - - - - - The type to return. This may be one of the following types: - - - - This method will return instances of instances. - - - - This method will return instances of and instances. - - - - This method will return the full path of each item. - - - - The transaction. - The directory to search. - - The search string to match against the names of directories in . - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - Indicates the format of the path parameter(s). - - - [AlphaFS] Returns an enumerable collection of file system entries that match a in a specified path using . - The matching file system entries. The type of the items is determined by the type . - - - - - - - The type to return. This may be one of the following types: - - - - This method will return instances of instances. - - - - This method will return instances of and instances. - - - - This method will return the full path of each item. - - - - The transaction. - The directory to search. - - The search string to match against the names of directories in . - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - flags that specify how the directory is to be enumerated. - - - [AlphaFS] Returns an enumerable collection of file system entries that match a in a specified path using . - The matching file system entries. The type of the items is determined by the type . - - - - - - - The type to return. This may be one of the following types: - - - - This method will return instances of instances. - - - - This method will return instances of and instances. - - - - This method will return the full path of each item. - - - - The transaction. - The directory to search. - - The search string to match against the names of directories in . - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - flags that specify how the directory is to be enumerated. - Indicates the format of the path parameter(s). - - - Returns an enumerable collection of file system entries in a specified path using . - The matching file system entries. The type of the items is determined by the type . - - - - - - - The type to return. This may be one of the following types: - - - - This method will return instances of instances. - - - - This method will return instances of and instances. - - - - This method will return the full path of each item. - - - - The transaction. - The directory to search. - - The search string to match against the names of directories in . - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - flags that specify how the directory is to be enumerated. - Indicates the format of the path parameter(s). - - - Returns an enumerable collection of file names and directory names in a specified . - An enumerable collection of file system entries in the directory specified by . - - - - - - - The directory to search. - - - Returns an enumerable collection of file names and directory names that match a in a specified . - An enumerable collection of file system entries in the directory specified by and that match the specified . - - - - - - - The directory to search. - - The search string to match against the names of directories in . - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - - - Returns an enumerable collection of file names and directory names that match a in a specified , and optionally searches subdirectories. - An enumerable collection of file system entries in the directory specified by and that match the specified and . - - - - - - - The directory to search. - - The search string to match against the names of directories in . - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - - One of the enumeration values that specifies whether the - should include only the current directory or should include all subdirectories. - - - - [AlphaFS] Returns an enumerable collection of file names and directory names in a specified . - An enumerable collection of file system entries in the directory specified by . - - - - - - - The directory to search. - Indicates the format of the path parameter(s). - - - [AlphaFS] Returns an enumerable collection of file names and directory names that match a in a specified . - An enumerable collection of file system entries in the directory specified by and that match the specified . - - - - - - - The directory to search. - - The search string to match against the names of directories in . - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - Indicates the format of the path parameter(s). - - - [AlphaFS] Returns an enumerable collection of file names and directory names that match a in a specified , and optionally searches subdirectories. - An enumerable collection of file system entries in the directory specified by and that match the specified and . - - - - - - - The directory to search. - - The search string to match against the names of directories in . - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - - One of the enumeration values that specifies whether the - should include only the current directory or should include all subdirectories. - - Indicates the format of the path parameter(s). - - - [AlphaFS] Returns an enumerable collection of file names and directory names in a specified . - An enumerable collection of file system entries in the directory specified by . - - - - - - - The directory to search. - flags that specify how the directory is to be enumerated. - - - [AlphaFS] Returns an enumerable collection of file names and directory names in a specified . - An enumerable collection of file system entries in the directory specified by . - - - - - - - The directory to search. - flags that specify how the directory is to be enumerated. - Indicates the format of the path parameter(s). - - - [AlphaFS] Returns an enumerable collection of file names and directory names that match a in a specified . - An enumerable collection of file system entries in the directory specified by and that match the specified . - - - - - - - The directory to search. - - The search string to match against the names of directories in . - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - flags that specify how the directory is to be enumerated. - - - [AlphaFS] Returns an enumerable collection of file names and directory names that match a in a specified . - An enumerable collection of file system entries in the directory specified by and that match the specified . - - - - - - - The directory to search. - - The search string to match against the names of directories in . - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - Indicates the format of the path parameter(s). - flags that specify how the directory is to be enumerated. - - - [AlphaFS] Returns an enumerable collection of file names and directory names in a specified . - An enumerable collection of file system entries in the directory specified by . - - - - - - - The transaction. - The directory to search. - - - [AlphaFS] Returns an enumerable collection of file names and directory names that match a in a specified . - An enumerable collection of file system entries in the directory specified by and that match the specified . - - - - - - - The transaction. - The directory to search. - - The search string to match against the names of directories in . - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - - - [AlphaFS] Returns an enumerable collection of file names and directory names that match a in a specified , and optionally searches subdirectories. - An enumerable collection of file system entries in the directory specified by and that match the specified and . - - - - - - - The transaction. - The directory to search. - - The search string to match against the names of directories in . - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - - One of the enumeration values that specifies whether the - should include only the current directory or should include all subdirectories. - - - - [AlphaFS] Returns an enumerable collection of file names and directory names in a specified . - An enumerable collection of file system entries in the directory specified by . - - - - - - - The transaction. - The directory to search. - Indicates the format of the path parameter(s). - - - [AlphaFS] Returns an enumerable collection of file names and directory names that match a in a specified . - An enumerable collection of file system entries in the directory specified by and that match the specified . - - - - - - - The transaction. - The directory to search. - - The search string to match against the names of directories in . - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - Indicates the format of the path parameter(s). - - - [AlphaFS] Returns an enumerable collection of file names and directory names that match a in a specified , and optionally searches subdirectories. - An enumerable collection of file system entries in the directory specified by and that match the specified and . - - - - - - - The transaction. - The directory to search. - - The search string to match against the names of directories in . - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - - One of the enumeration values that specifies whether the - should include only the current directory or should include all subdirectories. - - Indicates the format of the path parameter(s). - - - [AlphaFS] Returns an enumerable collection of file names and directory names in a specified . - An enumerable collection of file system entries in the directory specified by . - - - - - - - The transaction. - The directory to search. - flags that specify how the directory is to be enumerated. - - - [AlphaFS] Returns an enumerable collection of file names and directory names in a specified . - An enumerable collection of file system entries in the directory specified by . - - - - - - - The transaction. - The directory to search. - flags that specify how the directory is to be enumerated. - Indicates the format of the path parameter(s). - - - [AlphaFS] Returns an enumerable collection of file names and directory names that match a in a specified . - An enumerable collection of file system entries in the directory specified by and that match the specified . - - - - - - - The transaction. - The directory to search. - - The search string to match against the names of directories in . - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - flags that specify how the directory is to be enumerated. - - - [AlphaFS] Returns an enumerable collection of file names and directory names that match a in a specified . - An enumerable collection of file system entries in the directory specified by and that match the specified . - - - - - - - The transaction. - The directory to search. - - The search string to match against the names of directories in . - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - flags that specify how the directory is to be enumerated. - Indicates the format of the path parameter(s). - - - Determines whether the given path refers to an existing directory on disk. - - Returns if refers to an existing directory. - Returns if the directory does not exist or an error occurs when trying to determine if the specified file exists. - - - The Exists method returns if any error occurs while trying to determine if the specified file exists. - This can occur in situations that raise exceptions such as passing a file name with invalid characters or too many characters, - a failing or missing disk, or if the caller does not have permission to read the file. - - The path to test. - - - [AlphaFS] Determines whether the given path refers to an existing directory on disk. - - Returns if refers to an existing directory. - Returns if the directory does not exist or an error occurs when trying to determine if the specified file exists. - - - The Exists method returns if any error occurs while trying to determine if the specified file exists. - This can occur in situations that raise exceptions such as passing a file name with invalid characters or too many characters, - a failing or missing disk, or if the caller does not have permission to read the file. - - The path to test. - Indicates the format of the path parameter(s). - - - [AlphaFS] Determines whether the given path refers to an existing directory on disk. - - Returns if refers to an existing directory. - Returns if the directory does not exist or an error occurs when trying to determine if the specified file exists. - - - The Exists method returns if any error occurs while trying to determine if the specified file exists. - This can occur in situations that raise exceptions such as passing a file name with invalid characters or too many characters, - a failing or missing disk, or if the caller does not have permission to read the file. - - The transaction. - The path to test. - - - [AlphaFS] Determines whether the given path refers to an existing directory on disk. - - Returns if refers to an existing directory. - Returns if the directory does not exist or an error occurs when trying to determine if the specified file exists. - - - The Exists method returns if any error occurs while trying to determine if the specified file exists. - This can occur in situations that raise exceptions such as passing a file name with invalid characters or too many characters, - a failing or missing disk, or if the caller does not have permission to read the file. - - The transaction. - The path to test. - Indicates the format of the path parameter(s). - - - Returns the names of subdirectories (including their paths) in the specified directory. - An array of the full names (including paths) of subdirectories in the specified path, or an empty array if no directories are found. - - The names returned by this method are prefixed with the directory information provided in path. - The EnumerateDirectories and GetDirectories methods differ as follows: When you use EnumerateDirectories, you can start enumerating the collection of names - before the whole collection is returned; when you use GetDirectories, you must wait for the whole array of names to be returned before you can access the array. - Therefore, when you are working with many files and directories, EnumerateDirectories can be more efficient. - - - - - - - - - The directory to search. - - - Returns the names of subdirectories (including their paths) that match the specified search pattern in the specified directory. - An array of the full names (including paths) of the subdirectories that match the search pattern in the specified directory, or an empty array if no directories are found. - - The names returned by this method are prefixed with the directory information provided in path. - The EnumerateDirectories and GetDirectories methods differ as follows: When you use EnumerateDirectories, you can start enumerating the collection of names - before the whole collection is returned; when you use GetDirectories, you must wait for the whole array of names to be returned before you can access the array. - Therefore, when you are working with many files and directories, EnumerateDirectories can be more efficient. - - - - - - - - - The directory to search. - - The search string to match against the names of directories in . - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - - - Returns the names of the subdirectories (including their paths) that match the specified search pattern in the specified directory, and optionally searches subdirectories. - An array of the full names (including paths) of the subdirectories that match the specified criteria, or an empty array if no directories are found. - - The names returned by this method are prefixed with the directory information provided in path. - The EnumerateDirectories and GetDirectories methods differ as follows: When you use EnumerateDirectories, you can start enumerating the collection of names - before the whole collection is returned; when you use GetDirectories, you must wait for the whole array of names to be returned before you can access the array. - Therefore, when you are working with many files and directories, EnumerateDirectories can be more efficient. - - - - - - - - - The directory to search. - - The search string to match against the names of directories in . - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - - One of the enumeration values that specifies whether the - should include only the current directory or should include all subdirectories. - - - - Returns the names of subdirectories (including their paths) in the specified directory. - An array of the full names (including paths) of subdirectories in the specified path, or an empty array if no directories are found. - - The names returned by this method are prefixed with the directory information provided in path. - The EnumerateDirectories and GetDirectories methods differ as follows: When you use EnumerateDirectories, you can start enumerating the collection of names - before the whole collection is returned; when you use GetDirectories, you must wait for the whole array of names to be returned before you can access the array. - Therefore, when you are working with many files and directories, EnumerateDirectories can be more efficient. - - - - - - - - - The transaction. - The directory to search. - - - Returns the names of subdirectories (including their paths) that match the specified search pattern in the specified directory. - An array of the full names (including paths) of the subdirectories that match the search pattern in the specified directory, or an empty array if no directories are found. - - The names returned by this method are prefixed with the directory information provided in path. - The EnumerateDirectories and GetDirectories methods differ as follows: When you use EnumerateDirectories, you can start enumerating the collection of names - before the whole collection is returned; when you use GetDirectories, you must wait for the whole array of names to be returned before you can access the array. - Therefore, when you are working with many files and directories, EnumerateDirectories can be more efficient. - - - - - - - - - The transaction. - The directory to search. - - The search string to match against the names of directories in . - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - - - Returns the names of the subdirectories (including their paths) that match the specified search pattern in the specified directory, and optionally searches subdirectories. - An array of the full names (including paths) of the subdirectories that match the specified criteria, or an empty array if no directories are found. - - The names returned by this method are prefixed with the directory information provided in path. - The EnumerateDirectories and GetDirectories methods differ as follows: When you use EnumerateDirectories, you can start enumerating the collection of names - before the whole collection is returned; when you use GetDirectories, you must wait for the whole array of names to be returned before you can access the array. - Therefore, when you are working with many files and directories, EnumerateDirectories can be more efficient. - - - - - - - - - The transaction. - The directory to search. - - The search string to match against the names of directories in . - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - - One of the enumeration values that specifies whether the - should include only the current directory or should include all subdirectories. - - - - Returns the names of files (including their paths) in the specified directory. - An array of the full names (including paths) for the files in the specified directory, or an empty array if no files are found. - - The returned file names are appended to the supplied parameter. - The order of the returned file names is not guaranteed; use the Sort() method if a specific sort order is required. - The EnumerateFiles and GetFiles methods differ as follows: When you use EnumerateFiles, you can start enumerating the collection of names - before the whole collection is returned; when you use GetFiles, you must wait for the whole array of names to be returned before you can access the array. - Therefore, when you are working with many files and directories, EnumerateFiles can be more efficient. - - - - - - - - - The directory to search. - - - Returns the names of files (including their paths) that match the specified search pattern in the specified directory. - An array of the full names (including paths) for the files in the specified directory that match the specified search pattern, or an empty array if no files are found. - - The returned file names are appended to the supplied parameter. - The order of the returned file names is not guaranteed; use the Sort() method if a specific sort order is required. - The EnumerateFiles and GetFiles methods differ as follows: When you use EnumerateFiles, you can start enumerating the collection of names - before the whole collection is returned; when you use GetFiles, you must wait for the whole array of names to be returned before you can access the array. - Therefore, when you are working with many files and directories, EnumerateFiles can be more efficient. - - - - - - - - - The directory to search. - - The search string to match against the names of directories in . - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - - - Returns the names of files (including their paths) that match the specified search pattern in the current directory, and optionally searches subdirectories. - An array of the full names (including paths) for the files in the specified directory that match the specified search pattern and option, or an empty array if no files are found. - - The returned file names are appended to the supplied parameter. - The order of the returned file names is not guaranteed; use the Sort() method if a specific sort order is required. - The EnumerateFiles and GetFiles methods differ as follows: When you use EnumerateFiles, you can start enumerating the collection of names - before the whole collection is returned; when you use GetFiles, you must wait for the whole array of names to be returned before you can access the array. - Therefore, when you are working with many files and directories, EnumerateFiles can be more efficient. - - - - - - - - - The directory to search. - - The search string to match against the names of directories in . - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - - One of the enumeration values that specifies whether the - should include only the current directory or should include all subdirectories. - - - - Returns the names of files (including their paths) in the specified directory. - An array of the full names (including paths) for the files in the specified directory, or an empty array if no files are found. - - The returned file names are appended to the supplied parameter. - The order of the returned file names is not guaranteed; use the Sort() method if a specific sort order is required. - The EnumerateFiles and GetFiles methods differ as follows: When you use EnumerateFiles, you can start enumerating the collection of names - before the whole collection is returned; when you use GetFiles, you must wait for the whole array of names to be returned before you can access the array. - Therefore, when you are working with many files and directories, EnumerateFiles can be more efficient. - - - - - - - - - The transaction. - The directory to search. - - - Returns the names of files (including their paths) that match the specified search pattern in the specified directory. - An array of the full names (including paths) for the files in the specified directory that match the specified search pattern, or an empty array if no files are found. - - The returned file names are appended to the supplied parameter. - The order of the returned file names is not guaranteed; use the Sort() method if a specific sort order is required. - The EnumerateFiles and GetFiles methods differ as follows: When you use EnumerateFiles, you can start enumerating the collection of names - before the whole collection is returned; when you use GetFiles, you must wait for the whole array of names to be returned before you can access the array. - Therefore, when you are working with many files and directories, EnumerateFiles can be more efficient. - - - - - - - - - The transaction. - The directory to search. - - The search string to match against the names of directories in . - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - - - Returns the names of files (including their paths) that match the specified search pattern in the current directory, and optionally searches subdirectories. - An array of the full names (including paths) for the files in the specified directory that match the specified search pattern and option, or an empty array if no files are found. - - The returned file names are appended to the supplied parameter. - The order of the returned file names is not guaranteed; use the Sort() method if a specific sort order is required. - The EnumerateFiles and GetFiles methods differ as follows: When you use EnumerateFiles, you can start enumerating the collection of names - before the whole collection is returned; when you use GetFiles, you must wait for the whole array of names to be returned before you can access the array. - Therefore, when you are working with many files and directories, EnumerateFiles can be more efficient. - - - - - - - - - The transaction. - The directory to search. - - The search string to match against the names of directories in . - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - - One of the enumeration values that specifies whether the - should include only the current directory or should include all subdirectories. - - - - Gets the creation date and time of the specified directory. - A structure set to the creation date and time for the specified directory. This value is expressed in local time. - The directory for which to obtain creation date and time information. - - - Gets the creation date and time, in Coordinated Universal Time (UTC) format, of the specified directory. - A structure set to the creation date and time for the specified directory. This value is expressed in UTC time. - The directory for which to obtain creation date and time information, in Coordinated Universal Time (UTC) format. - - - [AlphaFS] Gets the creation date and time of the specified directory. - A structure set to the creation date and time for the specified directory. This value is expressed in local time. - The directory for which to obtain creation date and time information. - Indicates the format of the path parameter(s). - - - [AlphaFS] Gets the creation date and time, in Coordinated Universal Time (UTC) format, of the specified directory. - A structure set to the creation date and time for the specified directory. This value is expressed in UTC time. - The directory for which to obtain creation date and time information, in Coordinated Universal Time (UTC) format. - Indicates the format of the path parameter(s). - - - [AlphaFS] Gets the creation date and time of the specified directory. - A structure set to the creation date and time for the specified directory. This value is expressed in local time. - The transaction. - The directory for which to obtain creation date and time information. - - - [AlphaFS] Gets the creation date and time of the specified directory. - A structure set to the creation date and time for the specified directory. This value is expressed in local time. - The transaction. - The directory for which to obtain creation date and time information. - Indicates the format of the path parameter(s). - - - [AlphaFS] Gets the creation date and time, in Coordinated Universal Time (UTC) format, of the specified directory. - A structure set to the creation date and time for the specified directory. This value is expressed in UTC time. - The transaction. - The directory for which to obtain creation date and time information, in Coordinated Universal Time (UTC) format. - - - [AlphaFS] Gets the creation date and time, in Coordinated Universal Time (UTC) format, of the specified directory. - A structure set to the creation date and time for the specified directory. This value is expressed in UTC time. - The transaction. - The directory for which to obtain creation date and time information, in Coordinated Universal Time (UTC) format. - Indicates the format of the path parameter(s). - - - Gets the date and time that the specified directory was last accessed. - A structure set to the date and time that the specified directory was last accessed. This value is expressed in local time. - The directory for which to obtain access date and time information. - - - Gets the date and time, in coordinated universal time (UTC), that the specified directory was last accessed. - A structure set to the date and time that the specified directory was last accessed. This value is expressed in UTC time. - The directory for which to obtain access date and time information. - - - [AlphaFS] Gets the date and time that the specified directory was last accessed. - A structure set to the date and time that the specified directory was last accessed. This value is expressed in local time. - The directory for which to obtain access date and time information. - Indicates the format of the path parameter(s). - - - [AlphaFS] Gets the date and time, in coordinated universal time (UTC), that the specified directory was last accessed. - A structure set to the date and time that the specified directory was last accessed. This value is expressed in UTC time. - The directory for which to obtain access date and time information. - Indicates the format of the path parameter(s). - - - [AlphaFS] Gets the date and time that the specified directory was last accessed. - A structure set to the date and time that the specified directory was last accessed. This value is expressed in local time. - The transaction. - The directory for which to obtain access date and time information. - - - [AlphaFS] Gets the date and time that the specified directory was last accessed. - A structure set to the date and time that the specified directory was last accessed. This value is expressed in local time. - The transaction. - The directory for which to obtain access date and time information. - Indicates the format of the path parameter(s). - - - [AlphaFS] Gets the date and time, in coordinated universal time (UTC), that the specified directory was last accessed. - A structure set to the date and time that the specified directory was last accessed. This value is expressed in UTC time. - The transaction. - The directory for which to obtain access date and time information. - - - [AlphaFS] Gets the date and time, in coordinated universal time (UTC), that the specified directory was last accessed. - A structure set to the date and time that the specified directory was last accessed. This value is expressed in UTC time. - The transaction. - The directory for which to obtain access date and time information. - Indicates the format of the path parameter(s). - - - Gets the date and time that the specified directory was last written to. - A structure set to the date and time that the specified directory was last written to. This value is expressed in local time. - The directory for which to obtain write date and time information. - - - Gets the date and time, in coordinated universal time (UTC) time, that the specified directory was last written to. - A structure set to the date and time that the specified directory was last written to. This value is expressed in UTC time. - The directory for which to obtain write date and time information. - - - [AlphaFS] Gets the date and time that the specified directory was last written to. - A structure set to the date and time that the specified directory was last written to. This value is expressed in local time. - The directory for which to obtain write date and time information. - Indicates the format of the path parameter(s). - - - [AlphaFS] Gets the date and time, in coordinated universal time (UTC) time, that the specified directory was last written to. - A structure set to the date and time that the specified directory was last written to. This value is expressed in UTC time. - The directory for which to obtain write date and time information. - Indicates the format of the path parameter(s). - - - [AlphaFS] Gets the date and time that the specified directory was last written to. - A structure set to the date and time that the specified directory was last written to. This value is expressed in local time. - The transaction. - The directory for which to obtain write date and time information. - - - [AlphaFS] Gets the date and time that the specified directory was last written to. - A structure set to the date and time that the specified directory was last written to. This value is expressed in local time. - The transaction. - The directory for which to obtain write date and time information. - Indicates the format of the path parameter(s). - - - [AlphaFS] Gets the date and time, in coordinated universal time (UTC) time, that the specified directory was last written to. - A structure set to the date and time that the specified directory was last written to. This value is expressed in UTC time. - The transaction. - The directory for which to obtain write date and time information. - - - [AlphaFS] Gets the date and time, in coordinated universal time (UTC) time, that the specified directory was last written to. - A structure set to the date and time that the specified directory was last written to. This value is expressed in UTC time. - The transaction. - The directory for which to obtain write date and time information. - Indicates the format of the path parameter(s). - - - [AlphaFS] Check if the directory has permission inheritance enabled. - if permission inheritance is enabled, if permission inheritance is disabled. - The full path to the directory to check. - Indicates the format of the path parameter(s). - - - [AlphaFS] Check if the directory has permission inheritance enabled. - The full path to the directory to check. - if permission inheritance is enabled, if permission inheritance is disabled. - - - Gets a object that encapsulates the access control list (ACL) entries for the specified directory. - A object that encapsulates the access control rules for the file described by the parameter. - - - - The path to a directory containing a object that describes the file's access control list (ACL) information. - - - Gets a object that encapsulates the specified type of access control list (ACL) entries for a particular directory. - A object that encapsulates the access control rules for the directory described by the parameter. - - - - The path to a directory containing a object that describes the directory's access control list (ACL) information. - One (or more) of the values that specifies the type of access control list (ACL) information to receive. - - - [AlphaFS] Gets a object that encapsulates the access control list (ACL) entries for the specified directory. - A object that encapsulates the access control rules for the file described by the parameter. - - - - The path to a directory containing a object that describes the file's access control list (ACL) information. - Indicates the format of the path parameter(s). - - - [AlphaFS] Gets a object that encapsulates the specified type of access control list (ACL) entries for a particular directory. - A object that encapsulates the access control rules for the directory described by the parameter. - - - - The path to a directory containing a object that describes the directory's access control list (ACL) information. - One (or more) of the values that specifies the type of access control list (ACL) information to receive. - Indicates the format of the path parameter(s). - - - [AlphaFS] Gets a object that encapsulates the access control list (ACL) entries for the specified directory handle. - A object that encapsulates the access control rules for the file described by the parameter. - - - - A to a directory containing a object that describes the directory's access control list (ACL) information. - - - [AlphaFS] Gets a object that encapsulates the specified type of access control list (ACL) entries for a particular directory handle. - A object that encapsulates the access control rules for the directory described by the parameter. - - - - A to a directory containing a object that describes the directory's access control list (ACL) information. - One (or more) of the values that specifies the type of access control list (ACL) information to receive. - - - [AlphaFS] Gets the change date and time of the specified directory. - A structure set to the change date and time for the specified directory. This value is expressed in local time. - The directory for which to obtain creation date and time information. - - - [AlphaFS] Gets the change date and time of the specified directory. - A structure set to the change date and time for the specified directory. This value is expressed in local time. - The directory for which to obtain creation date and time information. - Indicates the format of the path parameter(s). - - - [AlphaFS] Gets the change date and time, in Coordinated Universal Time (UTC) format, of the specified directory. - A structure set to the change date and time for the specified directory. This value is expressed in UTC time. - The file for which to obtain change date and time information, in Coordinated Universal Time (UTC) format. - - - [AlphaFS] Gets the change date and time, in Coordinated Universal Time (UTC) format, of the specified directory. - A structure set to the change date and time for the specified directory. This value is expressed in UTC time. - The file for which to obtain change date and time information, in Coordinated Universal Time (UTC) format. - Indicates the format of the path parameter(s). - - - [AlphaFS] Gets the change date and time of the specified directory. - A structure set to the change date and time for the specified directory. This value is expressed in local time. - An open handle to the directory from which to retrieve information. - - - [AlphaFS] Gets the change date and time, in Coordinated Universal Time (UTC) format, of the specified directory. - A structure set to the change date and time for the specified directory. This value is expressed in UTC time. - An open handle to the directory from which to retrieve information. - - - [AlphaFS] Gets the change date and time of the specified directory. - A structure set to the change date and time for the specified directory. This value is expressed in local time. - The transaction. - The directory for which to obtain creation date and time information. - - - [AlphaFS] Gets the change date and time of the specified directory. - A structure set to the change date and time for the specified directory. This value is expressed in local time. - The transaction. - The directory for which to obtain creation date and time information. - Indicates the format of the path parameter(s). - - - [AlphaFS] Gets the change date and time, in Coordinated Universal Time (UTC) format, of the specified directory. - A structure set to the change date and time for the specified directory. This value is expressed in UTC time. - The transaction. - The file for which to obtain change date and time information, in Coordinated Universal Time (UTC) format. - - - [AlphaFS] Gets the change date and time, in Coordinated Universal Time (UTC) format, of the specified directory. - A structure set to the change date and time for the specified directory. This value is expressed in UTC time. - The transaction. - The file for which to obtain change date and time information, in Coordinated Universal Time (UTC) format. - Indicates the format of the path parameter(s). - - - - Gets the current working directory of the application. - - MSDN: Multithreaded applications and shared library code should not use the GetCurrentDirectory function and should avoid using relative path names. - The current directory state written by the SetCurrentDirectory function is stored as a global variable in each process, - therefore multithreaded applications cannot reliably use this value without possible data corruption from other threads that may also be reading or setting this value. - This limitation also applies to the SetCurrentDirectory and GetFullPathName functions. The exception being when the application is guaranteed to be running in a single thread, - for example parsing file names from the command line argument string in the main thread prior to creating any additional threads. - Using relative path names in multithreaded applications or shared library code can yield unpredictable results and is not supported. - - - The path of the current working directory without a trailing directory separator. - - - - Sets the application's current working directory to the specified directory. - - MSDN: Multithreaded applications and shared library code should not use the GetCurrentDirectory function and should avoid using relative path names. - The current directory state written by the SetCurrentDirectory function is stored as a global variable in each process, - therefore multithreaded applications cannot reliably use this value without possible data corruption from other threads that may also be reading or setting this value. - This limitation also applies to the SetCurrentDirectory and GetFullPathName functions. The exception being when the application is guaranteed to be running in a single thread, - for example parsing file names from the command line argument string in the main thread prior to creating any additional threads. - Using relative path names in multithreaded applications or shared library code can yield unpredictable results and is not supported. - - - The path to which the current working directory is set. - - - - Sets the application's current working directory to the specified directory. - - MSDN: Multithreaded applications and shared library code should not use the GetCurrentDirectory function and should avoid using relative path names. - The current directory state written by the SetCurrentDirectory function is stored as a global variable in each process, - therefore multithreaded applications cannot reliably use this value without possible data corruption from other threads that may also be reading or setting this value. - This limitation also applies to the SetCurrentDirectory and GetFullPathName functions. The exception being when the application is guaranteed to be running in a single thread, - for example parsing file names from the command line argument string in the main thread prior to creating any additional threads. - Using relative path names in multithreaded applications or shared library code can yield unpredictable results and is not supported. - - - The path to which the current working directory is set. - Indicates the format of the path parameter. - - - Returns the names of all files and subdirectories in the specified directory. - An string[] array of the names of files and subdirectories in the specified directory. - - The EnumerateFileSystemEntries and GetFileSystemEntries methods differ as follows: When you use EnumerateFileSystemEntries, - you can start enumerating the collection of entries before the whole collection is returned; when you use GetFileSystemEntries, - you must wait for the whole array of entries to be returned before you can access the array. - Therefore, when you are working with many files and directories, EnumerateFiles can be more efficient. - - - - - - - - - The directory for which file and subdirectory names are returned. - - - Returns an array of file system entries that match the specified search criteria. - An string[] array of file system entries that match the specified search criteria. - - The EnumerateFileSystemEntries and GetFileSystemEntries methods differ as follows: When you use EnumerateFileSystemEntries, - you can start enumerating the collection of entries before the whole collection is returned; when you use GetFileSystemEntries, - you must wait for the whole array of entries to be returned before you can access the array. - Therefore, when you are working with many files and directories, EnumerateFiles can be more efficient. - - - - - - - - - The path to be searched. - - The search string to match against the names of directories in . - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - - - Gets an array of all the file names and directory names that match a in a specified path, and optionally searches subdirectories. - An string[] array of file system entries that match the specified search criteria. - - The EnumerateFileSystemEntries and GetFileSystemEntries methods differ as follows: When you use EnumerateFileSystemEntries, - you can start enumerating the collection of entries before the whole collection is returned; when you use GetFileSystemEntries, - you must wait for the whole array of entries to be returned before you can access the array. - Therefore, when you are working with many files and directories, EnumerateFiles can be more efficient. - - - - - - - - - The directory to search. - - The search string to match against the names of directories in . - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - - One of the enumeration values that specifies whether the - should include only the current directory or should include all subdirectories. - - - - Returns the names of all files and subdirectories in the specified directory. - An string[] array of the names of files and subdirectories in the specified directory. - - The EnumerateFileSystemEntries and GetFileSystemEntries methods differ as follows: When you use EnumerateFileSystemEntries, - you can start enumerating the collection of entries before the whole collection is returned; when you use GetFileSystemEntries, - you must wait for the whole array of entries to be returned before you can access the array. - Therefore, when you are working with many files and directories, EnumerateFiles can be more efficient. - - - - - - - - - The transaction. - The directory for which file and subdirectory names are returned. - - - Returns an array of file system entries that match the specified search criteria. - An string[] array of file system entries that match the specified search criteria. - - The EnumerateFileSystemEntries and GetFileSystemEntries methods differ as follows: When you use EnumerateFileSystemEntries, - you can start enumerating the collection of entries before the whole collection is returned; when you use GetFileSystemEntries, - you must wait for the whole array of entries to be returned before you can access the array. - Therefore, when you are working with many files and directories, EnumerateFiles can be more efficient. - - - - - - - - - The transaction. - The path to be searched. - - The search string to match against the names of directories in . - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - - - Gets an array of all the file names and directory names that match a in a specified path, and optionally searches subdirectories. - An string[] array of file system entries that match the specified search criteria. - - The EnumerateFileSystemEntries and GetFileSystemEntries methods differ as follows: When you use EnumerateFileSystemEntries, - you can start enumerating the collection of entries before the whole collection is returned; when you use GetFileSystemEntries, - you must wait for the whole array of entries to be returned before you can access the array. - Therefore, when you are working with many files and directories, EnumerateFiles can be more efficient. - - - - - - - - - The transaction. - The directory to search. - - The search string to match against the names of directories in . - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - - One of the enumeration values that specifies whether the - should include only the current directory or should include all subdirectories. - - - - Returns the volume information, root information, or both for the specified path. - The volume information, root information, or both for the specified path, or if path does not contain root directory information. - - - - The path of a file or directory. - - - Returns the volume information, root information, or both for the specified path. - The volume information, root information, or both for the specified path, or if path does not contain root directory information. - - - - The path of a file or directory. - Indicates the format of the path parameter(s). - - - [AlphaFS] Returns the volume information, root information, or both for the specified path. - The volume information, root information, or both for the specified path, or if path does not contain root directory information. - - - - The transaction. - The path of a file or directory. - - - Returns the volume information, root information, or both for the specified path. - The volume information, root information, or both for the specified path, or if path does not contain root directory information. - - - - The transaction. - The path of a file or directory. - Indicates the format of the path parameter(s). - - - Returns the volume information, root information, or both for the specified path. - The volume information, root information, or both for the specified path, or if path does not contain root directory information. - - - - The transaction. - The path of a file or directory. - Indicates the format of the path parameter(s). - - - Retrieves the names of the logical drives on this computer in the form "<drive letter>:\". - An array of type that represents the logical drives on a computer. - - - [AlphaFS] Retrieves the names of the logical drives on this computer in the form "<drive letter>:\". - An array of type that represents the logical drives on a computer. - Retrieve logical drives as known by the Environment. - Retrieve only when accessible (IsReady) logical drives. - - - [AlphaFS] Enumerates the drive names of all logical drives on a computer. - An IEnumerable of type that represents the logical drives on a computer. - Retrieve logical drives as known by the Environment. - Retrieve only when accessible (IsReady) logical drives. - - - Enumerates the drive names of all logical drives on a computer. - An IEnumerable of type that represents the logical drives on a computer. - Retrieve logical drives as known by the Environment. - Retrieve only when accessible (IsReady) logical drives. - - - Retrieves the parent directory of the specified path, including both absolute and relative paths. - The path for which to retrieve the parent directory. - The parent directory, or if is the root directory, including the root of a UNC server or share name. - - - [AlphaFS] Retrieves the parent directory of the specified path, including both absolute and relative paths. - The parent directory, or if is the root directory, including the root of a UNC server or share name. - The path for which to retrieve the parent directory. - Indicates the format of the path parameter(s). - - - [AlphaFS] Retrieves the parent directory of the specified path, including both absolute and relative paths. - The parent directory, or if is the root directory, including the root of a UNC server or share name. - The transaction. - The path for which to retrieve the parent directory. - - - Retrieves the parent directory of the specified path, including both absolute and relative paths. - The parent directory, or if is the root directory, including the root of a UNC server or share name. - The transaction. - The path for which to retrieve the parent directory. - Indicates the format of the path parameter(s). - - - Retrieves the parent directory of the specified path, including both absolute and relative paths. - The parent directory, or if is the root directory, including the root of a UNC server or share name. - The transaction. - The path for which to retrieve the parent directory. - Indicates the format of the path parameter(s). - - - Applies access control list (ACL) entries described by a object to the specified directory. - A directory to add or remove access control list (ACL) entries from. - A object that describes an ACL entry to apply to the directory described by the path parameter. - - - Applies access control list (ACL) entries described by a object to the specified directory. - Note that unlike this method does not automatically - determine what parts of the specified instance has been modified. Instead, the - parameter is used to specify what entries from to apply to . - A directory to add or remove access control list (ACL) entries from. - A object that describes an ACL entry to apply to the directory described by the path parameter. - One or more of the values that specifies the type of access control list (ACL) information to set. - - - [AlphaFS] Applies access control list (ACL) entries described by a object to the specified directory. - A directory to add or remove access control list (ACL) entries from. - A object that describes an ACL entry to apply to the directory described by the path parameter. - Indicates the format of the path parameter(s). - - - [AlphaFS] Applies access control list (ACL) entries described by a object to the specified directory. - Note that unlike this method does not automatically - determine what parts of the specified instance has been modified. Instead, the - parameter is used to specify what entries from to apply to . - A directory to add or remove access control list (ACL) entries from. - A object that describes an ACL entry to apply to the directory described by the path parameter. - One or more of the values that specifies the type of access control list (ACL) information to set. - Indicates the format of the path parameter(s). - - - Applies access control list (ACL) entries described by a object to the specified directory. - A to a file to add or remove access control list (ACL) entries from. - A object that describes an ACL entry to apply to the directory described by the path parameter. - - - Applies access control list (ACL) entries described by a object to the specified directory. - A to a file to add or remove access control list (ACL) entries from. - A object that describes an ACL entry to apply to the directory described by the path parameter. - One or more of the values that specifies the type of access control list (ACL) information to set. - - - Sets the date and time the directory was created. - The directory for which to set the creation date and time information. - A containing the value to set for the creation date and time of . This value is expressed in local time. - - - Sets the date and time, in coordinated universal time (UTC), that the directory was created. - The directory for which to set the creation date and time information. - A containing the value to set for the creation date and time of . This value is expressed in UTC time. - - - [AlphaFS] Sets the date and time the directory was created. - The directory for which to set the creation date and time information. - Indicates the format of the path parameter(s). - A containing the value to set for the creation date and time of . This value is expressed in local time. - - - [AlphaFS] Sets the date and time the directory was created. - The directory for which to set the creation date and time information. - Indicates the format of the path parameter(s). - A containing the value to set for the creation date and time of . This value is expressed in local time. - If , the date and time information will apply to the reparse point (symlink or junction) and not the file or directory linked to. No effect if does not refer to a reparse point. - - - [AlphaFS] Sets the date and time, in coordinated universal time (UTC), that the directory was created. - The directory for which to set the creation date and time information. - A containing the value to set for the creation date and time of . This value is expressed in UTC time. - Indicates the format of the path parameter(s). - - - [AlphaFS] Sets the date and time, in coordinated universal time (UTC), that the directory was created. - The directory for which to set the creation date and time information. - A containing the value to set for the creation date and time of . This value is expressed in UTC time. - If , the date and time information will apply to the reparse point (symlink or junction) and not the file or directory linked to. No effect if does not refer to a reparse point. - Indicates the format of the path parameter(s). - - - [AlphaFS] Sets the date and time the directory was created. - The transaction. - The directory for which to set the creation date and time information. - A containing the value to set for the creation date and time of . This value is expressed in local time. - - - [AlphaFS] Sets the date and time the directory was created. - The transaction. - The directory for which to set the creation date and time information. - A containing the value to set for the creation date and time of . This value is expressed in local time. - Indicates the format of the path parameter(s). - - - [AlphaFS] Sets the date and time the directory was created. - The transaction. - The directory for which to set the creation date and time information. - A containing the value to set for the creation date and time of . This value is expressed in local time. - If , the date and time information will apply to the reparse point (symlink or junction) and not the file or directory linked to. No effect if does not refer to a reparse point. - Indicates the format of the path parameter(s). - - - [AlphaFS] Sets the date and time, in coordinated universal time (UTC), that the directory was created. - The transaction. - The directory for which to set the creation date and time information. - A containing the value to set for the creation date and time of . This value is expressed in UTC time. - - - [AlphaFS] Sets the date and time, in coordinated universal time (UTC), that the directory was created. - The transaction. - The directory for which to set the creation date and time information. - A containing the value to set for the creation date and time of . This value is expressed in UTC time. - Indicates the format of the path parameter(s). - - - [AlphaFS] Sets the date and time, in coordinated universal time (UTC), that the directory was created. - The transaction. - The directory for which to set the creation date and time information. - A containing the value to set for the creation date and time of . This value is expressed in UTC time. - If , the date and time information will apply to the reparse point (symlink or junction) and not the file or directory linked to. No effect if does not refer to a reparse point. - Indicates the format of the path parameter(s). - - - Sets the date and time that the specified directory was last accessed. - The file for which to set the access date and time information. - A containing the value to set for the last access date and time of . This value is expressed in local time. - - - Sets the date and time, in coordinated universal time (UTC), that the specified directory was last accessed. - The directory for which to set the access date and time information. - A containing the value to set for the last access date and time of . This value is expressed in UTC time. - - - [AlphaFS] Sets the date and time that the specified directory was last accessed. - The file for which to set the access date and time information. - A containing the value to set for the last access date and time of . This value is expressed in local time. - Indicates the format of the path parameter(s). - - - [AlphaFS] Sets the date and time that the specified directory was last accessed. - The file for which to set the access date and time information. - A containing the value to set for the last access date and time of . This value is expressed in local time. - If , the date and time information will apply to the reparse point (symlink or junction) and not the file or directory linked to. No effect if does not refer to a reparse point. - Indicates the format of the path parameter(s). - - - [AlphaFS] Sets the date and time, in coordinated universal time (UTC), that the specified directory was last accessed. - The directory for which to set the access date and time information. - A containing the value to set for the last access date and time of . This value is expressed in UTC time. - Indicates the format of the path parameter(s). - - - [AlphaFS] Sets the date and time, in coordinated universal time (UTC), that the specified directory was last accessed. - The directory for which to set the access date and time information. - A containing the value to set for the last access date and time of . This value is expressed in UTC time. - If , the date and time information will apply to the reparse point (symlink or junction) and not the file or directory linked to. No effect if does not refer to a reparse point. - Indicates the format of the path parameter(s). - - - [AlphaFS] Sets the date and time that the specified directory was last accessed. - The transaction. - The directory for which to set the access date and time information. - A containing the value to set for the last access date and time of . This value is expressed in local time. - - - [AlphaFS] Sets the date and time that the specified directory was last accessed. - The transaction. - The directory for which to set the access date and time information. - A containing the value to set for the last access date and time of . This value is expressed in local time. - Indicates the format of the path parameter(s). - - - [AlphaFS] Sets the date and time that the specified directory was last accessed. - The transaction. - The directory for which to set the access date and time information. - A containing the value to set for the last access date and time of . This value is expressed in local time. - If , the date and time information will apply to the reparse point (symlink or junction) and not the file or directory linked to. No effect if does not refer to a reparse point. - Indicates the format of the path parameter(s). - - - [AlphaFS] Sets the date and time, in coordinated universal time (UTC), that the specified directory was last accessed. - The transaction. - The directory for which to set the access date and time information. - A containing the value to set for the last access date and time of . This value is expressed in UTC time. - - - [AlphaFS] Sets the date and time, in coordinated universal time (UTC), that the specified directory was last accessed. - The transaction. - The directory for which to set the access date and time information. - A containing the value to set for the last access date and time of . This value is expressed in UTC time. - Indicates the format of the path parameter(s). - - - [AlphaFS] Sets the date and time, in coordinated universal time (UTC), that the specified directory was last accessed. - The transaction. - The directory for which to set the access date and time information. - A containing the value to set for the last access date and time of . This value is expressed in UTC time. - If , the date and time information will apply to the reparse point (symlink or junction) and not the file or directory linked to. No effect if does not refer to a reparse point. - Indicates the format of the path parameter(s). - - - [AlphaFS] Sets all the date and time stamps for the specified directory, at once. - The directory for which to set the dates and times information. - A containing the value to set for the creation date and time of . This value is expressed in local time. - A containing the value to set for the last access date and time of . This value is expressed in local time. - A containing the value to set for the last write date and time of . This value is expressed in local time. - - - [AlphaFS] Sets all the date and time stamps for the specified directory, at once. - The directory for which to set the dates and times information. - A containing the value to set for the creation date and time of . This value is expressed in local time. - A containing the value to set for the last access date and time of . This value is expressed in local time. - A containing the value to set for the last write date and time of . This value is expressed in local time. - Indicates the format of the path parameter(s). - - - [AlphaFS] Sets all the date and time stamps for the specified directory, at once. - The directory for which to set the dates and times information. - A containing the value to set for the creation date and time of . This value is expressed in local time. - A containing the value to set for the last access date and time of . This value is expressed in local time. - A containing the value to set for the last write date and time of . This value is expressed in local time. - If , the date and time information will apply to the reparse point (symlink or junction) and not the file or directory linked to. No effect if does not refer to a reparse point. - Indicates the format of the path parameter(s). - - - [AlphaFS] Sets all the date and time stamps, in coordinated universal time (UTC), for the specified directory, at once. - The directory for which to set the dates and times information. - A containing the value to set for the creation date and time of . This value is expressed in UTC time. - A containing the value to set for the last access date and time of . This value is expressed in UTC time. - A containing the value to set for the last write date and time of . This value is expressed in UTC time. - - - [AlphaFS] Sets all the date and time stamps, in coordinated universal time (UTC), for the specified directory, at once. - The directory for which to set the dates and times information. - A containing the value to set for the creation date and time of . This value is expressed in UTC time. - A containing the value to set for the last access date and time of . This value is expressed in UTC time. - A containing the value to set for the last write date and time of . This value is expressed in UTC time. - Indicates the format of the path parameter(s). - - - [AlphaFS] Sets all the date and time stamps, in coordinated universal time (UTC), for the specified directory, at once. - The directory for which to set the dates and times information. - A containing the value to set for the creation date and time of . This value is expressed in UTC time. - A containing the value to set for the last access date and time of . This value is expressed in UTC time. - A containing the value to set for the last write date and time of . This value is expressed in UTC time. - If , the date and time information will apply to the reparse point (symlink or junction) and not the file or directory linked to. No effect if does not refer to a reparse point. - Indicates the format of the path parameter(s). - - - [AlphaFS] Sets all the date and time stamps for the specified directory, at once. - The transaction. - The directory for which to set the dates and times information. - A containing the value to set for the creation date and time of . This value is expressed in local time. - A containing the value to set for the last access date and time of . This value is expressed in local time. - A containing the value to set for the last write date and time of . This value is expressed in local time. - - - [AlphaFS] Sets all the date and time stamps for the specified directory, at once. - The transaction. - The directory for which to set the dates and times information. - A containing the value to set for the creation date and time of . This value is expressed in local time. - A containing the value to set for the last access date and time of . This value is expressed in local time. - A containing the value to set for the last write date and time of . This value is expressed in local time. - Indicates the format of the path parameter(s). - - - [AlphaFS] Sets all the date and time stamps for the specified directory, at once. - The transaction. - The directory for which to set the dates and times information. - A containing the value to set for the creation date and time of . This value is expressed in local time. - A containing the value to set for the last access date and time of . This value is expressed in local time. - A containing the value to set for the last write date and time of . This value is expressed in local time. - If , the date and time information will apply to the reparse point (symlink or junction) and not the file or directory linked to. No effect if does not refer to a reparse point. - Indicates the format of the path parameter(s). - - - [AlphaFS] Sets all the date and time stamps, in coordinated universal time (UTC), for the specified directory, at once. - The transaction. - The directory for which to set the dates and times information. - A containing the value to set for the creation date and time of . This value is expressed in UTC time. - A containing the value to set for the last access date and time of . This value is expressed in UTC time. - A containing the value to set for the last write date and time of . This value is expressed in UTC time. - - - [AlphaFS] Sets all the date and time stamps, in coordinated universal time (UTC), for the specified directory, at once. - The transaction. - The directory for which to set the dates and times information. - A containing the value to set for the creation date and time of . This value is expressed in UTC time. - A containing the value to set for the last access date and time of . This value is expressed in UTC time. - A containing the value to set for the last write date and time of . This value is expressed in UTC time. - Indicates the format of the path parameter(s). - - - [AlphaFS] Sets all the date and time stamps, in coordinated universal time (UTC), for the specified directory, at once. - The transaction. - The directory for which to set the dates and times information. - A containing the value to set for the creation date and time of . This value is expressed in UTC time. - A containing the value to set for the last access date and time of . This value is expressed in UTC time. - A containing the value to set for the last write date and time of . This value is expressed in UTC time. - If , the date and time information will apply to the reparse point (symlink or junction) and not the file or directory linked to. No effect if does not refer to a reparse point. - Indicates the format of the path parameter(s). - - - [AlphaFS] Transfers the date and time stamps for the specified directories. - This method uses BackupSemantics flag to get Timestamp changed for directories. - The source directory to get the date and time stamps from. - The destination directory to set the date and time stamps. - - - [AlphaFS] Transfers the date and time stamps for the specified directories. - This method uses BackupSemantics flag to get Timestamp changed for directories. - The source directory to get the date and time stamps from. - The destination directory to set the date and time stamps. - Indicates the format of the path parameter(s). - - - [AlphaFS] Transfers the date and time stamps for the specified directories. - This method uses BackupSemantics flag to get Timestamp changed for directories. - The transaction. - The source directory to get the date and time stamps from. - The destination directory to set the date and time stamps. - - - [AlphaFS] Transfers the date and time stamps for the specified directories. - This method uses BackupSemantics flag to get Timestamp changed for directories. - The transaction. - The source directory to get the date and time stamps from. - The destination directory to set the date and time stamps. - Indicates the format of the path parameter(s). - - - Sets the date and time that the specified directory was last written to. - The directory for which to set the date and time information. - A containing the value to set for the last write date and time of . This value is expressed in local time. - - - Sets the date and time, in coordinated universal time (UTC), that the specified directory was last written to. - The directory for which to set the date and time information. - A containing the value to set for the last write date and time of . This value is expressed in UTC time. - - - [AlphaFS] Sets the date and time that the specified directory was last written to. - The directory for which to set the date and time information. - A containing the value to set for the last write date and time of . This value is expressed in local time. - Indicates the format of the path parameter(s). - - - [AlphaFS] Sets the date and time that the specified directory was last written to. - The directory for which to set the date and time information. - A containing the value to set for the last write date and time of . This value is expressed in local time. - If , the date and time information will apply to the reparse point (symlink or junction) and not the file or directory linked to. No effect if does not refer to a reparse point. - Indicates the format of the path parameter(s). - - - [AlphaFS] Sets the date and time, in coordinated universal time (UTC), that the specified directory was last written to. - The directory for which to set the date and time information. - A containing the value to set for the last write date and time of . This value is expressed in UTC time. - Indicates the format of the path parameter(s). - - - [AlphaFS] Sets the date and time, in coordinated universal time (UTC), that the specified directory was last written to. - The directory for which to set the date and time information. - A containing the value to set for the last write date and time of . This value is expressed in UTC time. - If , the date and time information will apply to the reparse point (symlink or junction) and not the file or directory linked to. No effect if does not refer to a reparse point. - Indicates the format of the path parameter(s). - - - [AlphaFS] Sets the date and time that the specified directory was last written to. - The transaction. - The directory for which to set the date and time information. - A containing the value to set for the last write date and time of . This value is expressed in local time. - - - [AlphaFS] Sets the date and time that the specified directory was last written to. - The transaction. - The directory for which to set the date and time information. - A containing the value to set for the last write date and time of . This value is expressed in local time. - Indicates the format of the path parameter(s). - - - [AlphaFS] Sets the date and time that the specified directory was last written to. - The transaction. - The directory for which to set the date and time information. - A containing the value to set for the last write date and time of . This value is expressed in local time. - If , the date and time information will apply to the reparse point (symlink or junction) and not the file or directory linked to. No effect if does not refer to a reparse point. - Indicates the format of the path parameter(s). - - - [AlphaFS] Sets the date and time, in coordinated universal time (UTC), that the specified directory was last written to. - The transaction. - The directory for which to set the date and time information. - A containing the value to set for the last write date and time of . This value is expressed in UTC time. - - - [AlphaFS] Sets the date and time, in coordinated universal time (UTC), that the specified directory was last written to. - The transaction. - The directory for which to set the date and time information. - A containing the value to set for the last write date and time of . This value is expressed in UTC time. - Indicates the format of the path parameter(s). - - - [AlphaFS] Sets the date and time, in coordinated universal time (UTC), that the specified directory was last written to. - The transaction. - The directory for which to set the date and time information. - A containing the value to set for the last write date and time of . This value is expressed in UTC time. - If , the date and time information will apply to the reparse point (symlink or junction) and not the file or directory linked to. No effect if does not refer to a reparse point. - Indicates the format of the path parameter(s). - - - [AlphaFS] Compresses a directory using NTFS compression. - This will only compress the root items (non recursive). - - - - - - - A path that describes a directory to compress. - - - [AlphaFS] Compresses a directory using NTFS compression. - This will only compress the root items (non recursive). - - - - - - - A path that describes a directory to compress. - Indicates the format of the path parameter(s). - - - [AlphaFS] Compresses a directory using NTFS compression. - - - - - - - A path that describes a directory to compress. - flags that specify how the directory is to be enumerated. - - - [AlphaFS] Compresses a directory using NTFS compression. - - - - - - - A path that describes a directory to compress. - flags that specify how the directory is to be enumerated. - Indicates the format of the path parameter(s). - - - [AlphaFS] Compresses a directory using NTFS compression. - This will only compress the root items (non recursive). - - - - - - - The transaction. - A path that describes a directory to compress. - - - [AlphaFS] Compresses a directory using NTFS compression. - This will only compress the root items (non recursive). - - - - - - - The transaction. - A path that describes a directory to compress. - Indicates the format of the path parameter(s). - - - [AlphaFS] Compresses a directory using NTFS compression. - - - - - - - The transaction. - A path that describes a directory to compress. - flags that specify how the directory is to be enumerated. - - - [AlphaFS] Compresses a directory using NTFS compression. - - - - - - - The transaction. - A path that describes a directory to compress. - flags that specify how the directory is to be enumerated. - Indicates the format of the path parameter(s). - - - [AlphaFS] Decompresses an NTFS compressed directory. - This will only decompress the root items (non recursive). - - - - - - - A path that describes a directory to decompress. - - - [AlphaFS] Decompresses an NTFS compressed directory. - This will only decompress the root items (non recursive). - - - - - - - A path that describes a directory to decompress. - Indicates the format of the path parameter(s). - - - [AlphaFS] Decompresses an NTFS compressed directory. - - - - - - - A path that describes a directory to decompress. - flags that specify how the directory is to be enumerated. - - - [AlphaFS] Decompresses an NTFS compressed directory. - - - - - - - A path that describes a directory to decompress. - flags that specify how the directory is to be enumerated. - Indicates the format of the path parameter(s). - - - [AlphaFS] Decompresses an NTFS compressed directory. - This will only decompress the root items (non recursive). - - - - - - - The transaction. - A path that describes a directory to decompress. - - - [AlphaFS] Decompresses an NTFS compressed directory. - This will only decompress the root items (non recursive). - - - - - - - The transaction. - A path that describes a directory to decompress. - Indicates the format of the path parameter(s). - - - [AlphaFS] Decompresses an NTFS compressed directory. - - - - - - - The transaction. - A path that describes a directory to decompress. - flags that specify how the directory is to be enumerated. - - - [AlphaFS] Decompresses an NTFS compressed directory. - - - - - - - The transaction. - A path that describes a directory to decompress. - flags that specify how the directory is to be enumerated. - Indicates the format of the path parameter(s). - - - [AlphaFS] Disables NTFS compression of the specified directory and the files in it. - This method disables the directory-compression attribute. It will not decompress the current contents of the directory. However, newly created files and directories will be uncompressed. - - - - - - - A path to a directory to decompress. - - - [AlphaFS] Disables NTFS compression of the specified directory and the files in it. - This method disables the directory-compression attribute. It will not decompress the current contents of the directory. However, newly created files and directories will be uncompressed. - - - - - - - A path to a directory to decompress. - Indicates the format of the path parameter(s). - - - [AlphaFS] Disables NTFS compression of the specified directory and the files in it. - This method disables the directory-compression attribute. It will not decompress the current contents of the directory. However, newly created files and directories will be uncompressed. - - - - - - - The transaction. - A path to a directory to decompress. - - - [AlphaFS] Disables NTFS compression of the specified directory and the files in it. - This method disables the directory-compression attribute. It will not decompress the current contents of the directory. However, newly created files and directories will be uncompressed. - - - - - - - The transaction. - Indicates the format of the path parameter(s). - A path to a directory to decompress. - - - [AlphaFS] Enables NTFS compression of the specified directory and the files in it. - This method enables the directory-compression attribute. It will not compress the current contents of the directory. However, newly created files and directories will be compressed. - - - - - - - A path to a directory to compress. - - - [AlphaFS] Enables NTFS compression of the specified directory and the files in it. - This method enables the directory-compression attribute. It will not compress the current contents of the directory. However, newly created files and directories will be compressed. - - - - - - - A path to a directory to compress. - Indicates the format of the path parameter(s). - - - [AlphaFS] Enables NTFS compression of the specified directory and the files in it. - This method enables the directory-compression attribute. It will not compress the current contents of the directory. However, newly created files and directories will be compressed. - - - - - - - The transaction. - A path to a directory to compress. - - - [AlphaFS] Enables NTFS compression of the specified directory and the files in it. - This method enables the directory-compression attribute. It will not compress the current contents of the directory. However, newly created files and directories will be compressed. - - - - - - - The transaction. - A path to a directory to compress. - Indicates the format of the path parameter(s). - - - Compress/decompress Non-/Transacted files/directories. - - - - - - - The transaction. - A path that describes a directory to compress. - - The search string to match against the names of directories in . - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - flags that specify how the directory is to be enumerated. - compress, when decompress. - Indicates the format of the path parameter(s). - - - [AlphaFS] Decrypts a directory that was encrypted by the current account using the Encrypt method. - - - - - - - A path that describes a directory to decrypt. - Indicates the format of the path parameter(s). - - - [AlphaFS] Decrypts a directory that was encrypted by the current account using the Encrypt method. - - - - - - - A path that describes a directory to decrypt. - to decrypt the directory recursively. only decrypt the directory. - Indicates the format of the path parameter(s). - - - [AlphaFS] Decrypts a directory that was encrypted by the current account using the Encrypt method. - - - - - - - A path that describes a directory to decrypt. - - - [AlphaFS] Decrypts a directory that was encrypted by the current account using the Encrypt method. - - - - - - - A path that describes a directory to decrypt. - to decrypt the directory recursively. only decrypt the directory. - - - [AlphaFS] Encrypts a directory so that only the account used to encrypt the directory can decrypt it. - - - - - - - A path that describes a directory to encrypt. - Indicates the format of the path parameter(s). - - - [AlphaFS] Encrypts a directory so that only the account used to encrypt the directory can decrypt it. - - - - - - - A path that describes a directory to encrypt. - to encrypt the directory recursively. only encrypt the directory. - Indicates the format of the path parameter(s). - - - [AlphaFS] Encrypts a directory so that only the account used to encrypt the directory can decrypt it. - - - - - - - A path that describes a directory to encrypt. - - - [AlphaFS] Encrypts a directory so that only the account used to encrypt the directory can decrypt it. - - - - - - - A path that describes a directory to encrypt. - to encrypt the directory recursively. only encrypt the directory. - - - [AlphaFS] Disables encryption of the specified directory and the files in it. - This method only creates/modifies the file "Desktop.ini" in the root of and disables encryption by writing: "Disable=1" - This method does not affect encryption of files and subdirectories below the indicated directory. - - The name of the directory for which to disable encryption. - Indicates the format of the path parameter(s). - - - [AlphaFS] Disables encryption of the specified directory and the files in it. - This method only creates/modifies the file "Desktop.ini" in the root of and disables encryption by writing: "Disable=1" - This method does not affect encryption of files and subdirectories below the indicated directory. - - The name of the directory for which to disable encryption. - - - [AlphaFS] Enables encryption of the specified directory and the files in it. - This method only creates/modifies the file "Desktop.ini" in the root of and enables encryption by writing: "Disable=0" - This method does not affect encryption of files and subdirectories below the indicated directory. - - The name of the directory for which to enable encryption. - Indicates the format of the path parameter(s). - - - [AlphaFS] Enables encryption of the specified directory and the files in it. - This method only creates/modifies the file "Desktop.ini" in the root of and enables encryption by writing: "Disable=0" - This method does not affect encryption of files and subdirectories below the indicated directory. - - The name of the directory for which to enable encryption. - - - Enables/disables encryption of the specified directory and the files in it. - This method only creates/modifies the file "Desktop.ini" in the root of and enables/disables encryption by writing: "Disable=0" or "Disable=1". - This method does not affect encryption of files and subdirectories below the indicated directory. - - The name of the directory for which to enable encryption. - enabled encryption, disables encryption. - Indicates the format of the path parameter(s). - - - Decrypts/encrypts a directory recursively so that only the account used to encrypt the directory can decrypt it. - - - - - - - A path that describes a directory to encrypt. - encrypt, decrypt. - to decrypt the directory recursively. only decrypt files and directories in the root of . - Indicates the format of the path parameter(s). - - - [AlphaFS] Retrieves information about files in the directory specified by in mode. - An enumeration of records for each file system entry in the specified diretory. - A path to a directory from which to retrieve information. - - - [AlphaFS] Retrieves information about files in the directory specified by in mode. - An enumeration of records for each file system entry in the specified diretory. - A path to a directory from which to retrieve information. - Indicates the format of the path parameter(s). - - - [AlphaFS] Retrieves information about files in the directory specified by in specified mode. - An enumeration of records for each file system entry in the specified diretory. - A path to a directory from which to retrieve information. - The mode with which to open a handle to the directory. - - - [AlphaFS] Retrieves information about files in the directory specified by in specified mode. - An enumeration of records for each file system entry in the specified diretory. - A path to a directory from which to retrieve information. - The mode with which to open a handle to the directory. - Indicates the format of the path parameter(s). - - - [AlphaFS] Retrieves information about files in the directory handle specified. - An IEnumerable of records for each file system entry in the specified diretory. - An open handle to the directory from which to retrieve information. - - - [AlphaFS] Retrieves information about files in the directory specified by in mode. - An enumeration of records for each file system entry in the specified diretory. - The transaction. - A path to a directory from which to retrieve information. - - - [AlphaFS] Retrieves information about files in the directory specified by in mode. - An enumeration of records for each file system entry in the specified diretory. - The transaction. - A path to a directory from which to retrieve information. - Indicates the format of the path parameter(s). - - - [AlphaFS] Retrieves information about files in the directory specified by in specified mode. - An enumeration of records for each file system entry in the specified diretory. - The transaction. - A path to a directory from which to retrieve information. - The mode with which to open a handle to the directory. - - - [AlphaFS] Retrieves information about files in the directory specified by in specified mode. - An enumeration of records for each file system entry in the specified diretory. - The transaction. - A path to a directory from which to retrieve information. - The mode with which to open a handle to the directory. - Indicates the format of the path parameter(s). - - - Returns an enumerable collection of information about files in the directory handle specified. - An IEnumerable of records for each file system entry in the specified diretory. - - Either use or , not both. - - The number of files that are returned for each call to GetFileInformationByHandleEx depends on the size of the buffer that is passed to the function. - Any subsequent calls to GetFileInformationByHandleEx on the same handle will resume the enumeration operation after the last file is returned. - - - The transaction. - An open handle to the directory from which to retrieve information. - A path to the directory. - The mode with which to open a handle to the directory. - suppress any Exception that might be thrown as a result from a failure, such as ACLs protected directories or non-accessible reparse points. - Indicates the format of the path parameter(s). - - - [AlphaFS] Gets the properties of the particular directory without following any symbolic links or mount points. - Properties include aggregated info from of each encountered file system object, plus additional ones: Total, File, Size and Error. - Total: is the total number of enumerated objects. - File: is the total number of files. File is considered when object is neither nor . - Size: is the total size of enumerated objects. - Error: is the total number of errors encountered during enumeration. - - A dictionary mapping the keys mentioned above to their respective aggregated values. - Directory: is an object which has attribute without one. - - - - - - - The target directory. - - - [AlphaFS] Gets the properties of the particular directory without following any symbolic links or mount points. - Properties include aggregated info from of each encountered file system object, plus additional ones: Total, File, Size and Error. - Total: is the total number of enumerated objects. - File: is the total number of files. File is considered when object is neither nor . - Size: is the total size of enumerated objects. - Error: is the total number of errors encountered during enumeration. - - A dictionary mapping the keys mentioned above to their respective aggregated values. - Directory: is an object which has attribute without one. - - - - - - - The target directory. - Indicates the format of the path parameter(s). - - - [AlphaFS] Gets the properties of the particular directory without following any symbolic links or mount points. - Properties include aggregated info from of each encountered file system object, plus additional ones: Total, File, Size and Error. - Total: is the total number of enumerated objects. - File: is the total number of files. File is considered when object is neither nor . - Size: is the total size of enumerated objects. - Error: is the total number of errors encountered during enumeration. - - A dictionary mapping the keys mentioned above to their respective aggregated values. - Directory: is an object which has attribute without one. - - - - - - - The target directory. - flags that specify how the directory is to be enumerated. - - - [AlphaFS] Gets the properties of the particular directory without following any symbolic links or mount points. - Properties include aggregated info from of each encountered file system object, plus additional ones: Total, File, Size and Error. - Total: is the total number of enumerated objects. - File: is the total number of files. File is considered when object is neither nor . - Size: is the total size of enumerated objects. - Error: is the total number of errors encountered during enumeration. - - A dictionary mapping the keys mentioned above to their respective aggregated values. - Directory: is an object which has attribute without one. - - - - - - - The target directory. - flags that specify how the directory is to be enumerated. - Indicates the format of the path parameter(s). - - - [AlphaFS] Gets the properties of the particular directory without following any symbolic links or mount points. - Properties include aggregated info from of each encountered file system object, plus additional ones: Total, File, Size and Error. - Total: is the total number of enumerated objects. - File: is the total number of files. File is considered when object is neither nor . - Size: is the total size of enumerated objects. - Error: is the total number of errors encountered during enumeration. - - A dictionary mapping the keys mentioned above to their respective aggregated values. - Directory: is an object which has attribute without one. - - - - - - - The transaction. - The target directory. - - - [AlphaFS] Gets the properties of the particular directory without following any symbolic links or mount points. - Properties include aggregated info from of each encountered file system object, plus additional ones: Total, File, Size and Error. - Total: is the total number of enumerated objects. - File: is the total number of files. File is considered when object is neither nor . - Size: is the total size of enumerated objects. - Error: is the total number of errors encountered during enumeration. - - A dictionary mapping the keys mentioned above to their respective aggregated values. - Directory: is an object which has attribute without one. - - - - - - - The transaction. - The target directory. - Indicates the format of the path parameter(s). - - - [AlphaFS] Gets the properties of the particular directory without following any symbolic links or mount points. - Properties include aggregated info from of each encountered file system object, plus additional ones: Total, File, Size and Error. - Total: is the total number of enumerated objects. - File: is the total number of files. File is considered when object is neither nor . - Size: is the total size of enumerated objects. - Error: is the total number of errors encountered during enumeration. - - A dictionary mapping the keys mentioned above to their respective aggregated values. - Directory: is an object which has attribute without one. - - - - - - - The transaction. - The target directory. - flags that specify how the directory is to be enumerated. - - - [AlphaFS] Gets the properties of the particular directory without following any symbolic links or mount points. - Properties include aggregated info from of each encountered file system object, plus additional ones: Total, File, Size and Error. - Total: is the total number of enumerated objects. - File: is the total number of files. File is considered when object is neither nor . - Size: is the total size of enumerated objects. - Error: is the total number of errors encountered during enumeration. - - A dictionary mapping the keys mentioned above to their respective aggregated values. - Directory: is an object which has attribute without one. - - - - - - - The transaction. - The target directory. - flags that specify how the directory is to be enumerated. - Indicates the format of the path parameter(s). - - - [AlphaFS] Gets the properties of the particular directory without following any symbolic links or mount points. - Properties include aggregated info from of each encountered file system object, plus additional ones: Total, File, Size and Error. - Total: is the total number of enumerated objects. - File: is the total number of files. File is considered when object is neither nor . - Size: is the total size of enumerated objects. - Error: is the total number of errors encountered during enumeration. - - A dictionary mapping the keys mentioned above to their respective aggregated values. - Directory: is an object which has attribute without one. - - - - - - - The transaction. - The target directory. - flags that specify how the directory is to be enumerated. - Indicates the format of the path parameter(s). - - - [AlphaFS] Enumerates the streams of type :$DATA from the specified directory. - The path to the directory to enumerate streams of. - The streams of type :$DATA in the specified directory. - - - [AlphaFS] Enumerates the streams of type :$DATA from the specified directory. - The path to the directory to enumerate streams of. - Indicates the format of the path parameter(s). - The streams of type :$DATA in the specified directory. - - - [AlphaFS] Enumerates the streams of type :$DATA from the specified directory. - The transaction. - The path to the directory to enumerate streams of. - The streams of type :$DATA in the specified directory. - - - [AlphaFS] Enumerates the streams of type :$DATA from the specified directory. - The transaction. - The path to the directory to enumerate streams of. - Indicates the format of the path parameter(s). - The streams of type :$DATA in the specified directory. - - - [AlphaFS] Backs up (export) encrypted directories. This is one of a group of Encrypted File System (EFS) functions that is - intended to implement backup and restore functionality, while maintaining files in their encrypted state. - - - The directory being backed up is not decrypted; it is backed up in its encrypted state. - If the caller does not have access to the key for the file, the caller needs to export encrypted files. See . - To backup an encrypted directory call one of the overloads and specify the directory to backup along with the destination stream of the backup data. - This function is intended for the backup of only encrypted directories; see for backup of unencrypted directories. - Note that this method does not back up the files inside the directory, only the directory entry itself. - - - - - The name of the file to be backed up. - The destination stream to which the backup data will be written. - - - [AlphaFS] Backs up (export) encrypted directories. This is one of a group of Encrypted File System (EFS) functions that is - intended to implement backup and restore functionality, while maintaining files in their encrypted state. - - - The directory being backed up is not decrypted; it is backed up in its encrypted state. - If the caller does not have access to the key for the file, the caller needs to export encrypted files. See . - To backup an encrypted directory call one of the overloads and specify the directory to backup along with the destination stream of the backup data. - This function is intended for the backup of only encrypted directories; see for backup of unencrypted directories. - Note that this method does not back up the files inside the directory, only the directory entry itself. - - - - - The name of the file to be backed up. - The destination stream to which the backup data will be written. - The path format of the parameter. - - - [AlphaFS] Restores (import) encrypted directories. This is one of a group of Encrypted File System (EFS) functions that is - intended to implement backup and restore functionality, while maintaining files in their encrypted state. - - - If the caller does not have access to the key for the directory, the caller needs to restore encrypted directories. See . - To restore an encrypted directory call one of the overloads and specify the file to restore along with the destination stream of the restored data. - This function is intended for the restoration of only encrypted directories; see for backup of unencrypted files. - - - - - The stream to read previously backed up data from. - The path of the destination directory to restore to. - - - [AlphaFS] Restores (import) encrypted directories. This is one of a group of Encrypted File System (EFS) functions that is - intended to implement backup and restore functionality, while maintaining files in their encrypted state. - - - If the caller does not have access to the key for the directory, the caller needs to restore encrypted directories. See . - To restore an encrypted directory call one of the overloads and specify the file to restore along with the destination stream of the restored data. - This function is intended for the restoration of only encrypted directories; see for backup of unencrypted files. - - - - - The stream to read previously backed up data from. - The path of the destination directory to restore to. - The path format of the parameter. - - - [AlphaFS] Restores (import) encrypted directories. This is one of a group of Encrypted File System (EFS) functions that is - intended to implement backup and restore functionality, while maintaining files in their encrypted state. - - - If the caller does not have access to the key for the directory, the caller needs to restore encrypted directories. See . - To restore an encrypted directory call one of the overloads and specify the file to restore along with the destination stream of the restored data. - This function is intended for the restoration of only encrypted directories; see for backup of unencrypted files. - - - - - The stream to read previously backed up data from. - The path of the destination directory to restore to. - If set to a hidden directory will be overwritten on import. - - - [AlphaFS] Restores (import) encrypted directories. This is one of a group of Encrypted File System (EFS) functions that is - intended to implement backup and restore functionality, while maintaining files in their encrypted state. - - - If the caller does not have access to the key for the directory, the caller needs to restore encrypted directories. See . - To restore an encrypted directory call one of the overloads and specify the file to restore along with the destination stream of the restored data. - This function is intended for the restoration of only encrypted directories; see for backup of unencrypted files. - - - - - The stream to read previously backed up data from. - The path of the destination directory to restore to. - If set to a hidden directory will be overwritten on import. - The path format of the parameter. - - - Exposes instance methods for creating, moving, and enumerating through directories and subdirectories. This class cannot be inherited. - - - Refreshes the state of the EntryInfo instance. - - - [AlphaFS] Decrypts a directory that was encrypted by the current account using the Encrypt method. - - - - - - - - - [AlphaFS] Decrypts a directory that was encrypted by the current account using the Encrypt method. - - - - - - - to decrypt the directory recursively. only decrypt files and directories in the root of the directory. - - - [AlphaFS] Disables encryption of the specified directory and the files in it. It does not affect encryption of subdirectories below the indicated directory. - on success, otherwise. - This method will create/change the file "Desktop.ini" and wil set Encryption value: "Disable=0" - - - [AlphaFS] Enables encryption of the specified directory and the files in it. It does not affect encryption of subdirectories below the indicated directory. - on success, otherwise. - This method will create/change the file "Desktop.ini" and wil set Encryption value: "Disable=1" - - - [AlphaFS] Encrypts a directory so that only the account used to encrypt the directory can decrypt it. - - - - - - - - - [AlphaFS] Decrypts a directory that was encrypted by the current account using the Encrypt method. - - - - - - - to encrypt the directory recursively. only encrypt files and directories in the root of the directory. - - - [AlphaFS] Deletes empty subdirectories from the instance. - - - [AlphaFS] Deletes empty subdirectories from the instance. - deletes empty subdirectories from this directory and its subdirectories. - - - [AlphaFS] Deletes empty subdirectories from the instance. - deletes empty subdirectories from this directory and its subdirectories. - overrides read only of empty directories. - - - [AlphaFS] Compresses a directory using NTFS compression. - This will only compress the root items (non recursive). - - - - - - - - - [AlphaFS] Compresses a directory using NTFS compression. - - - - - - - flags that specify how the directory is to be enumerated. - - - [AlphaFS] Decompresses an NTFS compressed directory. - This will only decompress the root items (non recursive). - - - - - - - - - [AlphaFS] Decompresses an NTFS compressed directory. - - - - - - - flags that specify how the directory is to be enumerated. - - - [AlphaFS] Disables compression of the specified directory and the files in it. - - This method disables the directory-compression attribute. It will not decompress the current contents of the directory. - However, newly created files and directories will be uncompressed. - - - - [AlphaFS] Enables compression of the specified directory and the files in it. - - This method enables the directory-compression attribute. It will not compress the current contents of the directory. - However, newly created files and directories will be compressed. - - - - [AlphaFS] Counts file system objects: files, folders or both) in a given directory. - The counted number of file system objects. - - - - - - - flags that specify how the directory is to be enumerated. - - - [AlphaFS] Counts file system objects: files, folders or both) in a given directory. - The counted number of file system objects. - - - - - - - - The search string to match against the names of directories in path. - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - flags that specify how the directory is to be enumerated. - - - [AlphaFS] Copies a instance and its contents to a new path. - - Use this method to prevent overwriting of an existing directory by default. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two directories have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - A new instance if the directory was completely copied. - - - - - - - The destination directory path. - - - [AlphaFS] Copies a instance and its contents to a new path. - - Use this method to prevent overwriting of an existing directory by default. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two directories have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - A new instance if the directory was completely copied. - - - - - - - The destination directory path. - Indicates the format of the path parameter(s). - - - [AlphaFS] Copies an existing directory to a new directory, allowing the overwriting of an existing directory, can be specified. - - Option is recommended for very large file transfers. - Use this method to allow or prevent overwriting of an existing directory. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two directories have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - - Returns a new directory, or an overwrite of an existing directory if is not . - If the directory exists and contains , an is thrown. - - - - - - - - The destination directory path. - that specify how the directory is to be copied. This parameter can be . - - - [AlphaFS] Copies an existing directory to a new directory, allowing the overwriting of an existing directory, can be specified. - - Option is recommended for very large file transfers. - Use this method to allow or prevent overwriting of an existing directory. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two directories have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - - Returns a new directory, or an overwrite of an existing directory if is not . - If the directory exists and contains , an is thrown. - - - - - - - - The destination directory path. - that specify how the directory is to be copied. This parameter can be . - Indicates the format of the path parameter(s). - - - [AlphaFS] Copies an existing directory to a new directory, allowing the overwriting of an existing directory, can be specified. - and the possibility of notifying the application of its progress through a callback function. - - Option is recommended for very large file transfers. - Use this method to allow or prevent overwriting of an existing directory. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two directories have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - A class with details of the Copy action. - - - - - - - The destination directory path. - that specify how the directory is to be copied. This parameter can be . - A callback function that is called each time another portion of the directory has been copied. This parameter can be . - The argument to be passed to the callback function. This parameter can be . - - - [AlphaFS] Copies an existing directory to a new directory, allowing the overwriting of an existing directory, can be specified. - and the possibility of notifying the application of its progress through a callback function. - - Option is recommended for very large file transfers. - Use this method to allow or prevent overwriting of an existing directory. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two directories have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - A class with details of the Copy action. - - - - - - - The destination directory path. - that specify how the directory is to be copied. This parameter can be . - A callback function that is called each time another portion of the directory has been copied. This parameter can be . - The argument to be passed to the callback function. This parameter can be . - Indicates the format of the path parameter(s). - - - Moves a instance and its contents to a new path. - - Use this method to prevent overwriting of an existing directory by default. - This method does not work across disk volumes. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two directories have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - A class with details of the Move action. - - - - - - - - The name and path to which to move this directory. - The destination cannot be another disk volume or a directory with the identical name. - It can be an existing directory to which you want to add this directory as a subdirectory. - - - - Moves a instance and its contents to a new path. - - Use this method to prevent overwriting of an existing directory by default. - This method does not work across disk volumes. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two directories have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - A new instance if the directory was completely moved. - - - - - - - - The name and path to which to move this directory. - The destination cannot be another disk volume or a directory with the identical name. - It can be an existing directory to which you want to add this directory as a subdirectory. - - Indicates the format of the path parameter(s). - - - [AlphaFS] Moves a instance and its contents to a new path, can be specified. - - Use this method to allow or prevent overwriting of an existing directory. - This method does not work across disk volumes unless contains . - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two directories have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - A new instance if the directory was completely moved. - - - - - - - - The name and path to which to move this directory. - The destination cannot be another disk volume unless contains , or a directory with the identical name. - It can be an existing directory to which you want to add this directory as a subdirectory. - - that specify how the directory is to be moved. This parameter can be . - - - [AlphaFS] Moves a instance and its contents to a new path, can be specified. - - Use this method to allow or prevent overwriting of an existing directory. - This method does not work across disk volumes unless contains . - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two directories have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - A new instance if the directory was completely moved. - - - - - - - - The name and path to which to move this directory. - The destination cannot be another disk volume unless contains , or a directory with the identical name. - It can be an existing directory to which you want to add this directory as a subdirectory. - - that specify how the directory is to be moved. This parameter can be . - Indicates the format of the path parameter(s). - - - [AlphaFS] Moves a instance and its contents to a new path, can be specified, - and the possibility of notifying the application of its progress through a callback function. - - Use this method to allow or prevent overwriting of an existing directory. - This method does not work across disk volumes unless contains . - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two directories have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - A class with details of the Move action. - - - - - - - - The name and path to which to move this directory. - The destination cannot be another disk volume unless contains , or a directory with the identical name. - It can be an existing directory to which you want to add this directory as a subdirectory. - - that specify how the directory is to be moved. This parameter can be . - A callback function that is called each time another portion of the directory has been moved. This parameter can be . - The argument to be passed to the callback function. This parameter can be . - - - [AlphaFS] Moves a instance and its contents to a new path, can be specified, - and the possibility of notifying the application of its progress through a callback function. - - Use this method to allow or prevent overwriting of an existing directory. - This method does not work across disk volumes unless contains . - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two directories have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - A class with details of the Move action. - - - - - - - - The name and path to which to move this directory. - The destination cannot be another disk volume unless contains , or a directory with the identical name. - It can be an existing directory to which you want to add this directory as a subdirectory. - - that specify how the directory is to be moved. This parameter can be . - A callback function that is called each time another portion of the directory has been moved. This parameter can be . - The argument to be passed to the callback function. This parameter can be . - Indicates the format of the path parameter(s). - - - Copy/move a Non-/Transacted file or directory including its children to a new location, - or can be specified, and the possibility of notifying the application of its progress through a callback function. - - Option is recommended for very large file transfers. - You cannot use the Move method to overwrite an existing file, unless contains . - Note that if you attempt to replace a file by moving a file of the same name into that directory, you get an IOException. - - - A class with details of the Copy or Move action. - - - - - - - The destination directory path. - that specify how the file is to be copied. This parameter can be . - that specify how the file is to be moved. This parameter can be . - A callback function that is called each time another portion of the file has been copied. This parameter can be . - The argument to be passed to the callback function. This parameter can be . - Returns the retrieved long full path. - Indicates the format of the path parameter(s). - - - Returns the original path that was passed by the user. - A string that represents this object. - - - Applies access control list (ACL) entries described by a object to the directory described by the current DirectoryInfo object. - A object that describes an ACL entry to apply to the directory described by the path parameter. - - - Applies access control list (ACL) entries described by a object to the directory described by the current DirectoryInfo object. - A object that describes an ACL entry to apply to the directory described by the path parameter. - One or more of the values that specifies the type of access control list (ACL) information to set. - - - Refreshes the state of the object. - - - Returns an array of strongly typed entries representing all the files and subdirectories in a directory. - An array of strongly typed entries. - - For subdirectories, the objects returned by this method can be cast to the derived class . - Use the value returned by the property to determine whether the represents a file or a directory. - - - If there are no files or directories in the DirectoryInfo, this method returns an empty array. This method is not recursive. - For subdirectories, the FileSystemInfo objects returned by this method can be cast to the derived class DirectoryInfo. - Use the FileAttributes value returned by the Attributes property to determine whether the FileSystemInfo represents a file or a directory. - - - - - - - - - - Retrieves an array of strongly typed objects representing the files and subdirectories that match the specified search criteria. - - The search string to match against the names of directories in path. - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - An array of strongly typed entries. - - For subdirectories, the objects returned by this method can be cast to the derived class . - Use the value returned by the property to determine whether the represents a file or a directory. - - - If there are no files or directories in the DirectoryInfo, this method returns an empty array. This method is not recursive. - For subdirectories, the FileSystemInfo objects returned by this method can be cast to the derived class DirectoryInfo. - Use the FileAttributes value returned by the Attributes property to determine whether the FileSystemInfo represents a file or a directory. - - - - - - - - - - Retrieves an array of strongly typed objects representing the files and subdirectories that match the specified search criteria. - - The search string to match against the names of directories in path. - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - - One of the enumeration values that specifies whether the - should include only the current directory or should include all subdirectories. - - An array of strongly typed entries. - - For subdirectories, the objects returned by this method can be cast to the derived class . - Use the value returned by the property to determine whether the represents a file or a directory. - - - If there are no files or directories in the DirectoryInfo, this method returns an empty array. This method is not recursive. - For subdirectories, the FileSystemInfo objects returned by this method can be cast to the derived class DirectoryInfo. - Use the FileAttributes value returned by the Attributes property to determine whether the FileSystemInfo represents a file or a directory. - - - - - - - - - - Returns a file list from the current directory. - An array of type . - The order of the returned file names is not guaranteed; use the Sort() method if a specific sort order is required. - If there are no files in the , this method returns an empty array. - - The EnumerateFiles and GetFiles methods differ as follows: When you use EnumerateFiles, you can start enumerating the collection of names - before the whole collection is returned; when you use GetFiles, you must wait for the whole array of names to be returned before you can access the array. - Therefore, when you are working with many files and directories, EnumerateFiles can be more efficient. - - - - - - - - - - Returns a file list from the current directory matching the given search pattern. - - The search string to match against the names of directories in path. - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - An array of type . - The order of the returned file names is not guaranteed; use the Sort() method if a specific sort order is required. - If there are no files in the , this method returns an empty array. - - The EnumerateFiles and GetFiles methods differ as follows: When you use EnumerateFiles, you can start enumerating the collection of names - before the whole collection is returned; when you use GetFiles, you must wait for the whole array of names to be returned before you can access the array. - Therefore, when you are working with many files and directories, EnumerateFiles can be more efficient. - - - - - - - - - - Returns a file list from the current directory matching the given search pattern and using a value to determine whether to search subdirectories. - - The search string to match against the names of directories in path. - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - - One of the enumeration values that specifies whether the - should include only the current directory or should include all subdirectories. - - An array of type . - The order of the returned file names is not guaranteed; use the Sort() method if a specific sort order is required. - If there are no files in the , this method returns an empty array. - - The EnumerateFiles and GetFiles methods differ as follows: When you use EnumerateFiles, you can start enumerating the collection of names - before the whole collection is returned; when you use GetFiles, you must wait for the whole array of names to be returned before you can access the array. - Therefore, when you are working with many files and directories, EnumerateFiles can be more efficient. - - - - - - - - - - Returns the subdirectories of the current directory. - An array of objects. - If there are no subdirectories, this method returns an empty array. This method is not recursive. - - The EnumerateDirectories and GetDirectories methods differ as follows: When you use EnumerateDirectories, you can start enumerating the collection of names - before the whole collection is returned; when you use GetDirectories, you must wait for the whole array of names to be returned before you can access the array. - Therefore, when you are working with many files and directories, EnumerateDirectories can be more efficient. - - - - - - - - - - Returns an array of directories in the current matching the given search criteria. - An array of type matching . - - The EnumerateDirectories and GetDirectories methods differ as follows: When you use EnumerateDirectories, you can start enumerating the collection of names - before the whole collection is returned; when you use GetDirectories, you must wait for the whole array of names to be returned before you can access the array. - Therefore, when you are working with many files and directories, EnumerateDirectories can be more efficient. - - - - - - - - - The search string to match against the names of directories in path. - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - - - Returns an array of directories in the current matching the given search criteria and using a value to determine whether to search subdirectories. - An array of type matching . - If there are no subdirectories, or no subdirectories match the searchPattern parameter, this method returns an empty array. - - The EnumerateDirectories and GetDirectories methods differ as follows: When you use EnumerateDirectories, you can start enumerating the collection of names - before the whole collection is returned; when you use GetDirectories, you must wait for the whole array of names to be returned before you can access the array. - Therefore, when you are working with many files and directories, EnumerateDirectories can be more efficient. - - - - - - - - - The search string to match against the names of directories in path. - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - - One of the enumeration values that specifies whether the - should include only the current directory or should include all subdirectories. - - - - Gets a object that encapsulates the access control list (ACL) entries for the directory described by the current DirectoryInfo object. - A object that encapsulates the access control rules for the directory. - - - Gets a object that encapsulates the specified type of access control list (ACL) entries for the directory described by the current object. - One of the values that specifies the type of access control list (ACL) information to receive. - A object that encapsulates the access control rules for the file described by the path parameter. - - - Returns an enumerable collection of file system information in the current directory. - An enumerable collection of file system information in the current directory. - - - - - - - - - Returns an enumerable collection of file system information that matches a specified search pattern. - An enumerable collection of file system information objects that matches . - - - - - - - - The search string to match against the names of directories in path. - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - - - Returns an enumerable collection of file system information that matches a specified search pattern and search subdirectory option. - An enumerable collection of file system information objects that matches and . - - - - - - - - The search string to match against the names of directories in path. - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - - One of the enumeration values that specifies whether the - should include only the current directory or should include all subdirectories. - - - - [AlphaFS] Returns an enumerable collection of file system information in the current directory. - An enumerable collection of file system information in the current directory. - - - - - - - flags that specify how the directory is to be enumerated. - - - [AlphaFS] Returns an enumerable collection of file system information that matches a specified search pattern. - An enumerable collection of file system information objects that matches . - - - - - - - - The search string to match against the names of directories in path. - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - flags that specify how the directory is to be enumerated. - - - Returns an enumerable collection of file information in the current directory. - An enumerable collection of the files in the current directory. - - - - - - - - - Returns an enumerable collection of file information that matches a search pattern. - An enumerable collection of files that matches . - - - - - - - - The search string to match against the names of directories in path. - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - - - Returns an enumerable collection of file information that matches a specified search pattern and search subdirectory option. - An enumerable collection of files that matches and . - - - - - - - - The search string to match against the names of directories in path. - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - - One of the enumeration values that specifies whether the - should include only the current directory or should include all subdirectories. - - - - Returns an enumerable collection of file information in the current directory. - An enumerable collection of the files in the current directory. - - - - - - - flags that specify how the directory is to be enumerated. - - - Returns an enumerable collection of file information that matches a search pattern. - An enumerable collection of files that matches . - - - - - - - - The search string to match against the names of directories in path. - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - flags that specify how the directory is to be enumerated. - - - Returns an enumerable collection of directory information in the current directory. - An enumerable collection of directories in the current directory. - - - - - - - - - Returns an enumerable collection of directory information that matches a specified search pattern. - An enumerable collection of directories that matches . - - - - - - - - The search string to match against the names of directories in path. - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - - - Returns an enumerable collection of directory information that matches a specified search pattern and search subdirectory option. - An enumerable collection of directories that matches and . - - - - - - - - The search string to match against the names of directories in path. - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - - One of the enumeration values that specifies whether the - should include only the current directory or should include all subdirectories. - - - - [AlphaFS] Returns an enumerable collection of directory information in the current directory. - An enumerable collection of directories in the current directory. - - - - - - - flags that specify how the directory is to be enumerated. - - - Returns an enumerable collection of directory information that matches a specified search pattern. - An enumerable collection of directories that matches . - - - - - - - - The search string to match against the names of directories in path. - This parameter can contain a combination of valid literal path and wildcard - ( and ) characters, but does not support regular expressions. - - flags that specify how the directory is to be enumerated. - - - Deletes this if it is empty. - - - - - - - - - Deletes this instance of a , specifying whether to delete subdirectories and files. - - If the has no files or subdirectories, this method deletes the even if recursive is . - Attempting to delete a that is not empty when recursive is false throws an . - - - - - - - - to delete this directory, its subdirectories, and all files; otherwise, . - - - [AlphaFS] Deletes this instance of a , specifying whether to delete files and subdirectories. - - If the has no files or subdirectories, this method deletes the even if recursive is . - Attempting to delete a that is not empty when recursive is false throws an . - - - - - - - - to delete this directory, its subdirectories, and all files; otherwise, . - ignores read only attribute of files and directories. - - - Creates a subdirectory or subdirectories on the specified path. The specified path can be relative to this instance of the class. - The specified path. This cannot be a different disk volume. - The last directory specified in . - - Any and all directories specified in path are created, unless some part of path is invalid. - The path parameter specifies a directory path, not a file path. - If the subdirectory already exists, this method does nothing. - - - - Creates a subdirectory or subdirectories on the specified path. The specified path can be relative to this instance of the class. - The specified path. This cannot be a different disk volume. - The security to apply. - The last directory specified in . - - Any and all directories specified in path are created, unless some part of path is invalid. - The path parameter specifies a directory path, not a file path. - If the subdirectory already exists, this method does nothing. - - - - [AlphaFS] Creates a subdirectory or subdirectories on the specified path. The specified path can be relative to this instance of the class. - The last directory specified in . - - Any and all directories specified in path are created, unless some part of path is invalid. - The path parameter specifies a directory path, not a file path. - If the subdirectory already exists, this method does nothing. - - The specified path. This cannot be a different disk volume. - When compresses the directory. - - - [AlphaFS] Creates a subdirectory or subdirectories on the specified path. The specified path can be relative to this instance of the class. - The specified path. This cannot be a different disk volume. - The path of the directory to use as a template when creating the new directory. - When compresses the directory. - The last directory specified in . - - Any and all directories specified in path are created, unless some part of path is invalid. - The path parameter specifies a directory path, not a file path. - If the subdirectory already exists, this method does nothing. - - - - [AlphaFS] Creates a subdirectory or subdirectories on the specified path. The specified path can be relative to this instance of the class. - The specified path. This cannot be a different disk volume. - The security to apply. - When compresses the directory. - The last directory specified in . - - Any and all directories specified in path are created, unless some part of path is invalid. - The path parameter specifies a directory path, not a file path. - If the subdirectory already exists, this method does nothing. - - - - [AlphaFS] Creates a subdirectory or subdirectories on the specified path. The specified path can be relative to this instance of the class. - The path of the directory to use as a template when creating the new directory. - The specified path. This cannot be a different disk volume. - When compresses the directory. - The security to apply. - The last directory specified in . - - Any and all directories specified in path are created, unless some part of path is invalid. - The path parameter specifies a directory path, not a file path. - If the subdirectory already exists, this method does nothing. - - - - Creates a subdirectory or subdirectories on the specified path. The specified path can be relative to this instance of the DirectoryInfo class. - The last directory specified in path as an object. - - Any and all directories specified in path are created, unless some part of path is invalid. - The path parameter specifies a directory path, not a file path. - If the subdirectory already exists, this method does nothing. - - The specified path. This cannot be a different disk volume or Universal Naming Convention (UNC) name. - The path of the directory to use as a template when creating the new directory. - The security to apply. - When compresses the directory. - - - Creates a directory. - If the directory already exists, this method does nothing. - - - Creates a directory using a object. - The access control to apply to the directory. - If the directory already exists, this method does nothing. - - - [AlphaFS] Creates a directory using a object. - When compresses the directory. - If the directory already exists, this method does nothing. - - - [AlphaFS] Creates a directory using a object. - The access control to apply to the directory. - When compresses the directory. - If the directory already exists, this method does nothing. - - - [AlphaFS] Returns an enumerable collection of instances for the directory. - An enumerable collection of instances for the directory. - - - Initializes a new instance of the class on the specified path. - The path on which to create the . - - This constructor does not check if a directory exists. This constructor is a placeholder for a string that is used to access the disk in subsequent operations. - The path parameter can be a file name, including a file on a Universal Naming Convention (UNC) share. - - - - [AlphaFS] Initializes a new instance of the class on the specified path. - The path on which to create the . - Indicates the format of the path parameter(s). - This constructor does not check if a directory exists. This constructor is a placeholder for a string that is used to access the disk in subsequent operations. - - - [AlphaFS] Special internal implementation. - The transaction. - The full path on which to create the . - Not used. - Not used. - This constructor does not check if a directory exists. This constructor is a placeholder for a string that is used to access the disk in subsequent operations. - - - [AlphaFS] Initializes a new instance of the class on the specified path. - The transaction. - The path on which to create the . - This constructor does not check if a directory exists. This constructor is a placeholder for a string that is used to access the disk in subsequent operations. - - - [AlphaFS] Initializes a new instance of the class on the specified path. - The transaction. - The path on which to create the . - Indicates the format of the path parameter(s). - This constructor does not check if a directory exists. This constructor is a placeholder for a string that is used to access the disk in subsequent operations. - - - Gets a value indicating whether the directory exists. - - The property returns if any error occurs while trying to determine if the - specified directory exists. - This can occur in situations that raise exceptions such as passing a directory name with invalid characters or too many - characters, - a failing or missing disk, or if the caller does not have permission to read the directory. - - if the directory exists; otherwise, . - - - Gets the name of this instance. - The directory name. - - This Name property returns only the name of the directory, such as "Bin". - To get the full path, such as "c:\public\Bin", use the FullName property. - - - - Gets the parent directory of a specified subdirectory. - The parent directory, or null if the path is null or if the file path denotes a root (such as "\", "C:", or * "\\server\share"). - - - Gets the root portion of the directory. - An object that represents the root of the directory. - - - Indicates the operation to be performed when opening a file using the OpenEncryptedFileRaw. - - - (0) Open the file for export (backup). - - - (1) The file is being opened for import (restore). - - - (2) Import (restore) a directory containing encrypted files. This must be combined with one of the previous two flags to indicate the operation. - - - (4) Overwrite a hidden file on import. - - - Defines values that are used with the FindFirstStreamW function to specify the information level of the returned data. - - Minimum supported client: Windows Vista [desktop apps only] - Minimum supported server: Windows Server 2003 [desktop apps only] - - - - The FindFirstStreamW function retrieves standard stream information. The data is returned in a structure. - - - Used to determine valid enumeration values. All supported enumeration values are less than FindStreamInfoMaxInfoLevel. - - - Specifies control options that filter the device information elements that are added to the device information set. - - - DIGCF_DEFAULT - Return only the device that is associated with the system default device interface, if one is set, for the specified device interface classes. - - - - DIGCF_PRESENT - Return only devices that are currently present. - - - - DIGCF_ALLCLASSES - Return a list of installed devices for the specified device setup classes or device interface classes. - - - - DIGCF_PROFILE - Return only devices that are a part of the current hardware profile. - - - - DIGCF_DEVICEINTERFACE - - Return devices that support device interfaces for the specified device interface classes. - This flag must be set in the Flags parameter if the Enumerator parameter specifies a Device Instance ID. - - - - - FILE_INFO_BY_HANDLE_CLASS - Identifies the type of file information that GetFileInformationByHandleEx should retrieve or SetFileInformationByHandle should set. - - - - FILE_BASIC_INFO - Minimal information for the file should be retrieved or set. Used for file handles. - - - - FILE_ID_BOTH_DIR_INFO - Files in the specified directory should be retrieved. Used for directory handles. - Use only when calling GetFileInformationByHandleEx. - - The number of files returned for each call to GetFileInformationByHandleEx - depends on the size of the buffer that is passed to the function. - Any subsequent calls to GetFileInformationByHandleEx on the same handle - will resume the enumeration operation after the last file is returned. - - - - - Additional flags that control the search. - - - No additional flags used. - - - Searches are case-sensitive. - - - Uses a larger buffer for directory queries, which can increase performance of the find operation. - This value is not supported until Windows Server 2008 R2 and Windows 7. - - - FINDEX_INFO_LEVELS Enumeration - Defines values that are used with the FindFirstFileEx function to specify the information level of the returned data. - - Minimum supported client: Windows XP [desktop apps | Windows Store apps] - Minimum supported server: Windows Server 2003 [desktop apps | Windows Store apps] - - - - A standard set of attribute is returned in a structure. - - - The FindFirstFileEx function does not query the short file name, improving overall enumeration speed. - This value is not supported until Windows Server 2008 R2 and Windows 7. - - - FINDEX_SEARCH_OPS Enumeration - Defines values that are used with the FindFirstFileEx function to specify the type of filtering to perform. - - Minimum supported client: Windows XP [desktop apps | Windows Store apps] - Minimum supported server: Windows Server 2003 [desktop apps | Windows Store apps] - - - - The search for a file that matches a specified file name. - The lpSearchFilter parameter of FindFirstFileEx must be NULL when this search operation is used. - - - - This is an advisory flag. If the file system supports directory filtering, - the function searches for a file that matches the specified name and is also a directory. - If the file system does not support directory filtering, this flag is silently ignored. -   - - The lpSearchFilter parameter of the FindFirstFileEx function must be NULL when this search value is used. - If directory filtering is desired, this flag can be used on all file systems, - but because it is an advisory flag and only affects file systems that support it, - the application must examine the file attribute data stored in the lpFindFileData parameter - of the FindFirstFileEx function to determine whether the function has returned a handle to a directory. - - - - - This filtering type is not available. - For more information, see Device Interface Classes. - - - Enum for struct ChangeErrorMode. - - - Use the system default, which is to display all error dialog boxes. - - - The system does not display the critical-error-handler message box. Instead, the system sends the error to the calling process/thread. - - - The system does not display the Windows Error Reporting dialog. - - - The system automatically fixes memory alignment faults and makes them invisible to the application. It does this for the calling process and any descendant processes. This feature is only supported by certain processor architectures. - - - The system does not display a message box when it fails to find a file. Instead, the error is returned to the calling process/thread. - - - Flags for SetupDiGetDeviceRegistryProperty(). - - - SPDRP_DEVICEDESC - Represents a description of a device instance. - - - - SPDRP_HARDWAREID - Represents the list of hardware identifiers for a device instance. - - - - SPDRP_COMPATIBLEIDS - Represents the list of compatible identifiers for a device instance. - - - - SPDRP_CLASS - Represents the name of the service that is installed for a device instance. - - - - SPDRP_CLASS - Represents the name of the device setup class that a device instance belongs to. - - - - SPDRP_CLASSGUID - Represents the of the device setup class that a device instance belongs to. - - - - SPDRP_DRIVER - Represents the registry entry name of the driver key for a device instance. - - - - SPDRP_MFG - Represents the name of the manufacturer of a device instance. - - - - SPDRP_FRIENDLYNAME - Represents the friendly name of a device instance. - - - - SPDRP_LOCATION_INFORMATION - Represents the bus-specific physical location of a device instance. - - - - SPDRP_PHYSICAL_DEVICE_LOCATION - Encapsulates the physical device location information provided by a device's firmware to Windows. - - - - SPDRP_ENUMERATOR_NAME - Represents the name of the enumerator for a device instance. - - - - SPDRP_LOCATION_PATHS - Represents the location of a device instance in the device tree. - - - - SPDRP_BASE_CONTAINERID - Represents the value of the base container identifier (ID) .The Windows Plug and Play (PnP) manager assigns this value to the device node (devnode). - - - - Volume Attributes used by the GetVolumeInfo() function. - - - No VolumeInfo attributes. - - - FILE_CASE_SENSITIVE_SEARCH - The specified volume supports case-sensitive file names. - - - - FILE_CASE_PRESERVED_NAMES - The specified volume supports preserved case of file names when it places a name on disk. - - - - FILE_UNICODE_ON_DISK - The specified volume supports Unicode in file names as they appear on disk. - - - - FILE_PERSISTENT_ACLS - - The specified volume preserves and enforces access control lists (ACL). - For example, the NTFS file system preserves and enforces ACLs, and the FAT file system does not. - - - - - FILE_FILE_COMPRESSION - The specified volume supports file-based compression. - - - - FILE_VOLUME_QUOTAS - The specified volume supports disk quotas. - - - - FILE_SUPPORTS_SPARSE_FILES - The specified volume supports sparse files. - - - - FILE_SUPPORTS_REPARSE_POINTS - The specified volume supports re-parse points. - - - - (does not appear on MSDN) - - - FILE_VOLUME_IS_COMPRESSED - The specified volume is a compressed volume, for example, a DoubleSpace volume. - - - - FILE_SUPPORTS_OBJECT_IDS - The specified volume supports object identifiers. - - - - FILE_SUPPORTS_ENCRYPTION - The specified volume supports the Encrypted File System (EFS). For more information, see File Encryption. - - - - FILE_NAMED_STREAMS - The specified volume supports named streams. - - - - FILE_READ_ONLY_VOLUME - The specified volume is read-only. - - - - FILE_SEQUENTIAL_WRITE_ONCE - The specified volume is read-only. - - - - FILE_SUPPORTS_TRANSACTIONS - The specified volume supports transactions.For more information, see About KTM. - - - - FILE_SUPPORTS_HARD_LINKS - The specified volume supports hard links. For more information, see Hard Links and Junctions. - - Windows Server 2008, Windows Vista, Windows Server 2003, and Windows XP: This value is not supported until Windows Server 2008 R2 and Windows 7. - - - FILE_SUPPORTS_EXTENDED_ATTRIBUTES - - The specified volume supports extended attributes. An extended attribute is a piece of application-specific metadata - that an application can associate with a file and is not part of the file's data. - - - Windows Server 2008, Windows Vista, Windows Server 2003, and Windows XP: This value is not supported until Windows Server 2008 R2 and Windows 7. - - - FILE_SUPPORTS_OPEN_BY_FILE_ID - The file system supports open by FileID. For more information, see FILE_ID_BOTH_DIR_INFO. - - Windows Server 2008, Windows Vista, Windows Server 2003, and Windows XP: This value is not supported until Windows Server 2008 R2 and Windows 7. - - - FILE_SUPPORTS_USN_JOURNAL - The specified volume supports update sequence number (USN) journals. For more information, see Change Journal Records. - - Windows Server 2008, Windows Vista, Windows Server 2003, and Windows XP: This value is not supported until Windows Server 2008 R2 and Windows 7. - - - Defines values that are used with the GetFileAttributesEx and GetFileAttributesTransacted functions to specify the information level of the returned data. - - - The GetFileAttributesEx or GetFileAttributesTransacted function retrieves a standard set of attribute information. The data is returned in a WIN32_FILE_ATTRIBUTE_DATA structure. - - - Opens an encrypted file in order to backup (export) or restore (import) the file. - If the function succeeds, it returns ERROR_SUCCESS. - If the function fails, it returns a nonzero error code defined in WinError.h. You can use FormatMessage with the FORMAT_MESSAGE_FROM_SYSTEM flag to get a generic text description of the error. - Minimum supported client: Windows XP Professional [desktop apps only] - Minimum supported server: Windows Server 2003 [desktop apps only] - The name of the file to be opened. - The operation to be performed. - [out] The address of a context block that must be presented in subsequent calls to - ReadEncryptedFileRaw, WriteEncryptedFileRaw, or CloseEncryptedFileRaw. - - - Closes an encrypted file after a backup or restore operation, and frees associated system resources. - Minimum supported client: Windows XP Professional [desktop apps only] - Minimum supported server: Windows Server 2003 [desktop apps only] - A pointer to a system-defined context block. The OpenEncryptedFileRaw function returns the context block. - - - Backs up (export) encrypted files. This is one of a group of Encrypted File System (EFS) functions that is intended to implement backup and restore functionality, while maintaining files in their encrypted state. - If the function succeeds, it returns ERROR_SUCCESS. - If the function fails, it returns a nonzero error code defined in WinError.h. You can use FormatMessage with the FORMAT_MESSAGE_FROM_SYSTEM flag to get a generic text description of the error. - Minimum supported client: Windows XP Professional [desktop apps only] - Minimum supported server: Windows Server 2003 [desktop apps only] - - - Restores (import) encrypted files. This is one of a group of Encrypted File System (EFS) functions that is intended to implement backup and restore functionality, while maintaining files in their encrypted state. - If the function succeeds, it returns ERROR_SUCCESS. - If the function fails, it returns a nonzero error code defined in WinError.h. You can use FormatMessage with the FORMAT_MESSAGE_FROM_SYSTEM flag to get a generic text description of the error. - Minimum supported client: Windows XP Professional [desktop apps only] - Minimum supported server: Windows Server 2003 [desktop apps only] - - - Returns a pointer to an IQueryAssociations object. - If this function succeeds, it returns S_OK. Otherwise, it returns an HRESULT error code. - Minimum supported client: Windows 2000 Professional, Windows XP [desktop apps only] - Minimum supported server: Windows 2000 Server [desktop apps only] - - - Searches for and retrieves a file or protocol association-related string from the registry. - Return value Type: HRESULT. Returns a standard COM error value, including the following: S_OK, E_POINTER and S_FALSE. - Minimum supported client: Windows 2000 Professional - Minimum supported server: Windows 2000 Server - - - Exposes methods that simplify the process of retrieving information stored in the registry in association with defining a file type or protocol and associating it with an application. - - - Initializes the IQueryAssociations interface and sets the root key to the appropriate ProgID. - If this method succeeds, it returns S_OK. Otherwise, it returns an HRESULT error code. - Minimum supported client: Windows 2000 Professional, Windows XP [desktop apps only] - Minimum supported server: Windows 2000 Server [desktop apps only] - - - Searches for and retrieves a file or protocol association-related string from the registry. - A standard COM error value, including the following: S_OK, E_POINTER, S_FALSE - Minimum supported client: Windows 2000 Professional, Windows XP [desktop apps only] - Minimum supported server: Windows 2000 Server [desktop apps only] - - - Determines whether a path to a file system object such as a file or folder is valid. - if the file exists; otherwise, . Call GetLastError for extended error information. - - This function tests the validity of the path. - A path specified by Universal Naming Convention (UNC) is limited to a file only; that is, \\server\share\file is permitted. - A network share path to a server or server share is not permitted; that is, \\server or \\server\share. - This function returns FALSE if a mounted remote drive is out of service. - - Minimum supported client: Windows 2000 Professional - Minimum supported server: Windows 2000 Server - - - Converts a file URL to a Microsoft MS-DOS path. - Type: HRESULT - If this function succeeds, it returns S_OK. Otherwise, it returns an HRESULT error code. - - Minimum supported client: Windows 2000 Professional, Windows XP [desktop apps only] - Minimum supported server: Windows 2000 Server [desktop apps only] - - - Creates a path from a file URL. - Type: HRESULT - If this function succeeds, it returns S_OK. Otherwise, it returns an HRESULT error code. - - Minimum supported client: Windows Vista [desktop apps only] - Minimum supported server: Windows Server 2008 [desktop apps only] - - - Converts a Microsoft MS-DOS path to a canonicalized URL. - Type: HRESULT - Returns S_FALSE if pszPath is already in URL format. In this case, pszPath will simply be copied to pszUrl. - Otherwise, it returns S_OK if successful or a standard COM error value if not. - - - UrlCreateFromPath does not support extended paths. These are paths that include the extended-length path prefix "\\?\". - - Minimum supported client: Windows 2000 Professional, Windows XP [desktop apps only] - Minimum supported server: Windows 2000 Server [desktop apps only] - - - Tests whether a URL is a specified type. - - Type: BOOL - For all but one of the URL types, UrlIs returns if the URL is the specified type, otherwise. - If UrlIs is set to , UrlIs will attempt to determine the URL scheme. - If the function is able to determine a scheme, it returns , or . - - Minimum supported client: Windows 2000 Professional, Windows XP [desktop apps only] - Minimum supported server: Windows 2000 Server [desktop apps only] - - - Destroys an icon and frees any memory the icon occupied. - Minimum supported client: Windows XP [desktop apps only] - Minimum supported server: Windows 2000 Server [desktop apps only] - - - Retrieves information about an object in the file system, such as a file, folder, directory, or drive root. - You should call this function from a background thread. Failure to do so could cause the UI to stop responding. - Minimum supported client: Windows 2000 Professional [desktop apps only] - Minimum supported server: Windows 2000 Server [desktop apps only] - - - - Creates a new transaction object. - - - Use the function to close the transaction handle. If the last transaction handle is closed - beforea client calls the CommitTransaction function with the transaction handle, then KTM rolls back the transaction. - Minimum supported client: Windows Vista - Minimum supported server:Windows Server 2008 - - - If the function succeeds, the return value is a handle to the transaction. - If the function fails, the return value is INVALID_HANDLE_VALUE. To get extended error information, call the GetLastError - function. - - - - Requests that the specified transaction be committed. - - You can commit any transaction handle that has been opened or created using the TRANSACTION_COMMIT permission; any - application can commit a transaction, not just the creator. - This function can only be called if the transaction is still active, not prepared, pre-prepared, or rolled back. - Minimum supported client: Windows Vista - Minimum supported server:Windows Server 2008 - - - If the function succeeds, the return value is nonzero. - If the function fails, the return value is 0 (zero). To get extended error information, call the GetLastError function. - - - - - Requests that the specified transaction be rolled back. This function is synchronous. - - - If the function succeeds, the return value is nonzero. - If the function fails, the return value is zero. To get extended error information, call the GetLastError function. - - - - Closes an open object handle. - - The CloseHandle function closes handles to the following objects: - Access token, Communications device, Console input, Console screen buffer, Event, File, File mapping, I/O completion port, - Job, Mailslot, Memory resource notification, Mutex, Named pipe, Pipe, Process, Semaphore, Thread, Transaction, Waitable - timer. - SetLastError is set to . - Minimum supported client: Windows 2000 Professional [desktop apps | Windows Store apps] - Minimum supported server: Windows 2000 Server [desktop apps | Windows Store apps] - - - If the function succeeds, the return value is nonzero. - If the function fails, the return value is zero. To get extended error information, call GetLastError. - If the application is running under a debugger, the function will throw an exception if it receives either a handle value - that is not valid or a pseudo-handle value.This can happen if you close a handle twice, or if you call CloseHandle on a handle - returned by the FindFirstFile function instead of calling the FindClose function. - - - - - Copies an existing file to a new file, notifying the application of its progress through a callback function. - - - This function fails with ERROR_ACCESS_DENIED if the destination file already exists and has the FILE_ATTRIBUTE_HIDDEN or - FILE_ATTRIBUTE_READONLY attribute set. - This function preserves extended attributes, OLE structured storage, NTFS file system alternate data streams, security - resource attributes, and file attributes. - Windows 7, Windows Server 2008 R2, Windows Server 2008, Windows Vista, Windows Server 2003, and Windows XP: - Security resource attributes (ATTRIBUTE_SECURITY_INFORMATION) for the existing file are not copied to the new file until - Windows 8 and Windows Server 2012. - Minimum supported client: Windows XP [desktop apps only] - Minimum supported server: Windows Server 2003 [desktop apps only] - - Filename of the existing file. - Filename of the new file. - The progress routine. - The data. - [out] The pb cancel. - The copy flags. - - If the function succeeds, the return value is nonzero. - If the function fails, the return value is zero. To get extended error information, call GetLastError. - - - - - Copies an existing file to a new file as a transacted operation, notifying the application of its progress through a callback - function. - - - This function fails with ERROR_ACCESS_DENIED if the destination file already exists and has the FILE_ATTRIBUTE_HIDDEN or - FILE_ATTRIBUTE_READONLY attribute set. - This function preserves extended attributes, OLE structured storage, NTFS file system alternate data streams, security - resource attributes, and file attributes. - Windows 7, Windows Server 2008 R2, Windows Server 2008, Windows Vista, Windows Server 2003, and Windows XP: - Security resource attributes (ATTRIBUTE_SECURITY_INFORMATION) for the existing file are not copied to the new file until - Windows 8 and Windows Server 2012. - Minimum supported client: Windows Vista [desktop apps only] - Minimum supported server: Windows Server 2008 [desktop apps only] - - - If the function succeeds, the return value is nonzero. - If the function fails, the return value is zero. To get extended error information, call GetLastError. - - - - - Creates or opens a file or I/O device. The most commonly used I/O devices are as follows: file, file stream, directory, physical - disk, volume, console buffer, tape drive, communications resource, mailslot, and pipe. - - Minimum supported client: Windows XP. - Minimum supported server: Windows Server 2003. - - If the function succeeds, the return value is an open handle to the specified file, device, named pipe, or mail slot. If the - function fails, the return value is Win32Errors.ERROR_INVALID_HANDLE. To get extended error information, call GetLastError. - - - - - Creates or opens a file or I/O device. The most commonly used I/O devices are as follows: file, file stream, directory, physical - disk, volume, console buffer, tape drive, communications resource, mailslot, and pipe. - - Minimum supported client: Windows Vista [desktop apps only]. - Minimum supported server: Windows Server 2008 [desktop apps only]. - - If the function succeeds, the return value is an open handle to the specified file, device, named pipe, or mail slot. If the - function fails, the return value is Win32Errors.ERROR_INVALID_HANDLE". To get extended error information, call GetLastError. - - - - Creates or opens a named or unnamed file mapping object for a specified file. - Minimum supported client: Windows XP. - Minimum supported server: Windows Server 2003. - - If the function succeeds, the return value is a handle to the newly created file mapping object. If the function fails, the return - value is . - - - - - Establishes a hard link between an existing file and a new file. This function is only supported on the NTFS file system, and only - for files, not directories. - - Minimum supported client: Windows XP [desktop apps only]. - Minimum supported server: Windows Server 2003 [desktop apps only]. - - If the function succeeds, the return value is nonzero. If the function fails, the return value is zero (0). To get extended error - information, call GetLastError. - - - - - Establishes a hard link between an existing file and a new file as a transacted operation. This function is only supported on the - NTFS file system, and only for files, not directories. - - Minimum supported client: Windows Vista [desktop apps only]. - Minimum supported server: Windows Server 2008 [desktop apps only]. - - If the function succeeds, the return value is nonzero. If the function fails, the return value is zero (0). To get extended error - information, call GetLastError. - - - - Creates a symbolic link. - Minimum supported client: Windows Vista [desktop apps only]. - Minimum supported server: Windows Server 2008 [desktop apps only]. - - The unmanaged prototype contains a return directive because the CreateSymbolicLink API function returns BOOLEAN, a one-byte data type. - The default marshaling for bool is four bytes (to allow seamless integration with BOOL return values). - If you were to use the default marshaling for BOOLEAN values, it's likely that you will get erroneous results. - The return directive forces PInvoke to marshal just one byte of the return value. - Source: http://www.informit.com/guides/content.aspx?g=dotnet&seqNum=762&ns=16196 - - - If the function succeeds, the return value is nonzero. If the function fails, the return value is zero (0). To get extended error - information, call GetLastError. - - - - Creates a symbolic link as a transacted operation. - Minimum supported client: Windows Vista [desktop apps only]. - Minimum supported server: Windows Server 2008 [desktop apps only]. - - The unmanaged prototype contains a return directive because the CreateSymbolicLink API function returns BOOLEAN, a one-byte data type. - The default marshaling for bool is four bytes (to allow seamless integration with BOOL return values). - If you were to use the default marshaling for BOOLEAN values, it's likely that you will get erroneous results. - The return directive forces PInvoke to marshal just one byte of the return value. - Source: http://www.informit.com/guides/content.aspx?g=dotnet&seqNum=762&ns=16196 - - - If the function succeeds, the return value is nonzero. If the function fails, the return value is zero (0). To get extended error - information, call GetLastError. - - - - Decrypts an encrypted file or directory. - - The DecryptFile function requires exclusive access to the file being decrypted, and will fail if another process is using the file. - If the file is not encrypted, DecryptFile simply returns a nonzero value, which indicates success. If lpFileName specifies a read- - only file, the function fails and GetLastError returns ERROR_FILE_READ_ONLY. If lpFileName specifies a directory that contains a - read-only file, the functions succeeds but the directory is not decrypted. - - Minimum supported client: Windows XP. - Minimum supported server: Windows Server 2003. - - If the function succeeds, the return value is nonzero. If the function fails, the return value is zero. To get extended error - information, call GetLastError. - - - - Deletes an existing file. - - If an application attempts to delete a file that does not exist, the DeleteFile function fails with ERROR_FILE_NOT_FOUND. - - If the file is a read-only file, the function fails with ERROR_ACCESS_DENIED. - - If the path points to a symbolic link, the symbolic link is deleted, not the target. To delete a target, you must call CreateFile - and specify FILE_FLAG_DELETE_ON_CLOSE. - - Minimum supported client: Windows XP [desktop apps | Windows Store apps]. - Minimum supported server: Windows Server 2003 [desktop apps | Windows Store apps]. - - If the function succeeds, the return value is nonzero. If the function fails, the return value is zero (0). To get extended error - information, call GetLastError. - - - - Deletes an existing file as a transacted operation. - Minimum supported client: Windows Vista [desktop apps only]. - Minimum supported server: Windows Server 2008 [desktop apps only]. - - If the function succeeds, the return value is nonzero. If the function fails, the return value is zero (0). To get extended error - information, call GetLastError. - - - - - Encrypts a file or directory. All data streams in a file are encrypted. All new files created in an encrypted directory are - encrypted. - - - The EncryptFile function requires exclusive access to the file being encrypted, and will fail if another process is using the file. - If the file is already encrypted, EncryptFile simply returns a nonzero value, which indicates success. If the file is compressed, - EncryptFile will decompress the file before encrypting it. If lpFileName specifies a read-only file, the function fails and - GetLastError returns ERROR_FILE_READ_ONLY. If lpFileName specifies a directory that contains a read-only file, the functions - succeeds but the directory is not encrypted. - - Minimum supported client: Windows XP. - Minimum supported server: Windows Server 2003. - - If the function succeeds, the return value is nonzero. If the function fails, the return value is zero. To get extended error - information, call GetLastError. - - - - - Disables or enables encryption of the specified directory and the files in it. It does not affect encryption of subdirectories - below the indicated directory. - - - EncryptionDisable() disables encryption of directories and files. It does not affect the visibility of files with the - FILE_ATTRIBUTE_SYSTEM attribute set. This method will create/change the file "Desktop.ini" and wil set Encryption value: - "Disable=0|1". - - Minimum supported client: Windows XP Professional [desktop apps only]. - Minimum supported server: Windows Server 2003 [desktop apps only]. - - If the function succeeds, the return value is nonzero. If the function fails, the return value is zero. To get extended error - information, call GetLastError. - - - - Retrieves the encryption status of the specified file. - Minimum supported client: Windows XP Professional [desktop apps only]. - Minimum supported server: Windows Server 2003 [desktop apps only]. - - If the function succeeds, the return value is nonzero. If the function fails, the return value is zero. To get extended error - information, call GetLastError. - - - - - Closes a file search handle opened by the FindFirstFile, FindFirstFileEx, FindFirstFileNameW, FindFirstFileNameTransactedW, - FindFirstFileTransacted, FindFirstStreamTransactedW, or FindFirstStreamW functions. - - Minimum supported client: Windows XP [desktop apps | Windows Store apps]. - Minimum supported server: Windows Server 2003 [desktop apps | Windows Store apps]. - - If the function succeeds, the return value is nonzero. If the function fails, the return value is zero. To get extended error - information, call GetLastError. - - - - Searches a directory for a file or subdirectory with a name and attributes that match those specified. - A trailing backslash is not allowed and will be removed. - Minimum supported client: Windows XP [desktop apps | Windows Store apps]. - Minimum supported server: Windows Server 2003 [desktop apps | Windows Store apps]. - - If the function succeeds, the return value is a search handle used in a subsequent call to FindNextFile or FindClose, and the - lpFindFileData parameter contains information about the first file or directory found. If the function fails or fails to locate - files from the search string in the lpFileName parameter, the return value is INVALID_HANDLE_VALUE and the contents of - lpFindFileData are indeterminate. To get extended error information, call the GetLastError function. - - - - - Searches a directory for a file or subdirectory with a name that matches a specific name as a transacted operation. - - A trailing backslash is not allowed and will be removed. - Minimum supported client: Windows Vista [desktop apps only]. - Minimum supported server: Windows Server 2008 [desktop apps only]. - - If the function succeeds, the return value is a search handle used in a subsequent call to FindNextFile or FindClose, and the - lpFindFileData parameter contains information about the first file or directory found. If the function fails or fails to locate - files from the search string in the lpFileName parameter, the return value is INVALID_HANDLE_VALUE and the contents of - lpFindFileData are indeterminate. To get extended error information, call the GetLastError function. - - - - - Creates an enumeration of all the hard links to the specified file. The FindFirstFileNameW function returns a handle to the - enumeration that can be used on subsequent calls to the FindNextFileNameW function. - - Minimum supported client: Windows Vista [desktop apps only]. - Minimum supported server: Windows Server 2008 [desktop apps only]. - - If the function succeeds, the return value is a search handle that can be used with the FindNextFileNameW function or closed with - the FindClose function. If the function fails, the return value is INVALID_HANDLE_VALUE (0xffffffff). To get extended error - information, call the GetLastError function. - - - - - Creates an enumeration of all the hard links to the specified file as a transacted operation. The function returns a handle to the - enumeration that can be used on subsequent calls to the FindNextFileNameW function. - - Minimum supported client: Windows Vista [desktop apps only]. - Minimum supported server: Windows Server 2008 [desktop apps only]. - - If the function succeeds, the return value is a search handle that can be used with the FindNextFileNameW function or closed with - the FindClose function. If the function fails, the return value is INVALID_HANDLE_VALUE (0xffffffff). To get extended error - information, call the GetLastError function. - - - - - Continues a file search from a previous call to the FindFirstFile, FindFirstFileEx, or FindFirstFileTransacted functions. - - Minimum supported client: Windows XP [desktop apps | Windows Store apps]. - Minimum supported server: Windows Server 2003 [desktop apps | Windows Store apps]. - - If the function succeeds, the return value is nonzero and the lpFindFileData parameter contains information about the next file or - directory found. If the function fails, the return value is zero and the contents of lpFindFileData are indeterminate. To get - extended error information, call the GetLastError function. If the function fails because no more matching files can be found, the - GetLastError function returns ERROR_NO_MORE_FILES. - - - - - Continues enumerating the hard links to a file using the handle returned by a successful call to the FindFirstFileName function. - - Minimum supported client: Windows Vista [desktop apps only]. - Minimum supported server: Windows Server 2008 [desktop apps only]. - - If the function succeeds, the return value is nonzero. If the function fails, the return value is zero (0). To get extended error - information, call GetLastError. If no matching files can be found, the GetLastError function returns ERROR_HANDLE_EOF. - - - - Flushes the buffers of a specified file and causes all buffered data to be written to a file. - Minimum supported client: Windows XP [desktop apps | Windows Store apps]. - Minimum supported server: Windows Server 2003 [desktop apps | Windows Store apps]. - - If the function succeeds, the return value is nonzero. If the function fails, the return value is zero. To get extended error - information, call GetLastError. - - - - Retrieves the actual number of bytes of disk storage used to store a specified file. - Minimum supported client: Windows XP [desktop apps only]. - Minimum supported server: Windows Server 2003 [desktop apps only]. - - If the function succeeds, the return value is the low-order DWORD of the actual number of bytes of disk storage used to store the - specified file, and if lpFileSizeHigh is non-NULL, the function puts the high-order DWORD of that actual value into the DWORD - pointed to by that parameter. This is the compressed file size for compressed files, the actual file size for noncompressed files. - If the function fails, and lpFileSizeHigh is NULL, the return value is INVALID_FILE_SIZE. To get extended error information, call - GetLastError. If the return value is INVALID_FILE_SIZE and lpFileSizeHigh is non-NULL, an application must call GetLastError to - determine whether the function has succeeded (value is NO_ERROR) or failed (value is other than NO_ERROR). - - - - Retrieves the actual number of bytes of disk storage used to store a specified file as a transacted operation. - Minimum supported client: Windows Vista [desktop apps only]. - Minimum supported server: Windows Server 2008 [desktop apps only]. - - If the function succeeds, the return value is the low-order DWORD of the actual number of bytes of disk storage used to store the - specified file, and if lpFileSizeHigh is non-NULL, the function puts the high-order DWORD of that actual value into the DWORD - pointed to by that parameter. This is the compressed file size for compressed files, the actual file size for noncompressed files. - If the function fails, and lpFileSizeHigh is NULL, the return value is INVALID_FILE_SIZE. To get extended error information, call - GetLastError. If the return value is INVALID_FILE_SIZE and lpFileSizeHigh is non-NULL, an application must call GetLastError to - determine whether the function has succeeded (value is NO_ERROR) or failed (value is other than NO_ERROR). - - - - - Retrieves attributes for a specified file or directory. - - - The GetFileAttributes function retrieves file system attribute information. - GetFileAttributesEx can obtain other sets of file or directory attribute information. - Currently, GetFileAttributesEx retrieves a set of standard attributes that is a superset of the file system attribute - information. - When the GetFileAttributesEx function is called on a directory that is a mounted folder, it returns the attributes of the directory, - not those of the root directory in the volume that the mounted folder associates with the directory. To obtain the attributes of - the associated volume, call GetVolumeNameForVolumeMountPoint to obtain the name of the associated volume. Then use the resulting - name in a call to GetFileAttributesEx. The results are the attributes of the root directory on the associated volume. - Symbolic link behavior: If the path points to a symbolic link, the function returns attributes for the symbolic link. - Minimum supported client: Windows XP [desktop apps only] - Minimum supported server: Windows Server 2003 [desktop apps only] - - - If the function succeeds, the return value is nonzero. - If the function fails, the return value is zero. To get extended error information, call GetLastError. - - - - Retrieves attributes for a specified file or directory. - - The GetFileAttributes function retrieves file system attribute information. - GetFileAttributesEx can obtain other sets of file or directory attribute information. - - Currently, GetFileAttributesEx retrieves a set of standard attributes that is a superset of the file system attribute information. - When the GetFileAttributesEx function is called on a directory that is a mounted folder, it returns the attributes of the directory, - not those of the root directory in the volume that the mounted folder associates with the directory. To obtain the attributes of - the associated volume, call GetVolumeNameForVolumeMountPoint to obtain the name of the associated volume. Then use the resulting - name in a call to GetFileAttributesEx. The results are the attributes of the root directory on the associated volume. - Symbolic link behavior: If the path points to a symbolic link, the function returns attributes for the symbolic link. - Transacted Operations - If a file is open for modification in a transaction, no other thread can open the file for modification until the transaction - is committed. Conversely, if a file is open for modification outside of a transaction, no transacted thread can open the file for - modification until the non-transacted handle is closed. If a non-transacted thread has a handle opened to modify a file, a call to - GetFileAttributesTransacted for that file will fail with an ERROR_TRANSACTIONAL_CONFLICT error. - Minimum supported client: Windows Vista [desktop apps only] - Minimum supported server: Windows Server 2008 [desktop apps only] - - - If the function succeeds, the return value is nonzero. - If the function fails, the return value is zero. To get extended error information, call GetLastError. - - - - Retrieves file information for the specified file. - - If the function succeeds, the return value is nonzero and file information data is contained in the buffer pointed to by the lpByHandleFileInformation parameter. - If the function fails, the return value is zero. To get extended error information, call GetLastError. - - - Depending on the underlying network features of the operating system and the type of server connected to, - the GetFileInformationByHandle function may fail, return partial information, or full information for the given file. - - Minimum supported client: Windows XP [desktop apps only] - Minimum supported server: Windows Server 2003 [desktop apps only] - - - - Retrieves file information for the specified file. - - - Minimum supported client: Windows Vista [desktop apps | Windows Store apps] - Minimum supported server: Windows Server 2008 [desktop apps | Windows Store apps] - Redistributable: Windows SDK on Windows Server 2003 and Windows XP. - - The file. - The file information by handle class. - Information describing the file. - Size of the buffer. - - If the function succeeds, the return value is nonzero and file information data is contained in the buffer pointed to by the - lpByHandleFileInformation parameter. - If the function fails, the return value is zero. To get extended error information, call GetLastError. - - - - Retrieves file information for the specified file. - - Minimum supported client: Windows Vista [desktop apps | Windows Store apps] - Minimum supported server: Windows Server 2008 [desktop apps | Windows Store apps] - Redistributable: Windows SDK on Windows Server 2003 and Windows XP. - - - If the function succeeds, the return value is nonzero and file information data is contained in the buffer pointed to by the - lpByHandleFileInformation parameter. - If the function fails, the return value is zero. To get extended error information, call GetLastError. - - The file. - The file information by handle class. - Information describing the file. - Size of the buffer. - - - - Retrieves the size of the specified file. - - - Minimum supported client: Windows XP [desktop apps only] - Minimum supported server: Windows Server 2003 [desktop apps only] - - - If the function succeeds, the return value is nonzero. - If the function fails, the return value is zero. To get extended error information, call GetLastError. - - - - Retrieves the final path for the specified file. - Minimum supported client: Windows Vista [desktop apps only]. - Minimum supported server: Windows Server 2008 [desktop apps only]. - - If the function succeeds, the return value is nonzero. If the function fails, the return value is zero. To get extended error - information, call GetLastError. - - - - - Checks whether the specified address is within a memory-mapped file in the address space of the specified process. If so, the - function returns the name of the memory-mapped file. - - Minimum supported client: Windows XP. - Minimum supported server: Windows Server 2003. - - If the function succeeds, the return value is nonzero. If the function fails, the return value is zero. To get extended error - information, call GetLastError. - - - - Locks the specified file for exclusive access by the calling process. - Minimum supported client: Windows XP. - Minimum supported server: Windows Server 2003. - - If the function succeeds, the return value is nonzero (TRUE). If the function fails, the return value is zero (FALSE). To get - extended error information, call GetLastError. - - - - Maps a view of a file mapping into the address space of a calling process. - Minimum supported client: Windows XP. - Minimum supported server: Windows Server 2003. - - If the function succeeds, the return value is the starting address of the mapped view. If the function fails, the return value is - . - - - - - Moves a file or directory, including its children. - You can provide a callback function that receives progress notifications. - - - The MoveFileWithProgress function coordinates its operation with the link tracking service, so link sources can be tracked as they are moved. - Minimum supported client: Windows XP [desktop apps only] - Minimum supported server: Windows Server 2003 [desktop apps only] - - Filename of the existing file. - Filename of the new file. - The progress routine. - The data. - The flags. - - If the function succeeds, the return value is nonzero. - If the function fails, the return value is zero. To get extended error information, call GetLastError. - - - - - Moves an existing file or a directory, including its children, as a transacted operation. - You can provide a callback function that receives progress notifications. - - - Minimum supported client: Windows Vista [desktop apps only] - Minimum supported server: Windows Server 2008 [desktop apps only] - - - If the function succeeds, the return value is nonzero. - If the function fails, the return value is zero. To get extended error information, call GetLastError. - - - - An application-defined callback function used with the CopyFileEx, MoveFileTransacted, and MoveFileWithProgress functions. - It is called when a portion of a copy or move operation is completed. - The LPPROGRESS_ROUTINE type defines a pointer to this callback function. - NativeCopyMoveProgressRoutine (NativeCopyMoveProgressRoutine) is a placeholder for the application-defined function name. - - - - Replaces one file with another file, with the option of creating a backup copy of the original file. The replacement file assumes the name of the replaced file and its identity. - - If the function succeeds, the return value is nonzero. - If the function fails, the return value is zero. To get extended error information, call GetLastError. - - Minimum supported client: Windows XP [desktop apps only] - Minimum supported server: Windows Server 2003 [desktop apps only] - - - Sets the attributes for a file or directory. - - If the function succeeds, the return value is nonzero. - If the function fails, the return value is zero. To get extended error information, call GetLastError. - - Minimum supported client: Windows XP - Minimum supported server: Windows Server 2003 - - - Sets the attributes for a file or directory as a transacted operation. - - If the function succeeds, the return value is nonzero. - If the function fails, the return value is zero. To get extended error information, call GetLastError. - - Minimum supported client: Windows Vista [desktop apps only] - Minimum supported server: Windows Server 2008 [desktop apps only] - - - Sets the date and time that the specified file or directory was created, last accessed, or last modified. - - If the function succeeds, the return value is nonzero. - If the function fails, the return value is zero. To get extended error information, call GetLastError. - - Minimum supported client: Windows XP [desktop apps only] - Minimum supported server: Windows Server 2003 [desktop apps only] - - - Unlocks a region in an open file. Unlocking a region enables other processes to access the region. - - If the function succeeds, the return value is nonzero. - If the function fails, the return value is zero. To get extended error information, call GetLastError. - - Minimum supported client: Windows XP - Minimum supported server: Windows Server 2003 - - - Unmaps a mapped view of a file from the calling process's address space. - Minimum supported client: Windows XP. - Minimum supported server: Windows Server 2003. - The base address. - - If the function succeeds, the return value is nonzero. If the function fails, the return value is zero. To get extended error - information, call GetLastError. - - - - - Retrieves information about the specified disk, including the amount of free space on the disk. - - - Symbolic link behavior: If the path points to a symbolic link, the operation is performed on the target. - If this parameter is a UNC name, it must include a trailing backslash (for example, "\\MyServer\MyShare\"). - Furthermore, a drive specification must have a trailing backslash (for example, "C:\"). - The calling application must have FILE_LIST_DIRECTORY access rights for this directory. - Minimum supported client: Windows XP [desktop apps only] - Minimum supported server: Windows Server 2003 [desktop apps only] - - Full pathname of the root file. - [out] The sectors per cluster. - [out] The bytes per sector. - [out] Number of free clusters. - [out] The total number of clusters. - - If the function succeeds, the return value is nonzero. - If the function fails, the return value is zero. To get extended error information, call GetLastError. - - - - - Retrieves information about the amount of space that is available on a disk volume, which is the total amount of space, - the total amount of free space, and the total amount of free space available to the user that is associated with the calling - thread. - - - Symbolic link behavior: If the path points to a symbolic link, the operation is performed on the target. - The GetDiskFreeSpaceEx function returns zero (0) for lpTotalNumberOfFreeBytes and lpFreeBytesAvailable - for all CD requests unless the disk is an unwritten CD in a CD-RW drive. - If this parameter is a UNC name, it must include a trailing backslash, for example, "\\MyServer\MyShare\". - This parameter does not have to specify the root directory on a disk. - The function accepts any directory on a disk. - The calling application must have FILE_LIST_DIRECTORY access rights for this directory. - Minimum supported client: Windows XP [desktop apps | Windows Store apps] - Minimum supported server: Windows Server 2003 [desktop apps | Windows Store apps] - - Pathname of the directory. - [out] The free bytes available. - [out] The total number of in bytes. - [out] The total number of free in bytes. - - If the function succeeds, the return value is nonzero. - If the function fails, the return value is zero (0). To get extended error information, call GetLastError. - - - - - Creates a new directory. - If the underlying file system supports security on files and directories, - the function applies a specified security descriptor to the new directory. - - - Some file systems, such as the NTFS file system, support compression or encryption for individual files and - directories. - On volumes formatted for such a file system, a new directory inherits the compression and encryption attributes of its parent - directory. - An application can obtain a handle to a directory by calling with the FILE_FLAG_BACKUP_SEMANTICS - flag set. - Minimum supported client: Windows XP [desktop apps | Windows Store apps] - Minimum supported server: Windows Server 2003 [desktop apps | Windows Store apps] - - Full pathname of the file. - The security attributes. - - If the function succeeds, the return value is nonzero. - If the function fails, the return value is zero. To get extended error information, call GetLastError. - - - - - Creates a new directory with the attributes of a specified template directory. - If the underlying file system supports security on files and directories, - the function applies a specified security descriptor to the new directory. - The new directory retains the other attributes of the specified template directory. - - - The CreateDirectoryEx function allows you to create directories that inherit stream information from other directories. - This function is useful, for example, when you are using Macintosh directories, which have a resource stream - that is needed to properly identify directory contents as an attribute. - Some file systems, such as the NTFS file system, support compression or encryption for individual files and - directories. - On volumes formatted for such a file system, a new directory inherits the compression and encryption attributes of its parent - directory. - You can obtain a handle to a directory by calling the function with the FILE_FLAG_BACKUP_SEMANTICS - flag set. - Minimum supported client: Windows XP [desktop apps only] - Minimum supported server: Windows Server 2003 [desktop apps only] - - Pathname of the template directory. - Full pathname of the file. - The security attributes. - - If the function succeeds, the return value is nonzero. - If the function fails, the return value is zero (0). To get extended error information, call GetLastError. - - - - - Creates a new directory as a transacted operation, with the attributes of a specified template directory. - If the underlying file system supports security on files and directories, - the function applies a specified security descriptor to the new directory. - The new directory retains the other attributes of the specified template directory. - - - The CreateDirectoryTransacted function allows you to create directories that inherit stream information from other - directories. - This function is useful, for example, when you are using Macintosh directories, which have a resource stream - that is needed to properly identify directory contents as an attribute. - Some file systems, such as the NTFS file system, support compression or encryption for individual files and - directories. - On volumes formatted for such a file system, a new directory inherits the compression and encryption attributes of its parent - directory. - You can obtain a handle to a directory by calling the function with the - FILE_FLAG_BACKUP_SEMANTICS flag set. - Minimum supported client: Windows XP [desktop apps only] - Minimum supported server: Windows Server 2003 [desktop apps only] - - Pathname of the template directory. - Pathname of the new directory. - The security attributes. - The transaction. - - If the function succeeds, the return value is nonzero. - If the function fails, the return value is zero (0). To get extended error information, call GetLastError. - This function fails with ERROR_EFS_NOT_ALLOWED_IN_TRANSACTION if you try to create a - child directory with a parent directory that has encryption disabled. - - - - - Retrieves the current directory for the current process. - - - The RemoveDirectory function marks a directory for deletion on close. - Therefore, the directory is not removed until the last handle to the directory is closed. - RemoveDirectory removes a directory junction, even if the contents of the target are not empty; - the function removes directory junctions regardless of the state of the target object. - Minimum supported client: Windows XP [desktop apps | Windows Store apps] - Minimum supported server: Windows Server 2003 [desktop apps | Windows Store apps] - - The length of the buffer for the current directory string, in TCHARs. The buffer length must include room for a terminating null character. - - A pointer to the buffer that receives the current directory string. This null-terminated string specifies the absolute path to the current directory. - To determine the required buffer size, set this parameter to NULL and the nBufferLength parameter to 0. - - - If the function succeeds, the return value specifies the number of characters that are written to the buffer, not including the terminating null character. - If the function fails, the return value is zero. To get extended error information, call GetLastError. - - - - - Deletes an existing empty directory. - - - The RemoveDirectory function marks a directory for deletion on close. - Therefore, the directory is not removed until the last handle to the directory is closed. - RemoveDirectory removes a directory junction, even if the contents of the target are not empty; - the function removes directory junctions regardless of the state of the target object. - Minimum supported client: Windows XP [desktop apps | Windows Store apps] - Minimum supported server: Windows Server 2003 [desktop apps | Windows Store apps] - - Full pathname of the file. - - If the function succeeds, the return value is nonzero. - If the function fails, the return value is zero. To get extended error information, call GetLastError. - - - - - Deletes an existing empty directory as a transacted operation. - - - The RemoveDirectoryTransacted function marks a directory for deletion on close. - Therefore, the directory is not removed until the last handle to the directory is closed. - RemoveDirectory removes a directory junction, even if the contents of the target are not empty; - the function removes directory junctions regardless of the state of the target object. - Minimum supported client: Windows Vista [desktop apps only] - Minimum supported server: Windows Server 2008 [desktop apps only] - - Full pathname of the file. - The transaction. - - If the function succeeds, the return value is nonzero. - If the function fails, the return value is zero. To get extended error information, call GetLastError. - - - - - Changes the current directory for the current process. - - - The path to the new current directory. This parameter may specify a relative path or a full path. In either case, the full path of the specified directory is calculated and stored as the current directory. - - - If the function succeeds, the return value is nonzero. - If the function fails, the return value is zero. To get extended error information, call GetLastError. - - - - The CM_Connect_Machine function creates a connection to a remote machine. - - Beginning in Windows 8 and Windows Server 2012 functionality to access remote machines has been removed. - You cannot access remote machines when running on these versions of Windows. - Available in Microsoft Windows 2000 and later versions of Windows. - - Name of the unc server. - [out] The ph machine. - - If the operation succeeds, the function returns CR_SUCCESS. - Otherwise, it returns one of the CR_-prefixed error codes defined in Cfgmgr32.h. - - - - - The CM_Get_Device_ID_Ex function retrieves the device instance ID for a specified device instance on a local or a remote machine. - - - Beginning in Windows 8 and Windows Server 2012 functionality to access remote machines has been removed. - You cannot access remote machines when running on these versions of Windows. -   - Available in Microsoft Windows 2000 and later versions of Windows. - - The dn development instance. - The buffer. - Length of the buffer. - The ul flags. - The machine. - - If the operation succeeds, the function returns CR_SUCCESS. - Otherwise, it returns one of the CR_-prefixed error codes defined in Cfgmgr32.h. - - - - - The CM_Disconnect_Machine function removes a connection to a remote machine. - - - Beginning in Windows 8 and Windows Server 2012 functionality to access remote machines has been removed. - You cannot access remote machines when running on these versions of Windows. - SetLastError is set to . - Available in Microsoft Windows 2000 and later versions of Windows. - - The machine. - - If the operation succeeds, the function returns CR_SUCCESS. - Otherwise, it returns one of the CR_-prefixed error codes defined in Cfgmgr32.h. - - - - - The CM_Get_Parent_Ex function obtains a device instance handle to the parent node of a specified device node (devnode) in a local - or a remote machine's device tree. - - - Beginning in Windows 8 and Windows Server 2012 functionality to access remote machines has been removed. - You cannot access remote machines when running on these versions of Windows. - Available in Microsoft Windows 2000 and later versions of Windows. - - [out] The pdn development instance. - The dn development instance. - The ul flags. - The machine. - - If the operation succeeds, the function returns CR_SUCCESS. - Otherwise, it returns one of the CR_-prefixed error codes defined in Cfgmgr32.h. - - - - Sends a control code directly to a specified device driver, causing the corresponding device to perform the corresponding operation. - - If the operation completes successfully, the return value is nonzero. - If the operation fails or is pending, the return value is zero. To get extended error information, call GetLastError. - - - To retrieve a handle to the device, you must call the function with either the name of a device or - the name of the driver associated with a device. - To specify a device name, use the following format: \\.\DeviceName - Minimum supported client: Windows XP - Minimum supported server: Windows Server 2003 - - The device. - The i/o control code. - Buffer for in data. - Size of the in buffer. - Buffer for out data. - Size of the out buffer. - [out] The bytes returned. - The overlapped. - - - Sends a control code directly to a specified device driver, causing the corresponding device to perform the corresponding operation. - - If the operation completes successfully, the return value is nonzero. - If the operation fails or is pending, the return value is zero. To get extended error information, call GetLastError. - - - To retrieve a handle to the device, you must call the function with either the name of a device or - the name of the driver associated with a device. - To specify a device name, use the following format: \\.\DeviceName - Minimum supported client: Windows XP - Minimum supported server: Windows Server 2003 - - The device. - The i/o control code. - Buffer for in data. - Size of the in buffer. - Buffer for out data. - Size of the out buffer. - [out] The bytes returned. - The overlapped. - - - - The SetupDiDestroyDeviceInfoList function deletes a device information set and frees all associated memory. - - - SetLastError is set to . - Available in Microsoft Windows 2000 and later versions of Windows. - - Information describing the development. - - The function returns TRUE if it is successful. - Otherwise, it returns FALSE and the logged error can be retrieved with a call to GetLastError. - - - - - The SetupDiEnumDeviceInterfaces function enumerates the device interfaces that are contained in a device information set. - - - Repeated calls to this function return an structure for a different device - interface. - This function can be called repeatedly to get information about interfaces in a device information set that are - associated - with a particular device information element or that are associated with all device information elements. - Available in Microsoft Windows 2000 and later versions of Windows. - - Information describing the development. - Information describing the development. - [in,out] Unique identifier for the interface class. - Zero-based index of the member. - [in,out] Information describing the device interface. - - SetupDiEnumDeviceInterfaces returns TRUE if the function completed without error. - If the function completed with an error, FALSE is returned and the error code for the failure can be retrieved by calling - GetLastError. - - - - - The SetupDiGetClassDevsEx function returns a handle to a device information set that contains requested device information elements - for a local or a remote computer. - - - The caller of SetupDiGetClassDevsEx must delete the returned device information set when it is no longer needed by calling - . - Available in Microsoft Windows 2000 and later versions of Windows. - - [in,out] Unique identifier for the class. - The enumerator. - The parent. - The devs ex flags. - Set the device information belongs to. - Name of the machine. - The reserved. - - If the operation succeeds, SetupDiGetClassDevsEx returns a handle to a device information set that contains all installed - devices that matched the supplied parameters. - If the operation fails, the function returns INVALID_HANDLE_VALUE. To get extended error information, call - GetLastError. - - - - - The SetupDiGetDeviceInterfaceDetail function returns details about a device interface. - - - The interface detail returned by this function consists of a device path that can be passed to Win32 functions such as - CreateFile. - Do not attempt to parse the device path symbolic name. The device path can be reused across system starts. - Available in Microsoft Windows 2000 and later versions of Windows. - - Information describing the development. - [in,out] Information describing the device interface. - [in,out] Information describing the device interface detail. - Size of the device interface detail data. - Size of the required. - [in,out] Information describing the device information. - - SetupDiGetDeviceInterfaceDetail returns TRUE if the function completed without error. - If the function completed with an error, FALSE is returned and the error code for the failure can be retrieved by calling - GetLastError. - - - - - The SetupDiGetDeviceRegistryProperty function retrieves a specified Plug and Play device property. - - Available in Microsoft Windows 2000 and later versions of Windows. - Set the device information belongs to. - [in,out] Information describing the device information. - The property. - [out] Type of the property register data. - Buffer for property data. - Size of the property buffer. - Size of the required. - - SetupDiGetDeviceRegistryProperty returns TRUE if the call was successful. - Otherwise, it returns FALSE and the logged error can be retrieved by making a call to GetLastError. - SetupDiGetDeviceRegistryProperty returns the ERROR_INVALID_DATA error code if the requested property does not exist for a - device or if the property data is not valid. - - - - The FindFirstFileEx function does not query the short file name, improving overall enumeration speed. -   - - The data is returned in a structure, - and cAlternateFileName member is always a NULL string. - This value is not supported until Windows Server 2008 R2 and Windows 7. - - - - - Uses a larger buffer for directory queries, which can increase performance of the find operation. - This value is not supported until Windows Server 2008 R2 and Windows 7. - - - DefaultFileBufferSize = 4096; Default type buffer size used for reading and writing files. - - - DefaultFileEncoding = Encoding.UTF8; Default type of Encoding used for reading and writing files. - - - MaxDirectoryLength = 255 - - - MaxPath = 260 - The specified path, file name, or both exceed the system-defined maximum length. - For example, on Windows-based platforms, paths must be less than 248 characters, and file names must be less than 260 characters. - - - - MaxPathUnicode = 32000 - - - When an exception is raised, bit shifting is needed to prevent: "System.OverflowException: Arithmetic operation resulted in an overflow." - - - The BackupRead function can be used to back up a file or directory, including the security information. - The function reads data associated with a specified file or directory into a buffer, - which can then be written to the backup medium using the WriteFile function. - - - This function is not intended for use in backing up files encrypted under the Encrypted File System. - Use ReadEncryptedFileRaw for that purpose. - Minimum supported client: Windows XP [desktop apps only] - Minimum supported server: Windows Server 2003 [desktop apps only] - - The file. - The buffer. - Number of bytes to reads. - [out] Number of bytes reads. - true to abort. - true to process security. - [out] The context. - - If the function succeeds, the return value is nonzero. - If the function fails, the return value is zero, indicating that an I/O error occurred. To get extended error information, - call GetLastError. - - - - The BackupSeek function seeks forward in a data stream initially accessed by using the or - function. - The function reads data associated with a specified file or directory into a buffer, which can then be written to the backup - medium using the WriteFile function. - - - Applications use the BackupSeek function to skip portions of a data stream that cause errors. - This function does not seek across stream headers. For example, this function cannot be used to skip the stream name. - If an application attempts to seek past the end of a substream, the function fails, the lpdwLowByteSeeked and - lpdwHighByteSeeked parameters - indicate the actual number of bytes the function seeks, and the file position is placed at the start of the next stream - header. -   - Minimum supported client: Windows XP [desktop apps only] - Minimum supported server: Windows Server 2003 [desktop apps only] - - The file. - The low bytes to seek. - The high bytes to seek. - [out] The lpdw low bytes seeked. - [out] The lpdw high bytes seeked. - [out] The context. - - If the function could seek the requested amount, the function returns a nonzero value. - If the function could not seek the requested amount, the function returns zero. To get extended error information, call - GetLastError. - - - - The BackupWrite function can be used to restore a file or directory that was backed up using . - Use the ReadFile function to get a stream of data from the backup medium, then use BackupWrite to write the data to the - specified file or directory. -   - - - This function is not intended for use in restoring files encrypted under the Encrypted File System. Use WriteEncryptedFileRaw - for that purpose. - Minimum supported client: Windows XP [desktop apps only] - Minimum supported server: Windows Server 2003 [desktop apps only] - - The file. - The buffer. - Number of bytes to writes. - [out] Number of bytes writtens. - true to abort. - true to process security. - [out] The context. - - If the function succeeds, the return value is nonzero. - If the function fails, the return value is zero, indicating that an I/O error occurred. To get extended error information, - call GetLastError. - - - - Check is the current handle is not null, not closed and not invalid. - The current handle to check. - will throw an , will not raise this exception.. - on success, otherwise. - - - - Check is the current handle is not null, not closed and not invalid. - The current handle to check. - The result of Marshal.GetLastWin32Error() - will throw an , will not raise this exception.. - on success, otherwise. - - - - - Controls whether the system will handle the specified types of serious errors or whether the process will handle them. - - - Because the error mode is set for the entire process, you must ensure that multi-threaded applications do not set different error- - mode attributes. Doing so can lead to inconsistent error handling. - - Minimum supported client: Windows XP [desktop apps only]. - Minimum supported server: Windows Server 2003 [desktop apps only]. - The mode. - The return value is the previous state of the error-mode bit attributes. - - - - Controls whether the system will handle the specified types of serious errors or whether the calling thread will handle them. - - - Because the error mode is set for the entire process, you must ensure that multi-threaded applications do not set different error- - mode attributes. Doing so can lead to inconsistent error handling. - - Minimum supported client: Windows 7 [desktop apps only]. - Minimum supported server: Windows Server 2008 R2 [desktop apps only]. - The new mode. - [out] The old mode. - The return value is the previous state of the error-mode bit attributes. - - - Retrieves the full path and file name of the specified file or directory. - If the function fails for any other reason, the return value is zero. To get extended error information, call GetLastError. - The GetFullPathName function is not recommended for multithreaded applications or shared library code. - Minimum supported client: Windows XP [desktop apps only] - Minimum supported server: Windows Server 2003 [desktop apps only] - - - Retrieves the full path and file name of the specified file or directory as a transacted operation. - If the function fails for any other reason, the return value is zero. To get extended error information, call GetLastError. - Minimum supported client: Windows Vista [desktop apps only] - Minimum supported server: Windows Server 2008 [desktop apps only] - - - Converts the specified path to its long form. - - If the function succeeds, the return value is nonzero. - If the function fails, the return value is zero. To get extended error information, call GetLastError. - - Minimum supported client: Windows XP [desktop apps only] - Minimum supported server: Windows Server 2003 [desktop apps only] - - - Converts the specified path to its long form as a transacted operation. - - If the function succeeds, the return value is nonzero. - If the function fails, the return value is zero. To get extended error information, call GetLastError. - - Minimum supported client: Windows Vista [desktop apps only] - Minimum supported server: Windows Server 2008 [desktop apps only] - - - Retrieves the short path form of the specified path. - - If the function succeeds, the return value is nonzero. - If the function fails, the return value is zero. To get extended error information, call GetLastError. - - Minimum supported client: Windows XP - Minimum supported server: Windows Server 2003 - - - Represents a wrapper class for a handle used by the SetupDiGetClassDevs/SetupDiDestroyDeviceInfoList Win32 API functions. - - - Initializes a new instance of the class. - - - Contains the basic information for a file. Used for file handles. - - Specifying -1 for , , or - indicates that operations on the current handle should not affect the given field. - (I.e, specifying -1 for will leave the unaffected by writes performed - on the current handle.) - - - - The time the file was created in format, - which is a 64-bit value representing the number of 100-nanosecond intervals since January 1, 1601 (UTC). - - - - The time the file was last accessed in format. - - - The time the file was last written to in format. - - - The time the file was changed in format. - - - The file attributes. - If this is set to 0 in a structure passed to SetFileInformationByHandle then none of the attributes are changed. - - - Contains information that the GetFileInformationByHandle function retrieves. - - - The file attributes. - - - A structure that specifies when a file or directory is created. - - - A structure. For a file, the structure specifies the last time that a file is read from or written to. - For a directory, the structure specifies when the directory is created. - For both files and directories, the specified date is correct, but the time of day is always set to midnight. - - - - A structure. For a file, the structure specifies the last time that a file is written to. - For a directory, the structure specifies when the directory is created. - - - The serial number of the volume that contains a file. - - - The high-order part of the file size. - - - The low-order part of the file size. - - - The number of links to this file. For the FAT file system this member is always 1. For the NTFS file system, it can be more than 1. - - - The high-order part of a unique identifier that is associated with a file. - - - The low-order part of a unique identifier that is associated with a file. - - - Controls whether the system will handle the specified types of serious errors or whether the process will handle them. - Minimum supported client: Windows 2000 Professional - Minimum supported server: Windows 2000 Server - - - ChangeErrorMode is for the Win32 SetThreadErrorMode() method, used to suppress possible pop-ups. - One of the values. - - - Contains information about files in the specified directory. Used for directory handles. Use only when calling GetFileInformationByHandleEx. - - The number of files that are returned for each call to GetFileInformationByHandleEx depends on the size of the buffer that is passed to the function. - Any subsequent calls to GetFileInformationByHandleEx on the same handle will resume the enumeration operation after the last file is returned. - - - - The offset for the next FILE_ID_BOTH_DIR_INFO structure that is returned. Contains zero (0) if no other entries follow this one. - - - The byte offset of the file within the parent directory. This member is undefined for file systems, such as NTFS, - in which the position of a file within the parent directory is not fixed and can be changed at any time to maintain sort order. - - - - The time that the file was created. - - - The time that the file was last accessed. - - - The time that the file was last written to. - - - The time that the file was last changed. - - - The absolute new end-of-file position as a byte offset from the start of the file to the end of the file. - Because this value is zero-based, it actually refers to the first free byte in the file. - In other words, EndOfFile is the offset to the byte that immediately follows the last valid byte in the file. - - - - The number of bytes that are allocated for the file. This value is usually a multiple of the sector or cluster size of the underlying physical device. - - - The file attributes. - - - The length of the file name. - - - The size of the extended attributes for the file. - - - The length of ShortName. - - - The short 8.3 file naming convention (for example, "FILENAME.TXT") name of the file. - - - The file ID. - - - The first character of the file name string. This is followed in memory by the remainder of the string. - - - Represents the number of 100-nanosecond intervals since January 1, 1601. This structure is a 64-bit value. - - - Converts a value to long. - - - Converts a value to long. - - - Determines whether the specified Object is equal to the current Object. - Another object to compare to. - if the specified Object is equal to the current Object; otherwise, . - - - Serves as a hash function for a particular type. - A hash code for the current Object. - - - Implements the operator == - A. - B. - The result of the operator. - - - Implements the operator != - A. - B. - The result of the operator. - - - An SP_DEVINFO_DATA structure defines a device instance that is a member of a device information set. - - - The size, in bytes, of the SP_DEVINFO_DATA structure. - - - The GUID of the device's setup class. - - - An opaque handle to the device instance (also known as a handle to the devnode). - - - Reserved. For internal use only. - - - An SP_DEVICE_INTERFACE_DATA structure defines a device interface in a device information set. - - - The size, in bytes, of the SP_DEVICE_INTERFACE_DATA structure. - - - The GUID for the class to which the device interface belongs. - - - Can be one or more of the following: SPINT_ACTIVE (1), SPINT_DEFAULT (2), SPINT_REMOVED (3). - - - Reserved. Do not use. - - - An SP_DEVICE_INTERFACE_DETAIL_DATA structure contains the path for a device interface. - - - The size, in bytes, of the SP_DEVICE_INTERFACE_DETAIL_DATA structure. - - - The device interface path. This path can be passed to Win32 functions such as CreateFile. - - - WIN32_FILE_ATTRIBUTE_DATA structure contains attribute information for a file or directory. The GetFileAttributesEx function uses this structure. - - Not all file systems can record creation and last access time, and not all file systems record them in the same manner. - For example, on the FAT file system, create time has a resolution of 10 milliseconds, write time has a resolution of 2 seconds, - and access time has a resolution of 1 day. On the NTFS file system, access time has a resolution of 1 hour. - For more information, see File Times. - - - - The file attributes of a file. - - - A structure that specifies when a file or directory was created. - If the underlying file system does not support creation time, this member is zero. - - - A structure. - For a file, the structure specifies when the file was last read from, written to, or for executable files, run. - For a directory, the structure specifies when the directory is created. If the underlying file system does not support last access time, this member is zero. - On the FAT file system, the specified date for both files and directories is correct, but the time of day is always set to midnight. - - - - A structure. - For a file, the structure specifies when the file was last written to, truncated, or overwritten, for example, when WriteFile or SetEndOfFile are used. - The date and time are not updated when file attributes or security descriptors are changed. - For a directory, the structure specifies when the directory is created. If the underlying file system does not support last write time, this member is zero. - - - - The high-order DWORD of the file size. This member does not have a meaning for directories. - This value is zero unless the file size is greater than MAXDWORD. - The size of the file is equal to (nFileSizeHigh * (MAXDWORD+1)) + nFileSizeLow. - - - - The low-order DWORD of the file size. This member does not have a meaning for directories. - - - The file size. - - - Contains information about the file that is found by the FindFirstFile, FindFirstFileEx, or FindNextFile function. - - If a file has a long file name, the complete name appears in the cFileName member, and the 8.3 format truncated version of the name appears - in the cAlternateFileName member. Otherwise, cAlternateFileName is empty. If the FindFirstFileEx function was called with a value of FindExInfoBasic - in the fInfoLevelId parameter, the cAlternateFileName member will always contain a string value. This remains true for all subsequent calls to the - FindNextFile function. As an alternative method of retrieving the 8.3 format version of a file name, you can use the GetShortPathName function. - For more information about file names, see File Names, Paths, and Namespaces. - - - Not all file systems can record creation and last access times, and not all file systems record them in the same manner. - For example, on the FAT file system, create time has a resolution of 10 milliseconds, write time has a resolution of 2 seconds, - and access time has a resolution of 1 day. The NTFS file system delays updates to the last access time for a file by up to 1 hour - after the last access. For more information, see File Times. - - - - The file attributes of a file. - - - A structure that specifies when a file or directory was created. - If the underlying file system does not support creation time, this member is zero. - - - A structure. - For a file, the structure specifies when the file was last read from, written to, or for executable files, run. - For a directory, the structure specifies when the directory is created. If the underlying file system does not support last access time, this member is zero. - On the FAT file system, the specified date for both files and directories is correct, but the time of day is always set to midnight. - - - - A structure. - For a file, the structure specifies when the file was last written to, truncated, or overwritten, for example, when WriteFile or SetEndOfFile are used. - The date and time are not updated when file attributes or security descriptors are changed. - For a directory, the structure specifies when the directory is created. If the underlying file system does not support last write time, this member is zero. - - - - The high-order DWORD of the file size. This member does not have a meaning for directories. - This value is zero unless the file size is greater than MAXDWORD. - The size of the file is equal to (nFileSizeHigh * (MAXDWORD+1)) + nFileSizeLow. - - - - The low-order DWORD of the file size. This member does not have a meaning for directories. - - - If the dwFileAttributes member includes the FILE_ATTRIBUTE_REPARSE_POINT attribute, this member specifies the reparse point tag. - Otherwise, this value is undefined and should not be used. - - - - Reserved for future use. - - - The name of the file. - - - An alternative name for the file. This name is in the classic 8.3 file name format. - - - Contains stream data. - - - Type of stream data. - - - Attributes of data to facilitate cross-operating system transfer. - - - Size of data, in bytes. - - - Length of the name of the alternative data stream, in bytes. - - - Defines, redefines, or deletes MS-DOS device names. - - If the function succeeds, the return value is nonzero. - If the function fails, the return value is zero. To get extended error information, call GetLastError. - - Minimum supported client: Windows XP [desktop apps only] - Minimum supported server: Windows Server 2003 [desktop apps only] - - - Deletes a drive letter or mounted folder. - - If the function succeeds, the return value is nonzero. - If the function fails, the return value is zero. To get extended error information, call GetLastError. - - Minimum supported client: Windows XP [desktop apps only] - Minimum supported server: Windows Server 2003 [desktop apps only] - - - Retrieves the name of a volume on a computer. FindFirstVolume is used to begin scanning the volumes of a computer. - - If the function succeeds, the return value is a search handle used in a subsequent call to the FindNextVolume and FindVolumeClose functions. - If the function fails to find any volumes, the return value is the INVALID_HANDLE_VALUE error code. To get extended error information, call GetLastError. - - Minimum supported client: Windows XP [desktop apps only] - Minimum supported server: Windows Server 2003 [desktop apps only] - - - Retrieves the name of a mounted folder on the specified volume. FindFirstVolumeMountPoint is used to begin scanning the mounted folders on a volume. - - If the function succeeds, the return value is a search handle used in a subsequent call to the FindNextVolumeMountPoint and FindVolumeMountPointClose functions. - If the function fails to find a mounted folder on the volume, the return value is the INVALID_HANDLE_VALUE error code. - - Minimum supported client: Windows XP [desktop apps only] - Minimum supported server: Windows Server 2003 [desktop apps only] - - - Continues a volume search started by a call to the FindFirstVolume function. FindNextVolume finds one volume per call. - - If the function succeeds, the return value is nonzero. - If the function fails, the return value is zero. To get extended error information, call GetLastError. - - Minimum supported client: Windows XP [desktop apps only] - Minimum supported server: Windows Server 2003 [desktop apps only] - - - Continues a mounted folder search started by a call to the FindFirstVolumeMountPoint function. FindNextVolumeMountPoint finds one mounted folder per call. - - If the function succeeds, the return value is nonzero. - If the function fails, the return value is zero. To get extended error information, call GetLastError. If no more mounted folders can be found, the GetLastError function returns the ERROR_NO_MORE_FILES error code. - In that case, close the search with the FindVolumeMountPointClose function. - - Minimum supported client: Windows XP - Minimum supported server: Windows Server 2003 - - - Closes the specified volume search handle. - - SetLastError is set to . - Minimum supported client: Windows XP [desktop apps only]. Minimum supported server: Windows Server 2003 [desktop apps only]. - - - If the function succeeds, the return value is nonzero. If the function fails, the return value is zero. To get extended error - information, call GetLastError. - - - - Closes the specified mounted folder search handle. - - SetLastError is set to . - Minimum supported client: Windows XP - Minimum supported server: Windows Server 2003 - - - If the function succeeds, the return value is nonzero. If the function fails, the return value is zero. To get extended error - information, call GetLastError. - - - - - Determines whether a disk drive is a removable, fixed, CD-ROM, RAM disk, or network drive. - To determine whether a drive is a USB-type drive, call and specify the - SPDRP_REMOVAL_POLICY property. - - - SMB does not support volume management functions. - Minimum supported client: Windows XP [desktop apps only] - Minimum supported server: Windows Server 2003 [desktop apps only] - - Full pathname of the root file. - - The return value specifies the type of drive, see . - If the function fails, the return value is zero. To get extended error information, call GetLastError. - - - - - Retrieves a bitmask representing the currently available disk drives. - - - SMB does not support volume management functions. - Minimum supported client: Windows XP [desktop apps only] - Minimum supported server: Windows Server 2003 [desktop apps only] - - - If the function succeeds, the return value is a bitmask representing the currently available disk drives. - Bit position 0 (the least-significant bit) is drive A, bit position 1 is drive B, bit position 2 is drive C, and so on. - If the function fails, the return value is zero. To get extended error information, call GetLastError. - - - - Retrieves information about the file system and volume associated with the specified root directory. - - If all the requested information is retrieved, the return value is nonzero. - If not all the requested information is retrieved, the return value is zero. - - Minimum supported client: Windows XP [desktop apps only] - Minimum supported server: Windows Server 2003 [desktop apps only] - "lpRootPathName" must end with a trailing backslash. - - - Retrieves information about the file system and volume associated with the specified file. - - If all the requested information is retrieved, the return value is nonzero. - If not all the requested information is retrieved, the return value is zero. To get extended error information, call GetLastError. - - To retrieve the current compression state of a file or directory, use FSCTL_GET_COMPRESSION. - SMB does not support volume management functions. - Minimum supported client: Windows Vista [desktop apps only] - Minimum supported server: Windows Server 2008 [desktop apps only] - - - Retrieves a volume GUID path for the volume that is associated with the specified volume mount point (drive letter, volume GUID path, or mounted folder). - - If the function succeeds, the return value is nonzero. - If the function fails, the return value is zero. To get extended error information, call GetLastError. - - Use GetVolumeNameForVolumeMountPoint to obtain a volume GUID path for use with functions such as SetVolumeMountPoint and FindFirstVolumeMountPoint that require a volume GUID path as an input parameter. - SMB does not support volume management functions. - Mount points aren't supported by ReFS volumes. - Minimum supported client: Windows XP [desktop apps only] - Minimum supported server: Windows Server 2003 [desktop apps only] - - - Retrieves the volume mount point where the specified path is mounted. - - If a specified path is passed, GetVolumePathName returns the path to the volume mount point, which means that it returns the - root of the volume where the end point of the specified path is located. - For example, assume that you have volume D mounted at C:\Mnt\Ddrive and volume E mounted at "C:\Mnt\Ddrive\Mnt\Edrive". Also - assume that you have a file with the path "E:\Dir\Subdir\MyFile". - If you pass "C:\Mnt\Ddrive\Mnt\Edrive\Dir\Subdir\MyFile" to GetVolumePathName, it returns the path "C:\Mnt\Ddrive\Mnt\Edrive\". - If a network share is specified, GetVolumePathName returns the shortest path for which GetDriveType returns DRIVE_REMOTE, - which means that the path is validated as a remote drive that exists, which the current user can access. - Minimum supported client: Windows XP [desktop apps only] - Minimum supported server: Windows Server 2003 [desktop apps only] - - - If the function succeeds, the return value is nonzero. - If the function fails, the return value is zero. To get extended error information, call GetLastError. - - - - Retrieves a list of drive letters and mounted folder paths for the specified volume. - Minimum supported client: Windows XP. - Minimum supported server: Windows Server 2003. - - If the function succeeds, the return value is nonzero. If the function fails, the return value is zero. To get extended error - information, call GetLastError. - - - - Sets the label of a file system volume. - Minimum supported client: Windows XP [desktop apps only]. - Minimum supported server: Windows Server 2003 [desktop apps only]. - "lpRootPathName" must end with a trailing backslash. - - If the function succeeds, the return value is nonzero. If the function fails, the return value is zero. To get extended error - information, call GetLastError. - - - - Associates a volume with a drive letter or a directory on another volume. - Minimum supported client: Windows XP [desktop apps only]. - Minimum supported server: Windows Server 2003 [desktop apps only]. - - If the function succeeds, the return value is nonzero. If the function fails, the return value is zero. To get extended error - information, call GetLastError. - - - - Retrieves information about MS-DOS device names. - Minimum supported client: Windows XP [desktop apps only]. - Minimum supported server: Windows Server 2003 [desktop apps only]. - - If the function succeeds, the return value is the number of TCHARs stored into the buffer pointed to by lpTargetPath. If the - function fails, the return value is zero. To get extended error information, call GetLastError. If the buffer is too small, the - function fails and the last error code is ERROR_INSUFFICIENT_BUFFER. - - - - Indicates the format of a path passed to a method. - - At some point in code you know the full path of file system objects, e.g.: "C:\Windows". - For example, Directory.EnumerateFileSystemEntries() will return all files and directories from a given path. - Most likely, some processing will happen on the results of the enum. The file or directory may be passed - on to another function. Whenever a file path is required, some performance can be gained. -   - A path like: "C:\Windows" or "\\server\share" is considered a full path for a directory because it is rooted and has a drive/unc path. - If the method supports it, and will skip GetFullPath() - calls for path resolving of the object, while also avoiding path validation and checks. - Using (default) will always call GetFullPath() and perform path validation and checks. -   - When working in a loop with thousands of files, will give the best performance. - - - - The format of the path is automatically detected by the method and internally converted to an extended length path. - It can be either a standard (short) full path, an extended length (unicode) full path or a relative path. - Example relative path: "Windows". - - - - The path is a full path in either normal or extended length (UNICODE) format. - Internally it will be converted to an extended length (UNICODE) path. - Using this option has a very slight performance advantage compared to using . - Example full path: "C:\Windows" or "\\server\share". - - - - The path is an extended length path. No additional processing will be done on the path, and it will be used as is. - Using this option has a slight performance advantage compared to using . - Example long full path: "\\?\C:\Windows" or "\\?\UNC\server\share". - - - - The exception that is thrown when an attempt to create a directory or file that already exists was made. - - - Initializes a new instance of the class. - - - Initializes a new instance of the class. - The message. - - - Initializes a new instance of the class. - The message. - The inner exception. - - - Initializes a new instance of the class. - The data for serializing or deserializing the object. - The source and destination for the object. - - - The requested operation could not be completed because the device was not ready. - - - Initializes a new instance of the class. - - - Initializes a new instance of the class. - The message. - - - Initializes a new instance of the class. - The message. - The inner exception. - - - Initializes a new instance of the class. - The data for serializing or deserializing the object. - The source and destination for the object. - - - The operation could not be completed because the directory is read-only. - - - Initializes a new instance of the class. - - - Initializes a new instance of the class. - The message. - - - Initializes a new instance of the class. - The message. - The inner exception. - - - Initializes a new instance of the class. - The data for serializing or deserializing the object. - The source and destination for the object. - - - The operation could not be completed because the directory was not empty. - - - Initializes a new instance of the class. - - - Initializes a new instance of the class. - The message. - - - Initializes a new instance of the class. - The message. - The inner exception. - - - Initializes a new instance of the class. - The data for serializing or deserializing the object. - The source and destination for the object. - - - The operation could not be completed because the file is read-only. - - - Initializes a new instance of the class. - - - Initializes a new instance of the class. - The message. - - - Initializes a new instance of the class. - The message. - The inner exception. - - - Initializes a new instance of the class. - The data for serializing or deserializing the object. - The source and destination for the object. - - - Provides static methods for the creation, copying, deletion, moving, and opening of files, and aids in the creation of objects. - This class cannot be inherited. - - - - [AlphaFS] Calculates the hash/checksum for the given . - The name of the file. - One of the values. - - - [AlphaFS] Calculates the hash/checksum for the given . - The name of the file. - One of the values. - Indicates the format of the path parameter(s). - - - [AlphaFS] Calculates the hash/checksum for the given . - The transaction. - The name of the file. - One of the values. - - - [AlphaFS] Calculates the hash/checksum for the given . - The transaction. - The name of the file. - One of the values. - Indicates the format of the path parameter(s). - - - [AlphaFS] Calculates the hash/checksum for the given . - The transaction. - One of the values. - The name of the file. - Indicates the format of the path parameter(s). - - - [AlphaFS] Backs up (export) encrypted files. This is one of a group of Encrypted File System (EFS) functions that is - intended to implement backup and restore functionality, while maintaining files in their encrypted state. - - - The file being backed up is not decrypted; it is backed up in its encrypted state. - - - If the caller does not have access to the key for the file, the caller needs - to export encrypted files. See - . - - - To backup an encrypted file call one of the - overloads and specify the file to backup - along with the destination stream of the backup data. - - - This function is intended for the backup of only encrypted files; see for backup - of unencrypted files. - - - The name of the file to be backed up. - The destination stream to which the backup data will be written. - - - - [AlphaFS] Backs up (export) encrypted files. This is one of a group of Encrypted File System (EFS) functions that is - intended to implement backup and restore functionality, while maintaining files in their encrypted state. - - - The file being backed up is not decrypted; it is backed up in its encrypted state. - - - If the caller does not have access to the key for the file, the caller needs - to export encrypted files. See - . - - - To backup an encrypted file call one of the - overloads and specify the file to backup - along with the destination stream of the backup data. - - - This function is intended for the backup of only encrypted files; see for backup - of unencrypted files. - - - The name of the file to be backed up. - The destination stream to which the backup data will be written. - The path format of the parameter. - - - - [AlphaFS] Restores (import) encrypted files. This is one of a group of Encrypted File System (EFS) functions that is - intended to implement backup and restore functionality, while maintaining files in their encrypted state. - - - If the caller does not have access to the key for the file, the caller needs - to restore encrypted files. See - . - - - To restore an encrypted file call one of the - overloads and specify the file to restore - along with the destination stream of the restored data. - - - This function is intended for the restoration of only encrypted files; see for - backup of unencrypted files. - - - The stream to read previously backed up data from. - The path of the destination file to restore to. - - - - [AlphaFS] Restores (import) encrypted files. This is one of a group of Encrypted File System (EFS) functions that is - intended to implement backup and restore functionality, while maintaining files in their encrypted state. - - - If the caller does not have access to the key for the file, the caller needs - to restore encrypted files. See - . - - - To restore an encrypted file call one of the - overloads and specify the file to restore - along with the destination stream of the restored data. - - - This function is intended for the restoration of only encrypted files; see for - backup of unencrypted files. - - - The stream to read previously backed up data from. - The path of the destination file to restore to. - The path format of the parameter. - - - - [AlphaFS] Restores (import) encrypted files. This is one of a group of Encrypted File System (EFS) functions that is - intended to implement backup and restore functionality, while maintaining files in their encrypted state. - - - If the caller does not have access to the key for the file, the caller needs - to restore encrypted files. See - . - - - To restore an encrypted file call one of the - overloads and specify the file to restore - along with the destination stream of the restored data. - - - This function is intended for the restoration of only encrypted files; see for - backup of unencrypted files. - - - The stream to read previously backed up data from. - The path of the destination file to restore to. - If set to a hidden file will be overwritten on import. - - - - [AlphaFS] Restores (import) encrypted files. This is one of a group of Encrypted File System (EFS) functions that is - intended to implement backup and restore functionality, while maintaining files in their encrypted state. - - - If the caller does not have access to the key for the file, the caller needs - to restore encrypted files. See - . - - - To restore an encrypted file call one of the - overloads and specify the file to restore - along with the destination stream of the restored data. - - - This function is intended for the restoration of only encrypted files; see for - backup of unencrypted files. - - - The stream to read previously backed up data from. - The path of the destination file to restore to. - If set to a hidden file will be overwritten on import. - The path format of the parameter. - - - - [AlphaFS] Enumerates the streams of type :$DATA from the specified file. - The path to the file to enumerate streams of. - The streams of type :$DATA in the specified file. - - - [AlphaFS] Enumerates the streams of type :$DATA from the specified file. - The path to the file to enumerate streams of. - Indicates the format of the path parameter(s). - The streams of type :$DATA in the specified file. - - - [AlphaFS] Enumerates the streams of type :$DATA from the specified file. - The transaction. - The path to the file to enumerate streams of. - The streams of type :$DATA in the specified file. - - - [AlphaFS] Enumerates the streams of type :$DATA from the specified file. - The transaction. - The path to the file to enumerate streams of. - Indicates the format of the path parameter(s). - The streams of type :$DATA in the specified file. - - - [AlphaFS] Enumerates the streams of type :$DATA from the specified file or directory. - The transaction. - The path to the file or directory to enumerate streams of. - Indicates the format of the path parameter(s). - The streams of type :$DATA in the specified file or directory. - - - [AlphaFS] Creates an enumeration of all the hard links to the specified . - The name of the file. - Indicates the format of the path parameter(s). - An enumerable collection of of all the hard links to the specified - - - [AlphaFS] Creates an enumeration of all the hard links to the specified . - The name of the file. - An enumerable collection of of all the hard links to the specified - - - [AlphaFS] Creates an enumeration of all the hard links to the specified . - The transaction. - The name of the file. - Indicates the format of the path parameter(s). - An enumerable collection of of all the hard links to the specified - - - [AlphaFS] Creates an enumeration of all the hard links to the specified . - The transaction. - The name of the file. - An enumerable collection of of all the hard links to the specified - - - [AlphaFS] Creates an enumeration of all the hard links to the specified . - - The transaction. - The name of the file. - Indicates the format of the path parameter(s). - An enumerable collection of of all the hard links to the specified - - - [AlphaFS] Creates a symbolic link. - See to run this method in an elevated state. - The name of the target for the symbolic link to be created. - The symbolic link to be created. - Indicates whether the link target, , is a file or directory. - Indicates the format of the path parameter(s). - - Several Exceptions possible. - - - [AlphaFS] Creates a symbolic link. - See to run this method in an elevated state. - The name of the target for the symbolic link to be created. - The symbolic link to be created. - Indicates whether the link target, , is a file or directory. - - Several Exceptions possible. - - - [AlphaFS] Creates a symbolic link. - See to run this method in an elevated state. - The transaction. - The name of the target for the symbolic link to be created. - The symbolic link to be created. - Indicates whether the link target, , is a file or directory. - Indicates the format of the path parameter(s). - - Several Exceptions possible. - - - [AlphaFS] Creates a symbolic link. - See to run this method in an elevated state. - The transaction. - The name of the target for the symbolic link to be created. - The symbolic link to be created. - Indicates whether the link target, , is a file or directory. - - Several Exceptions possible. - - - Creates a symbolic link. - See to run this method in an elevated state. - The transaction. - The name of the target for the symbolic link to be created. - The symbolic link to be created. - Indicates whether the link target, , is a file or directory. - Indicates the format of the path parameter(s). - - Several Exceptions possible. - - - [AlphaFS] Establishes a hard link between an existing file and a new file. This function is only supported on the NTFS file system, and only for files, not directories. - The name of the new file. This parameter cannot specify the name of a directory. - The name of the existing file. This parameter cannot specify the name of a directory. - Indicates the format of the path parameter(s). - - - [AlphaFS] Establishes a hard link between an existing file and a new file. This function is only supported on the NTFS file system, and only for files, not directories. - The name of the new file. This parameter cannot specify the name of a directory. - The name of the existing file. This parameter cannot specify the name of a directory. - - - - [AlphaFS] Establishes a hard link between an existing file and a new file. This function is only supported on the NTFS file system, - and only for files, not directories. - - The transaction. - The name of the new file. This parameter cannot specify the name of a directory. - The name of the existing file. This parameter cannot specify the name of a directory. - Indicates the format of the path parameter(s). - - - - [AlphaFS] Establishes a hard link between an existing file and a new file. This function is only supported on the NTFS file system, - and only for files, not directories. - - The transaction. - The name of the new file. This parameter cannot specify the name of a directory. - The name of the existing file. This parameter cannot specify the name of a directory. - - - Establish a hard link between an existing file and a new file. This function - is only supported on the NTFS file system, and only for files, not directories. - - - The transaction. - The name of the new file. This parameter cannot specify the name of a directory. - The name of the existing file. This parameter cannot specify the name of a directory. - Indicates the format of the path parameter(s). - - - [AlphaFS] Compresses a file using NTFS compression. - A path that describes a file to compress. - Indicates the format of the path parameter(s). - - - [AlphaFS] Compresses a file using NTFS compression. - A path that describes a file to compress. - - - [AlphaFS] Compresses a file using NTFS compression. - The transaction. - A path that describes a file to compress. - Indicates the format of the path parameter(s). - - - [AlphaFS] Compresses a file using NTFS compression. - The transaction. - A path that describes a file to compress. - - - [AlphaFS] Decompresses an NTFS compressed file. - A path that describes a file to decompress. - Indicates the format of the path parameter(s). - - - [AlphaFS] Decompresses an NTFS compressed file. - A path that describes a file to decompress. - - - [AlphaFS] Decompresses an NTFS compressed file. - The transaction. - A path that describes a file to decompress. - Indicates the format of the path parameter(s). - - - [AlphaFS] Decompresses an NTFS compressed file. - The transaction. - A path that describes a file to decompress. - - - Deletes the specified file. - If the file to be deleted does not exist, no exception is thrown. - - The name of the file to be deleted. Wildcard characters are not supported. - - - - - - - - [AlphaFS] Deletes the specified file. - If the file to be deleted does not exist, no exception is thrown. - - The name of the file to be deleted. Wildcard characters are not supported. - - - overrides the read only of the file. - - Indicates the format of the path parameter(s). - - - - - - - [AlphaFS] Deletes the specified file. - If the file to be deleted does not exist, no exception is thrown. - - The name of the file to be deleted. Wildcard characters are not supported. - - - overrides the read only of the file. - - - - - - - - [AlphaFS] Deletes the specified file. - If the file to be deleted does not exist, no exception is thrown. - The transaction. - - The name of the file to be deleted. Wildcard characters are not supported. - - - - - - - - [AlphaFS] Deletes the specified file. - The transaction. - The name of the file to be deleted. Wildcard characters are not supported. - overrides the read only of the file. - Indicates the format of the path parameter(s). - If the file to be deleted does not exist, no exception is thrown. - - - - - - - [AlphaFS] Deletes the specified file. - The transaction. - The name of the file to be deleted. Wildcard characters are not supported. - overrides the read only of the file. - If the file to be deleted does not exist, no exception is thrown. - - - - - - - Deletes a Non-/Transacted file. - If the file to be deleted does not exist, no exception is thrown. - - - - - The transaction. - The name of the file to be deleted. - overrides the read only of the file. - Indicates the format of the path parameter(s). - - - Decrypts a file that was encrypted by the current account using the Encrypt method. - A path that describes a file to decrypt. - - - [AlphaFS] Decrypts a file that was encrypted by the current account using the Encrypt method. - A path that describes a file to decrypt. - Indicates the format of the path parameter(s). - - - Encrypts a file so that only the account used to encrypt the file can decrypt it. - A path that describes a file to encrypt. - - - [AlphaFS] Encrypts a file so that only the account used to encrypt the file can decrypt it. - A path that describes a file to encrypt. - Indicates the format of the path parameter(s). - - - Decrypts/encrypts a file or directory so that only the account used to encrypt the file can decrypt it. - - Specifies that is a file or directory. - A path that describes a file to encrypt. - encrypt, decrypt. - Indicates the format of the path parameter(s). - - - Creates or opens a file for writing UTF-8 encoded text. - The file to be opened for writing. - A StreamWriter that writes to the specified file using UTF-8 encoding. - - - [AlphaFS] Creates or opens a file for writing UTF-8 encoded text. - The file to be opened for writing. - Indicates the format of the path parameter(s). - A StreamWriter that writes to the specified file using UTF-8 encoding. - - - [AlphaFS] Creates or opens a file for writing encoded text. - The file to be opened for writing. - The encoding that is applied to the contents of the file. - Indicates the format of the path parameter(s). - A StreamWriter that writes to the specified file using UTF-8 encoding. - - - [AlphaFS] Creates or opens a file for writing UTF-8 encoded text. - The transaction. - The file to be opened for writing. - A StreamWriter that writes to the specified file using UTF-8 encoding. - - - [AlphaFS] Creates or opens a file for writing encoded text. - The transaction. - The file to be opened for writing. - The encoding that is applied to the contents of the file. - Indicates the format of the path parameter(s). - A StreamWriter that writes to the specified file using UTF-8 encoding. - - - Creates or opens a file for writing encoded text. - The transaction. - The file to be opened for writing. - The applied to the contents of the file. - Indicates the format of the path parameter(s). - A that writes to the specified file using NativeMethods.DefaultFileBufferSize encoding. - - - Copies an existing file to a new file. Overwriting a file of the same name is not allowed. - - The attributes of the original file are retained in the copied file. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - - - - - - - The file to copy. - The name of the destination file. This cannot be a directory or an existing file. - - - Copies an existing file to a new file. Overwriting a file of the same name is allowed. - - The attributes of the original file are retained in the copied file. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - - - - - - - The file to copy. - The name of the destination file. This cannot be a directory. - if the destination file should ignoring the read-only and hidden attributes and overwrite; otherwise, . - - - [AlphaFS] Copies an existing file to a new file. Overwriting a file of the same name is not allowed. - - The attributes of the original file are retained in the copied file. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - - - - - - - The file to copy. - The name of the destination file. This cannot be a directory. - Indicates the format of the path parameter(s). - - - [AlphaFS] Copies an existing file to a new file. Overwriting a file of the same name is allowed. - - The attributes of the original file are retained in the copied file. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - - - - - - - The file to copy. - The name of the destination file. This cannot be a directory. - if the destination file should ignoring the read-only and hidden attributes and overwrite; otherwise, . - Indicates the format of the path parameter(s). - - - [AlphaFS] Copies an existing file to a new file. Overwriting a file of the same name is not allowed. - - The attributes of the original file are retained in the copied file. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - - - - - - - The transaction. - The file to copy. - The name of the destination file. This cannot be a directory or an existing file. - - - [AlphaFS] Copies an existing file to a new file. Overwriting a file of the same name is not allowed. - - The attributes of the original file are retained in the copied file. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - - - - - - - The transaction. - The file to copy. - The name of the destination file. This cannot be a directory. - Indicates the format of the path parameter(s). - - - [AlphaFS] Copies an existing file to a new file. Overwriting a file of the same name is allowed. - - The attributes of the original file are retained in the copied file. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - - - - - - - The transaction. - The file to copy. - The name of the destination file. This cannot be a directory. - if the destination file should ignoring the read-only and hidden attributes and overwrite; otherwise, . - - - [AlphaFS] Copies an existing file to a new file. Overwriting a file of the same name is allowed. - - The attributes of the original file are retained in the copied file. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - - - - - - - The transaction. - The file to copy. - The name of the destination file. This cannot be a directory. - if the destination file should ignoring the read-only and hidden attributes and overwrite; otherwise, . - Indicates the format of the path parameter(s). - - - [AlphaFS] Copies an existing file to a new file. Overwriting a file of the same name is allowed. can be specified. - - Option is recommended for very large file transfers. - The attributes of the original file are retained in the copied file. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - - - - - - - The file to copy. - The name of the destination file. This cannot be a directory. - that specify how the file is to be copied. This parameter can be . - - - [AlphaFS] Copies an existing file to a new file. Overwriting a file of the same name is allowed. can be specified. - - Option is recommended for very large file transfers. - The attributes of the original file are retained in the copied file. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - - - - - - - The file to copy. - The name of the destination file. This cannot be a directory. - that specify how the file is to be copied. This parameter can be . - Indicates the format of the path parameter(s). - - - [AlphaFS] Copies an existing file to a new file. Overwriting a file of the same name is allowed. can be specified. - - Option is recommended for very large file transfers. - The attributes of the original file are retained in the copied file. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - - - - - - - The file to copy. - The name of the destination file. This cannot be a directory. - that specify how the file is to be copied. This parameter can be . - if original Timestamps must be preserved, otherwise. - - - [AlphaFS] Copies an existing file to a new file. Overwriting a file of the same name is allowed. can be specified. - - Option is recommended for very large file transfers. - The attributes of the original file are retained in the copied file. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - - - - - - - The file to copy. - The name of the destination file. This cannot be a directory. - that specify how the file is to be copied. This parameter can be . - if original Timestamps must be preserved, otherwise. - Indicates the format of the path parameter(s). - - - [AlphaFS] Copies an existing file to a new file. Overwriting a file of the same name is allowed. can be specified, - and the possibility of notifying the application of its progress through a callback function. - - A class with details of the Copy action. - - Option is recommended for very large file transfers. - The attributes of the original file are retained in the copied file. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - - - - - - - The file to copy. - The name of the destination file. This cannot be a directory. - that specify how the file is to be copied. This parameter can be . - A callback function that is called each time another portion of the file has been copied. This parameter can be . - The argument to be passed to the callback function. This parameter can be . - - - [AlphaFS] Copies an existing file to a new file. Overwriting a file of the same name is allowed. can be specified, - and the possibility of notifying the application of its progress through a callback function. - - A class with details of the Copy action. - - Option is recommended for very large file transfers. - The attributes of the original file are retained in the copied file. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - - - - - - - The file to copy. - The name of the destination file. This cannot be a directory. - that specify how the file is to be copied. This parameter can be . - A callback function that is called each time another portion of the file has been copied. This parameter can be . - The argument to be passed to the callback function. This parameter can be . - Indicates the format of the path parameter(s). - - - [AlphaFS] Copies an existing file to a new file. Overwriting a file of the same name is allowed. can be specified, - and the possibility of notifying the application of its progress through a callback function. - - A class with details of the Copy action. - - Option is recommended for very large file transfers. - The attributes of the original file are retained in the copied file. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - - - - - - - The file to copy. - The name of the destination file. This cannot be a directory. - that specify how the file is to be copied. This parameter can be . - if original Timestamps must be preserved, otherwise. - A callback function that is called each time another portion of the file has been copied. This parameter can be . - The argument to be passed to the callback function. This parameter can be . - - - [AlphaFS] Copies an existing file to a new file. Overwriting a file of the same name is allowed. can be specified, - and the possibility of notifying the application of its progress through a callback function. - - A class with details of the Copy action. - - Option is recommended for very large file transfers. - The attributes of the original file are retained in the copied file. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - - - - - - - The file to copy. - The name of the destination file. This cannot be a directory. - that specify how the file is to be copied. This parameter can be . - if original Timestamps must be preserved, otherwise. - A callback function that is called each time another portion of the file has been copied. This parameter can be . - The argument to be passed to the callback function. This parameter can be . - Indicates the format of the path parameter(s). - - - [AlphaFS] Copies an existing file to a new file. Overwriting a file of the same name is allowed. can be specified. - - Option is recommended for very large file transfers. - The attributes of the original file are retained in the copied file. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - - - - - - - The transaction. - The file to copy. - The name of the destination file. This cannot be a directory. - that specify how the file is to be copied. This parameter can be . - - - [AlphaFS] Copies an existing file to a new file. Overwriting a file of the same name is allowed. can be specified. - - Option is recommended for very large file transfers. - The attributes of the original file are retained in the copied file. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - - - - - - - The transaction. - The file to copy. - The name of the destination file. This cannot be a directory. - that specify how the file is to be copied. This parameter can be . - Indicates the format of the path parameter(s). - - - [AlphaFS] Copies an existing file to a new file. Overwriting a file of the same name is allowed. can be specified. - - Option is recommended for very large file transfers. - The attributes of the original file are retained in the copied file. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - - - - - - - The transaction. - The file to copy. - The name of the destination file. This cannot be a directory. - that specify how the file is to be copied. This parameter can be . - if original Timestamps must be preserved, otherwise. - - - [AlphaFS] Copies an existing file to a new file. Overwriting a file of the same name is allowed. can be specified. - - Option is recommended for very large file transfers. - The attributes of the original file are retained in the copied file. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - - - - - - - The transaction. - The file to copy. - The name of the destination file. This cannot be a directory. - that specify how the file is to be copied. This parameter can be . - if original Timestamps must be preserved, otherwise. - Indicates the format of the path parameter(s). - - - [AlphaFS] Copies an existing file to a new file. Overwriting a file of the same name is allowed. can be specified, - and the possibility of notifying the application of its progress through a callback function. - - A class with details of the Copy action. - - Option is recommended for very large file transfers. - The attributes of the original file are retained in the copied file. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - - - - - - - The transaction. - The file to copy. - The name of the destination file. This cannot be a directory. - that specify how the file is to be copied. This parameter can be . - A callback function that is called each time another portion of the file has been copied. This parameter can be . - The argument to be passed to the callback function. This parameter can be . - - - [AlphaFS] Copies an existing file to a new file. Overwriting a file of the same name is allowed. can be specified, - and the possibility of notifying the application of its progress through a callback function. - - A class with details of the Copy action. - - Option is recommended for very large file transfers. - The attributes of the original file are retained in the copied file. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - - - - - - - The transaction. - The file to copy. - The name of the destination file. This cannot be a directory. - that specify how the file is to be copied. This parameter can be . - A callback function that is called each time another portion of the file has been copied. This parameter can be . - The argument to be passed to the callback function. This parameter can be . - Indicates the format of the path parameter(s). - - - [AlphaFS] Copies an existing file to a new file. Overwriting a file of the same name is allowed. can be specified, - and the possibility of notifying the application of its progress through a callback function. - - A class with details of the Copy action. - - Option is recommended for very large file transfers. - The attributes of the original file are retained in the copied file. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - - - - - - - The transaction. - The file to copy. - The name of the destination file. This cannot be a directory. - that specify how the file is to be copied. This parameter can be . - if original Timestamps must be preserved, otherwise. - A callback function that is called each time another portion of the file has been copied. This parameter can be . - The argument to be passed to the callback function. This parameter can be . - - - [AlphaFS] Copies an existing file to a new file. Overwriting a file of the same name is allowed. can be specified, - and the possibility of notifying the application of its progress through a callback function. - - A class with details of the Copy action. - - Option is recommended for very large file transfers. - The attributes of the original file are retained in the copied file. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - The transaction. - The file to copy. - The name of the destination file. This cannot be a directory. - that specify how the file is to be copied. This parameter can be . - if original Timestamps must be preserved, otherwise. - A callback function that is called each time another portion of the file has been copied. This parameter can be . - The argument to be passed to the callback function. This parameter can be . - Indicates the format of the path parameter(s). - - - - - - - - - - Moves a specified file to a new location, providing the option to specify a new file name. - - This method works across disk volumes, and it does not throw an exception if the source and destination are the same. - Note that if you attempt to replace a file by moving a file of the same name into that directory, you get an . - You cannot use the Move method to overwrite an existing file. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - - - - - - - The name of the file to move. - The new path for the file. - - - [AlphaFS] Moves a specified file to a new location, providing the option to specify a new file name. - - This method works across disk volumes, and it does not throw an exception if the source and destination are the same. - Note that if you attempt to replace a file by moving a file of the same name into that directory, you get an . - You cannot use the Move method to overwrite an existing file. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - - - - - - - The name of the file to move. - The new path for the file. - Indicates the format of the path parameter(s). - - - [AlphaFS] Moves a specified file to a new location, providing the option to specify a new file name. - - This method works across disk volumes, and it does not throw an exception if the source and destination are the same. - Note that if you attempt to replace a file by moving a file of the same name into that directory, you get an . - You cannot use the Move method to overwrite an existing file. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - - - - - - - The transaction. - The name of the file to move. - The new path for the file. - - - [AlphaFS] Moves a specified file to a new location, providing the option to specify a new file name. - - This method works across disk volumes, and it does not throw an exception if the source and destination are the same. - Note that if you attempt to replace a file by moving a file of the same name into that directory, you get an . - You cannot use the Move method to overwrite an existing file. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - - - - - - - The transaction. - The name of the file to move. - The new path for the file. - Indicates the format of the path parameter(s). - - - [AlphaFS] Moves a specified file to a new location, providing the option to specify a new file name. - - This method works across disk volumes, and it does not throw an exception if the source and destination are the same. - Note that if you attempt to replace a file by moving a file of the same name into that directory, you get an . - You cannot use the Move method to overwrite an existing file. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - - - - - - - The name of the file to move. - The new path for the file. - that specify how the file is to be moved. This parameter can be . - - - [AlphaFS] Moves a specified file to a new location, providing the option to specify a new file name. - - This method works across disk volumes, and it does not throw an exception if the source and destination are the same. - Note that if you attempt to replace a file by moving a file of the same name into that directory, you get an . - You cannot use the Move method to overwrite an existing file. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - - - - - - - The name of the file to move. - The new path for the file. - that specify how the file is to be moved. This parameter can be . - Indicates the format of the path parameter(s). - - - [AlphaFS] Moves a specified file to a new location, providing the option to specify a new file name. - A class with the status of the Move action. - - This method works across disk volumes, and it does not throw an exception if the source and destination are the same. - Note that if you attempt to replace a file by moving a file of the same name into that directory, you get an . - You cannot use the Move method to overwrite an existing file. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - - - - - - - The name of the file to move. - The new path for the file. - that specify how the file is to be moved. This parameter can be . - A callback function that is called each time another portion of the file has been moved. This parameter can be . - The argument to be passed to the callback function. This parameter can be . - - - [AlphaFS] Moves a specified file to a new location, providing the option to specify a new file name. - A class with the status of the Move action. - - This method works across disk volumes, and it does not throw an exception if the source and destination are the same. - Note that if you attempt to replace a file by moving a file of the same name into that directory, you get an . - You cannot use the Move method to overwrite an existing file. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - - - - - - - The name of the file to move. - The new path for the file. - that specify how the file is to be moved. This parameter can be . - A callback function that is called each time another portion of the file has been moved. This parameter can be . - The argument to be passed to the callback function. This parameter can be . - Indicates the format of the path parameter(s). - - - [AlphaFS] Moves a specified file to a new location, providing the option to specify a new file name. - - This method works across disk volumes, and it does not throw an exception if the source and destination are the same. - Note that if you attempt to replace a file by moving a file of the same name into that directory, you get an . - You cannot use the Move method to overwrite an existing file. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - - - - - - - The transaction. - The name of the file to move. - The new path for the file. - that specify how the file is to be moved. This parameter can be . - - - [AlphaFS] Moves a specified file to a new location, providing the option to specify a new file name. - - This method works across disk volumes, and it does not throw an exception if the source and destination are the same. - Note that if you attempt to replace a file by moving a file of the same name into that directory, you get an . - You cannot use the Move method to overwrite an existing file. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - - - - - - - The transaction. - The name of the file to move. - The new path for the file. - that specify how the file is to be moved. This parameter can be . - Indicates the format of the path parameter(s). - - - [AlphaFS] Moves a specified file to a new location, providing the option to specify a new file name. - A class with the status of the Move action. - - This method works across disk volumes, and it does not throw an exception if the source and destination are the same. - Note that if you attempt to replace a file by moving a file of the same name into that directory, you get an . - You cannot use the Move method to overwrite an existing file. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - - - - - - - The transaction. - The name of the file to move. - The new path for the file. - that specify how the file is to be moved. This parameter can be . - A callback function that is called each time another portion of the file has been moved. This parameter can be . - The argument to be passed to the callback function. This parameter can be . - - - [AlphaFS] Moves a specified file to a new location, providing the option to specify a new file name. - A class with the status of the Move action. - - This method works across disk volumes, and it does not throw an exception if the source and destination are the same. - Note that if you attempt to replace a file by moving a file of the same name into that directory, you get an . - You cannot use the Move method to overwrite an existing file. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - - - - - - - The transaction. - The name of the file to move. - The new path for the file. - that specify how the file is to be moved. This parameter can be . - A callback function that is called each time another portion of the file has been moved. This parameter can be . - The argument to be passed to the callback function. This parameter can be . - Indicates the format of the path parameter(s). - - - Determine the Copy or Move action. - - - Copy/move a Non-/Transacted file or directory including its children to a new location, or can be specified, - and the possibility of notifying the application of its progress through a callback function. - - A class with the status of the Copy or Move action. - - Option is recommended for very large file transfers. - You cannot use the Move method to overwrite an existing file, unless - contains . - This Move method works across disk volumes, and it does not throw an exception if the - source and destination are the same. - Note that if you attempt to replace a file by moving a file of the same name into - that directory, you get an IOException. - - - - - - - - - Specifies that and are a file or directory. - The transaction. - The source directory path. - The destination directory path. - if original Timestamps must be preserved, otherwise. This parameter is ignored for move operations. - that specify how the file is to be copied. This parameter can be . - Flags that specify how the file or directory is to be moved. This parameter can be . - A callback function that is called each time another portion of the file has been copied/moved. This parameter can be . - The argument to be passed to the callback function. This parameter can be . - - Indicates the format of the path parameter(s). - - - [AlphaFS] Determines whether the specified file is in use (locked). - Returns if the specified file is in use (locked); otherwise, - - - The file to check. - - - [AlphaFS] Determines whether the specified file is in use (locked). - Returns if the specified file is in use (locked); otherwise, - - - - The file to check. - Indicates the format of the path parameter(s). - - - [AlphaFS] Determines whether the specified file is in use (locked). - Returns if the specified file is in use (locked); otherwise, - - - - The transaction. - The file to check. - - - [AlphaFS] Determines whether the specified file is in use (locked). - Returns if the specified file is in use (locked); otherwise, - - - - The transaction. - The file to check. - Indicates the format of the path parameter(s). - - - [AlphaFS] Determines whether the specified file is in use (locked). - Returns if the specified file is in use (locked); otherwise, - - - - The transaction. - The file to check. - Indicates the format of the path parameter(s). - - - Appends lines to a file, and then closes the file. If the specified file does not exist, this method creates a file, writes the - specified lines to the file, and then closes the file. - - - The method creates the file if it doesn't exist, but it doesn't create new directories. Therefore, the value of the path parameter - must contain existing directories. - - - - - - - - - - - - The file to append the lines to. The file is created if it doesn't already exist. - The lines to append to the file. - - - Appends lines to a file, and then closes the file. If the specified file does not exist, this method creates a file, writes the - specified lines to the file, and then closes the file. - - - The method creates the file if it doesn't exist, but it doesn't create new directories. Therefore, the value of the path parameter - must contain existing directories. - - - - - - - - - - - - The file to append the lines to. The file is created if it doesn't already exist. - The lines to append to the file. - The character to use. - - - [AlphaFS] Appends lines to a file, and then closes the file. If the specified file does not exist, this method creates a file, - writes the specified lines to the file, and then closes the file. - - - The method creates the file if it doesn't exist, but it doesn't create new directories. Therefore, the value of the path parameter - must contain existing directories. - - - - - - - - - - - - The file to append the lines to. The file is created if it doesn't already exist. - The lines to append to the file. - Indicates the format of the path parameter(s). - - - [AlphaFS] Appends lines to a file, and then closes the file. If the specified file does not - exist, this method creates a file, writes the specified lines to the file, and then closes - the file. - - - The method creates the file if it doesn't exist, but it doesn't create new directories. - Therefore, the value of the path parameter must contain existing directories. - - - - - - - - - - - - - The file to append the lines to. The file is created if it doesn't already exist. - - The lines to append to the file. - The character to use. - Indicates the format of the path parameter(s). - - - [AlphaFS] Appends lines to a file, and then closes the file. If the specified file does not exist, this method creates a file, - writes the specified lines to the file, and then closes the file. - - - The method creates the file if it doesn't exist, but it doesn't create new directories. Therefore, the value of the path parameter - must contain existing directories. - - - - - - - - - - - - The transaction. - The file to append the lines to. The file is created if it doesn't already exist. - The lines to append to the file. - - - [AlphaFS] Appends lines to a file, and then closes the file. If the specified file does not exist, this method creates a file, - writes the specified lines to the file, and then closes the file. - - - The method creates the file if it doesn't exist, but it doesn't create new directories. Therefore, the value of the path parameter - must contain existing directories. - - - - - - - - - - - - The transaction. - The file to append the lines to. The file is created if it doesn't already exist. - The lines to append to the file. - The character to use. - - - [AlphaFS] Appends lines to a file, and then closes the file. If the specified file does not exist, this method creates a file, writes the - specified lines to the file, and then closes the file. - - - The method creates the file if it doesn't exist, but it doesn't create new directories. Therefore, the value of the path parameter - must contain existing directories. - - - - - - - - - - - - The transaction. - The file to append the lines to. The file is created if it doesn't already exist. - The lines to append to the file. - Indicates the format of the path parameter(s). - - - [AlphaFS] Appends lines to a file, and then closes the file. If the specified file does not exist, this method creates a file, - writes the specified lines to the file, and then closes the file. - - - The method creates the file if it doesn't exist, but it doesn't create new directories. Therefore, the value of the path parameter - must contain existing directories. - - - - - - - - - - - - The transaction. - The file to append the lines to. The file is created if it doesn't already exist. - The lines to append to the file. - The character to use. - Indicates the format of the path parameter(s). - - - Appends the specified stringto the file, creating the file if it does not already exist. - - - - - - - - - - - The file to append the specified string to. - The string to append to the file. - - - Appends the specified string to the file, creating the file if it does not already exist. - - - - - - - - - - - The file to append the specified string to. - The string to append to the file. - The character to use. - - - [AlphaFS] Appends the specified stringto the file, creating the file if it does not already exist. - - - - - - - - - - - The file to append the specified string to. - The string to append to the file. - Indicates the format of the path parameter(s). - - - [AlphaFS] Appends the specified string to the file, creating the file if it does not already exist. - - - - - - - - - - - The file to append the specified string to. - The string to append to the file. - The character to use. - Indicates the format of the path parameter(s). - - - [AlphaFS] Appends the specified stringto the file, creating the file if it does not already exist. - - - - - - - - - - - The transaction. - The file to append the specified string to. - The string to append to the file. - - - [AlphaFS] Appends the specified string to the file, creating the file if it does not already exist. - - - - - - - - - - - The transaction. - The file to append the specified string to. - The string to append to the file. - The character to use. - - - [AlphaFS] Appends the specified stringto the file, creating the file if it does not already exist. - - - - - - - - - - - The transaction. - The file to append the specified string to. - The string to append to the file. - Indicates the format of the path parameter(s). - - - [AlphaFS] Appends the specified string to the file, creating the file if it does not already exist. - - - - - - - - - - - The transaction. - The file to append the specified string to. - The string to append to the file. - The character to use. - Indicates the format of the path parameter(s). - - - Creates a new file, writes a collection of strings to the file, and then closes the file. - The default behavior of the method is to write out data by using UTF-8 encoding without a byte order mark (BOM). - - - - - - - - - - - The file to write to. - The lines to write to the file. - - - Creates a new file by using the specified encoding, writes a collection of strings to the file, and then closes the file. - The file to write to. - The string array to write to the file. - - - Creates a new file by using the specified encoding, writes a collection of strings to the file, and then closes the file. - - - - - - - - - - - The file to write to. - The lines to write to the file. - The character to use. - - - Creates a new file by using the specified encoding, writes a collection of strings to the file, and then closes the file. - - - - - - - - - - - The file to write to. - The string array to write to the file. - The character to use. - - - [AlphaFS] Creates a new file, writes a collection of strings to the file, and then closes the file. - The default behavior of the method is to write out data by using UTF-8 encoding without a byte order mark (BOM). - - - - - - - - - - - The file to write to. - The lines to write to the file. - Indicates the format of the path parameter(s). - - - [AlphaFS] Creates a new file by using the specified encoding, writes a collection of strings to the file, and then closes the file. - - - - - - - - - - - The file to write to. - The string array to write to the file. - Indicates the format of the path parameter(s). - - - [AlphaFS] Creates a new file by using the specified encoding, writes a collection of strings to the file, and then closes the file. - - - - - - - - - - - The file to write to. - The lines to write to the file. - The character to use. - Indicates the format of the path parameter(s). - - - [AlphaFS] Creates a new file by using the specified encoding, writes a collection of strings to the file, and then closes the file. - - - - - - - - - - - The file to write to. - The string array to write to the file. - The character to use. - Indicates the format of the path parameter(s). - - - [AlphaFS] Creates a new file, writes a collection of strings to the file, and then closes the file. - The default behavior of the method is to write out data by using UTF-8 encoding without a byte order mark (BOM). - - - - - - - - - - - The transaction. - The file to write to. - The lines to write to the file. - - - [AlphaFS] Creates a new file, writes a collection of strings to the file, and then closes the file. - The default behavior of the method is to write out data by using UTF-8 encoding without a byte order mark (BOM). - - - - - - - - - - - The transaction. - The file to write to. - The string array to write to the file. - - - [AlphaFS] Creates a new file by using the specified encoding, writes a collection of strings to the file, and then closes the file. - - - - - - - - - - - The transaction. - The file to write to. - The lines to write to the file. - The character to use. - - - [AlphaFS] Creates a new file by using the specified encoding, writes a collection of strings to the file, and then closes the file. - - - - - - - - - - - The transaction. - The file to write to. - The string array to write to the file. - The character to use. - - - [AlphaFS] Creates a new file, writes a collection of strings to the file, and then closes the file. - The default behavior of the method is to write out data by using UTF-8 encoding without a byte order mark (BOM). - - - - - - - - - - - The transaction. - The file to write to. - The lines to write to the file. - Indicates the format of the path parameter(s). - - - [AlphaFS] Creates a new file by using the specified encoding, writes a collection of strings to the file, and then closes the file. - - - - - - - - - - - The transaction. - The file to write to. - The string array to write to the file. - Indicates the format of the path parameter(s). - - - [AlphaFS] Creates a new file by using the specified encoding, writes a collection of strings to the file, and then closes the file. - - - - - - - - - - - The transaction. - The file to write to. - The lines to write to the file. - The character to use. - Indicates the format of the path parameter(s). - - - [AlphaFS] Creates a new file by using the specified encoding, writes a collection of strings to the file, and then closes the file. - - - - - - - - - - - The transaction. - The file to write to. - The string array to write to the file. - The character to use. - Indicates the format of the path parameter(s). - - - Creates a new file, writes the specified string to the file, and then closes the file. If the target file already exists, it is overwritten. - This method uses UTF-8 encoding without a Byte-Order Mark (BOM) - - - - - - - - - - - The file to write to. - The string to write to the file. - - - Creates a new file, writes the specified string to the file using the specified encoding, and then closes the file. If the target file already exists, it is overwritten. - The file to write to. - The string to write to the file. - The applied to the contents of the file. - - - [AlphaFS] Creates a new file, writes the specified string to the file, and then closes the file. If the target file already exists, it is overwritten. - This method uses UTF-8 encoding without a Byte-Order Mark (BOM) - - - - - - - - - - - The file to write to. - The string to write to the file. - Indicates the format of the path parameter(s). - - - [AlphaFS] Creates a new file, writes the specified string to the file using the specified encoding, and then closes the file. If the target file already exists, it is overwritten. - - - - - - - - - - - The file to write to. - The string to write to the file. - The applied to the contents of the file. - Indicates the format of the path parameter(s). - - - [AlphaFS] Creates a new file as part of a transaction, write the contents to the file, and then closes the file. If the target file already exists, it is overwritten. - This method uses UTF-8 encoding without a Byte-Order Mark (BOM) - - - - - - - - - - - The transaction. - The file to write to. - The string to write to the file. - - - [AlphaFS] Creates a new file as part of a transaction, writes the specified string to the file using the specified encoding, and then closes the file. If the target file already exists, it is overwritten. - - - - - - - - - - - The transaction. - The file to write to. - The string to write to the file. - The applied to the contents of the file. - - - [AlphaFS] Creates a new file as part of a transaction, write the contents to the file, and then closes the file. If the target file already exists, it is overwritten. - This method uses UTF-8 encoding without a Byte-Order Mark (BOM) - - - - - - - - - - - The transaction. - The file to write to. - The string to write to the file. - Indicates the format of the path parameter(s). - - - [AlphaFS] Creates a new file as part of a transaction, writes the specified string to the file using the specified encoding, and then closes the file. If the target file already exists, it is overwritten. - - - - - - - - - - - The transaction. - The file to write to. - The string to write to the file. - The applied to the contents of the file. - Indicates the format of the path parameter(s). - - - Creates/appends a new file by using the specified encoding, writes a collection of strings to the file, and then closes the file. - - - - - - - - - - - The transaction. - The file to write to. - The lines to write to the file. - The character to use. - for file Append, for file Write. - to a line terminator, to ommit the line terminator. - Indicates the format of the path parameter(s). - - - - Creates a that appends NativeMethods.DefaultFileEncoding encoded text to an existing file, or to a new - file if the specified file does not exist. - - The path to the file to append to. - - A stream writer that appends NativeMethods.DefaultFileEncoding encoded text to the specified file or to a new file. - - - - - Creates a that appends NativeMethods.DefaultFileEncoding encoded text to an existing file, or - to a new file if the specified file does not exist. - - The path to the file to append to. - Indicates the format of the path parameter(s). - - A stream writer that appends NativeMethods.DefaultFileEncoding encoded text to the specified file or to a new file. - - - - - Creates a that appends NativeMethods.DefaultFileEncoding encoded text to an existing file, or - to a new file if the specified file does not exist. - - The path to the file to append to. - The character to use. - Indicates the format of the path parameter(s). - - A stream writer that appends NativeMethods.DefaultFileEncoding encoded text to the specified file or to a new file. - - - - - Creates a that appends NativeMethods.DefaultFileEncoding encoded text to an existing file, or - to a new file if the specified file does not exist. - - The path to the file to append to. - The character to use. - - A stream writer that appends NativeMethods.DefaultFileEncoding encoded text to the specified file or to a new file. - - - - - Creates a that appends NativeMethods.DefaultFileEncoding encoded text to an existing file, or - to a new file if the specified file does not exist. - - The transaction. - The path to the file to append to. - - A stream writer that appends NativeMethods.DefaultFileEncoding encoded text to the specified file or to a new file. - - - - - Creates a that appends NativeMethods.DefaultFileEncoding encoded text to an existing file, or - to a new file if the specified file does not exist. - - The transaction. - The path to the file to append to. - Indicates the format of the path parameter(s). - - A stream writer that appends NativeMethods.DefaultFileEncoding encoded text to the specified file or to a new file. - - - - - Creates a that appends NativeMethods.DefaultFileEncoding encoded text to an existing file, or - to a new file if the specified file does not exist. - - The transaction. - The path to the file to append to. - The character to use. - Indicates the format of the path parameter(s). - - A stream writer that appends NativeMethods.DefaultFileEncoding encoded text to the specified file or to a new file. - - - - - Creates a that appends NativeMethods.DefaultFileEncoding encoded text to an existing file, or - to a new file if the specified file does not exist. - - The transaction. - The path to the file to append to. - The character to use. - - A stream writer that appends NativeMethods.DefaultFileEncoding encoded text to the specified file or to a new file. - - - - Creates a that appends NativeMethods.DefaultFileEncoding encoded text to an existing file, or to a new file if the specified file does not exist. - - The transaction. - The path to the file to append to. - The character to use. - Indicates the format of the path parameter(s). - - A stream writer that appends NativeMethods.DefaultFileEncoding encoded text to the specified file or to a new file. - - - - Creates or overwrites a file in the specified path. - The path and name of the file to create. - A that provides read/write access to the file specified in . - - - Creates or overwrites the specified file. - The name of the file. - The number of bytes buffered for reads and writes to the file. - - A with the specified buffer size that provides read/write access to the file specified in - . - - - - - Creates or overwrites the specified file, specifying a buffer size and a - value that describes how to create or overwrite the file. - - The name of the file. - The number of bytes buffered for reads and writes to the file. - One of the values that describes how to create or overwrite the file. - A new file with the specified buffer size. - - - - Creates or overwrites the specified file, specifying a buffer size and a - value that describes how to create or overwrite the file. - - The name of the file. - The number of bytes buffered for reads and writes to the file. - One of the values that describes how to create or overwrite the file. - - One of the values that determines the access control and audit security for the file. - - A new file with the specified buffer size, file options, and file security. - - - Creates or overwrites a file in the specified path. - The path and name of the file to create. - Indicates the format of the path parameter(s). - - A that provides read/write access to the file specified in - . - - - - Creates or overwrites the specified file. - The name of the file. - The number of bytes buffered for reads and writes to the file. - Indicates the format of the path parameter(s). - - A with the specified buffer size that provides read/write access to the file specified in - . - - - - - Creates or overwrites the specified file, specifying a buffer size and a - value that describes how to create or overwrite the file. - - The name of the file. - - The number of bytes buffered for reads and writes to the file. - - - One of the values that describes how to create or overwrite the - file. - - Indicates the format of the path parameter(s). - A new file with the specified buffer size. - - - - Creates or overwrites the specified file, specifying a buffer size and a - value that describes how to create or overwrite the file. - - The name of the file. - - The number of bytes buffered for reads and writes to the file. - - - One of the values that describes how to create or overwrite the - file. - - - One of the values that determines the access control and audit - security for the file. - - Indicates the format of the path parameter(s). - - A new file with the specified buffer size, file options, and file security. - - - - Creates or overwrites a file in the specified path. - The transaction. - The path and name of the file to create. - - A that provides read/write access to the file specified in - . - - - - Creates or overwrites the specified file. - The transaction. - The name of the file. - - The number of bytes buffered for reads and writes to the file. - - - A with the specified buffer size that provides read/write access - to the file specified in . - - - - - Creates or overwrites the specified file, specifying a buffer size and a - value that describes how to create or overwrite the file. - - The transaction. - The name of the file. - The number of bytes buffered for reads and writes to the file. - One of the values that describes how to create or overwrite the file. - A new file with the specified buffer size. - - - - Creates or overwrites the specified file, specifying a buffer size and a - value that describes how to create or overwrite the file. - - The transaction. - The name of the file. - The number of bytes buffered for reads and writes to the file. - One of the values that describes how to create or overwrite the file. - - One of the values that determines the access control and audit security for the file. - - A new file with the specified buffer size, file options, and file security. - - - Creates or overwrites a file in the specified path. - The transaction. - The path and name of the file to create. - Indicates the format of the path parameter(s). - - A that provides read/write access to the file specified in - . - - - - Creates or overwrites the specified file. - The transaction. - The name of the file. - The number of bytes buffered for reads and writes to the file. - Indicates the format of the path parameter(s). - - A with the specified buffer size that provides read/write access to the file specified in - . - - - - - Creates or overwrites the specified file, specifying a buffer size and a - value that describes how to create or overwrite the file. - - The transaction. - The name of the file. - The number of bytes buffered for reads and writes to the file. - One of the values that describes how to create or overwrite the file. - Indicates the format of the path parameter(s). - A new file with the specified buffer size. - - - - Creates or overwrites the specified file, specifying a buffer size and a - value that describes how to create or overwrite the file. - - The transaction. - The name of the file. - The number of bytes buffered for reads and writes to the file. - One of the values that describes how to create or overwrite the file. - - One of the values that determines the access control and audit security for the file. - - Indicates the format of the path parameter(s). - A new file with the specified buffer size, file options, and file security. - - - Creates or overwrites a file in the specified path. - The transaction. - The name of the file. - The additional advanced options to create a file. - - A instance that determines the access control and audit security for the file. - - The option gives you more precise control over how you want to create a file. - - The allow you additionally specify to default read/write capability - just write, bypassing any cache. - - - The option controls how you would like to share created file with other requesters. - - Indicates the format of the parameter. - The number of bytes buffered for reads and writes to the file. - A that provides read/write access to the file specified in path. - - - Creates or opens a file, directory or I/O device. - A that provides read/write access to the file or directory specified by . - - To obtain a directory handle using CreateFile, specify the FILE_FLAG_BACKUP_SEMANTICS flag as part of dwFlagsAndAttributes. - The most commonly used I/O devices are as follows: file, file stream, directory, physical disk, volume, console buffer, tape drive, communications resource, mailslot, and pipe. - - - - - The transaction. - The path and name of the file or directory to create. - One of the values that describes how to create or overwrite the file or directory. - A instance that determines the access control and audit security for the file or directory. - A constant that determines how to open or create the file or directory. - A constant that determines the access rights to use when creating access and audit rules for the file or directory. - A constant that determines how the file or directory will be shared by processes. - . - Indicates the format of the parameter. - - - Determines whether the specified file exists. - - MSDN: .NET 3.5+: Trailing spaces are removed from the end of the - parameter before checking whether the directory exists. - The Exists method returns if any error occurs while trying to - determine if the specified file exists. - This can occur in situations that raise exceptions such as passing a file name with - invalid characters or too many characters, a failing or missing disk, or if the caller does not have permission to read the - file. - The Exists method should not be used for path validation, - this method merely checks if the file specified in path exists. - Passing an invalid path to Exists returns false. - Be aware that another process can potentially do something with the file in - between the time you call the Exists method and perform another operation on the file, such as Delete. - - The file to check. - - Returns if the caller has the required permissions and - contains the name of an existing file; otherwise, - - - - - [AlphaFS] Determines whether the specified file exists. - - MSDN: .NET 3.5+: Trailing spaces are removed from the end of the - parameter before checking whether the directory exists. - The Exists method returns if any error occurs while trying to - determine if the specified file exists. - This can occur in situations that raise exceptions such as passing a file name with - invalid characters or too many characters, - a failing or missing disk, or if the caller does not have permission to read the - file. - The Exists method should not be used for path validation, this method merely checks - if the file specified in path exists. - Passing an invalid path to Exists returns false. - Be aware that another process can potentially do something with the file in - between the time you call the Exists method and perform another operation on the file, such - as Delete. - - The file to check. - Indicates the format of the path parameter(s). - - Returns if the caller has the required permissions and - contains the name of an existing file; otherwise, - - - - - - [AlphaFS] Determines whether the specified file exists. - - - MSDN: .NET 3.5+: Trailing spaces are removed from the end of the - parameter before checking whether the directory exists. - The Exists method returns if any error occurs while trying to - determine if the specified file exists. - This can occur in situations that raise exceptions such as passing a file name with - invalid characters or too many characters, - a failing or missing disk, or if the caller does not have permission to read the - file. - The Exists method should not be used for path validation, - this method merely checks if the file specified in path exists. - Passing an invalid path to Exists returns false. - Be aware that another process can potentially do something with the file in - between - the time you call the Exists method and perform another operation on the file, such - as Delete. - - The transaction. - The file to check. - - Returns if the caller has the required permissions - and contains the name of an existing file; otherwise, - - - - - - [AlphaFS] Determines whether the specified file exists. - - - MSDN: .NET 3.5+: Trailing spaces are removed from the end of the - parameter before checking whether the directory exists. - The Exists method returns if any error occurs while trying to - determine if the specified file exists. - This can occur in situations that raise exceptions such as passing a file name with - invalid characters or too many characters, - a failing or missing disk, or if the caller does not have permission to read the - file. - The Exists method should not be used for path validation, - this method merely checks if the file specified in path exists. - Passing an invalid path to Exists returns false. - Be aware that another process can potentially do something with the file in - between - the time you call the Exists method and perform another operation on the file, such - as Delete. - - The transaction. - The file to check. - Indicates the format of the path parameter(s). - - Returns if the caller has the required permissions - and contains the name of an existing file; otherwise, - - - - - Determines whether the specified file or directory exists. - - MSDN: .NET 3.5+: Trailing spaces are removed from the end of the parameter before checking whether - the directory exists. - The Exists method returns if any error occurs while trying to determine if the specified file - exists. - This can occur in situations that raise exceptions such as passing a file name with invalid characters or too many characters, - - a failing or missing disk, or if the caller does not have permission to read the file. - The Exists method should not be used for path validation, - this method merely checks if the file specified in path exists. - Passing an invalid path to Exists returns false. - Be aware that another process can potentially do something with the file in between - the time you call the Exists method and perform another operation on the file, such as Delete. - - Specifies that is a file or directory. - The transaction. - The file to check. - Indicates the format of the path parameter(s). - - Returns if the caller has the required permissions - and contains the name of an existing file or directory; otherwise, - - - - Gets a object that encapsulates the access control list (ACL) entries for a specified file. - A object that encapsulates the access control rules for the file described by the parameter. - - - - The path to a file containing a object that describes the file's access control list (ACL) information. - - - Gets a object that encapsulates the access control list (ACL) entries for a specified file. - A object that encapsulates the access control rules for the file described by the parameter. - - - - The path to a file containing a object that describes the file's access control list (ACL) information. - One (or more) of the values that specifies the type of access control list (ACL) information to receive. - - - [AlphaFS] Gets a object that encapsulates the access control list (ACL) entries for a specified file. - A object that encapsulates the access control rules for the file described by the parameter. - - - - The path to a file containing a object that describes the file's access control list (ACL) information. - Indicates the format of the path parameter(s). - - - [AlphaFS] Gets a object that encapsulates the access control list (ACL) entries for a specified file. - A object that encapsulates the access control rules for the file described by the parameter. - - - - The path to a file containing a object that describes the file's access control list (ACL) information. - One (or more) of the values that specifies the type of access control list (ACL) information to receive. - Indicates the format of the path parameter(s). - - - [AlphaFS] Gets a object that encapsulates the access control list (ACL) entries for a specified file handle. - A object that encapsulates the access control rules for the file described by the parameter. - - - - A to a file containing a object that describes the file's access control list (ACL) information. - - - [AlphaFS] Gets a object that encapsulates the access control list (ACL) entries for a specified file handle. - A object that encapsulates the access control rules for the file described by the parameter. - - - - A to a file containing a object that describes the file's access control list (ACL) information. - One (or more) of the values that specifies the type of access control list (ACL) information to receive. - - - [AlphaFS] Gets an object for a particular file or directory. - An object that encapsulates the access control rules for the file or directory described by the parameter. - - - - Generic type parameter. - Specifies that is a file or directory. - The path to a file/directory containing a / object that describes the file's/directory's access control list (ACL) information. - One (or more) of the values that specifies the type of access control list (ACL) information to receive. - Indicates the format of the path parameter(s). - - - Gets the of the file on the path. - The path to the file. - The of the file on the path. - - - [AlphaFS] Gets the of the file on the path. - The path to the file. - Indicates the format of the path parameter(s). - The of the file on the path. - - - [AlphaFS] Gets the of the file on the path. - The transaction. - The path to the file. - The of the file on the path. - - - [AlphaFS] Gets the of the file on the path. - The transaction. - The path to the file. - Indicates the format of the path parameter(s). - The of the file on the path. - - - Gets the or of the specified file or directory. - The or of the specified file or directory. - - - Generic type parameter. - The transaction. - The path to the file or directory. - Indicates the format of the path parameter(s). - - - - - Calls NativeMethods.GetFileAttributesEx to retrieve WIN32_FILE_ATTRIBUTE_DATA. - Note that classes should use -1 as the uninitialized state for dataInitialized when relying on this method. - - No path (null, empty string) checking or normalization is performed. - . - . - [in,out]. - . - . - 0 on success, otherwise a Win32 error code. - - - Gets the creation date and time of the specified file. - The file for which to obtain creation date and time information. - - A structure set to the creation date and time for the specified file. This value is expressed in - local time. - - - - [AlphaFS] Gets the creation date and time of the specified file. - The file for which to obtain creation date and time information. - Indicates the format of the path parameter(s). - - A structure set to the creation date and time for the specified file. This value is expressed in - local time. - - - - [AlphaFS] Gets the creation date and time of the specified file. - The transaction. - The file for which to obtain creation date and time information. - - A structure set to the creation date and time for the specified file. This value is expressed in - local time. - - - - [AlphaFS] Gets the creation date and time of the specified file. - The transaction. - The file for which to obtain creation date and time information. - Indicates the format of the path parameter(s). - - A structure set to the creation date and time for the specified file. This value is expressed in - local time. - - - - Gets the creation date and time, in Coordinated Universal Time (UTC) format, of the specified file. - - The file for which to obtain creation date and time information, in Coordinated Universal Time (UTC) format. - - - A structure set to the creation date and time for the specified file. This value is expressed in UTC - time. - - - - [AlphaFS] Gets the creation date and time, in Coordinated Universal Time (UTC) format, of the specified file. - - The file for which to obtain creation date and time information, in Coordinated Universal Time (UTC) format. - - Indicates the format of the path parameter(s). - - A structure set to the creation date and time for the specified file. This value is expressed in UTC - time. - - - - [AlphaFS] Gets the creation date and time, in Coordinated Universal Time (UTC) format, of the specified file. - The transaction. - - The file for which to obtain creation date and time information, in Coordinated Universal Time (UTC) format. - - - A structure set to the creation date and time for the specified file. This value is expressed in UTC - time. - - - - [AlphaFS] Gets the creation date and time, in Coordinated Universal Time (UTC) format, of the specified file. - The transaction. - - The file for which to obtain creation date and time information, in Coordinated Universal Time (UTC) format. - - Indicates the format of the path parameter(s). - - A structure set to the creation date and time for the specified file. This value is expressed in UTC - time. - - - - - [AlphaFS] Gets the creation date and time, in Coordinated Universal Time (UTC) or local time, of the specified file or directory. - - The transaction. - The file or directory for which to obtain creation date and time information. - - gets the Coordinated Universal Time (UTC), gets the local time. - - Indicates the format of the path parameter(s). - - A structure set to the creation date and time for the specified file or directory. Depending on - this value is expressed in UTC- or local time. - - - - Gets the date and time that the specified file was last accessed. - The file for which to obtain access date and time information. - - A structure set to the date and time that the specified file was last accessed. This value is - expressed in local time. - - - - [AlphaFS] Gets the date and time that the specified file was last accessed. - The file for which to obtain access date and time information. - Indicates the format of the path parameter(s). - - A structure set to the date and time that the specified file was last accessed. This value is - expressed in local time. - - - - [AlphaFS] Gets the date and time that the specified file was last accessed. - The transaction. - The file for which to obtain access date and time information. - - A structure set to the date and time that the specified file was last accessed. This value is - expressed in local time. - - - - [AlphaFS] Gets the date and time that the specified file was last accessed. - The transaction. - The file for which to obtain access date and time information. - Indicates the format of the path parameter(s). - - A structure set to the date and time that the specified file was last accessed. This value is - expressed in local time. - - - - Gets the date and time, in coordinated universal time (UTC), that the specified file was last accessed. - The file for which to obtain access date and time information. - - A structure set to the date and time that the specified file was last accessed. This value is - expressed in UTC time. - - - - [AlphaFS] Gets the date and time, in coordinated universal time (UTC), that the specified file was last accessed. - The file for which to obtain access date and time information. - Indicates the format of the path parameter(s). - - A structure set to the date and time that the specified file was last accessed. This value is - expressed in UTC time. - - - - [AlphaFS] Gets the date and time, in coordinated universal time (UTC), that the specified file was last accessed. - The transaction. - The file for which to obtain access date and time information. - - A structure set to the date and time that the specified file was last accessed. This value is - expressed in UTC time. - - - - [AlphaFS] Gets the date and time, in coordinated universal time (UTC), that the specified file was last accessed. - The transaction. - The file for which to obtain access date and time information. - Indicates the format of the path parameter(s). - - A structure set to the date and time that the specified file was last accessed. This value is - expressed in UTC time. - - - - - [AlphaFS] Gets the date and time, in coordinated universal time (UTC) or local time, that the specified file or directory was last - accessed. - - The transaction. - The file or directory for which to obtain access date and time information. - - gets the Coordinated Universal Time (UTC), gets the local time. - - Indicates the format of the path parameter(s). - - A structure set to the date and time that the specified file or directory was last accessed. - Depending on this value is expressed in UTC- or local time. - - - - Gets the date and time that the specified file was last written to. - The file for which to obtain write date and time information. - - A structure set to the date and time that the specified file was last written to. This value is - expressed in local time. - - - - [AlphaFS] Gets the date and time that the specified file was last written to. - The file for which to obtain write date and time information. - Indicates the format of the path parameter(s). - - A structure set to the date and time that the specified file was last written to. This value is - expressed in local time. - - - - [AlphaFS] Gets the date and time that the specified file was last written to. - The transaction. - The file for which to obtain write date and time information. - - A structure set to the date and time that the specified file was last written to. This value is - expressed in local time. - - - - [AlphaFS] Gets the date and time that the specified file was last written to. - The transaction. - The file for which to obtain write date and time information. - Indicates the format of the path parameter(s). - - A structure set to the date and time that the specified file was last written to. This value is - expressed in local time. - - - - Gets the date and time, in coordinated universal time (UTC) time, that the specified file was last written to. - The file for which to obtain write date and time information. - - A structure set to the date and time that the specified file was last written to. This value is - expressed in UTC time. - - - - - [AlphaFS] Gets the date and time, in coordinated universal time (UTC) time, that the specified file was last written to. - - The file for which to obtain write date and time information. - Indicates the format of the path parameter(s). - - A structure set to the date and time that the specified file was last written to. This value is - expressed in UTC time. - - - - - [AlphaFS] Gets the date and time, in coordinated universal time (UTC) time, that the specified file was last written to. - - The transaction. - The file for which to obtain write date and time information. - - A structure set to the date and time that the specified file was last written to. This value is - expressed in UTC time. - - - - - [AlphaFS] Gets the date and time, in coordinated universal time (UTC) time, that the specified file was last written to. - - The transaction. - The file for which to obtain write date and time information. - Indicates the format of the path parameter(s). - - A structure set to the date and time that the specified file was last written to. This value is - expressed in UTC time. - - - - - [AlphaFS] Gets the date and time, in coordinated universal time (UTC) or local time, that the specified file or directory was last - written to. - - The transaction. - The file or directory for which to obtain write date and time information. - - gets the Coordinated Universal Time (UTC), gets the local time. - - Indicates the format of the path parameter(s). - - A structure set to the date and time that the specified file or directory was last written to. - Depending on this value is expressed in UTC- or local time. - - - - Opens a on the specified path with read/write access. - The file to open. - A value that specifies whether a file is created if one does not exist, and determines whether the contents of existing files are retained or overwritten. - A opened in the specified mode and path, with read/write access and not shared. - - - Opens a on the specified path, with the specified mode and access. - The file to open. - A value that specifies whether a file is created if one does not exist, and determines whether the contents of existing files are retained or overwritten. - A value that specifies the operations that can be performed on the file. - An unshared that provides access to the specified file, with the specified mode and access. - - - Opens a on the specified path, having the specified mode with read, write, or read/write access and the specified sharing option. - The file to open. - A value that specifies whether a file is created if one does not exist, and determines whether the contents of existing files are retained or overwritten. - A value that specifies the operations that can be performed on the file. - A value specifying the type of access other threads have to the file. - A on the specified path, having the specified mode with read, write, or read/write access and the specified sharing option. - - - [AlphaFS] Opens a on the specified path with read/write access. - The file to open. - - A value that specifies whether a file is created if one does not exist, and determines whether the contents - of existing files are retained or overwritten. - - Indicates the format of the path parameter(s). - A opened in the specified mode and path, with read/write access and not shared. - - - [AlphaFS] Opens a on the specified path, with the specified mode and access. - The file to open. - - A value that specifies whether a file is created if one does not exist, and determines whether the contents - of existing files are retained or overwritten. - - A value that specifies the operations that can be performed on the file. - Indicates the format of the path parameter(s). - - An unshared that provides access to the specified file, with the specified mode and access. - - - - [AlphaFS] Opens a on the specified path, having the specified mode with read, write, or read/write access and the specified sharing option. - The file to open. - - A value that specifies whether a file is created if one does not exist, and determines whether the contents - of existing files are retained or overwritten. - - A value that specifies the operations that can be performed on the file. - A value specifying the type of access other threads have to the file. - Indicates the format of the path parameter(s). - - A on the specified path, having the specified mode with read, write, or read/write access and the - specified sharing option. - - - - [AlphaFS] Opens a on the specified path, having the specified mode with read, write, or read/write access and the specified sharing option. - The file to open. - - A value that specifies whether a file is created if one does not exist, and determines whether the contents - of existing files are retained or overwritten. - - A value that specifies the operations that can be performed on the file. - A value specifying the type of access other threads have to the file. - The extended attributes. - Indicates the format of the path parameter(s). - - A on the specified path, having the specified mode with read, write, or read/write access and the - specified sharing option. - - - - [AlphaFS] Opens a on the specified path using the specified creation mode, read/write and sharing permission, and buffer size. - The file to open. - A constant that determines how to open or create the file. - A value that specifies the operations that can be performed on the - file. - A constant that determines how the file will be shared by processes. - A positive value greater than 0 indicating the buffer size. The default buffer size is 4096. - - A on the specified path, having the specified mode with read, write, or read/write - access and the specified sharing option. - - - - [AlphaFS] Opens a on the specified path using the specified creation mode, read/write and sharing permission, and buffer size. - The file to open. - A constant that determines how to open or create the file. - A value that specifies the operations that can be performed on the - file. - A constant that determines how the file will be shared by processes. - A positive value greater than 0 indicating the buffer size. The - default buffer size is 4096. - Specifies whether to use asynchronous I/O or synchronous I/O. However, note that the - underlying operating system might not support asynchronous I/O, so when specifying true, the handle might be - opened synchronously depending on the platform. When opened asynchronously, the BeginRead and BeginWrite methods - perform better on large reads or writes, but they might be much slower for small reads or writes. If the - application is designed to take advantage of asynchronous I/O, set the useAsync parameter to true. Using - asynchronous I/O correctly can speed up applications by as much as a factor of 10, but using it without - redesigning the application for asynchronous I/O can decrease performance by as much as a factor of 10. - - A on the specified path, having the specified mode with read, write, or read/write - access and the specified sharing option. - - - - [AlphaFS] Opens a on the specified path using the specified creation mode, read/write and sharing permission, and buffer size. - The file to open. - A constant that determines how to open or create the file. - A value that specifies the operations that can be performed on the - file. - A constant that determines how the file will be shared by processes. - A positive value greater than 0 indicating the buffer size. The - default buffer size is 4096. - A value that specifies additional file options. - - A on the specified path, having the specified mode with read, write, or read/write - access and the specified sharing option. - - - - [AlphaFS] Opens a on the specified path using the specified creation mode, read/write and sharing permission, and buffer size. - The file to open. - A constant that determines how to open or create the file. - A value that specifies the operations that can be performed on the - file. - A constant that determines how the file will be shared by processes. - A positive value greater than 0 indicating the buffer size. The - default buffer size is 4096. - The extended attributes specifying additional options. - - A on the specified path, having the specified mode with read, write, or read/write - access and the specified sharing option. - - - - [AlphaFS] Opens a on the specified path using the specified creation mode, read/write and sharing permission, and buffer size. - The file to open. - A constant that determines how to open or create the file. - A value that specifies the operations that can be performed on the - file. - A constant that determines how the file will be shared by processes. - A positive value greater than 0 indicating the buffer size. The - default buffer size is 4096. - Indicates the format of the path parameter. - - A on the specified path, having the specified mode with read, write, or read/write - access and the specified sharing option. - - - - [AlphaFS] Opens a on the specified path using the specified creation mode, read/write and sharing permission, and buffer size. - The file to open. - A constant that determines how to open or create the file. - A value that specifies the operations that can be performed on the - file. - A constant that determines how the file will be shared by processes. - A positive value greater than 0 indicating the buffer size. The - default buffer size is 4096. - Specifies whether to use asynchronous I/O or synchronous I/O. However, note that the - underlying operating system might not support asynchronous I/O, so when specifying true, the handle might be - opened synchronously depending on the platform. When opened asynchronously, the BeginRead and BeginWrite methods - perform better on large reads or writes, but they might be much slower for small reads or writes. If the - application is designed to take advantage of asynchronous I/O, set the useAsync parameter to true. Using - asynchronous I/O correctly can speed up applications by as much as a factor of 10, but using it without - redesigning the application for asynchronous I/O can decrease performance by as much as a factor of 10. - Indicates the format of the path parameter. - - A on the specified path, having the specified mode with read, write, or read/write - access and the specified sharing option. - - - - [AlphaFS] Opens a on the specified path using the specified creation mode, read/write and sharing permission, and buffer size. - The file to open. - A constant that determines how to open or create the file. - A value that specifies the operations that can be performed on the - file. - A constant that determines how the file will be shared by processes. - A positive value greater than 0 indicating the buffer size. The - default buffer size is 4096. - A value that specifies additional file options. - Indicates the format of the path parameter. - - A on the specified path, having the specified mode with read, write, or read/write - access and the specified sharing option. - - - - [AlphaFS] Opens a on the specified path using the specified creation mode, read/write and sharing permission, and buffer size. - The file to open. - A constant that determines how to open or create the file. - A value that specifies the operations that can be performed on the - file. - A constant that determines how the file will be shared by processes. - A positive value greater than 0 indicating the buffer size. The - default buffer size is 4096. - The extended attributes specifying additional options. - Indicates the format of the path parameter. - - A on the specified path, having the specified mode with read, write, or read/write - access and the specified sharing option. - - - - [AlphaFS] Opens a on the specified path using the specified creation mode, read/write and sharing permission, and buffer size. - The file to open. - A constant that determines how to open or create the file. - A value that specifies the operations that can be performed on the - file. - A constant that determines how the file will be shared by processes. - A positive value greater than 0 indicating the buffer size. The - default buffer size is 4096. - A value that specifies additional file options. - - A on the specified path, having the specified mode with read, write, or read/write - access and the specified sharing option. - - - - [AlphaFS] Opens a on the specified path using the specified creation mode, read/write and sharing permission, and buffer size. - The file to open. - A constant that determines how to open or create the file. - A value that specifies the operations that can be performed on the - file. - A constant that determines how the file will be shared by processes. - A positive value greater than 0 indicating the buffer size. The - default buffer size is 4096. - Extended attributes specifying additional options. - - A on the specified path, having the specified mode with read, write, or read/write - access and the specified sharing option. - - - - [AlphaFS] Opens a on the specified path using the specified creation mode, read/write and sharing permission, and buffer size. - The file to open. - A constant that determines how to open or create the file. - A value that specifies the operations that can be performed on the - file. - A constant that determines how the file will be shared by processes. - A positive value greater than 0 indicating the buffer size. The - default buffer size is 4096. - A value that specifies additional file options. - A value that determines the access control and audit security for the file. - - A on the specified path, having the specified mode with read, write, or read/write - access and the specified sharing option. - - - - [AlphaFS] Opens a on the specified path using the specified creation mode, read/write and sharing permission, and buffer size. - The file to open. - A constant that determines how to open or create the file. - A value that specifies the operations that can be performed on the - file. - A constant that determines how the file will be shared by processes. - A positive value greater than 0 indicating the buffer size. The - default buffer size is 4096. - Extended attributes specifying additional options. - A value that determines the access control and audit security for the file. - - A on the specified path, having the specified mode with read, write, or read/write - access and the specified sharing option. - - - - [AlphaFS] Opens a on the specified path using the specified creation mode, read/write and sharing permission, and buffer size. - The file to open. - A constant that determines how to open or create the file. - A value that specifies the operations that can be performed on the - file. - A constant that determines how the file will be shared by processes. - A positive value greater than 0 indicating the buffer size. The - default buffer size is 4096. - A value that specifies additional file options. - Indicates the format of the path parameter. - - A on the specified path, having the specified mode with read, write, or read/write - access and the specified sharing option. - - - - [AlphaFS] Opens a on the specified path using the specified creation mode, read/write and sharing permission, and buffer size. - The file to open. - A constant that determines how to open or create the file. - A value that specifies the operations that can be performed on the - file. - A constant that determines how the file will be shared by processes. - A positive value greater than 0 indicating the buffer size. The - default buffer size is 4096. - Extended attributes specifying additional options. - Indicates the format of the path parameter. - - A on the specified path, having the specified mode with read, write, or read/write - access and the specified sharing option. - - - - [AlphaFS] Opens a on the specified path using the specified creation mode, access rights and sharing permission, the buffer size, additional file options, access control and audit security. - The file to open. - A constant that determines how to open or create the file. - A value that specifies the operations that can be performed on the - file. - A constant that determines how the file will be shared by processes. - A positive value greater than 0 indicating the buffer size. The - default buffer size is 4096. - A value that specifies additional file options. - A value that determines the access control and audit security for the file. - Indicates the format of the path parameter. - - A on the specified path, having the specified mode with read, write, or read/write - access and the specified sharing option. - - - - [AlphaFS] Opens a on the specified path using the specified creation mode, access rights and sharing permission, the buffer size, additional file options, access control and audit security. - The file to open. - A constant that determines how to open or create the file. - A value that specifies the operations that can be performed on the - file. - A constant that determines how the file will be shared by processes. - A positive value greater than 0 indicating the buffer size. The - default buffer size is 4096. - Extended attributes specifying additional options. - A value that determines the access control and audit security for the file. - Indicates the format of the path parameter. - - A on the specified path, having the specified mode with read, write, or read/write - access and the specified sharing option. - - - - [AlphaFS] (Transacted) Opens a on the specified path with read/write access. - The transaction. - The file to open. - - A value that specifies whether a file is created if one does not exist, and determines whether the contents - of existing files are retained or overwritten. - - A opened in the specified mode and path, with read/write access and not shared. - - - [AlphaFS] (Transacted) Opens a on the specified path with read/write access. - The transaction. - The file to open. - - A value that specifies whether a file is created if one does not exist, and determines whether the contents - of existing files are retained or overwritten. - - Indicates the format of the path parameter(s). - A opened in the specified mode and path, with read/write access and not shared. - - - [AlphaFS] (Transacted) Opens a on the specified path, with the specified mode and access. - The transaction. - The file to open. - - A value that specifies whether a file is created if one does not exist, and determines whether the contents - of existing files are retained or overwritten. - - A value that specifies the operations that can be performed on the file. - - An unshared that provides access to the specified file, with the specified mode and access. - - - - [AlphaFS] (Transacted) Opens a on the specified path, having the specified mode with read, write, or read/write access and the specified sharing option. - The transaction. - The file to open. - - A value that specifies whether a file is created if one does not exist, and determines whether the contents - of existing files are retained or overwritten. - - A value that specifies the operations that can be performed on the file. - A value specifying the type of access other threads have to the file. - - A on the specified path, having the specified mode with read, write, or read/write access and the - specified sharing option. - - - - [AlphaFS] (Transacted) Opens a on the specified path, with the specified mode and access. - The transaction. - The file to open. - - A value that specifies whether a file is created if one does not exist, and determines whether the contents - of existing files are retained or overwritten. - - A value that specifies the operations that can be performed on the file. - Indicates the format of the path parameter(s). - - An unshared that provides access to the specified file, with the specified mode and access. - - - - [AlphaFS] (Transacted) Opens a on the specified path, having the specified mode with read, write, or read/write access and the specified sharing option. - The transaction. - The file to open. - A value that specifies whether a file is created if one does not exist, and determines whether the contents of existing files are retained or overwritten. - A value that specifies the operations that can be performed on the file. - A value specifying the type of access other threads have to the file. - Indicates the format of the path parameter(s). - A on the specified path, having the specified mode with read, write, or read/write access and the specified sharing option. - - - [AlphaFS] (Transacted) Opens a on the specified path, having the specified mode with read, write, or read/write access and the specified sharing option. - The transaction. - The file to open. - - A value that specifies whether a file is created if one does not exist, and determines whether the contents - of existing files are retained or overwritten. - - A value that specifies the operations that can be performed on the file. - A value specifying the type of access other threads have to the file. - The extended attributes. - Indicates the format of the path parameter(s). - - A on the specified path, having the specified mode with read, write, or read/write access and the - specified sharing option. - - - - [AlphaFS] (Transacted) Opens a on the specified path using the specified creation mode, read/write and sharing permission, and buffer size. - The transaction. - The file to open. - A constant that determines how to open or create the file. - A value that specifies the operations that can be performed on the - file. - A constant that determines how the file will be shared by processes. - A positive value greater than 0 indicating the buffer size. The - default buffer size is 4096. - - A on the specified path, having the specified mode with read, write, or read/write - access and the specified sharing option. - - - - [AlphaFS] (Transacted) Opens a on the specified path using the specified creation mode, read/write and sharing permission, and buffer size. - The transaction. - The file to open. - A constant that determines how to open or create the file. - A value that specifies the operations that can be performed on the - file. - A constant that determines how the file will be shared by processes. - A positive value greater than 0 indicating the buffer size. The - default buffer size is 4096. - Specifies whether to use asynchronous I/O or synchronous I/O. However, note that the - underlying operating system might not support asynchronous I/O, so when specifying true, the handle might be - opened synchronously depending on the platform. When opened asynchronously, the BeginRead and BeginWrite methods - perform better on large reads or writes, but they might be much slower for small reads or writes. If the - application is designed to take advantage of asynchronous I/O, set the useAsync parameter to true. Using - asynchronous I/O correctly can speed up applications by as much as a factor of 10, but using it without - redesigning the application for asynchronous I/O can decrease performance by as much as a factor of 10. - - A on the specified path, having the specified mode with read, write, or read/write - access and the specified sharing option. - - - - [AlphaFS] (Transacted) Opens a on the specified path using the specified creation mode, read/write and sharing permission, and buffer size. - The transaction. - The file to open. - A constant that determines how to open or create the file. - A value that specifies the operations that can be performed on the - file. - A constant that determines how the file will be shared by processes. - A positive value greater than 0 indicating the buffer size. The - default buffer size is 4096. - A value that specifies additional file options. - - A on the specified path, having the specified mode with read, write, or read/write - access and the specified sharing option. - - - - [AlphaFS] (Transacted) Opens a on the specified path using the specified creation mode, read/write and sharing permission, and buffer size. - The transaction. - The file to open. - A constant that determines how to open or create the file. - A value that specifies the operations that can be performed on the - file. - A constant that determines how the file will be shared by processes. - A positive value greater than 0 indicating the buffer size. The - default buffer size is 4096. - The extended attributes specifying additional options. - - A on the specified path, having the specified mode with read, write, or read/write - access and the specified sharing option. - - - - [AlphaFS] (Transacted) Opens a on the specified path using the specified creation mode, read/write and sharing permission, and buffer size. - The transaction. - The file to open. - A constant that determines how to open or create the file. - A value that specifies the operations that can be performed on the - file. - A constant that determines how the file will be shared by processes. - A positive value greater than 0 indicating the buffer size. The - default buffer size is 4096. - Indicates the format of the path parameter. - - A on the specified path, having the specified mode with read, write, or read/write - access and the specified sharing option. - - - - [AlphaFS] (Transacted) Opens a on the specified path using the specified creation mode, read/write and sharing permission, and buffer size. - The transaction. - The file to open. - A constant that determines how to open or create the file. - A value that specifies the operations that can be performed on the - file. - A constant that determines how the file will be shared by processes. - A positive value greater than 0 indicating the buffer size. The - default buffer size is 4096. - Specifies whether to use asynchronous I/O or synchronous I/O. However, note that the - underlying operating system might not support asynchronous I/O, so when specifying true, the handle might be - opened synchronously depending on the platform. When opened asynchronously, the BeginRead and BeginWrite methods - perform better on large reads or writes, but they might be much slower for small reads or writes. If the - application is designed to take advantage of asynchronous I/O, set the useAsync parameter to true. Using - asynchronous I/O correctly can speed up applications by as much as a factor of 10, but using it without - redesigning the application for asynchronous I/O can decrease performance by as much as a factor of 10. - Indicates the format of the path parameter. - - A on the specified path, having the specified mode with read, write, or read/write - access and the specified sharing option. - - - - [AlphaFS] (Transacted) Opens a on the specified path using the specified creation mode, read/write and sharing permission, and buffer size. - The transaction. - The file to open. - A constant that determines how to open or create the file. - A value that specifies the operations that can be performed on the - file. - A constant that determines how the file will be shared by processes. - A positive value greater than 0 indicating the buffer size. The - default buffer size is 4096. - A value that specifies additional file options. - Indicates the format of the path parameter. - - A on the specified path, having the specified mode with read, write, or read/write - access and the specified sharing option. - - - - [AlphaFS] (Transacted) Opens a on the specified path using the specified creation mode, read/write and sharing permission, and buffer size. - The transaction. - The file to open. - A constant that determines how to open or create the file. - A value that specifies the operations that can be performed on the - file. - A constant that determines how the file will be shared by processes. - A positive value greater than 0 indicating the buffer size. The - default buffer size is 4096. - The extended attributes specifying additional options. - Indicates the format of the path parameter. - - A on the specified path, having the specified mode with read, write, or read/write - access and the specified sharing option. - - - - [AlphaFS] (Transacted) Opens a on the specified path using the specified creation mode, read/write and sharing permission, and buffer size. - The transaction. - The file to open. - A constant that determines how to open or create the file. - A value that specifies the operations that can be performed on the - file. - A constant that determines how the file will be shared by processes. - A positive value greater than 0 indicating the buffer size. The - default buffer size is 4096. - A value that specifies additional file options. - - A on the specified path, having the specified mode with read, write, or read/write - access and the specified sharing option. - - - - [AlphaFS] (Transacted) Opens a on the specified path using the specified creation mode, read/write and sharing permission, and buffer size. - The transaction. - The file to open. - A constant that determines how to open or create the file. - A value that specifies the operations that can be performed on the - file. - A constant that determines how the file will be shared by processes. - A positive value greater than 0 indicating the buffer size. The - default buffer size is 4096. - Extended attributes specifying additional options. - - A on the specified path, having the specified mode with read, write, or read/write - access and the specified sharing option. - - - - [AlphaFS] (Transacted) Opens a on the specified path using the specified creation mode, read/write and sharing permission, and buffer size. - The transaction. - The file to open. - A constant that determines how to open or create the file. - A value that specifies the operations that can be performed on the - file. - A constant that determines how the file will be shared by processes. - A positive value greater than 0 indicating the buffer size. The - default buffer size is 4096. - A value that specifies additional file options. - A value that determines the access control and audit security for the file. - - A on the specified path, having the specified mode with read, write, or read/write - access and the specified sharing option. - - - - [AlphaFS] (Transacted) Opens a on the specified path using the specified creation mode, read/write and sharing permission, and buffer size. - The transaction. - The file to open. - A constant that determines how to open or create the file. - A value that specifies the operations that can be performed on the - file. - A constant that determines how the file will be shared by processes. - A positive value greater than 0 indicating the buffer size. The - default buffer size is 4096. - Extended attributes specifying additional options. - A value that determines the access control and audit security for the file. - - A on the specified path, having the specified mode with read, write, or read/write - access and the specified sharing option. - - - - [AlphaFS] (Transacted) Opens a on the specified path using the specified creation mode, read/write and sharing permission, and buffer size. - The transaction. - The file to open. - A constant that determines how to open or create the file. - A value that specifies the operations that can be performed on the - file. - A constant that determines how the file will be shared by processes. - A positive value greater than 0 indicating the buffer size. The - default buffer size is 4096. - A value that specifies additional file options. - Indicates the format of the path parameter. - - A on the specified path, having the specified mode with read, write, or read/write - access and the specified sharing option. - - - - [AlphaFS] (Transacted) Opens a on the specified path using the specified creation mode, read/write and sharing permission, and buffer size. - The transaction. - The file to open. - A constant that determines how to open or create the file. - A value that specifies the operations that can be performed on the - file. - A constant that determines how the file will be shared by processes. - A positive value greater than 0 indicating the buffer size. The - default buffer size is 4096. - Extended attributes specifying additional options. - Indicates the format of the path parameter. - - A on the specified path, having the specified mode with read, write, or read/write - access and the specified sharing option. - - - - [AlphaFS] (Transacted) Opens a on the specified path using the specified creation mode, access rights and sharing permission, the buffer size, additional file options, access control and audit security. - The transaction. - The file to open. - A constant that determines how to open or create the file. - A value that specifies the operations that can be performed on the - file. - A constant that determines how the file will be shared by processes. - A positive value greater than 0 indicating the buffer size. The - default buffer size is 4096. - A value that specifies additional file options. - A value that determines the access control and audit security for the file. - Indicates the format of the path parameter. - - A on the specified path, having the specified mode with read, write, or read/write - access and the specified sharing option. - - - - [AlphaFS] (Transacted) Opens a on the specified path using the specified creation mode, access rights and sharing permission, the buffer size, additional file options, access control and audit security. - The transaction. - The file to open. - A constant that determines how to open or create the file. - A value that specifies the operations that can be performed on the - file. - A constant that determines how the file will be shared by processes. - A positive value greater than 0 indicating the buffer size. The - default buffer size is 4096. - Extended attributes specifying additional options. - A value that determines the access control and audit security for the file. - Indicates the format of the path parameter. - - A on the specified path, having the specified mode with read, write, or read/write - access and the specified sharing option. - - - - [AlphaFS] Opens a on the specified path, having the specified mode with read, write, or read/write access, the specified sharing option and additional options specified. - The transaction. - The file to open. - A value that specifies whether a file is created if one does not exist, and determines whether the contents of existing files are retained or overwritten. - A value that specifies the operations that can be performed on the file. - A value specifying the type of access other threads have to the file. - Advanced options for this file. - A positive value greater than 0 indicating the buffer size. The default buffer size is 4096. - The security. - Indicates the format of the path parameter(s). - - A instance on the specified path, having the specified mode with - read, write, or read/write access and the specified sharing option. - - - - Opens a on the specified path, having the specified mode with read, write, or read/write access, the specified sharing option and additional options specified. - The transaction. - The file to open. - A value that specifies whether a file is created if one does not exist, and determines whether the contents of existing files are retained or overwritten. - A value that specifies whether a file is created if one does not exist, and determines whether the contents of existing files are retained or overwritten along with additional options. - A value specifying the type of access other threads have to the file. - Advanced options for this file. - A positive value greater than 0 indicating the buffer size. The default buffer size is 4096. - The security. - Indicates the format of the path parameter(s). - - A instance on the specified path, having the specified mode with - read, write, or read/write access and the specified sharing option. - - - - Opens a binary file, reads the contents of the file into a byte array, and then closes the file. - The file to open for reading. - A byte array containing the contents of the file. - - - [AlphaFS] Opens a binary file, reads the contents of the file into a byte array, and then closes the file. - The file to open for reading. - Indicates the format of the path parameter(s). - A byte array containing the contents of the file. - - - [AlphaFS] Opens a binary file, reads the contents of the file into a byte array, and then closes the file. - The transaction. - The file to open for reading. - A byte array containing the contents of the file. - - - [AlphaFS] Opens a binary file, reads the contents of the file into a byte array, and then closes the file. - The transaction. - The file to open for reading. - Indicates the format of the path parameter(s). - A byte array containing the contents of the file. - - - Opens a binary file, reads the contents of the file into a byte array, and then closes the file. - - The transaction. - The file to open for reading. - Indicates the format of the path parameter(s). - A byte array containing the contents of the file. - - - Opens a text file, reads all lines of the file, and then closes the file. - The file to open for reading. - All lines of the file. - - - Opens a file, reads all lines of the file with the specified encoding, and then closes the file. - The file to open for reading. - The applied to the contents of the file. - All lines of the file. - - - [AlphaFS] Opens a text file, reads all lines of the file, and then closes the file. - The file to open for reading. - Indicates the format of the path parameter(s). - All lines of the file. - - - [AlphaFS] Opens a file, reads all lines of the file with the specified encoding, and then closes the file. - The file to open for reading. - The applied to the contents of the file. - Indicates the format of the path parameter(s). - All lines of the file. - - - [AlphaFS] Opens a text file, reads all lines of the file, and then closes the file. - The transaction. - The file to open for reading. - All lines of the file. - - - [AlphaFS] Opens a file, reads all lines of the file with the specified encoding, and then closes the file. - The transaction. - The file to open for reading. - The applied to the contents of the file. - All lines of the file. - - - [AlphaFS] Opens a text file, reads all lines of the file, and then closes the file. - The transaction. - The file to open for reading. - Indicates the format of the path parameter(s). - All lines of the file. - - - [AlphaFS] Opens a file, reads all lines of the file with the specified encoding, and then closes the file. - The transaction. - The file to open for reading. - The applied to the contents of the file. - Indicates the format of the path parameter(s). - All lines of the file. - - - Opens a file, read all lines of the file with the specified encoding, and then close the file. - The transaction. - The file to open for reading. - The applied to the contents of the file. - Indicates the format of the path parameter(s). - An IEnumerable string containing all lines of the file. - - - Opens a text file, reads all lines of the file, and then closes the file. - The file to open for reading. - All lines of the file. - - - Opens a file, reads all lines of the file with the specified encoding, and then closes the file. - The file to open for reading. - The applied to the contents of the file. - All lines of the file. - - - [AlphaFS] Opens a text file, reads all lines of the file, and then closes the file. - The file to open for reading. - Indicates the format of the path parameter(s). - All lines of the file. - - - [AlphaFS] Opens a file, reads all lines of the file with the specified encoding, and then closes the file. - The file to open for reading. - The applied to the contents of the file. - Indicates the format of the path parameter(s). - All lines of the file. - - - [AlphaFS] Opens a text file, reads all lines of the file, and then closes the file. - The transaction. - The file to open for reading. - All lines of the file. - - - [AlphaFS] Opens a file, reads all lines of the file with the specified encoding, and then closes the file. - The transaction. - The file to open for reading. - The applied to the contents of the file. - All lines of the file. - - - [AlphaFS] Opens a text file, reads all lines of the file, and then closes the file. - The transaction. - The file to open for reading. - Indicates the format of the path parameter(s). - All lines of the file. - - - [AlphaFS] Opens a file, reads all lines of the file with the specified encoding, and then closes the file. - The transaction. - The file to open for reading. - The applied to the contents of the file. - Indicates the format of the path parameter(s). - All lines of the file. - - - Open a file, read all lines of the file with the specified encoding, and then close the file. - The transaction. - The file to open for reading. - The applied to the contents of the file. - Indicates the format of the path parameter(s). - All lines of the file. - - - Reads the lines of a file. - The file to read. - All the lines of the file, or the lines that are the result of a query. - - - Read the lines of a file that has a specified encoding. - The file to read. - The encoding that is applied to the contents of the file. - All the lines of the file, or the lines that are the result of a query. - - - [AlphaFS] Reads the lines of a file. - The file to read. - Indicates the format of the path parameter(s). - All the lines of the file, or the lines that are the result of a query. - - - [AlphaFS] Read the lines of a file that has a specified encoding. - The file to read. - The encoding that is applied to the contents of the file. - Indicates the format of the path parameter(s). - All the lines of the file, or the lines that are the result of a query. - - - [AlphaFS] Reads the lines of a file. - The transaction. - The file to read. - All the lines of the file, or the lines that are the result of a query. - - - [AlphaFS] Read the lines of a file that has a specified encoding. - The transaction. - The file to read. - The encoding that is applied to the contents of the file. - All the lines of the file, or the lines that are the result of a query. - - - [AlphaFS] Reads the lines of a file. - The transaction. - The file to read. - Indicates the format of the path parameter(s). - All the lines of the file, or the lines that are the result of a query. - - - [AlphaFS] Read the lines of a file that has a specified encoding. - The transaction. - The file to read. - The encoding that is applied to the contents of the file. - Indicates the format of the path parameter(s). - All the lines of the file, or the lines that are the result of a query. - - - Reads the lines of a file that has a specified encoding. - The transaction. - The file to read. - The encoding that is applied to the contents of the file. - Indicates the format of the path parameter(s). - All the lines of the file, or the lines that are the result of a query. - - - - Replaces the contents of a specified file with the contents of another file, deleting the original file, and creating a backup of - the replaced file. - - - The Replace method replaces the contents of a specified file with the contents of another file. It also creates a backup of the - file that was replaced. - - - If the and are on different volumes, this method will - raise an exception. If the is on a different volume from the source file, the backup - file will be deleted. - - - Pass null to the parameter if you do not want to create a backup of the file being - replaced. - - The name of a file that replaces the file specified by . - The name of the file being replaced. - The name of the backup file. - - - - Replaces the contents of a specified file with the contents of another file, deleting the original file, and creating a backup of - the replaced file and optionally ignores merge errors. - - - The Replace method replaces the contents of a specified file with the contents of another file. It also creates a backup of the - file that was replaced. - - - If the and are on different volumes, this method will - raise an exception. If the is on a different volume from the source file, the backup - file will be deleted. - - - Pass null to the parameter if you do not want to create a backup of the file being - replaced. - - The name of a file that replaces the file specified by . - The name of the file being replaced. - The name of the backup file. - - to ignore merge errors (such as attributes and access control lists (ACLs)) from the replaced file to the - replacement file; otherwise, . - - - - - [AlphaFS] Replaces the contents of a specified file with the contents of another file, deleting the original file, and creating a - backup of the replaced file and optionally ignores merge errors. - - - The Replace method replaces the contents of a specified file with the contents of another file. It also creates a backup of the - file that was replaced. - - - If the and are on different volumes, this method will - raise an exception. If the is on a different volume from the source file, the backup - file will be deleted. - - - Pass null to the parameter if you do not want to create a backup of the file being - replaced. - - The name of a file that replaces the file specified by . - The name of the file being replaced. - The name of the backup file. - - to ignore merge errors (such as attributes and access control lists (ACLs)) from the replaced file to the - replacement file; otherwise, . - - Indicates the format of the path parameter(s). - - - Replaces the contents of a specified file with the contents of another file, deleting - the original file, and creating a backup of the replaced file and optionally ignores merge errors. - - - The Replace method replaces the contents of a specified file with the contents of another file. It also creates a backup of the - file that was replaced. - - - If the and are on different volumes, this method will - raise an exception. If the is on a different volume from the source file, the backup - file will be deleted. - - - Pass null to the parameter if you do not want to create a backup of the file being - replaced. - - The name of a file that replaces the file specified by . - The name of the file being replaced. - The name of the backup file. - - to ignore merge errors (such as attributes and access control lists (ACLs)) from the replaced file to the - replacement file; otherwise, . - - Indicates the format of the path parameter(s). - - - Applies access control list (ACL) entries described by a FileSecurity object to the specified file. - - - - A file to add or remove access control list (ACL) entries from. - A object that describes an ACL entry to apply to the file described by the parameter. - - - Applies access control list (ACL) entries described by a object to the specified directory. - - - - A directory to add or remove access control list (ACL) entries from. - A object that describes an ACL entry to apply to the directory described by the path parameter. - One or more of the values that specifies the type of access control list (ACL) information to set. - - - [AlphaFS] Applies access control list (ACL) entries described by a FileSecurity object to the specified file. - - - - A file to add or remove access control list (ACL) entries from. - A object that describes an ACL entry to apply to the file described by the parameter. - Indicates the format of the path parameter(s). - - - [AlphaFS] Applies access control list (ACL) entries described by a object to the specified directory. - - - - A directory to add or remove access control list (ACL) entries from. - A object that describes an ACL entry to apply to the directory described by the path parameter. - One or more of the values that specifies the type of access control list (ACL) information to set. - Indicates the format of the path parameter(s). - - - Applies access control list (ACL) entries described by a FileSecurity object to the specified file. - - - - A to a file to add or remove access control list (ACL) entries from. - A object that describes an ACL entry to apply to the file described by the parameter. - - - Applies access control list (ACL) entries described by a FileSecurity object to the specified file. - - - - A to a file to add or remove access control list (ACL) entries from. - A object that describes an ACL entry to apply to the file described by the parameter. - One or more of the values that specifies the type of access control list (ACL) information to set. - - - [AlphaFS] Applies access control list (ACL) entries described by a / object to the specified file or directory. - Use either or , not both. - - - - A file/directory to add or remove access control list (ACL) entries from. This parameter This parameter may be . - A to add or remove access control list (ACL) entries from. This parameter This parameter may be . - A / object that describes an ACL entry to apply to the file/directory described by the / parameter. - One or more of the values that specifies the type of access control list (ACL) information to set. - Indicates the format of the path parameter(s). - - - Sets the specified of the file or directory on the specified path. - - Certain file attributes, such as and , can be combined. - Other attributes, such as , must be used alone. - - - It is not possible to change the status of a File object using this method. - - The path to the file or directory. - A bitwise combination of the enumeration values. - Sets the specified of the file or directory on the specified path. - - - [AlphaFS] Sets the specified of the file or directory on the specified path. - - Certain file attributes, such as and , can be combined. - Other attributes, such as , must be used alone. - - - It is not possible to change the status of a File object using this method. - - The path to the file or directory. - A bitwise combination of the enumeration values. - Indicates the format of the path parameter(s). - - - [AlphaFS] Sets the specified of the file on the specified path. - - Certain file attributes, such as and , can be combined. - Other attributes, such as , must be used alone. - - - It is not possible to change the status of a File object using this method. - - The transaction. - The path to the file. - A bitwise combination of the enumeration values. - - - [AlphaFS] Sets the specified of the file on the specified path. - - Certain file attributes, such as and , can be combined. - Other attributes, such as , must be used alone. - - - It is not possible to change the status of a File object using this method. - - The transaction. - The path to the file. - A bitwise combination of the enumeration values. - Indicates the format of the path parameter(s). - - - Sets the attributes for a Non-/Transacted file/directory. - - Certain file attributes, such as and , can be combined. - Other attributes, such as , must be used alone. - - - It is not possible to change the status of a File object using the SetAttributes method. - - - Specifies that is a file or directory. - The transaction. - The name of the file or directory whose attributes are to be set. - - The attributes to set for the file or directory. Note that all other values override . - - - does not throw an Exception when the file system object does not exist. - - Indicates the format of the path parameter(s). - - - Sets the date and time the file was created. - The file for which to set the creation date and time information. - - A containing the value to set for the creation date and time of . This value - is expressed in local time. - - - - [AlphaFS] Sets the date and time the file was created. - The file for which to set the creation date and time information. - - A containing the value to set for the creation date and time of . This value - is expressed in local time. - - Indicates the format of the path parameter(s). - - - [AlphaFS] Sets the date and time the file was created. - The file for which to set the creation date and time information. - - A containing the value to set for the creation date and time of . This value - is expressed in local time. - - If , the date and time information will apply to the reparse point (symlink or junction) and not the file or directory linked to. No effect if does not refer to a reparse point. - Indicates the format of the path parameter(s). - - - [AlphaFS] Sets the date and time the file was created. - The transaction. - The file for which to set the creation date and time information. - - A containing the value to set for the creation date and time of . This value - is expressed in local time. - - - - [AlphaFS] Sets the date and time the file was created. - The transaction. - The file for which to set the creation date and time information. - - A containing the value to set for the creation date and time of . This value - is expressed in local time. - - Indicates the format of the path parameter(s). - - - [AlphaFS] Sets the date and time the file was created. - The transaction. - The file for which to set the creation date and time information. - - A containing the value to set for the creation date and time of . This value - is expressed in local time. - - If , the date and time information will apply to the reparse point (symlink or junction) and not the file or directory linked to. No effect if does not refer to a reparse point. - Indicates the format of the path parameter(s). - - - Sets the date and time, in coordinated universal time (UTC), that the file was created. - The file for which to set the creation date and time information. - - A containing the value to set for the creation date and time of . This value - is expressed in UTC time. - - - - [AlphaFS] Sets the date and time, in coordinated universal time (UTC), that the file was created. - The file for which to set the creation date and time information. - - A containing the value to set for the creation date and time of . This value - is expressed in UTC time. - - Indicates the format of the path parameter(s). - - - [AlphaFS] Sets the date and time, in coordinated universal time (UTC), that the file was created. - The file for which to set the creation date and time information. - - A containing the value to set for the creation date and time of . This value - is expressed in UTC time. - - If , the date and time information will apply to the reparse point (symlink or junction) and not the file or directory linked to. No effect if does not refer to a reparse point. - Indicates the format of the path parameter(s). - - - [AlphaFS] Sets the date and time, in coordinated universal time (UTC), that the file was created. - The transaction. - The file for which to set the creation date and time information. - - A containing the value to set for the creation date and time of . This value - is expressed in UTC time. - - - - [AlphaFS] Sets the date and time, in coordinated universal time (UTC), that the file was created. - The transaction. - The file for which to set the creation date and time information. - - A containing the value to set for the creation date and time of . This value - is expressed in UTC time. - - Indicates the format of the path parameter(s). - - - [AlphaFS] Sets the date and time, in coordinated universal time (UTC), that the file was created. - The transaction. - The file for which to set the creation date and time information. - - A containing the value to set for the creation date and time of . This value - is expressed in UTC time. - - If , the date and time information will apply to the reparse point (symlink or junction) and not the file or directory linked to. No effect if does not refer to a reparse point. - Indicates the format of the path parameter(s). - - - Sets the date and time that the specified file was last accessed. - The file for which to set the access date and time information. - - A containing the value to set for the last access date and time of . This - value is expressed in local time. - - - - [AlphaFS] Sets the date and time that the specified file was last accessed. - The file for which to set the access date and time information. - - A containing the value to set for the last access date and time of . This - value is expressed in local time. - - Indicates the format of the path parameter(s). - - - [AlphaFS] Sets the date and time that the specified file was last accessed. - The file for which to set the access date and time information. - - A containing the value to set for the last access date and time of . This - value is expressed in local time. - - If , the date and time information will apply to the reparse point (symlink or junction) and not the file or directory linked to. No effect if does not refer to a reparse point. - Indicates the format of the path parameter(s). - - - [AlphaFS] Sets the date and time that the specified file was last accessed. - The transaction. - The file for which to set the access date and time information. - - A containing the value to set for the last access date and time of . This - value is expressed in local time. - - - - [AlphaFS] Sets the date and time that the specified file was last accessed. - The transaction. - The file for which to set the access date and time information. - - A containing the value to set for the last access date and time of . This - value is expressed in local time. - - Indicates the format of the path parameter(s). - - - [AlphaFS] Sets the date and time that the specified file was last accessed. - The transaction. - The file for which to set the access date and time information. - - A containing the value to set for the last access date and time of . This - value is expressed in local time. - - If , the date and time information will apply to the reparse point (symlink or junction) and not the file or directory linked to. No effect if does not refer to a reparse point. - Indicates the format of the path parameter(s). - - - Sets the date and time, in coordinated universal time (UTC), that the specified file was last accessed. - The file for which to set the access date and time information. - - A containing the value to set for the last access date and time of . This - value is expressed in UTC time. - - - - [AlphaFS] Sets the date and time, in coordinated universal time (UTC), that the specified file was last accessed. - The file for which to set the access date and time information. - - A containing the value to set for the last access date and time of . This - value is expressed in UTC time. - - Indicates the format of the path parameter(s). - - - [AlphaFS] Sets the date and time, in coordinated universal time (UTC), that the specified file was last accessed. - The file for which to set the access date and time information. - - A containing the value to set for the last access date and time of . This - value is expressed in UTC time. - - If , the date and time information will apply to the reparse point (symlink or junction) and not the file or directory linked to. No effect if does not refer to a reparse point. - Indicates the format of the path parameter(s). - - - [AlphaFS] Sets the date and time, in coordinated universal time (UTC), that the specified file was last accessed. - The transaction. - The file for which to set the access date and time information. - - A containing the value to set for the last access date and time of . This - value is expressed in UTC time. - - - - [AlphaFS] Sets the date and time, in coordinated universal time (UTC), that the specified file was last accessed. - The transaction. - The file for which to set the access date and time information. - - A containing the value to set for the last access date and time of . This - value is expressed in UTC time. - - Indicates the format of the path parameter(s). - - - [AlphaFS] Sets the date and time, in coordinated universal time (UTC), that the specified file was last accessed. - The transaction. - The file for which to set the access date and time information. - - A containing the value to set for the last access date and time of . This - value is expressed in UTC time. - - If , the date and time information will apply to the reparse point (symlink or junction) and not the file or directory linked to. No effect if does not refer to a reparse point. - Indicates the format of the path parameter(s). - - - Sets the date and time that the specified file was last written to. - The file for which to set the date and time information. - - A containing the value to set for the last write date and time of . This value - is expressed in local time. - - - - [AlphaFS] Sets the date and time that the specified file was last written to. - The file for which to set the date and time information. - - A containing the value to set for the last write date and time of . This value - is expressed in local time. - - Indicates the format of the path parameter(s). - - - [AlphaFS] Sets the date and time that the specified file was last written to. - The file for which to set the date and time information. - - A containing the value to set for the last write date and time of . This value - is expressed in local time. - - If , the date and time information will apply to the reparse point (symlink or junction) and not the file or directory linked to. No effect if does not refer to a reparse point. - Indicates the format of the path parameter(s). - - - [AlphaFS] Sets the date and time that the specified file was last written to. - The transaction. - The file for which to set the date and time information. - - A containing the value to set for the last write date and time of . This value - is expressed in local time. - - - - [AlphaFS] Sets the date and time that the specified file was last written to. - The transaction. - The file for which to set the date and time information. - - A containing the value to set for the last write date and time of . This value - is expressed in local time. - - Indicates the format of the path parameter(s). - - - [AlphaFS] Sets the date and time that the specified file was last written to. - The transaction. - The file for which to set the date and time information. - - A containing the value to set for the last write date and time of . This value - is expressed in local time. - - If , the date and time information will apply to the reparse point (symlink or junction) and not the file or directory linked to. No effect if does not refer to a reparse point. - Indicates the format of the path parameter(s). - - - Sets the date and time, in coordinated universal time (UTC), that the specified file was last written to. - The file for which to set the date and time information. - - A containing the value to set for the last write date and time of . This value - is expressed in UTC time. - - - - - [AlphaFS] Sets the date and time, in coordinated universal time (UTC), that the specified file was last written to. - - The file for which to set the date and time information. - - A containing the value to set for the last write date and time of . This value - is expressed in UTC time. - - Indicates the format of the path parameter(s). - - - - [AlphaFS] Sets the date and time, in coordinated universal time (UTC), that the specified file was last written to. - - The file for which to set the date and time information. - - A containing the value to set for the last write date and time of . This value - is expressed in UTC time. - - If , the date and time information will apply to the reparse point (symlink or junction) and not the file or directory linked to. No effect if does not refer to a reparse point. - Indicates the format of the path parameter(s). - - - - [AlphaFS] Sets the date and time, in coordinated universal time (UTC), that the specified file was last written to. - - The transaction. - The file for which to set the date and time information. - - A containing the value to set for the last write date and time of . This value - is expressed in UTC time. - - - - - [AlphaFS] Sets the date and time, in coordinated universal time (UTC), that the specified file was last written to. - - The transaction. - The file for which to set the date and time information. - - A containing the value to set for the last write date and time of . This value - is expressed in UTC time. - - Indicates the format of the path parameter(s). - - - - [AlphaFS] Sets the date and time, in coordinated universal time (UTC), that the specified file was last written to. - - The transaction. - The file for which to set the date and time information. - - A containing the value to set for the last write date and time of . This value - is expressed in UTC time. - - If , the date and time information will apply to the reparse point (symlink or junction) and not the file or directory linked to. No effect if does not refer to a reparse point. - Indicates the format of the path parameter(s). - - - [AlphaFS] Sets all the date and time stamps for the specified file, at once. - The file for which to set the dates and times information. - - A containing the value to set for the creation date and time of . This value - is expressed in local time. - - - A containing the value to set for the last access date and time of . This - value is expressed in local time. - - - A containing the value to set for the last write date and time of . This value - is expressed in local time. - - Indicates the format of the path parameter(s). - - - [AlphaFS] Sets all the date and time stamps for the specified file, at once. - The file for which to set the dates and times information. - - A containing the value to set for the creation date and time of . This value - is expressed in local time. - - - A containing the value to set for the last access date and time of . This - value is expressed in local time. - - - A containing the value to set for the last write date and time of . This value - is expressed in local time. - - - - [AlphaFS] Sets all the date and time stamps for the specified file, at once. - The file for which to set the dates and times information. - - A containing the value to set for the creation date and time of . This value - is expressed in local time. - - - A containing the value to set for the last access date and time of . This - value is expressed in local time. - - - A containing the value to set for the last write date and time of . This value - is expressed in local time. - - If , the date and time information will apply to the reparse point (symlink or junction) and not the file or directory linked to. No effect if does not refer to a reparse point. - Indicates the format of the path parameter(s). - - - [AlphaFS] Sets all the date and time stamps for the specified file, at once. - The transaction. - The file for which to set the dates and times information. - - A containing the value to set for the creation date and time of . This value - is expressed in local time. - - - A containing the value to set for the last access date and time of . This - value is expressed in local time. - - - A containing the value to set for the last write date and time of . This value - is expressed in local time. - - Indicates the format of the path parameter(s). - - - [AlphaFS] Sets all the date and time stamps for the specified file, at once. - The transaction. - The file for which to set the dates and times information. - - A containing the value to set for the creation date and time of . This value - is expressed in local time. - - - A containing the value to set for the last access date and time of . This - value is expressed in local time. - - - A containing the value to set for the last write date and time of . This value - is expressed in local time. - - - - [AlphaFS] Sets all the date and time stamps for the specified file, at once. - The transaction. - The file for which to set the dates and times information. - - A containing the value to set for the creation date and time of . This value - is expressed in local time. - - - A containing the value to set for the last access date and time of . This - value is expressed in local time. - - - A containing the value to set for the last write date and time of . This value - is expressed in local time. - - If , the date and time information will apply to the reparse point (symlink or junction) and not the file or directory linked to. No effect if does not refer to a reparse point. - Indicates the format of the path parameter(s). - - - [AlphaFS] Sets all the date and time stamps, in coordinated universal time (UTC), for the specified file, at once. - The file for which to set the dates and times information. - - A containing the value to set for the creation date and time of . This value - is expressed in UTC time. - - - A containing the value to set for the last access date and time of . This - value is expressed in UTC time. - - - A containing the value to set for the last write date and time of . This value - is expressed in UTC time. - - Indicates the format of the path parameter(s). - - - [AlphaFS] Sets all the date and time stamps, in coordinated universal time (UTC), for the specified file, at once. - The file for which to set the dates and times information. - - A containing the value to set for the creation date and time of . This value - is expressed in UTC time. - - - A containing the value to set for the last access date and time of . This - value is expressed in UTC time. - - - A containing the value to set for the last write date and time of . This value - is expressed in UTC time. - - - - [AlphaFS] Sets all the date and time stamps, in coordinated universal time (UTC), for the specified file, at once. - The file for which to set the dates and times information. - - A containing the value to set for the creation date and time of . This value - is expressed in UTC time. - - - A containing the value to set for the last access date and time of . This - value is expressed in UTC time. - - - A containing the value to set for the last write date and time of . This value - is expressed in UTC time. - - If , the date and time information will apply to the reparse point (symlink or junction) and not the file or directory linked to. No effect if does not refer to a reparse point. - Indicates the format of the path parameter(s). - - - [AlphaFS] Sets all the date and time stamps, in coordinated universal time (UTC), for the specified file, at once. - The transaction. - The file for which to set the dates and times information. - - A containing the value to set for the creation date and time of . This value - is expressed in UTC time. - - - A containing the value to set for the last access date and time of . This - value is expressed in UTC time. - - - A containing the value to set for the last write date and time of . This value - is expressed in UTC time. - - Indicates the format of the path parameter(s). - - - [AlphaFS] Sets all the date and time stamps, in coordinated universal time (UTC), for the specified file, at once. - The transaction. - The file for which to set the dates and times information. - - A containing the value to set for the creation date and time of . This value - is expressed in UTC time. - - - A containing the value to set for the last access date and time of . This - value is expressed in UTC time. - - - A containing the value to set for the last write date and time of . This value - is expressed in UTC time. - - - - [AlphaFS] Sets all the date and time stamps, in coordinated universal time (UTC), for the specified file, at once. - The transaction. - The file for which to set the dates and times information. - - A containing the value to set for the creation date and time of . This value - is expressed in UTC time. - - - A containing the value to set for the last access date and time of . This - value is expressed in UTC time. - - - A containing the value to set for the last write date and time of . This value - is expressed in UTC time. - - If , the date and time information will apply to the reparse point (symlink or junction) and not the file or directory linked to. No effect if does not refer to a reparse point. - Indicates the format of the path parameter(s). - - - Set the date and time, in coordinated universal time (UTC), that the file or directory was created and/or last accessed and/or written to. - - - Specifies that is a file or directory. - The transaction. - The file or directory for which to set the date and time information. - A containing the value to set for the creation date and time of . This value is expressed in UTC time. - A containing the value to set for the last access date and time of . This value is expressed in UTC time. - A containing the value to set for the last write date and time of . This value is expressed in UTC time. - If , the date and time information will apply to the reparse point (symlink or junction) and not the file or directory linked to. No effect if does not refer to a reparse point. - Indicates the format of the path parameter(s). - - - - Creates a new file, writes the specified byte array to the file, and then closes the file. If the target file already exists, it is - overwritten. - - The file to write to. - The bytes to write to the file. - - - - [AlphaFS] Creates a new file, writes the specified byte array to the file, and then closes the file. If the target file already - exists, it is overwritten. - - The file to write to. - The bytes to write to the file. - Indicates the format of the path parameter(s). - - - - [AlphaFS] Creates a new file, writes the specified byte array to the file, and then closes the file. If the target file already - exists, it is overwritten. - - The transaction. - The file to write to. - The bytes to write to the file. - - - - [AlphaFS] Creates a new file, writes the specified byte array to the file, and then closes the file. If the target file already - exists, it is overwritten. - - The transaction. - The file to write to. - The bytes to write to the file. - Indicates the format of the path parameter(s). - - - Creates a new file as part of a transaction, writes the specified byte array to - the file, and then closes the file. If the target file already exists, it is overwritten. - - - The transaction. - The file to write to. - The bytes to write to the file. - Indicates the format of the path parameter(s). - - - [AlphaFS] Gets the change date and time of the specified file. - A structure set to the change date and time for the specified file. This value is expressed in local time. - The file for which to obtain creation date and time information. - Indicates the format of the path parameter(s). - - - [AlphaFS] Gets the change date and time of the specified file. - A structure set to the change date and time for the specified file. This value is expressed in local time. - The file for which to obtain creation date and time information. - - - [AlphaFS] Gets the change date and time of the specified file. - A structure set to the change date and time for the specified file. This value is expressed in local time. - An open handle to the file or directory from which to retrieve information. - - - [AlphaFS] Gets the change date and time of the specified file. - A structure set to the change date and time for the specified file. This value is expressed in local time. - The transaction. - The file for which to obtain creation date and time information. - Indicates the format of the path parameter(s). - - - [AlphaFS] Gets the change date and time of the specified file. - A structure set to the change date and time for the specified file. This value is expressed in local time. - The transaction. - The file for which to obtain creation date and time information. - - - [AlphaFS] Gets the change date and time, in Coordinated Universal Time (UTC) format, of the specified file. - A structure set to the change date and time for the specified file. This value is expressed in UTC time. - The file for which to obtain change date and time information, in Coordinated Universal Time (UTC) format. - Indicates the format of the path parameter(s). - - - [AlphaFS] Gets the change date and time, in Coordinated Universal Time (UTC) format, of the specified file. - A structure set to the change date and time for the specified file. This value is expressed in UTC time. - The file for which to obtain change date and time information, in Coordinated Universal Time (UTC) format. - - - [AlphaFS] Gets the change date and time, in Coordinated Universal Time (UTC) format, of the specified file. - A structure set to the change date and time for the specified file. This value is expressed in UTC time. - An open handle to the file or directory from which to retrieve information. - - - [AlphaFS] Gets the change date and time, in Coordinated Universal Time (UTC) format, of the specified file. - A structure set to the change date and time for the specified file. This value is expressed in UTC time. - The transaction. - The file for which to obtain change date and time information, in Coordinated Universal Time (UTC) format. - Indicates the format of the path parameter(s). - - - [AlphaFS] Gets the change date and time, in Coordinated Universal Time (UTC) format, of the specified file. - A structure set to the change date and time for the specified file. This value is expressed in UTC time. - The transaction. - The file for which to obtain change date and time information, in Coordinated Universal Time (UTC) format. - - - Gets the change date and time of the specified file. - A structure set to the change date and time for the specified file. This value is expressed in local time. - Use either or , not both. - - - - Specifies that is a file or directory. - The transaction. - An open handle to the file or directory from which to retrieve information. - The file or directory for which to obtain creation date and time information. - gets the Coordinated Universal Time (UTC), gets the local time. - Indicates the format of the path parameter(s). - - - [AlphaFS] Retrieves the actual number of bytes of disk storage used to store a specified file. - - If the file is located on a volume that supports compression and the file is compressed, the value obtained is the compressed size - of the specified file. If the file is located on a volume that supports sparse files and the file is a sparse file, the value - obtained is the sparse size of the specified file. - - The name of the file. - Indicates the format of the path parameter(s). - The actual number of bytes of disk storage used to store the specified file. - - - [AlphaFS] Retrieves the actual number of bytes of disk storage used to store a specified file. - - If the file is located on a volume that supports compression and the file is compressed, the value obtained is the compressed size - of the specified file. If the file is located on a volume that supports sparse files and the file is a sparse file, the value - obtained is the sparse size of the specified file. - - The name of the file. - The actual number of bytes of disk storage used to store the specified file. - - - - [AlphaFS] Retrieves the actual number of bytes of disk storage used to store a specified file as part of a transaction. If the file - is located on a volume that supports compression and the file is compressed, the value obtained is the compressed size of the - specified file. If the file is located on a volume that supports sparse files and the file is a sparse file, the value obtained is - the sparse size of the specified file. - - The transaction. - The name of the file. - Indicates the format of the path parameter(s). - The actual number of bytes of disk storage used to store the specified file. - - - - [AlphaFS] Retrieves the actual number of bytes of disk storage used to store a specified file as part of a transaction. If the file - is located on a volume that supports compression and the file is compressed, the value obtained is the compressed size of the - specified file. If the file is located on a volume that supports sparse files and the file is a sparse file, the value obtained is - the sparse size of the specified file. - - The transaction. - The name of the file. - The actual number of bytes of disk storage used to store the specified file. - - - Retrieves the actual number of bytes of disk storage used to store a - specified file as part of a transaction. If the file is located on a volume that supports compression and the file is compressed, - the value obtained is the compressed size of the specified file. If the file is located on a volume that supports sparse files and - the file is a sparse file, the value obtained is the sparse size of the specified file. - - - The transaction. - The name of the file. - Indicates the format of the path parameter(s). - The actual number of bytes of disk storage used to store the specified file. - - - [AlphaFS] Retrieves the encryption status of the specified file. - The name of the file. - Indicates the format of the path parameter(s). - The of the specified . - - - [AlphaFS] Retrieves the encryption status of the specified file. - The name of the file. - The of the specified . - - - Retrieves the encryption status of the specified file. - The name of the file. - Indicates the format of the path parameter(s). - The of the specified . - - - [AlphaFS] Retrieves file information for the specified . - A connected to the open file from which to retrieve the information. - A object containing the requested information. - - - [AlphaFS] Gets the of the file on the path. - The instance of the file or directory. - The path to the file or directory. - Indicates the format of the path parameter(s). - - - [AlphaFS] Gets the of the file on the path. - The instance of the file or directory. - The path to the file or directory. - - - [AlphaFS] Gets the of the file on the path. - The instance of the file or directory. - The transaction. - The path to the file or directory. - Indicates the format of the path parameter(s). - - - [AlphaFS] Gets the of the file on the path. - The instance of the file or directory. - The transaction. - The path to the file or directory. - - - Gets a FileSystemEntryInfo from a Non-/Transacted directory/file. - The instance of the file or directory, or null on Exception when is true. - BasicSearch and LargeCache are used by default, if possible. - - - Specifies that is a file or directory. - The transaction. - The path to the file or directory. - - true suppress any Exception that might be thrown as a result from a failure, - such as ACLs protected directories or non-accessible reparse points. - - Indicates the format of the path parameter(s). - - - [AlphaFS] Gets information about the target of a mount point or symbolic link on an NTFS file system. - The path to the reparse point. - Indicates the format of the path parameter(s). - - An instance of or containing information about the symbolic link - or mount point pointed to by . - - - - [AlphaFS] Gets information about the target of a mount point or symbolic link on an NTFS file system. - The path to the reparse point. - - An instance of or containing information about the symbolic link - or mount point pointed to by . - - - - [AlphaFS] Gets information about the target of a mount point or symbolic link on an NTFS file system. - The transaction. - The path to the reparse point. - Indicates the format of the path parameter(s). - - An instance of or containing information about the symbolic link - or mount point pointed to by . - - - - [AlphaFS] Gets information about the target of a mount point or symbolic link on an NTFS file system. - The transaction. - The path to the reparse point. - - An instance of or containing information about the symbolic link - or mount point pointed to by . - - - - Gets information about the target of a mount point or symbolic link on an NTFS file system. - The transaction. - The path to the reparse point. - Indicates the format of the path parameter(s). - - An instance of or containing information about the symbolic link - or mount point pointed to by . - - - - [AlphaFS] Retrieves the file size, in bytes to store a specified file. - The path to the file. - Indicates the format of the path parameter(s). - The file size, in bytes. - - - [AlphaFS] Retrieves the file size, in bytes to store a specified file. - The path to the file. - The file size, in bytes. - - - [AlphaFS] Retrieves the file size, in bytes to store a specified file. - The to the file. - The file size, in bytes. - - - [AlphaFS] Retrieves the file size, in bytes to store a specified file. - The transaction. - The path to the file. - Indicates the format of the path parameter(s). - The number of bytes of disk storage used to store the specified file. - - - [AlphaFS] Retrieves the file size, in bytes to store a specified file. - The transaction. - The path to the file. - The number of bytes of disk storage used to store the specified file. - - - Retrieves the file size, in bytes to store a specified file. - Use either or , not both. - The transaction. - The to the file. - The path to the file. - Indicates the format of the path parameter(s). - The number of bytes of disk storage used to store the specified file. - - - [AlphaFS] Transfers the date and time stamps for the specified files. - This method does not change last access time for the source file. - The source file to get the date and time stamps from. - The destination file to set the date and time stamps. - Indicates the format of the path parameter(s). - - - [AlphaFS] Transfers the date and time stamps for the specified files. - This method does not change last access time for the source file. - The source file to get the date and time stamps from. - The destination file to set the date and time stamps. - - - [AlphaFS] Transfers the date and time stamps for the specified files. - This method does not change last access time for the source file. - The transaction. - The source file to get the date and time stamps from. - The destination file to set the date and time stamps. - Indicates the format of the path parameter(s). - - - [AlphaFS] Transfers the date and time stamps for the specified files. - This method does not change last access time for the source file. - The transaction. - The source file to get the date and time stamps from. - The destination file to set the date and time stamps. - - - Transfer the date and time stamps for the specified files and directories. - - This method does not change last access time for the source file. - This method uses BackupSemantics flag to get Timestamp changed for directories. - - Specifies that and are a file or directory. - The transaction. - The source path. - The destination path. - Indicates the format of the path parameter(s). - - - Opens an existing file for reading. - The file to be opened for reading. - A read-only on the specified path. - - This method is equivalent to the (string, FileMode, FileAccess, FileShare) constructor overload with a - value of Open, a value of Read and a value of Read. - - - - [AlphaFS] Opens an existing file for reading. - The file to be opened for reading. - Indicates the format of the path parameter(s). - A read-only on the specified path. - - This method is equivalent to the (string, FileMode, FileAccess, FileShare) constructor overload with a - value of Open, a value of Read and a value of Read. - - - - [AlphaFS] Opens an existing file for reading. - The transaction. - The file to be opened for reading. - A read-only on the specified path. - - This method is equivalent to the (string, FileMode, FileAccess, FileShare) constructor overload with a - value of Open, a value of Read and a value of Read. - - - - [AlphaFS] Opens an existing file for reading. - The transaction. - The file to be opened for reading. - Indicates the format of the path parameter(s). - A read-only on the specified path. - - This method is equivalent to the (string, FileMode, FileAccess, FileShare) constructor overload with a - value of Open, a value of Read and a value of Read. - - - - Opens an existing UTF-8 encoded text file for reading. - The file to be opened for reading. - A on the specified path. - This method is equivalent to the (String) constructor overload. - - - [AlphaFS] Opens an existing UTF-8 encoded text file for reading. - The file to be opened for reading. - Indicates the format of the path parameter(s). - A on the specified path. - This method is equivalent to the (String) constructor overload. - - - [AlphaFS] Opens an existing encoded text file for reading. - The file to be opened for reading. - The applied to the contents of the file. - Indicates the format of the path parameter(s). - A on the specified path. - This method is equivalent to the (String) constructor overload. - - - [AlphaFS] Opens an existing encoded text file for reading. - The file to be opened for reading. - The applied to the contents of the file. - A on the specified path. - This method is equivalent to the (String) constructor overload. - - - [AlphaFS] Opens an existing UTF-8 encoded text file for reading. - The transaction. - The file to be opened for reading. - A on the specified path. - This method is equivalent to the (String) constructor overload. - - - [AlphaFS] Opens an existing UTF-8 encoded text file for reading. - The transaction. - The file to be opened for reading. - Indicates the format of the path parameter(s). - A on the specified path. - This method is equivalent to the (String) constructor overload. - - - [AlphaFS] Opens an existing encoded text file for reading. - The transaction. - The file to be opened for reading. - The applied to the contents of the file. - Indicates the format of the path parameter(s). - A on the specified path. - This method is equivalent to the (String) constructor overload. - - - [AlphaFS] Opens an existing encoded text file for reading. - The transaction. - The file to be opened for reading. - The applied to the contents of the file. - A on the specified path. - This method is equivalent to the (String) constructor overload. - - - Opens an existing file or creates a new file for writing. - The file to be opened for writing. - An unshared object on the specified path with access. - This method is equivalent to the (String, FileMode, FileAccess, FileShare) constructor overload with file mode set to OpenOrCreate, the access set to Write, and the share mode set to None. - - - [AlphaFS] Opens an existing file or creates a new file for writing. - The file to be opened for writing. - Indicates the format of the path parameter(s). - An unshared object on the specified path with access. - This method is equivalent to the (String, FileMode, FileAccess, FileShare) constructor overload with file mode set to OpenOrCreate, the access set to Write, and the share mode set to None. - - - [AlphaFS] Opens an existing file or creates a new file for writing. - The transaction. - The file to be opened for writing. - An unshared object on the specified path with access. - This method is equivalent to the (String, FileMode, FileAccess, FileShare) constructor overload with file mode set to OpenOrCreate, the access set to Write, and the share mode set to None. - - - [AlphaFS] Opens an existing file or creates a new file for writing. - The transaction. - The file to be opened for writing. - Indicates the format of the path parameter(s). - An unshared object on the specified path with access. - This method is equivalent to the (String, FileMode, FileAccess, FileShare) constructor overload with file mode set to OpenOrCreate, the access set to Write, and the share mode set to None. - - - [AlphaFS] Opens the specified file for reading purposes bypassing security attributes. - The file path to open. - Indicates the format of the path parameter(s). - A on the specified path, having the read-only mode and sharing options. - - - [AlphaFS] Opens the specified file for reading purposes bypassing security attributes. This method is simpler to use then BackupFileStream to read only file's data stream. - The file path to open. - A on the specified path, having the read-only mode and sharing options. - - - [AlphaFS] Opens the specified file for reading purposes bypassing security attributes. - The transaction. - The file path to open. - Indicates the format of the path parameter(s). - A on the specified path, having the read-only mode and sharing options. - - - [AlphaFS] Opens the specified file for reading purposes bypassing security attributes. - The transaction. - The file path to open. - A on the specified path, having the read-only mode and sharing options. - - - Provides access to information of a device, on a local or remote host. - - - Initializes a DeviceInfo class. - - - Initializes a DeviceInfo class. - The DNS or NetBIOS name of the remote server. refers to the local host. - - - Enumerates all available devices on the local host. - One of the devices. - instances of type from the local host. - - - Represents the value of the base container identifier (ID) .The Windows Plug and Play (PnP) manager assigns this value to the device node (devnode). - - - Represents the name of the device setup class that a device instance belongs to. - - - Represents the of the device setup class that a device instance belongs to. - - - Represents the list of compatible identifiers for a device instance. - - - Represents a description of a device instance. - - - The device interface path. - - - Represents the registry entry name of the driver key for a device instance. - - - Represents the name of the enumerator for a device instance. - - - Represents the friendly name of a device instance. - - - Represents the list of hardware identifiers for a device instance. - - - The host name that was passed to the class constructor. - - - Gets the instance Id of the device. - - - Represents the bus-specific physical location of a device instance. - - - Represents the location of a device instance in the device tree. - - - Represents the name of the manufacturer of a device instance. - - - Encapsulates the physical device location information provided by a device's firmware to Windows. - - - Represents the name of the service that is installed for a device instance. - - - Retrieves information about the amount of space that is available on a disk volume, which is the total amount of space, - the total amount of free space, and the total amount of free space available to the user that is associated with the calling thread. - This class cannot be inherited. - - - - Initializes a DiskSpaceInfo instance. - A valid drive path or drive letter. This can be either uppercase or lowercase, 'a' to 'z' or a network share in the format: \\server\share - This is a Lazyloading object; call to populate all properties first before accessing. - - - Initializes a DiskSpaceInfo instance. - A valid drive path or drive letter. This can be either uppercase or lowercase, 'a' to 'z' or a network share in the format: \\server\share - gets both size- and disk cluster information. Get only disk cluster information, Get only size information. - Refreshes the state of the object. - suppress any Exception that might be thrown as a result from a failure, such as unavailable resources. - - - Refreshes the state of the object. - - - Initializes all properties to 0. - - - Returns the drive name. - A string that represents this object. - - - Indicates the amount of available free space on a drive, formatted as percentage. - - - Indicates the amount of available free space on a drive, formatted as a unit size. - - - Returns the Clusters size. - - - Gets the name of a drive. - The name of the drive. - This property is the name assigned to the drive, such as C:\ or E:\ - - - The total number of bytes on a disk that are available to the user who is associated with the calling thread, formatted as a unit size. - - - Indicates the amount of used space on a drive, formatted as percentage. - - - Indicates the amount of used space on a drive, formatted as a unit size. - - - The total number of free bytes on a disk that are available to the user who is associated with the calling thread. - - - The total number of bytes on a disk that are available to the user who is associated with the calling thread. - - - The total number of free bytes on a disk. - - - The number of bytes per sector. - - - The total number of free clusters on the disk that are available to the user who is associated with the calling thread. - - - The number of sectors per cluster. - - - The total number of clusters on the disk that are available to the user who is associated with the calling thread. - If per-user disk quotas are in use, this value may be less than the total number of clusters on the disk. - - - - Provides access to information on a local or remote drive. - - This class models a drive and provides methods and properties to query for drive information. - Use DriveInfo to determine what drives are available, and what type of drives they are. - You can also query to determine the capacity and available free space on the drive. - - - - Provides access to information on the specified drive. - - - - A valid drive path or drive letter. - This can be either uppercase or lowercase, - 'a' to 'z' or a network share in the format: \\server\share - - - - Indicates the amount of available free space on a drive. - The amount of free space available on the drive, in bytes. - This property indicates the amount of free space available on the drive. Note that this number may be different from the number because this property takes into account disk quotas. - - - Gets the name of the file system, such as NTFS or FAT32. - Use DriveFormat to determine what formatting a drive uses. - - - Gets the drive type. - One of the values. - - The DriveType property indicates whether a drive is any of: CDRom, Fixed, Unknown, Network, NoRootDirectory, - Ram, Removable, or Unknown. Values are listed in the enumeration. - - - - Gets a value indicating whether a drive is ready. - if the drive is ready; otherwise, . - - IsReady indicates whether a drive is ready. For example, it indicates whether a CD is in a CD drive or whether - a removable storage device is ready for read/write operations. If you do not test whether a drive is ready, and - it is not ready, querying the drive using DriveInfo will raise an IOException. - - Do not rely on IsReady() to avoid catching exceptions from other members such as TotalSize, TotalFreeSpace, and DriveFormat. - Between the time that your code checks IsReady and then accesses one of the other properties - (even if the access occurs immediately after the check), a drive may have been disconnected or a disk may have been removed. - - - - Gets the name of the drive. - The name of the drive. - This property is the name assigned to the drive, such as C:\ or E:\ - - - Gets the root directory of a drive. - A DirectoryInfo object that contains the root directory of the drive. - - - Gets the total amount of free space available on a drive. - The total free space available on a drive, in bytes. - This property indicates the total amount of free space available on the drive, not just what is available to the current user. - - - Gets the total size of storage space on a drive. - The total size of the drive, in bytes. - This property indicates the total size of the drive in bytes, not just what is available to the current user. - - - Gets or sets the volume label of a drive. - The volume label. - - The label length is determined by the operating system. For example, NTFS allows a volume label - to be up to 32 characters long. Note that is a valid VolumeLabel. - - - - [AlphaFS] Returns the instance. - - - [AlphaFS] The MS-DOS device name. - - - [AlphaFS] Indicates if this drive is a SUBST.EXE / DefineDosDevice drive mapping. - - - [AlphaFS] Indicates if this drive is a UNC path. - Only retrieve this information if we're dealing with a real network share mapping: http://alphafs.codeplex.com/discussions/316583 - - - [AlphaFS] Determines whether the specified volume name is a defined volume on the current computer. - - - [AlphaFS] Contains information about a file-system volume. - A VolumeInfo object that contains file-system volume information of the drive. - - - Retrieves the drive names of all logical drives on a computer. - An array of type that represents the logical drives on a computer. - - - Returns a drive name as a string. - The name of the drive. - This method returns the Name property. - - - [AlphaFS] Enumerates the drive names of all logical drives on a computer. - Retrieve logical drives as known by the Environment. - Retrieve only when accessible (IsReady) logical drives. - - An IEnumerable of type that represents - the logical drives on a computer. - - - - [AlphaFS] Gets the first available drive letter on the local system. - A drive letter as . When no drive letters are available, an exception is thrown. - The letters "A" and "B" are reserved for floppy drives and will never be returned by this function. - - - Gets an available drive letter on the local system. - When get the last available drive letter. When gets the first available drive letter. - A drive letter as . When no drive letters are available, an exception is thrown. - The letters "A" and "B" are reserved for floppy drives and will never be returned by this function. - - - Retrieves information about the file system and volume associated with the specified root file or directorystream. - - - Used by CopyFileXxx and MoveFileXxx. The function should return one of the following values. - - - PROGRESS_CONTINUE - Continue the copy operation. - - - - PROGRESS_CANCEL - Cancel the copy operation and delete the destination file. - - - - PROGRESS_STOP - Stop the copy operation. It can be restarted at a later time. - - - - PROGRESS_QUIET - Continue the copy operation, but stop invoking to report progress. - - - - [AlphaFS] Directory enumeration options, flags that specify how a directory is to be enumerated. - - - None (do not use). - - - Enumerate files only. - - - Enumerate directories only. - - - Enumerate files and directories. - - - Return full path as long full path (Unicode format), only valid when return type is . - - - Skip reparse points during directory enumeration. - - - Suppress any Exception that might be thrown as a result from a failure, such as ACLs protected directories or non-accessible reparse points. - - - Specifies whether to search the current directory, or the current directory and all subdirectories. - - - Enumerates the directory without querying the short file name, improving overall enumeration speed. - This option is enabled by default if supported. This value is not supported until Windows Server 2008 R2 and Windows 7. - - - Enumerates the directory using a larger buffer for directory queries, which can increase performance of the find operation. - This option is enabled by default if supported. This value is not supported until Windows Server 2008 R2 and Windows 7. - - - System-Defined Device Interface Classes - http://msdn.microsoft.com/en-us/library/windows/hardware/ff541389%28v=vs.85%29.aspx - - - The BUS1394_CLASS_GUID device interface class is defined for 1394 bus devices. - - - The GUID_61883_CLASS device interface class is defined for devices in the 61883 device setup class. - - - The GUID_DEVICE_APPLICATIONLAUNCH_BUTTON device interface class is defined for Advanced Configuration and Power Interface (ACPI) application start buttons. - - - The GUID_DEVICE_BATTERY device interface class is defined for battery devices. - - - The GUID_DEVICE_LID device interface class is defined for Advanced Configuration and Power Interface (ACPI) lid devices. - - - The GUID_DEVICE_MEMORY device interface class is defined for Advanced Configuration and Power Interface (ACPI) memory devices. - - - The GUID_DEVICE_MESSAGE_INDICATOR device interface class is defined for Advanced Configuration and Power Interface (ACPI) message indicator devices. - - - The GUID_DEVICE_PROCESSOR device interface class is defined for Advanced Configuration and Power Interface (ACPI) processor devices. - - - The GUID_DEVICE_SYS_BUTTON device interface classis defined for Advanced Configuration and Power Interface (ACPI) system power button devices. - - - The GUID_DEVICE_THERMAL_ZONE device interface class is defined for Advanced Configuration and Power Interface (ACPI) thermal zone devices. - - - The GUID_BTHPORT_DEVICE_INTERFACE device interface class is defined for Bluetooth radios. - - - The GUID_DEVINTERFACE_BRIGHTNESS device interface class is defined for display adapter drivers that operate in the context of the Windows Vista Display Driver Model and support brightness control of monitor child devices. - - - The GUID_DEVINTERFACE_DISPLAY_ADAPTER device interface class is defined for display views that are supported by display adapters. - - - The GUID_DEVINTERFACE_I2C device interface class is defined for display adapter drivers that operate in the context of the Windows Vista Display Driver Model and perform I2C transactions with monitor child devices. - - - The GUID_DEVINTERFACE_IMAGE device interface class is defined for WIA devices and Still Image (STI) devices, including digital cameras and scanners. - - - The GUID_DEVINTERFACE_MONITOR device interface class is defined for monitor devices. - - - The GUID_DEVINTERFACE_OPM device interface class is defined for display adapter drivers that operate in the context of the Windows Vista Display Driver Model and support output protection management (OPM) for monitor child devices. - - - The GUID_DEVINTERFACE_VIDEO_OUTPUT_ARRIVAL device interface class is defined for child devices of display devices. - - - The GUID_DISPLAY_DEVICE_ARRIVAL device interface class is defined for display adapters. - - - The GUID_DEVINTERFACE_HID device interface class is defined for HID collections. - - - The GUID_DEVINTERFACE_KEYBOARD device interface class is defined for keyboard devices. - - - The GUID_DEVINTERFACE_MOUSE device interface class is defined for mouse devices. - - - The GUID_DEVINTERFACE_MODEM device interface class is defined for modem devices. - - - The GUID_DEVINTERFACE_NET device interface class is defined for network devices. - - - The GUID_DEVINTERFACE_COMPORT device interface class is defined for COM ports. - - - The GUID_DEVINTERFACE_PARALLEL device interface class is defined for parallel ports that support an IEEE 1284-compatible hardware interface. - - - The GUID_DEVINTERFACE_PARCLASS device interface class is defined for devices that are attached to a parallel port. - - - The GUID_DEVINTERFACE_SERENUM_BUS_ENUMERATOR device interface class is defined for Plug and Play (PnP) serial ports. - - - The GUID_DEVINTERFACE_CDCHANGER device interface class is defined for CD-ROM changer devices. - - - The GUID_DEVINTERFACE_CDROM device interface class is defined for CD-ROM storage devices. - - - The GUID_DEVINTERFACE_DISK device interface class is defined for hard disk storage devices. - - - The GUID_DEVINTERFACE_FLOPPY device interface class is defined for floppy disk storage devices. - - - The GUID_DEVINTERFACE_MEDIUMCHANGER device interface class is defined for medium changer devices. - - - The GUID_DEVINTERFACE_PARTITION device interface class is defined for partition devices. - - - The GUID_DEVINTERFACE_STORAGEPORT device interface class is defined for storage port devices. - - - The GUID_DEVINTERFACE_TAPE device interface class is defined for tape storage devices. - - - The GUID_DEVINTERFACE_VOLUME device interface class is defined for volume devices. - - - The GUID_DEVINTERFACE_WRITEONCEDISK device interface class is defined for write-once disk devices. - - - The GUID_DEVINTERFACE_USB_DEVICE device interface class is defined for USB devices that are attached to a USB hub. - - - The GUID_DEVINTERFACE_USB_HOST_CONTROLLER device interface class is defined for USB host controller devices. - - - The GUID_DEVINTERFACE_USB_HUB device interface class is defined for USB hub devices. - - - Defines the controllable aspects of the Volume.DefineDosDevice() method. - - - DDD_EXACT_MATCH_ON_REMOVE - Default. - - - - DDD_RAW_TARGET_PATH - Uses the targetPath string as is. Otherwise, it is converted from an MS-DOS path to a path. - - - - DDD_REMOVE_DEFINITION - Removes the specified definition for the specified device. - To determine which definition to remove, the function walks the list of mappings for the device, looking for a match of targetPath against a prefix of each mapping associated with this device. - The first mapping that matches is the one removed, and then the function returns. - If targetPath is null or a pointer to a null string, the function will remove the first mapping associated with the device and pop the most recent one pushed.If there is nothing left to pop, the device name will be removed. - If this value is not specified, the string pointed to by the targetPath parameter will become the new mapping for this device. - - - - DDD_EXACT_MATCH_ON_REMOVE - If this value is specified along with , the function will use an exact match to determine which mapping to remove. - Use this value to ensure that you do not delete something that you did not define. - - - - DDD_NO_BROADCAST_SYSTEM - Do not broadcast the WM_SETTINGCHANGE message. - By default, this message is broadcast to notify the shell and applications of the change. - - - - Determines the format to convert a path to using - - - (FileNameNormalized / VolumeNameDos) Return the normalized drive name. This is the default. - - - Return the path with a volume GUID path instead of the drive name. - - - Return the path with the volume device path. - - - Return the path with no drive information. - - - Return the opened file name (not normalized). - - - Enumeration specifying the different reparse point tags. - - Reparse tags, with the exception of IO_REPARSE_TAG_SYMLINK, are processed on the server and are not processed by a client after transmission over the wire. - Clients should treat associated reparse data as opaque data. - - - - The entry is not a reparse point. - - - IO_REPARSE_APPXSTREAM - - - IO_REPARSE_TAG_CSV - - - IO_REPARSE_TAG_DRIVER_EXTENDER - Used by Home server drive extender. - - - - IO_REPARSE_TAG_DEDUP - - - IO_REPARSE_TAG_DFS - Used by the DFS filter. - - - - IO_REPARSE_TAG_DFSR - Used by the DFS filter. - - - - IO_REPARSE_TAG_FILTER_MANAGER - Used by filter manager test harness. - - - - IO_REPARSE_TAG_HSM - (Obsolete) Used by legacy Hierarchical Storage Manager Product. - - - - IO_REPARSE_TAG_HSM2 - (Obsolete) Used by legacy Hierarchical Storage Manager Product. - - - - IO_REPARSE_TAG_NFS - NFS symlinks, Windows 8 / SMB3 and later. - - - - IO_REPARSE_TAG_MOUNT_POINT - Used for mount point support. - - - - IO_REPARSE_TAG_SIS - Used by single-instance storage (SIS) filter driver. - - - - IO_REPARSE_TAG_SYMLINK - Used for symbolic link support. - - - - IO_REPARSE_TAG_WIM - - - WIN32_STREAM_ID Attributes of data to facilitate cross-operating system transfer. - - - STREAM_NORMAL_ATTRIBUTE - This backup stream has no special attributes. - - - - STREAM_MODIFIED_WHEN_READ - Attribute set if the stream contains data that is modified when read. - Allows the backup application to know that verification of data will fail. - - - - STREAM_CONTAINS_SECURITY - The backup stream contains security information. - This attribute applies only to backup stream of type . - - - - Reserved. - - - STREAM_SPARSE_ATTRIBUTE - The backup stream is part of a sparse file stream. - This attribute applies only to backup stream of type , , and . - - - - The type of the data contained in the backup stream. - - - This indicates an error. - - - BACKUP_DATA - Standard data. This corresponds to the NTFS $DATA stream type on the default (unnamed) data stream. - - - - BACKUP_EA_DATA - Extended attribute data. This corresponds to the NTFS $EA stream type. - - - - BACKUP_SECURITY_DATA - Security descriptor data. - - - - BACKUP_ALTERNATE_DATA - Alternative data streams. This corresponds to the NTFS $DATA stream type on a named data stream. - - - - BACKUP_LINK - Hard link information. This corresponds to the NTFS $FILE_NAME stream type. - - - - BACKUP_PROPERTY_DATA - Property data. - - - - BACKUP_OBJECT_ID - Objects identifiers. This corresponds to the NTFS $OBJECT_ID stream type. - - - - BACKUP_REPARSE_DATA - Reparse points. This corresponds to the NTFS $REPARSE_POINT stream type. - - - - BACKUP_SPARSE_BLOCK - Sparse file. This corresponds to the NTFS $DATA stream type for a sparse file. - - - - BACKUP_TXFS_DATA - Transactional NTFS (TxF) data stream. - - Windows Server 2003 and Windows XP: This value is not supported. - - - Flags that specify how a file or directory is to be copied. - - - No CopyOptions used, this allows overwriting the file. - - - COPY_FILE_FAIL_IF_EXISTS - The copy operation fails immediately if the target file already exists. - - - - COPY_FILE_RESTARTABLE - - Progress of the copy is tracked in the target file in case the copy fails. The failed copy can be restarted at a later time by specifying the same values - forexisting file name and new file name as those used in the call that failed. This can significantly slow down the copy operation as the new file may be - flushed multiple times during the copy operation. - - - - - COPY_FILE_OPEN_SOURCE_FOR_WRITE - The file is copied and the original file is opened for write access. - - - - COPY_FILE_ALLOW_DECRYPTED_DESTINATION - An attempt to copy an encrypted file will succeed even if the destination copy cannot be encrypted. - - - - COPY_FILE_COPY_SYMLINK - If the source file is a symbolic link, the destination file is also a symbolic link pointing to the same file that the source symbolic link is pointing to. - - - - COPY_FILE_NO_BUFFERING - The copy operation is performed using unbuffered I/O, bypassing system I/O cache resources. Recommended for very large file transfers. - - - - Used by CopyFileXxx and MoveFileXxx. The reason that was called. - - - CALLBACK_CHUNK_FINISHED - Another part of the data file was copied. - - - - CALLBACK_STREAM_SWITCH - Another stream was created and is about to be copied. This is the callback reason given when the callback routine is first invoked. - - - - Provides static methods to retrieve device resource information from a local or remote host. - - - Enumerates all available devices on the local host. - instances of type from the local host. - One of the devices. - - - Enumerates all available devices of type on the local or remote host. - instances of type for the specified . - The name of the local or remote host on which the device resides. refers to the local host. - One of the devices. - - - Enumerates all available devices on the local or remote host. - - - Get information about the target of a mount point or symbolic link on an NTFS file system. - - - Sets the NTFS compression state of a file or directory on a volume whose file system supports per-file and per-directory compression. - Specifies that is a file or directory. - The transaction. - A path that describes a folder or file to compress or decompress. - = compress, = decompress - Indicates the format of the path parameter(s). - - - Builds a DeviceInfo Data structure. - An initialized NativeMethods.SP_DEVINFO_DATA instance. - - - Builds a Device Interface Data structure. - An initialized NativeMethods.SP_DEVICE_INTERFACE_DATA instance. - - - Builds a Device Interface Detail Data structure. - An initialized NativeMethods.SP_DEVICE_INTERFACE_DETAIL_DATA instance. - - - Repeatedly invokes InvokeIoControl with the specified input until enough memory has been allocated. - - - The provides access to data associated with a specific file or directory, including security information and alternative data streams, for backup and restore operations. - This class uses the BackupRead, - BackupSeek and - BackupWrite functions from the Win32 API to provide access to the file or directory. - - - - Initializes a new instance of the class with the specified path and creation mode. - A relative or absolute path for the file that the current object will encapsulate. - A constant that determines how to open or create the file. - The file will be opened for exclusive access for both reading and writing. - - - Initializes a new instance of the class with the specified path, creation mode and access rights. - A relative or absolute path for the file that the current object will encapsulate. - A constant that determines how to open or create the file. - A constant that determines the access rights to use when creating access and audit rules for the file. - The file will be opened for exclusive access. - - - Initializes a new instance of the class with the specified path, creation mode, access rights and sharing permission. - A relative or absolute path for the file that the current object will encapsulate. - A constant that determines how to open or create the file. - A constant that determines the access rights to use when creating access and audit rules for the file. - A constant that determines how the file will be shared by processes. - - - Initializes a new instance of the class with the specified path, creation mode, access rights and sharing permission, and additional file attributes. - A relative or absolute path for the file that the current object will encapsulate. - A constant that determines how to open or create the file. - A constant that determines the access rights to use when creating access and audit rules for the file. - A constant that determines how the file will be shared by processes. - A constant that specifies additional file attributes. - - - Initializes a new instance of the class with the specified path, creation mode, access rights and sharing permission, additional file attributes, access control and audit security. - A relative or absolute path for the file that the current object will encapsulate. - A constant that determines how to open or create the file. - A constant that determines the access rights to use when creating access and audit rules for the file. - A constant that determines how the file will be shared by processes. - A constant that specifies additional file attributes. - A constant that determines the access control and audit security for the file. This parameter This parameter may be . - - - Initializes a new instance of the class with the specified path and creation mode. - The transaction. - A relative or absolute path for the file that the current object will encapsulate. - A constant that determines how to open or create the file. - The file will be opened for exclusive access for both reading and writing. - - - Initializes a new instance of the class with the specified path, creation mode and access rights. - The transaction. - A relative or absolute path for the file that the current object will encapsulate. - A constant that determines how to open or create the file. - A constant that determines the access rights to use when creating access and audit rules for the file. - The file will be opened for exclusive access. - - - Initializes a new instance of the class with the specified path, creation mode, access rights and sharing permission. - The transaction. - A relative or absolute path for the file that the current object will encapsulate. - A constant that determines how to open or create the file. - A constant that determines the access rights to use when creating access and audit rules for the file. - A constant that determines how the file will be shared by processes. - - - Initializes a new instance of the class with the specified path, creation mode, access rights and sharing permission, and additional file attributes. - The transaction. - A relative or absolute path for the file that the current object will encapsulate. - A constant that determines how to open or create the file. - A constant that determines the access rights to use when creating access and audit rules for the file. - A constant that determines how the file will be shared by processes. - A constant that specifies additional file attributes. - - - Initializes a new instance of the class with the specified path, creation mode, access rights and sharing permission, additional file attributes, access control and audit security. - The transaction. - A relative or absolute path for the file that the current object will encapsulate. - A constant that determines how to open or create the file. - A constant that determines the access rights to use when creating access and audit rules for the file. - A constant that determines how the file will be shared by processes. - A constant that specifies additional file attributes. - A constant that determines the access control and audit security for the file. This parameter This parameter may be . - - - Initializes a new instance of the class for the specified file handle, with the specified read/write permission. - A file handle for the file that this object will encapsulate. - A constant that gets the and properties of the object. - - - When overridden in a derived class, gets the length in bytes of the stream. - This method always throws an exception. - - - - When overridden in a derived class, gets or sets the position within the current stream. - This method always throws an exception. - - - - When overridden in a derived class, sets the position within the current stream. - A byte offset relative to the parameter. - A value of type indicating the reference point used to obtain the new position. - The new position within the current stream. - This stream does not support seeking using this method, and calling this method will always throw . See for an alternative way of seeking forward. - - - - When overridden in a derived class, sets the length of the current stream. - The desired length of the current stream in bytes. - This method is not supported by the class, and calling it will always generate a . - - - - Gets a value indicating whether the current stream supports reading. - if the stream supports reading, otherwise. - - - Gets a value indicating whether the current stream supports seeking. - This method always returns . - - - Gets a value indicating whether the current stream supports writing. - if the stream supports writing, otherwise. - - - Gets a object that represents the operating system file handle for the file that the current object encapsulates. - A object that represents the operating system file handle for the file that - the current object encapsulates. - - - Reads a sequence of bytes from the current stream and advances the position within the stream by the number of bytes read. - This method will not backup the access-control list (ACL) data for the file or directory. - - An array of bytes. When this method returns, the buffer contains the specified byte array with the values between - and ( + - 1) replaced by the bytes read from the - current source. - - - The zero-based byte offset in at which to begin storing the data read from the current stream. - - The maximum number of bytes to be read from the current stream. - - The total number of bytes read into the buffer. This can be less than the number of bytes requested if that many bytes are not - currently available, or zero (0) if the end of the stream has been reached. - - - - - - - - - - When overridden in a derived class, reads a sequence of bytes from the current stream and advances the position within the stream by the number of bytes read. - An array of bytes. When this method returns, the buffer contains the specified byte array with the values - between and ( + - 1) replaced by the bytes read from the current source. - The zero-based byte offset in at which to begin storing the data read from the current stream. - The maximum number of bytes to be read from the current stream. - Indicates whether the function will backup the access-control list (ACL) data for the file or directory. - - The total number of bytes read into the buffer. This can be less than the number of bytes requested if that many bytes are not - currently available, or zero (0) if the end of the stream has been reached. - - - - - - - - - Writes a sequence of bytes to the current stream and advances the current position within this stream by the number of bytes written. - - Writes a sequence of bytes to the current stream and advances the current position within this stream by the number of bytes written. - - An array of bytes. This method copies bytes from to the current stream. - The zero-based byte offset in at which to begin copying bytes to the current stream. - The number of bytes to be written to the current stream. - - - - - - This method will not process the access-control list (ACL) data for the file or directory. - - - When overridden in a derived class, writes a sequence of bytes to the current stream and advances the current position within this stream by the number of bytes written. - An array of bytes. This method copies bytes from to the current stream. - The zero-based byte offset in at which to begin copying bytes to the current stream. - The number of bytes to be written to the current stream. - Specifies whether the function will restore the access-control list (ACL) data for the file or directory. - If this is you need to specify and access when - opening the file or directory handle. If the handle does not have those access rights, the operating system denies - access to the ACL data, and ACL data restoration will not occur. - - - - - - - - Clears all buffers for this stream and causes any buffered data to be written to the underlying device. - - - Skips ahead the specified number of bytes from the current stream. - This method represents the Win32 API implementation of BackupSeek. - - Applications use the method to skip portions of a data stream that cause errors. This function does not - seek across stream headers. For example, this function cannot be used to skip the stream name. If an application - attempts to seek past the end of a substream, the function fails, the return value indicates the actual number of bytes - the function seeks, and the file position is placed at the start of the next stream header. - - - The number of bytes to skip. - The number of bytes actually skipped. - - - Gets a object that encapsulates the access control list (ACL) entries for the file described by the current object. - - - A object that encapsulates the access control list (ACL) entries for the file described by the current - object. - - - - Applies access control list (ACL) entries described by a object to the file described by the current object. - A object that describes an ACL entry to apply to the current file. - - - Prevents other processes from changing the while permitting read access. - The beginning of the range to lock. The value of this parameter must be equal to or greater than zero (0). - The range to be locked. - - - - - Allows access by other processes to all or part of a file that was previously locked. - The beginning of the range to unlock. - The range to be unlocked. - - - - - - Reads a stream header from the current . - The stream header read from the current , or if the end-of-file - was reached before the required number of bytes of a header could be read. - - The stream must be positioned at where an actual header starts for the returned object to represent valid - information. - - - Releases the unmanaged resources used by the and optionally releases the managed resources. - to release both managed and unmanaged resources; to release only unmanaged resources. - - - Releases unmanaged resources and performs other cleanup operations before the is reclaimed by garbage collection. - - - Represents the encryption status of the specified file. - - - The file can be encrypted. - - - The file is encrypted. - - - The file is a system file. System files cannot be encrypted. - - - The file is a root directory. Root directories cannot be encrypted. - - - The file is a system directory. System directories cannot be encrypted. - - - The encryption status is unknown. The file may be encrypted. - - - The file system does not support file encryption. - - - Reserved for future use. - - - The file is a read-only file. - - - Contains information that the GetFileInformationByHandle function retrieves. - - - Gets the file attributes. - The file attributes. - - - Gets the time this entry was created. - The time this entry was created. - - - Gets the time, in coordinated universal time (UTC), this entry was created. - The time, in coordinated universal time (UTC), this entry was created. - - - Gets the time this entry was last accessed. - For a file, the structure specifies the last time that a file is read from or written to. - For a directory, the structure specifies when the directory is created. - For both files and directories, the specified date is correct, but the time of day is always set to midnight. - If the underlying file system does not support the last access time, this member is zero (0). - - The time this entry was last accessed. - - - Gets the time, in coordinated universal time (UTC), this entry was last accessed. - For a file, the structure specifies the last time that a file is read from or written to. - For a directory, the structure specifies when the directory is created. - For both files and directories, the specified date is correct, but the time of day is always set to midnight. - If the underlying file system does not support the last access time, this member is zero (0). - - The time, in coordinated universal time (UTC), this entry was last accessed. - - - Gets the time this entry was last modified. - For a file, the structure specifies the last time that a file is written to. - For a directory, the structure specifies when the directory is created. - If the underlying file system does not support the last access time, this member is zero (0). - - The time this entry was last modified. - - - Gets the time, in coordinated universal time (UTC), this entry was last modified. - For a file, the structure specifies the last time that a file is written to. - For a directory, the structure specifies when the directory is created. - If the underlying file system does not support the last access time, this member is zero (0). - - The time, in coordinated universal time (UTC), this entry was last modified. - - - Gets the serial number of the volume that contains a file. - The serial number of the volume that contains a file. - - - Gets the size of the file. - The size of the file. - - - Gets the number of links to this file. For the FAT file system this member is always 1. For the NTFS file system, it can be more than 1. - The number of links to this file. - - - - Gets the unique identifier associated with the file. The identifier and the volume serial number uniquely identify a - file on a single computer. To determine whether two open handles represent the same file, combine the identifier - and the volume serial number for each file and compare them. - - The unique identifier of the file. - - - Contains information about files in the specified directory. Used for directory handles. - - - The number of bytes that are allocated for the file. This value is usually a multiple of the sector or cluster size of the underlying physical device. - - - Gets the time this entry was changed. - The time this entry was changed. - - - Gets the time, in coordinated universal time (UTC), this entry was changed. - The time, in coordinated universal time (UTC), this entry was changed. - - - Gets the time this entry was created. - The time this entry was created. - - - Gets the time, in coordinated universal time (UTC), this entry was created. - The time, in coordinated universal time (UTC), this entry was created. - - - The size of the extended attributes for the file. - - - The absolute new end-of-file position as a byte offset from the start of the file to the end of the file. - Because this value is zero-based, it actually refers to the first free byte in the file. In other words, EndOfFile is the offset to - the byte that immediately follows the last valid byte in the file. - - - - The file attributes. - - - The file ID. - - - The byte offset of the file within the parent directory. This member is undefined for file systems, such as NTFS, - in which the position of a file within the parent directory is not fixed and can be changed at any time to maintain sort order. - - - - The name of the file. - - - Gets the time this entry was last accessed. - The time this entry was last accessed. - - - Gets the time, in coordinated universal time (UTC), this entry was last accessed. - The time, in coordinated universal time (UTC), this entry was last accessed. - - - Gets the time this entry was last modified. - The time this entry was last modified. - - - Gets the time, in coordinated universal time (UTC), this entry was last modified. - The time, in coordinated universal time (UTC), this entry was last modified. - - - The short 8.3 file naming convention (for example, FILENAME.TXT) name of the file. - - - Provides properties and instance methods for the creation, copying, deletion, moving, and opening of files, and aids in the creation of objects. This class cannot be inherited. - - - [AlphaFS] Calculates the hash/checksum. - One of the values. - - - Refreshes the state of the EntryInfo instance. - - - [AlphaFS] Returns an enumerable collection of instances for the file. - An enumerable collection of instances for the file. - - - [AlphaFS] Decompresses an NTFS compressed file. - - - [AlphaFS] Compresses a file using NTFS compression. - - - Returns the path as a string. - The path. - - - Applies access control list (ACL) entries described by a FileSecurity object to the file described by the current FileInfo object. - - The SetAccessControl method applies access control list (ACL) entries to the current file that represents the noninherited ACL - list. Use the SetAccessControl method whenever you need to add or remove ACL entries from a file. - - A object that describes an access control list (ACL) entry to apply to the current file. - - - Applies access control list (ACL) entries described by a FileSecurity object to the file described by the current FileInfo object. - - The SetAccessControl method applies access control list (ACL) entries to the current file that represents the noninherited ACL - list. Use the SetAccessControl method whenever you need to add or remove ACL entries from a file. - - A object that describes an access control list (ACL) entry to apply to the current file. - One or more of the values that specifies the type of access control list (ACL) information to set. - - - Replaces the contents of a specified file with the file described by the current object, deleting the original file, and creating a backup of the replaced file. - A object that encapsulates information about the file described by the parameter. - - The Replace method replaces the contents of a specified file with the contents of the file described by the current - object. It also creates a backup of the file that was replaced. Finally, it returns a new - object that describes the overwritten file. - - Pass null to the parameter if you do not want to create a backup of the file being replaced. - The name of a file to replace with the current file. - The name of a file with which to create a backup of the file described by the parameter. - - - Replaces the contents of a specified file with the file described by the current object, deleting the original file, and creating a backup of the replaced file. Also specifies whether to ignore merge errors. - A object that encapsulates information about the file described by the parameter. - - The Replace method replaces the contents of a specified file with the contents of the file described by the current - object. It also creates a backup of the file that was replaced. Finally, it returns a new - object that describes the overwritten file. - - Pass null to the parameter if you do not want to create a backup of the file being replaced. - The name of a file to replace with the current file. - The name of a file with which to create a backup of the file described by the parameter. - to ignore merge errors (such as attributes and ACLs) from the replaced file to the replacement file; otherwise, . - - - [AlphaFS] Replaces the contents of a specified file with the file described by the current object, deleting the original file, and creating a backup of the replaced file. Also specifies whether to ignore merge errors. - A object that encapsulates information about the file described by the parameter. - - The Replace method replaces the contents of a specified file with the contents of the file described by the current - object. It also creates a backup of the file that was replaced. Finally, it returns a new - object that describes the overwritten file. - - Pass null to the parameter if you do not want to create a backup of the file being replaced. - The name of a file to replace with the current file. - The name of a file with which to create a backup of the file described by the parameter. - Indicates the format of the path parameter(s). - - - [AlphaFS] Replaces the contents of a specified file with the file described by the current object, deleting the original file, and creating a backup of the replaced file. Also specifies whether to ignore merge errors. - A object that encapsulates information about the file described by the parameter. - - The Replace method replaces the contents of a specified file with the contents of the file described by the current - object. It also creates a backup of the file that was replaced. Finally, it returns a new - object that describes the overwritten file. - - Pass null to the parameter if you do not want to create a backup of the file being replaced. - The name of a file to replace with the current file. - The name of a file with which to create a backup of the file described by the parameter. - to ignore merge errors (such as attributes and ACLs) from the replaced file to the replacement file; otherwise, . - Indicates the format of the path parameter(s). - - - Refreshes the state of the object. - - - Creates a write-only . - A write-only unshared object for a new or existing file. - - - Creates a with NativeMethods.DefaultFileEncoding encoding that reads from an existing text file. - A new with NativeMethods.DefaultFileEncoding encoding. - - - [AlphaFS] Creates a with that reads from an existing text file. - A new with the specified . - The applied to the contents of the file. - - - Creates a read-only . - A new read-only object. - This method returns a read-only object with the mode set to Read. - - - Opens a file in the specified mode. - A file opened in the specified mode, with read/write access and unshared. - A constant specifying the mode (for example, Open or Append) in which to open the file. - - - Opens a file in the specified mode with read, write, or read/write access. - A object opened in the specified mode and access, and unshared. - A constant specifying the mode (for example, Open or Append) in which to open the file. - A constant specifying whether to open the file with Read, Write, or ReadWrite file access. - - - Opens a file in the specified mode with read, write, or read/write access and the specified sharing option. - A object opened with the specified mode, access, and sharing options. - A constant specifying the mode (for example, Open or Append) in which to open the file. - A constant specifying whether to open the file with Read, Write, or ReadWrite file access. - A constant specifying the type of access other objects have to this file. - - - [AlphaFS] Opens a file in the specified mode with read, write, or read/write access. - A object opened in the specified mode and access, and unshared. - A constant specifying the mode (for example, Open or Append) in which to open the file. - A value that specifies whether a file is created if one does not exist, and determines whether the contents of existing files are retained or overwritten along with additional options. - - - [AlphaFS] Opens a file in the specified mode with read, write, or read/write access and the specified sharing option. - A object opened with the specified mode, access, and sharing options. - A constant specifying the mode (for example, Open or Append) in which to open the file. - A value that specifies whether a file is created if one does not exist, and determines whether the contents of existing files are retained or overwritten along with additional options. - A constant specifying the type of access other objects have to this file. - - - Gets a object that encapsulates the access control list (ACL) entries for the file described by the current object. - A FileSecurity object that encapsulates the access control rules for the current file. - - - Gets a object that encapsulates the specified type of access control list (ACL) entries for the file described by the current FileInfo object. - object that encapsulates the specified type of access control list (ACL) entries for the file described by the current FileInfo object. - One of the values that specifies which group of access control entries to retrieve. - - - Encrypts a file so that only the account used to encrypt the file can decrypt it. - - - Permanently deletes a file. - If the file does not exist, this method does nothing. - - - - - [AlphaFS] Permanently deletes a file. - If the file does not exist, this method does nothing. - overrides the read only of the file. - - - Decrypts a file that was encrypted by the current account using the Encrypt method. - - - Creates a instance that writes a new text file. - A new - - - Creates a file. - A new file. - - - Copies an existing file to a new file, disallowing the overwriting of an existing file. - A new instance with a fully qualified path. - - Use this method to prevent overwriting of an existing file by default. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - A new instance with a fully qualified path. - - - - - - - - The name of the new file to copy to. - - - Copies an existing file to a new file, allowing the overwriting of an existing file. - - Use this method to allow or prevent overwriting of an existing file. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - A new instance with a fully qualified path. - - - - - - - - The name of the new file to copy to. - to allow an existing file to be overwritten; otherwise, . - - - [AlphaFS] Copies an existing file to a new file, disallowing the overwriting of an existing file. - - Use this method to prevent overwriting of an existing file by default. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - A new instance with a fully qualified path. - - - - - - - - The name of the new file to copy to. - Indicates the format of the path parameter(s). - - - [AlphaFS] Copies an existing file to a new file, allowing the overwriting of an existing file. - - Use this method to allow or prevent overwriting of an existing file. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - A new instance with a fully qualified path. - - - - - - - - The name of the new file to copy to. - to allow an existing file to be overwritten; otherwise, . - Indicates the format of the path parameter(s). - - - [AlphaFS] Copies an existing file to a new file, allowing the overwriting of an existing file, can be specified. - - Option is recommended for very large file transfers. - Use this method to allow or prevent overwriting of an existing file. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - A new instance with a fully qualified path. - - - - - - - - The name of the new file to copy to. - that specify how the file is to be copied. - - - [AlphaFS] Copies an existing file to a new file, allowing the overwriting of an existing file, can be specified. - - Option is recommended for very large file transfers. - Use this method to allow or prevent overwriting of an existing file. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - A new instance with a fully qualified path. - - - - - - - - The name of the new file to copy to. - that specify how the file is to be copied. - Indicates the format of the path parameter(s). - - - [AlphaFS] Copies an existing file to a new file, allowing the overwriting of an existing file, can be specified. - - Option is recommended for very large file transfers. - Use this method to allow or prevent overwriting of an existing file. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - A new instance with a fully qualified path. - - - - - - - - The name of the new file to copy to. - that specify how the file is to be copied. - if original Timestamps must be preserved, otherwise. - - - [AlphaFS] Copies an existing file to a new file, allowing the overwriting of an existing file, can be specified. - - Option is recommended for very large file transfers. - Use this method to allow or prevent overwriting of an existing file. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - A new instance with a fully qualified path. - - - - - - - - The name of the new file to copy to. - that specify how the file is to be copied. - if original Timestamps must be preserved, otherwise. - Indicates the format of the path parameter(s). - - - [AlphaFS] Copies an existing file to a new file, allowing the overwriting of an existing file, can be specified. - and the possibility of notifying the application of its progress through a callback function. - - Option is recommended for very large file transfers. - Use this method to allow or prevent overwriting of an existing file. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - A class with details of the Copy action. - - - - - - - - The name of the new file to copy to. - that specify how the file is to be copied. - A callback function that is called each time another portion of the file has been copied. This parameter can be . - The argument to be passed to the callback function. This parameter can be . - - - [AlphaFS] Copies an existing file to a new file, allowing the overwriting of an existing file, can be specified. - - Option is recommended for very large file transfers. - Use this method to allow or prevent overwriting of an existing file. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - A class with details of the Copy action. - - - - - - - - The name of the new file to copy to. - that specify how the file is to be copied. - A callback function that is called each time another portion of the file has been copied. This parameter can be . - The argument to be passed to the callback function. This parameter can be . - Indicates the format of the path parameter(s). - - - [AlphaFS] Copies an existing file to a new file, allowing the overwriting of an existing file, can be specified. - and the possibility of notifying the application of its progress through a callback function. - - Option is recommended for very large file transfers. - Use this method to allow or prevent overwriting of an existing file. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - A class with details of the Copy action. - - - - - - - - The name of the new file to copy to. - that specify how the file is to be copied. - if original Timestamps must be preserved, otherwise. - A callback function that is called each time another portion of the file has been copied. This parameter can be . - The argument to be passed to the callback function. This parameter can be . - - - [AlphaFS] Copies an existing file to a new file, allowing the overwriting of an existing file, can be specified. - and the possibility of notifying the application of its progress through a callback function. - - Option is recommended for very large file transfers. - Use this method to allow or prevent overwriting of an existing file. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - A class with details of the Copy action. - - - - - - - - The name of the new file to copy to. - that specify how the file is to be copied. - if original Timestamps must be preserved, otherwise. - A callback function that is called each time another portion of the file has been copied. This parameter can be . - The argument to be passed to the callback function. This parameter can be . - Indicates the format of the path parameter(s). - - - Moves a specified file to a new location, providing the option to specify a new file name. - - Use this method to prevent overwriting of an existing file by default. - This method works across disk volumes. - For example, the file c:\MyFile.txt can be moved to d:\public and renamed NewFile.txt. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - A class with details of the Move action. - - - - - - - - The path to move the file to, which can specify a different file name. - - - [AlphaFS] Moves a specified file to a new location, providing the option to specify a new file name. - Returns a new instance with a fully qualified path when successfully moved, - - Use this method to prevent overwriting of an existing file by default. - This method works across disk volumes. - For example, the file c:\MyFile.txt can be moved to d:\public and renamed NewFile.txt. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable - behavior. - - - - - - - - - - The path to move the file to, which can specify a different file name. - Indicates the format of the path parameter(s). - - - [AlphaFS] Moves a specified file to a new location, providing the option to specify a new file name, can be specified. - Returns a new instance with a fully qualified path when successfully moved, - - Use this method to allow or prevent overwriting of an existing file. - This method works across disk volumes. - For example, the file c:\MyFile.txt can be moved to d:\public and renamed NewFile.txt. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable - behavior. - - - - - - - - - - The path to move the file to, which can specify a different file name. - that specify how the directory is to be moved. This parameter can be . - - - [AlphaFS] Moves a specified file to a new location, providing the option to specify a new file name, can be specified. - Returns a new instance with a fully qualified path when successfully moved, - - Use this method to allow or prevent overwriting of an existing file. - This method works across disk volumes. - For example, the file c:\MyFile.txt can be moved to d:\public and renamed NewFile.txt. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable - behavior. - - - - - - - - - - The path to move the file to, which can specify a different file name. - that specify how the directory is to be moved. This parameter can be . - Indicates the format of the path parameter(s). - - - [AlphaFS] Moves a specified file to a new location, providing the option to specify a new file name, can be specified, - and the possibility of notifying the application of its progress through a callback function. - - Use this method to allow or prevent overwriting of an existing file. - This method works across disk volumes. - For example, the file c:\MyFile.txt can be moved to d:\public and renamed NewFile.txt. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - A class with the status of the Move action. - - - - - - - - The path to move the file to, which can specify a different file name. - that specify how the directory is to be moved. This parameter can be . - A callback function that is called each time another portion of the directory has been moved. This parameter can be . - The argument to be passed to the callback function. This parameter can be . - - - [AlphaFS] Moves a specified file to a new location, providing the option to specify a new file name, can be specified. - - Use this method to allow or prevent overwriting of an existing file. - This method works across disk volumes. - For example, the file c:\MyFile.txt can be moved to d:\public and renamed NewFile.txt. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - A class with the status of the Move action. - - - - - - - - The path to move the file to, which can specify a different file name. - that specify how the directory is to be moved. This parameter can be . - A callback function that is called each time another portion of the directory has been moved. This parameter can be . - The argument to be passed to the callback function. This parameter can be . - Indicates the format of the path parameter(s). - - - Copy/move an existing file to a new file, allowing the overwriting of an existing file. - - Option is recommended for very large file transfers. - Whenever possible, avoid using short file names (such as XXXXXX~1.XXX) with this method. - If two files have equivalent short file names then this method may fail and raise an exception and/or result in undesirable behavior. - - - A class with the status of the Copy or Move action. - A full path string to the destination directory - if original Timestamps must be preserved, otherwise. - This parameter can be . Use to specify how the file is to be copied. - This parameter can be . Use that specify how the file is to be moved. - This parameter can be . A callback function that is called each time another portion of the file has been copied. - This parameter can be . The argument to be passed to the callback function. - [out] Returns the retrieved long full path. - Indicates the format of the path parameter(s). - - - - - - - - - Creates a that appends text to the file represented by this instance of the . - A new - - - Creates a that appends text to the file represented by this instance of the . - The character to use. - A new - - - Initializes a new instance of the class, which acts as a wrapper for a file path. - The fully qualified name of the new file, or the relative file name. Do not end the path with the directory separator character. - This constructor does not check if a file exists. This constructor is a placeholder for a string that is used to access the file in subsequent operations. - - - [AlphaFS] Initializes a new instance of the class, which acts as a wrapper for a file path. - The fully qualified name of the new file, or the relative file name. Do not end the path with the directory separator character. - Indicates the format of the path parameter(s). - This constructor does not check if a file exists. This constructor is a placeholder for a string that is used to access the file in subsequent operations. - - - [AlphaFS] Initializes a new instance of the class, which acts as a wrapper for a file path. - The transaction. - The fully qualified name of the new file, or the relative file name. Do not end the path with the directory separator character. - This constructor does not check if a file exists. This constructor is a placeholder for a string that is used to access the file in subsequent operations. - - - [AlphaFS] Initializes a new instance of the class, which acts as a wrapper for a file path. - The transaction. - The fully qualified name of the new file, or the relative file name. Do not end the path with the directory separator character. - Indicates the format of the path parameter(s). - This constructor does not check if a file exists. This constructor is a placeholder for a string that is used to access the file in subsequent operations. - - - Gets an instance of the parent directory. - A object representing the parent directory of this file. - To get the parent directory as a string, use the DirectoryName property. - - - - Gets a string representing the directory's full path. - A string representing the directory's full path. - - To get the parent directory as a DirectoryInfo object, use the Directory property. - When first called, FileInfo calls Refresh and caches information about the file. - On subsequent calls, you must call Refresh to get the latest copy of the information. - - - - - Gets a value indicating whether the file exists. - if the file exists; otherwise, . - - The property returns if any error occurs while trying to determine if the specified file exists. - This can occur in situations that raise exceptions such as passing a file name with invalid characters or too many characters, - a failing or missing disk, or if the caller does not have permission to read the file. - - - - Gets or sets a value that determines if the current file is read only. - if the current file is read only; otherwise, . - - Use the IsReadOnly property to quickly determine or change whether the current file is read only. - When first called, FileInfo calls Refresh and caches information about the file. - On subsequent calls, you must call Refresh to get the latest copy of the information. - - - - - - Gets the size, in bytes, of the current file. - The size of the current file in bytes. - - The value of the Length property is pre-cached - To get the latest value, call the Refresh method. - - - - - - Gets the name of the file. - The name of the file. - - The name of the file includes the file extension. - When first called, calls Refresh and caches information about the file. - On subsequent calls, you must call Refresh to get the latest copy of the information. - The name of the file includes the file extension. - - - - Specifies how the operating system should open a file. - - - If you pass , the set of attributes is unspecified. explicitly sets no attributes. - - - The file is read only. Applications can read the file, but cannot write to or delete it. - Equals 1 - - - The file is hidden. Do not include it in an ordinary directory listing. - Equals 2 - - - The file is part of or used exclusively by an operating system. - Equals 4 - - - The handle that identifies a directory. - Equals 16 - - - The file should be archived. Applications use this attribute to mark files for backup or removal. - Equals 32 - - - The file should be archived. Applications use this attribute to mark files for backup or removal. - Equals 64 - - - The file does not have other attributes set. This attribute is valid only if used alone. - Equals 128 - - - The file is being used for temporary storage. - Equals 256 - - - A file that is a sparse file. - Equals 512 - - - A file or directory that has an associated reparse point, or a file that is a symbolic link. - Equals 1024 - - - A file or directory that is compressed. For a file, all of the data in the file is compressed. For a directory, compression is the default for newly created files and subdirectories. - Equals 2048 - - - The data of a file is not immediately available. This attribute indicates that file data is physically moved to offline storage. This attribute is used by Remote Storage, the hierarchical storage management software. Applications should not arbitrarily change this attribute. - Equals 4096 - - - The file or directory is not to be indexed by the content indexing service. - Equals 8192 - - - The file or directory is encrypted. For a file, this means that all data in the file is encrypted. For a directory, this means that encryption is the default for newly created files and subdirectories. - Equals 16384 - - - The directory or user data stream is configured with integrity (only supported on ReFS volumes). It is not included in an ordinary directory listing. The integrity setting persists with the file if it's renamed. If a file is copied the destination file will have integrity set if either the source file or destination directory have integrity set. - This flag is not supported until Windows Server 2012. - - - The user data stream not to be read by the background data integrity scanner (AKA scrubber). When set on a directory it only provides inheritance. This flag is only supported on Storage Spaces and ReFS volumes. It is not included in an ordinary directory listing. - This flag is not supported until Windows Server 2012. - - - ... - - - The file data is requested, but it should continue to be located in remote storage. It should not be transported back to local storage. This flag is for use by remote storage systems. - - - Normal reparse point processing will not occur; an attempt to open the reparse point will be made. When a file is opened, a file handle is returned, whether or not the filter that controls the reparse point is operational. See MSDN documentation for more information. - - - Access will occur according to POSIX rules. This includes allowing multiple files with names, differing only in case, for file systems that support that naming. Use care when using this option, because files created with this flag may not be accessible by applications that are written for MS-DOS or 16-bit Windows. - - - The file is being opened or created for a backup or restore operation. The system ensures that the calling process overrides file security checks when the process has SE_BACKUP_NAME and SE_RESTORE_NAME privileges. You must set this flag to obtain a handle to a directory. A directory handle can be passed to some functions instead of a file handle. - - - The file is to be deleted immediately after all of its handles are closed, which includes the specified handle and any other open or duplicated handles. If there are existing open handles to a file, the call fails unless they were all opened with the share mode. Subsequent open requests for the file fail, unless the share mode is specified. - Equals 67108864 - - - Access is intended to be sequential from beginning to end. The system can use this as a hint to optimize file caching. - Equals 134217728 - - - Access is intended to be random. The system can use this as a hint to optimize file caching. - Equals 268435456 - - - There are strict requirements for successfully working with files opened with the flag, for details see the section on "File Buffering" in the online MSDN documentation. - - - The file or device is being opened or created for asynchronous I/O. - Equals 1073741824 - - - Write operations will not go through any intermediate cache, they will go directly to disk. - Equals .NET -2147483648 - - - Class that retrieves file system entries (i.e. files and directories) using Win32 API FindFirst()/FindNext(). - - - Get an enumerator that returns all of the file system objects that match the wildcards that are in any of the directories to be searched. - An instance: FileSystemEntryInfo, DirectoryInfo, FileInfo or string (full path). - - - Gets a specific file system object. - - The return type is based on C# inference. Possible return types are: - - (full path), - ( or ), instance - or null in case an Exception is raised and is . - - - - Gets or sets the ability to return the object as a instance. - returns the object as a instance. - - - Gets or sets the ability to return the full path in long full path format. - returns the full path in long full path format, returns the full path in regular path format. - - - Gets or sets the ability to return the object instance as a . - returns the full path of the object as a - - - Gets the value indicating which to use. - - - Gets or sets the ability to skip on access errors. - suppress any Exception that might be thrown as a result from a failure, such as ACLs protected directories or non-accessible reparse points. - - - Gets the file system object type. - - = Return files and directories. - = Return only directories. - = Return only files. - - - - Gets or sets if the path is an absolute or relative path. - Gets a value indicating whether the specified path string contains absolute or relative path information. - - - Gets or sets the initial path to the folder. - The initial path to the file or folder in long path format. - - - Gets or sets the path to the folder. - The path to the file or folder in long path format. - - - Gets or sets a value indicating which to use. - indicates a folder object, indicates a file object. - - - Gets the value indicating which to use. - - - Specifies whether the search should include only the current directory or should include all subdirectories. - to all subdirectories. - - - Search for file system object-name using a pattern. - The path which has wildcard characters, for example, an asterisk () or a question mark (). - - - skips ReparsePoints, will follow ReparsePoints. - - - Get or sets the KernelTransaction instance. - The transaction. - - - Represents information about a file system entry. - This class cannot be inherited. - - - - Initializes a new instance of the class. - The NativeMethods.WIN32_FIND_DATA structure. - - - Gets the 8.3 version of the filename. - the 8.3 version of the filename. - - - Gets the attributes. - The attributes. - - - Gets the time this entry was created. - The time this entry was created. - - - Gets the time, in coordinated universal time (UTC), this entry was created. - The time, in coordinated universal time (UTC), this entry was created. - - - Gets the name of the file. - The name of the file. - - - Gets the size of the file. - The size of the file. - - - The full path of the file system object. - - - Gets a value indicating whether this instance is compressed. - if this instance is compressed; otherwise, . - - It is not possible to change the compression status of a File object by using the SetAttributes method. - Instead, you must actually compress the file using either a compression tool or one of the classes in the namespace. - - - - Gets a value indicating whether this instance is hidden, and thus is not included in an ordinary directory listing. - if this instance is hidden; otherwise, . - - - Gets a value indicating whether this instance represents a directory. - if this instance represents a directory; otherwise, . - - - Gets a value indicating whether this instance is encrypted (EFS). - if this instance is encrypted (EFS); otherwise, . - - For a file, this means that all data in the file is encrypted. - For a directory, this means that encryption is the default for newly created files and directories. - - - - Gets a value indicating whether this instance is a mount point. - if this instance is a mount point; otherwise, . - - - Gets a value indicating whether this instance is offline. The data of the file is not immediately available. - if this instance is offline; otherwise, . - - - Gets a value indicating whether this instance is read-only. - if this instance is read-only; otherwise, . - - - Gets a value indicating whether this instance contains a reparse point, which is a block of user-defined data associated with a file or a directory. - if this instance contains a reparse point; otherwise, . - - - Gets a value indicating whether this instance is a symbolic link. - if this instance is a symbolic link; otherwise, . - - - Gets the time this entry was last accessed. - The time this entry was last accessed. - - - Gets the time, in coordinated universal time (UTC), this entry was last accessed. - The time, in coordinated universal time (UTC), this entry was last accessed. - - - Gets the time this entry was last modified. - The time this entry was last modified. - - - Gets the time, in coordinated universal time (UTC), this entry was last modified. - The time, in coordinated universal time (UTC), this entry was last modified. - - - The full path of the file system object in Unicode (LongPath) format. - - - Gets the reparse point tag of this entry. - The reparse point tag of this entry. - - - Gets internal WIN32 FIND Data - - - Returns the of the instance. - The instance as a string. - - - Provides the base class for both and objects. - - - Deletes a file or directory. - - - Refreshes the state of the object. - - FileSystemInfo.Refresh() takes a snapshot of the file from the current file system. - Refresh cannot correct the underlying file system even if the file system returns incorrect or outdated information. - This can happen on platforms such as Windows 98. - Calls must be made to Refresh() before attempting to get the attribute information, or the information will be - outdated. - - - - Returns a string that represents the current object. - - ToString is the major formatting method in the .NET Framework. It converts an object to its string representation so that it is - suitable for display. - - A string that represents this instance. - - - Determines whether the specified Object is equal to the current Object. - Another object to compare to. - if the specified Object is equal to the current Object; otherwise, . - - - Serves as a hash function for a particular type. - A hash code for the current Object. - - - Implements the operator == - A. - B. - The result of the operator. - - - Implements the operator != - A. - B. - The result of the operator. - - - Refreshes the state of the EntryInfo instance. - - FileSystemInfo.RefreshEntryInfo() takes a snapshot of the file from the current file system. - Refresh cannot correct the underlying file system even if the file system returns incorrect or outdated information. - This can happen on platforms such as Windows 98. - Calls must be made to Refresh() before attempting to get the attribute information, or the information will be outdated. - - - - [AlphaFS] Resets the state of the file system object to uninitialized. - - - Initializes the specified file name. - - - Specifies that is a file or directory. - The transaction. - The full path and name of the file. - Indicates the format of the path parameter(s). - - - - Gets or sets the attributes for the current file or directory. - - - The value of the CreationTime property is pre-cached - To get the latest value, call the Refresh method. - - of the current . - - - - - - - Gets or sets the creation time of the current file or directory. - - The value of the CreationTime property is pre-cached To get the latest value, call the Refresh method. - This method may return an inaccurate value, because it uses native functions whose values may not be continuously updated by - the operating system. - If the file described in the FileSystemInfo object does not exist, this property will return - 12:00 midnight, January 1, 1601 A.D. (C.E.) Coordinated Universal Time (UTC), adjusted to local time. - NTFS-formatted drives may cache file meta-info, such as file creation time, for a short period of time. - This process is known as file tunneling. As a result, it may be necessary to explicitly set the creation time of a file if you are - overwriting or replacing an existing file. - - The creation date and time of the current object. - - - - - - Gets or sets the creation time, in coordinated universal time (UTC), of the current file or directory. - - The value of the CreationTimeUtc property is pre-cached - To get the latest value, call the Refresh method. - This method may return an inaccurate value, because it uses native functions - whose values may not be continuously updated by the operating system. - To get the latest value, call the Refresh method. - If the file described in the FileSystemInfo object does not exist, this property will return - 12:00 midnight, January 1, 1601 A.D. (C.E.) Coordinated Universal Time (UTC). - NTFS-formatted drives may cache file meta-info, such as file creation time, for a short period of time. - This process is known as file tunneling. As a result, it may be necessary to explicitly set the creation time - of a file if you are overwriting or replacing an existing file. - - The creation date and time in UTC format of the current object. - - - - - - - Gets a value indicating whether the file or directory exists. - - - The property returns if any error occurs while trying to determine if the - specified file or directory exists. - This can occur in situations that raise exceptions such as passing a directory- or file name with invalid characters or too - many characters, - a failing or missing disk, or if the caller does not have permission to read the file or directory. - - if the file or directory exists; otherwise, . - - - - Gets the string representing the extension part of the file. - - - The Extension property returns the extension, including the period (.). - For example, for a file c:\NewFile.txt, this property returns ".txt". - - A string containing the extension. - - - - Gets the full path of the directory or file. - - A string containing the full path. - - - Gets or sets the time the current file or directory was last accessed. - - The value of the LastAccessTime property is pre-cached - To get the latest value, call the Refresh method. - This method may return an inaccurate value, because it uses native functions - whose values may not be continuously updated by the operating system. - If the file described in the FileSystemInfo object does not exist, this property will return - 12:00 midnight, January 1, 1601 A.D. (C.E.) Coordinated Universal Time (UTC), adjusted to local time. - - The time that the current file or directory was last accessed. - - - - - Gets or sets the time, in coordinated universal time (UTC), that the current file or directory was last accessed. - - The value of the LastAccessTimeUtc property is pre-cached. - To get the latest value, call the Refresh method. - This method may return an inaccurate value, because it uses native functions - whose values may not be continuously updated by the operating system. - If the file described in the FileSystemInfo object does not exist, this property will return - 12:00 midnight, January 1, 1601 A.D. (C.E.) Coordinated Universal Time (UTC), adjusted to local time. - - The UTC time that the current file or directory was last accessed. - - - - - Gets or sets the time when the current file or directory was last written to. - - The value of the LastWriteTime property is pre-cached. - To get the latest value, call the Refresh method. - This method may return an inaccurate value, because it uses native functions - whose values may not be continuously updated by the operating system. - If the file described in the FileSystemInfo object does not exist, this property will return - 12:00 midnight, January 1, 1601 A.D. (C.E.) Coordinated Universal Time (UTC), adjusted to local time. - - The time the current file was last written. - - - - - Gets or sets the time, in coordinated universal time (UTC), when the current file or directory was last written to. - - The value of the LastWriteTimeUtc property is pre-cached. To get the latest value, call the Refresh method. - This method may return an inaccurate value, because it uses native functions whose values may not be continuously updated by - the operating system. - If the file described in the FileSystemInfo object does not exist, this property will return 12:00 midnight, January 1, 1601 - A.D. (C.E.) Coordinated Universal Time (UTC), adjusted to local time. - - The UTC time when the current file was last written to. - - - - For files, gets the name of the file. For directories, gets the name of the last directory in the hierarchy if a hierarchy exists. - Otherwise, the Name property gets the name of the directory. - - - For a directory, Name returns only the name of the parent directory, such as Dir, not c:\Dir. - For a subdirectory, Name returns only the name of the subdirectory, such as Sub1, not c:\Dir\Sub1. - For a file, Name returns only the file name and file name extension, such as MyFile.txt, not c:\Dir\Myfile.txt. - - - A string that is the name of the parent directory, the name of the last directory in the hierarchy, - or the name of a file, including the file name extension. - - - - Returns the path as a string. - - - [AlphaFS] Gets the instance of the class. - - - [AlphaFS] The initial "IsDirectory" indicator that was passed to the constructor. - - - The full path of the file system object in Unicode (LongPath) format. - - - [AlphaFS] Represents the KernelTransaction that was passed to the constructor. - - - Represents the fully qualified path of the file or directory. - - Classes derived from can use the FullPath field - to determine the full path of the object being manipulated. - - - - The path originally specified by the user, whether relative or absolute. - - - A bitfield of flags for specifying options for various internal operations that convert paths to full paths. - - - No special options applies. - - - Remove any trailing whitespace from the path. - - - Add a trailing directory separator to the path (if one does not already exist). - - - Remove the trailing directory separator from the path (if one exists). - - - Return full path as long full path (Unicode format). Not valid for . - - - Prevents any exception from being thrown if a filesystem object does not exist. Not valid for . - - - Check that the path contains only valid path-characters. - - - Also check for wildcard (? and *) characters. - - - Do not trim the trailing dot or space. - - - Performs both and checks. - - - Performs operations on String instances that contain file or directory path information. These operations are performed in a cross-platform manner. - - - Determines whether a path includes a file name extension. - if the characters that follow the last directory separator (\\ or /) or volume separator (:) in the path include a period (.) followed by one or more characters; otherwise, . - - The path to search for an extension. The path cannot contain any of the characters defined in . - - - Gets a value indicating whether the specified path string contains absolute or relative path information. - if contains a root; otherwise, . - - The IsPathRooted method returns if the first character is a directory separator character such as - , or if the path starts with a drive letter and colon (). - For example, it returns true for path strings such as "\\MyDir\\MyFile.txt", "C:\\MyDir", or "C:MyDir". - It returns for path strings such as "MyDir". - - This method does not verify that the path or file name exists. - - - The path to test. The path cannot contain any of the characters defined in . - - - [AlphaFS] Gets a value indicating whether the specified path string contains absolute or relative path information. - if contains a root; otherwise, . - - The IsPathRooted method returns true if the first character is a directory separator character such as - , or if the path starts with a drive letter and colon (). - For example, it returns for path strings such as "\\MyDir\\MyFile.txt", "C:\\MyDir", or "C:MyDir". - It returns for path strings such as "MyDir". - - This method does not verify that the path or file name exists. - - - The path to test. The path cannot contain any of the characters defined in . - will check for invalid path characters. - - - [AlphaFS] Check if file or folder name has any invalid characters. - - File or folder name. - if name contains any invalid characters. Otherwise - - - Checks that the given path format is supported. - - - A path to the file or directory. - Checks that the path contains only valid path-characters. - . - - - Checks that the path contains only valid path-characters. - - - A path to the file or directory. - also checks for ? and * characters. - When , throws an . - - - Tranlates DosDevicePath, Volume GUID. For example: "\Device\HarddiskVolumeX\path\filename.ext" can translate to: "\path\filename.ext" or: "\\?\Volume{GUID}\path\filename.ext". - A translated dos path. - A DosDevicePath, for example: \Device\HarddiskVolumeX\path\filename.ext. - Alternate path/device text, usually string.Empty or . - - - Check if is a directory- and/or volume-separator character. - if is a separator character. - The character to check. - - If , checks for all separator characters: , - and - If , only checks for: and - If only checks for: - - - - Changes the extension of a path string. - The modified path information. - - The path information to modify. The path cannot contain any of the characters defined in . - The new extension (with or without a leading period). Specify to remove an existing extension from path. - - - Returns the directory information for the specified path string. - - Directory information for , or if denotes a root directory or is - . - Returns if does not contain directory information. - - - The path of a file or directory. - - - [AlphaFS] Returns the directory information for the specified path string. - - Directory information for , or if denotes a root directory or is - . Returns if does not contain directory information. - - - The path of a file or directory. - will check for invalid path characters. - - - [AlphaFS] Returns the directory information for the specified path string without the root information, for example: "C:\Windows\system32" returns: "Windows". - The without the file name part and without the root information (if any), or if is or if denotes a root (such as "\", "C:", or * "\\server\share"). - The path. - - - [AlphaFS] Returns the directory information for the specified path string without the root information, for example: "C:\Windows\system32" returns: "Windows". - The without the file name part and without the root information (if any), or if is or if denotes a root (such as "\", "C:", or * "\\server\share"). - The transaction. - The path. - - - Returns the extension of the specified path string. - - The extension of the specified path (including the period "."), or null, or . - If is null, this method returns null. - If does not have extension information, - this method returns . - - - - The path string from which to get the extension. The path cannot contain any of the characters defined in . - - - Returns the extension of the specified path string. - - The extension of the specified path (including the period "."), or null, or . - If is null, this method returns null. - If does not have extension information, - this method returns . - - - The path string from which to get the extension. The path cannot contain any of the characters defined in . - will check for invalid path characters. - - - Returns the file name and extension of the specified path string. - - The characters after the last directory character in . If the last character of is a - directory or volume separator character, this method returns string.Empty. If path is null, this method returns null. - - - The path string from which to obtain the file name and extension. The path cannot contain any of the characters defined in . - - - [AlphaFS] Returns the file name and extension of the specified path string. - - The characters after the last directory character in . If the last character of is a - directory or volume separator character, this method returns string.Empty. If path is null, this method returns null. - - - The path string from which to obtain the file name and extension. - will check for invalid path characters. - - - Returns the file name of the specified path string without the extension. - The string returned by GetFileName, minus the last period (.) and all characters following it. - - The path of the file. The path cannot contain any of the characters defined in . - - - [AlphaFS] Returns the file name of the specified path string without the extension. - The string returned by GetFileName, minus the last period (.) and all characters following it. - - The path of the file. The path cannot contain any of the characters defined in . - will check for invalid path characters. - - - Gets an array containing the characters that are not allowed in file names. - An array containing the characters that are not allowed in file names. - - - Gets an array containing the characters that are not allowed in path names. - An array containing the characters that are not allowed in path names. - - - Gets the root directory information of the specified path. - - Returns the root directory of , such as "C:\", - or if is , - or an empty string if does not contain root directory information. - - - The path from which to obtain root directory information. - - - [AlphaFS] Gets the root directory information of the specified path. - - Returns the root directory of , such as "C:\", - or if is , - or an empty string if does not contain root directory information. - - - The path from which to obtain root directory information. - will check for invalid path characters. - - - [AlphaFS] Retrieves the final path for the specified file, formatted as . - The final path as a string. - - A final path is the path that is returned when a path is fully resolved. For example, for a symbolic link named "C:\tmp\mydir" that - points to "D:\yourdir", the final path would be "D:\yourdir". - - Then handle to a instance. - - - [AlphaFS] Retrieves the final path for the specified file, formatted as . - The final path as a string. - - A final path is the path that is returned when a path is fully resolved. For example, for a symbolic link named "C:\tmp\mydir" that - points to "D:\yourdir", the final path would be "D:\yourdir". - - Then handle to a instance. - The final path, formatted as - - - Retrieves the final path for the specified file, formatted as . - The final path as a string. - - A final path is the path that is returned when a path is fully resolved. For example, for a symbolic link named "C:\tmp\mydir" that - points to "D:\yourdir", the final path would be "D:\yourdir". The string that is returned by this function uses the - syntax. - - Then handle to a instance. - The final path, formatted as - - - Combines an array of strings into a path. - The combined paths. - - - An array of parts of the path. - - - Combines an array of strings into a path. - The combined paths. - - The parameters are not parsed if they have white space. - Therefore, if path2 includes white space (for example, " c:\\ "), - the Combine method appends path2 to path1 instead of returning only path2. - - - - will not check for invalid path characters. - An array of parts of the path. - - - AltDirectorySeparatorChar = '/' Provides a platform-specific alternate character used to separate directory levels in a path string that reflects a hierarchical file system organization. - - - DirectorySeparatorChar = '\' Provides a platform-specific character used to separate directory levels in a path string that reflects a hierarchical file system organization. - - - PathSeparator = ';' A platform-specific separator character used to separate path strings in environment variables. - - - VolumeSeparatorChar = ':' Provides a platform-specific Volume Separator character. - - - [AlphaFS] AltDirectorySeparatorChar = "/" Provides a platform-specific alternate string used to separate directory levels in a path string that reflects a hierarchical file system organization. - - - [AlphaFS] CurrentDirectoryPrefix = '.' Provides a current directory character. - - - [AlphaFS] CurrentDirectoryPrefix = "." Provides a current directory string. - - - [AlphaFS] DirectorySeparator = "\" Provides a platform-specific string used to separate directory levels in a path string that reflects a hierarchical file system organization. - - - [AlphaFS] ExtensionSeparatorChar = '.' Provides an Extension Separator character. - - - [AlphaFS] ParentDirectoryPrefix = ".." Provides a parent directory string. - - - [AlphaFS] StreamSeparator = ':' Provides a platform-specific Stream-name character. - - - [AlphaFS] StreamSeparator = ':' Provides a platform-specific Stream-name character. - - - [AlphaFS] StreamDataLabel = ':$DATA' Provides a platform-specific Stream :$DATA label. - - - [AlphaFS] StringTerminatorChar = '\0' String Terminator Suffix. - - - [AlphaFS] Characters to trim from the SearchPattern. - - - [AlphaFS] VolumeSeparatorChar = ':' Provides a platform-specific Volume Separator character. - - - [AlphaFS] WildcardStarMatchAll = "*" Provides a match-all-items string. - - - [AlphaFS] WildcardStarMatchAll = '*' Provides a match-all-items character. - - - [AlphaFS] WildcardQuestion = "?" Provides a replace-item string. - - - [AlphaFS] WildcardQuestion = '?' Provides a replace-item string. - - - [AlphaFS] UncPrefix = "\\" Provides standard Windows Path UNC prefix. - - - [AlphaFS] LongPathPrefix = "\\?\" Provides standard Windows Long Path prefix. - - - [AlphaFS] LongPathUncPrefix = "\\?\UNC\" Provides standard Windows Long Path UNC prefix. - - - [AlphaFS] GlobalRootPrefix = "\\?\GLOBALROOT\" Provides standard Windows Volume prefix. - - - [AlphaFS] MsDosNamespacePrefix = "\\.\" Provides standard logical drive prefix. - - - [AlphaFS] SubstitutePrefix = "\??\" Provides a SUBST.EXE Path prefix to a Logical Drive. - - - [AlphaFS] VolumePrefix = "\\?\Volume" Provides standard Windows Volume prefix. - - - [AlphaFS] DevicePrefix = "\Device\" Provides standard Windows Device prefix. - - - [AlphaFS] DosDeviceLanmanPrefix = "\Device\LanmanRedirector\" Provides a MS-Dos Lanman Redirector Path UNC prefix to a network share. - - - [AlphaFS] DosDeviceMupPrefix = "\Device\Mup\" Provides a MS-Dos Mup Redirector Path UNC prefix to a network share. - - - [AlphaFS] DosDeviceUncPrefix = "\??\UNC\" Provides a SUBST.EXE Path UNC prefix to a network share. - - - Returns the absolute path for the specified path string. - The fully qualified location of path, such as "C:\MyFile.txt". - - GetFullPathName merges the name of the current drive and directory with a specified file name to determine the full path and file name of a specified file. - It also calculates the address of the file name portion of the full path and file name. -   - This method does not verify that the resulting path and file name are valid, or that they see an existing file on the associated volume. - The .NET Framework does not support direct access to physical disks through paths that are device names, such as "\\.\PHYSICALDRIVE0". -   - MSDN: Multithreaded applications and shared library code should not use the GetFullPathName function and - should avoid using relative path names. The current directory state written by the SetCurrentDirectory function is stored as a global variable in each process, - therefore multithreaded applications cannot reliably use this value without possible data corruption from other threads that may also be reading or setting this value. - This limitation also applies to the SetCurrentDirectory and GetCurrentDirectory functions. The exception being when the application is guaranteed to be running in a single thread, - for example parsing file names from the command line argument string in the main thread prior to creating any additional threads. - Using relative path names in multithreaded applications or shared library code can yield unpredictable results and is not supported. - - - - - The file or directory for which to obtain absolute path information. - - - Returns the absolute path for the specified path string. - The fully qualified location of path, such as "C:\MyFile.txt". - - GetFullPathName merges the name of the current drive and directory with a specified file name to determine the full path and file name of a specified file. - It also calculates the address of the file name portion of the full path and file name. -   - This method does not verify that the resulting path and file name are valid, or that they see an existing file on the associated volume. - The .NET Framework does not support direct access to physical disks through paths that are device names, such as "\\.\PHYSICALDRIVE0". -   - MSDN: Multithreaded applications and shared library code should not use the GetFullPathName function and - should avoid using relative path names. The current directory state written by the SetCurrentDirectory function is stored as a global variable in each process, - therefore multithreaded applications cannot reliably use this value without possible data corruption from other threads that may also be reading or setting this value. - This limitation also applies to the SetCurrentDirectory and GetCurrentDirectory functions. The exception being when the application is guaranteed to be running in a single thread, - for example parsing file names from the command line argument string in the main thread prior to creating any additional threads. - Using relative path names in multithreaded applications or shared library code can yield unpredictable results and is not supported. - - - - - The file or directory for which to obtain absolute path information. - Options for controlling the full path retrieval. - - - [AlphaFS] Returns the absolute path for the specified path string. - The fully qualified location of path, such as "C:\MyFile.txt". - - GetFullPathName merges the name of the current drive and directory with a specified file name to determine the full path and file name of a specified file. - It also calculates the address of the file name portion of the full path and file name. -   - This method does not verify that the resulting path and file name are valid, or that they see an existing file on the associated volume. - The .NET Framework does not support direct access to physical disks through paths that are device names, such as "\\.\PHYSICALDRIVE0". -   - MSDN: Multithreaded applications and shared library code should not use the GetFullPathName function and - should avoid using relative path names. The current directory state written by the SetCurrentDirectory function is stored as a global variable in each process, - therefore multithreaded applications cannot reliably use this value without possible data corruption from other threads that may also be reading or setting this value. - This limitation also applies to the SetCurrentDirectory and GetCurrentDirectory functions. The exception being when the application is guaranteed to be running in a single thread, - for example parsing file names from the command line argument string in the main thread prior to creating any additional threads. - Using relative path names in multithreaded applications or shared library code can yield unpredictable results and is not supported. - - - - - The transaction. - The file or directory for which to obtain absolute path information. - - - [AlphaFS] Returns the absolute path for the specified path string. - The fully qualified location of path, such as "C:\MyFile.txt". - - GetFullPathName merges the name of the current drive and directory with a specified file name to determine the full path and file name of a specified file. - It also calculates the address of the file name portion of the full path and file name. -   - This method does not verify that the resulting path and file name are valid, or that they see an existing file on the associated volume. - The .NET Framework does not support direct access to physical disks through paths that are device names, such as "\\.\PHYSICALDRIVE0". -   - MSDN: Multithreaded applications and shared library code should not use the GetFullPathName function and - should avoid using relative path names. The current directory state written by the SetCurrentDirectory function is stored as a global variable in each process, - therefore multithreaded applications cannot reliably use this value without possible data corruption from other threads that may also be reading or setting this value. - This limitation also applies to the SetCurrentDirectory and GetCurrentDirectory functions. The exception being when the application is guaranteed to be running in a single thread, - for example parsing file names from the command line argument string in the main thread prior to creating any additional threads. - Using relative path names in multithreaded applications or shared library code can yield unpredictable results and is not supported. - - - - - The transaction. - The file or directory for which to obtain absolute path information. - Options for controlling the full path retrieval. - - - Retrieves the absolute path for the specified string. - The fully qualified location of , such as "C:\MyFile.txt". - - GetFullPathName merges the name of the current drive and directory with a specified file name to determine the full path and file name of a specified file. - It also calculates the address of the file name portion of the full path and file name. -   - This method does not verify that the resulting path and file name are valid, or that they see an existing file on the associated volume. - The .NET Framework does not support direct access to physical disks through paths that are device names, such as "\\.\PHYSICALDRIVE0". -   - MSDN: Multithreaded applications and shared library code should not use the GetFullPathName function and - should avoid using relative path names. The current directory state written by the SetCurrentDirectory function is stored as a global variable in each process, - therefore multithreaded applications cannot reliably use this value without possible data corruption from other threads that may also be reading or setting this value. - This limitation also applies to the SetCurrentDirectory and GetCurrentDirectory functions. The exception being when the application is guaranteed to be running in a single thread, - for example parsing file names from the command line argument string in the main thread prior to creating any additional threads. - Using relative path names in multithreaded applications or shared library code can yield unpredictable results and is not supported. - - - - The transaction. - The file or directory for which to obtain absolute path information. - Options for controlling the full path retrieval. - - - Applies the to - with applied . - - - - - - - [AlphaFS] Adds a trailing character to the string, when absent. - A text string with a trailing character. The function returns when is . - A text string to which the trailing is to be added, when absent. - - - [AlphaFS] Adds a trailing or character to the string, when absent. - A text string with a trailing or character. The function returns when is . - A text string to which the trailing or is to be added, when absent. - If the character will be added instead. - - - [AlphaFS] Removes the trailing character from the string, when present. - A text string where the trailing character has been removed. The function returns when is . - A text string from which the trailing is to be removed, when present. - - - [AlphaFS] Removes the trailing or character from the string, when present. - A text string where the trailing or character has been removed. The function returns when is . - A text string from which the trailing or is to be removed, when present. - If the trailing character will be removed instead. - - - [AlphaFS] Returns the directory information for the specified with a trailing character. - - The suffixed directory information for the specified with a trailing character, - or if is or if denotes a root (such as "\", "C:", or * "\\server\share"). - - This method is similar to calling Path.GetDirectoryName() + Path.AddTrailingDirectorySeparator() - The path. - - - [AlphaFS] Returns the directory information for the specified with a trailing character. - - The suffixed directory information for the specified with a trailing character, - or if is or if denotes a root (such as "\", "C:", or * "\\server\share"). - - This method is similar to calling Path.GetDirectoryName() + Path.AddTrailingDirectorySeparator() - The transaction. - The path. - - - [AlphaFS] Returns the directory information for the specified without the root and with a trailing character. - - The directory information for the specified without the root and with a trailing character, - or if is or if is . - - The path. - - - [AlphaFS] Returns the directory information for the specified without the root and with a trailing character. - - The directory information for the specified without the root and with a trailing character, - or if is or if is . - - The transaction. - The path. - - - Returns the directory information for the specified with a trailing character. - - The suffixed directory information for the specified with a trailing character, - or if is or if denotes a root (such as "\", "C:", or * "\\server\share"). - - This method is similar to calling Path.GetDirectoryName() + Path.AddTrailingDirectorySeparator() - The transaction. - The path. - - - Returns the directory information for the specified without the root and with a trailing character. - - The directory information for the specified without the root and with a trailing character, - or if is or if is . - - The transaction. - The path. - - - [AlphaFS] Gets the connection name of the locally mapped drive. - The server and share as: \\servername\sharename. - - - - - The local path with drive name. - - - [AlphaFS] Gets the network share name from the locally mapped path. - The network share connection name of . - - - - - The local path with drive name. - - - [AlphaFS] Determines if a path string is a valid Universal Naming Convention (UNC) path. - if the specified path is a Universal Naming Convention (UNC) path, otherwise. - The path to check. - - - [AlphaFS] Determines if a path string is a valid Universal Naming Convention (UNC) path, optionally skip invalid path character check. - if the specified path is a Universal Naming Convention (UNC) path, otherwise. - The path to check. - will check for invalid path characters. - - - [AlphaFS] Converts a local path to a network share path. - A Local path, e.g.: "C:\Windows" will be returned as: "\\MachineName\C$\Windows". - If a logical drive points to a network share path, the share path will be returned instead. - - On successful conversion a UNC path is returned. - If the conversion fails, is returned. - If is an empty string or , is returned. - - - - - A local path, e.g.: "C:\Windows". - - - [AlphaFS] Converts a local path to a network share path, optionally returning it in a long path format. - A Local path, e.g.: "C:\Windows" will be returned as: "\\MachineName\C$\Windows". - If a logical drive points to a network share path, the share path will be returned instead. - - On successful conversion a UNC path is returned. - If the conversion fails, is returned. - If is an empty string or , is returned. - - - - - A local path, e.g.: "C:\Windows". - returns the path in long path (Unicode) format, when returns the path as a regular path. - - - [AlphaFS] Converts a local path to a network share path, optionally returning it in a long path format and the ability to add or remove a trailing backslash. - A Local path, e.g.: "C:\Windows" will be returned as: "\\MachineName\C$\Windows". - If a logical drive points to a network share path, the share path will be returned instead. - - On successful conversion a UNC path is returned. - If the conversion fails, is returned. - If is an empty string or , is returned. - - - - - A local path, e.g.: "C:\Windows". - returns the path in long path (Unicode) format, when returns the path as a regular path. - adds a trailing character to , when absent. - removes the trailing character from , when present. - - - [AlphaFS] Determines if a path string is a valid Universal Naming Convention (UNC) path, optionally skip invalid path character check. - if the specified path is a Universal Naming Convention (UNC) path, otherwise. - The path to check. - When indicates that is already in regular path format. - will check for invalid path characters. - - - Converts a local path to a network share path. - A Local path, e.g.: "C:\Windows" will be returned as: "\\MachineName\C$\Windows". - If a logical drive points to a network share path, the share path will be returned instead. - - On successful conversion a UNC path is returned. - If the conversion fails, is returned. - If is an empty string or , is returned. - - - - - A local path, e.g.: "C:\Windows". - returns the path in long path (Unicode) format, when returns the path as a regular path. - adds a trailing character to , when absent. - removes the trailing character from , when present. - - - Makes an extended long path from the specified by prefixing . - The prefixed with a , the minimum required full path is: "C:\". - This method does not verify that the resulting path and file name are valid, or that they see an existing file on the associated volume. - - - The path to the file or directory, this can also be an UNC path. - - - [AlphaFS] Converts the specified existing path to its regular long form. - An existing path to a folder or file. - The regular full path. - - - [AlphaFS] Converts the specified existing path to its regular long form. - The transaction. - An existing path to a folder or file. - The regular full path. - - - [AlphaFS] Gets the regular path from long prefixed one. i.e.: "\\?\C:\Temp\file.txt" to C:\Temp\file.txt" or: "\\?\UNC\Server\share\file.txt" to "\\Server\share\file.txt". - Regular form path string. - This method does not handle paths with volume names, eg. \\?\Volume{GUID}\Folder\file.txt. - The path. - - - [AlphaFS] Retrieves the short path form of the specified path. - A path that has the 8.3 path form. - Will fail on NTFS volumes with disabled 8.3 name generation. - The path must actually exist to be able to get the short path name. - An existing path to a folder or file. - - - [AlphaFS] Retrieves the short path form of the specified path. - A path that has the 8.3 path form. - Will fail on NTFS volumes with disabled 8.3 name generation. - The path must actually exist to be able to get the short path name. - The transaction. - An existing path to a folder or file. - - - [AlphaFS] Determines whether the specified path starts with a or . - if the specified path has a long path (UNC) prefix, otherwise. - The path to the file or directory. - - - Makes an extended long path from the specified by prefixing . - The prefixed with a , the minimum required full path is: "C:\". - This method does not verify that the resulting path and file name are valid, or that they see an existing file on the associated volume. - - - The path to the file or directory, this can also be an UNC path. - Options for controlling the full path retrieval. - - - Retrieves the short path form, or the regular long form of the specified . - If is , a path of the 8.3 form otherwise the regular long form. - - Will fail on NTFS volumes with disabled 8.3 name generation. - The path must actually exist to be able to get the short- or long path name. - - The transaction. - An existing path to a folder or file. - to retrieve the short path form, to retrieve the regular long form from the 8.3 . - - - Gets the regular path from a long path. - - Returns the regular form of a long . - For example: "\\?\C:\Temp\file.txt" to: "C:\Temp\file.txt", or: "\\?\UNC\Server\share\file.txt" to: "\\Server\share\file.txt". - - - MSDN: String.TrimEnd Method notes to Callers: http://msdn.microsoft.com/en-us/library/system.string.trimend%28v=vs.110%29.aspx - - - - The path. - Options for controlling the full path retrieval. - When , throws an . - - - Gets the path as a long full path. - The path as an extended length path. - - The transaction. - Full pathname of the source path to convert. - The path format to use. - Options for controlling the operation. Note that on .NET 3.5 the TrimEnd option has no effect. - - - Returns a random folder name or file name. - A random folder name or file name. - - - Creates a uniquely named, zero-byte temporary file on disk and returns the full path of that file. - The full path of the temporary file. - - - Returns the path of the current user's temporary folder. - The path to the temporary folder, ending with a backslash. - - - [AlphaFS] Returns the path of the current user's temporary folder. - The folder name to append to the temporary folder. - The path to the temporary folder, combined with . - - - Represents a wrapper class for a handle used by the CM_Connect_Machine/CM_Disconnect_Machine Win32 API functions. - - - Initializes a new instance of the class. - - - Represents a wrapper class for a handle used by the FindFirstFile/FindNextFile Win32 API functions. - - - Constructor that prevents a default instance of this class from being created. - - - Constructor that prevents a default instance of this class from being created. - The handle. - true to reliably release the handle during the finalization phase; false to prevent - reliable release (not recommended). - - - When overridden in a derived class, executes the code required to free the handle. - if the handle is released successfully; otherwise, in the event of a catastrophic failure, . In this case, it generates a ReleaseHandleFailed Managed Debugging Assistant. - - - Contains Shell32 information about a file. - - - Initializes a Shell32Info instance. - Shell32 is limited to MAX_PATH length. - This constructor does not check if a file exists. This constructor is a placeholder for a string that is used to access the file in subsequent operations. - - The fully qualified name of the new file, or the relative file name. Do not end the path with the directory separator character. - - - Initializes a Shell32Info instance. - Shell32 is limited to MAX_PATH length. - This constructor does not check if a file exists. This constructor is a placeholder for a string that is used to access the file in subsequent operations. - - The fully qualified name of the new file, or the relative file name. Do not end the path with the directory separator character. - Indicates the format of the path parameter(s). - - - Gets an handle to the Shell icon that represents the file. - Icon size or . Can also be combined with and others. - An handle to the Shell icon that represents the file. - Caller is responsible for destroying this handle with DestroyIcon() when no longer needed. - - - Gets the Shell command association from the registry. - The shell verb. - - Returns the associated file- or protocol-related Shell command from the registry or string.Empty if no association can be - found. - - - - Refreshes the state of the object. - - - Returns the path as a string. - The path. - - - Gets the Shell file or protocol association from the registry. - - - The attributes of the file object. - - - Gets the Shell command association from the registry. - - - Gets the Shell command association from the registry. - - - Gets the Shell DDE association from the registry. - - - Gets the Shell default icon association from the registry. - - - Represents the fully qualified path of the file. - - - Gets the Shell friendly application name association from the registry. - - - Gets the Shell friendly document name association from the registry. - - - Reflects the initialization state of the instance. - - - Gets the Shell "Open With" command association from the registry. - - - Class for CopyMoveResult that contains the results for the Copy or Move action. - - - Create a CopyMoveResult class instance for the Copy or Move action. - Indicates the source file or directory. - Indicates the destination file or directory. - Indicates if the action was canceled. - The error code encountered during the Copy or Move action. - - - The error code encountered during the Copy or Move action. - 0 (zero) indicates success. - - - The error message from the that was encountered during the Copy or Move action. - A message describing the error. - - - When true indicates that the Copy or Move action was canceled. - when the Copy/Move action was canceled. Otherwise . - - - Indicates the source file or directory. - - - Indicates the destination file or directory. - - - The total number of folders copied. - - - The total number of files copied. - - - The total number of bytes copied. - - - Information about the target of a symbolic link or mount point. - - - The print name. - - - The substitute name. - - - Used by MoveFileXxx.Flags that specify how a file or directory is to be moved. - - - No MoveOptions used, this fails when the file name already exists. - - - MOVE_FILE_REPLACE_EXISTSING - If the destination file name already exists, the function replaces its contents with the contents of the source file. - This value cannot be used if lpNewFileName or lpExistingFileName names a directory. - This value cannot be used if either source or destination names a directory. - - - - MOVE_FILE_COPY_ALLOWED - If the file is to be moved to a different volume, the function simulates the move by using the CopyFile and DeleteFile functions. - This value cannot be used with . - - - - MOVE_FILE_DELAY_UNTIL_REBOOT - - The system does not move the file until the operating system is restarted. - The system moves the file immediately after AUTOCHK is executed, but before creating any paging files. - - - Consequently, this parameter enables the function to delete paging files from previous startups. - This value can only be used if the process is in the context of a user who belongs to the administrators group or the LocalSystem account. - - This value cannot be used with . - - - - MOVE_FILE_WRITE_THROUGH - The function does not return until the file has actually been moved on the disk. - - Setting this value guarantees that a move performed as a copy and delete operation is flushed to disk before the function returns. - The flush occurs at the end of the copy operation. - - This value has no effect if is set. - - - - MOVE_FILE_CREATE_HARDLINK - Reserved for future use. - - - - MOVE_FILE_FAIL_IF_NOT_TRACKABLE - The function fails if the source file is a link source, but the file cannot be tracked after the move. - This situation can occur if the destination is a volume formatted with the FAT file system. - - - - The file or directory was not a reparse point. - - - Initializes a new instance of the class. - - - Initializes a new instance of the class. - The message. - - - Initializes a new instance of the class. - The message. - The inner exception. - - - Initializes a new instance of the class. - The info. - The context. - - - Provides access to a file system object, using Shell32. - - - Provides information for the IQueryAssociations interface methods, used by Shell32. - - - None. - - - Instructs not to map CLSID values to ProgID values. - - - Identifies the value of the supplied file parameter (3rd parameter of function GetFileAssociation()) as an executable file name. - If this flag is not set, the root key will be set to the ProgID associated with the .exe key instead of the executable file's ProgID. - - - Specifies that when an IQueryAssociation method does not find the requested value under the root key, it should attempt to retrieve the comparable value from the * subkey. - - - Specifies that when an IQueryAssociation method does not find the requested value under the root key, it should attempt to retrieve the comparable value from the Folder subkey. - - - Specifies that only HKEY_CLASSES_ROOT should be searched, and that HKEY_CURRENT_USER should be ignored. - - - Specifies that the return string should not be truncated. Instead, return an error value and the required size for the complete string. - - - - Instructs IQueryAssociations methods to verify that data is accurate. - This setting allows IQueryAssociations methods to read data from the user's hard disk for verification. - For example, they can check the friendly name in the registry against the one stored in the .exe file. - - Setting this flag typically reduces the efficiency of the method. - - - - Instructs IQueryAssociations methods to ignore Rundll.exe and return information about its target. - Typically IQueryAssociations methods return information about the first .exe or .dll in a command string. - If a command uses Rundll.exe, setting this flag tells the method to ignore Rundll.exe and return information about its target. - - - - Instructs IQueryAssociations methods not to fix errors in the registry, such as the friendly name of a function not matching the one found in the .exe file. - - - Specifies that the BaseClass value should be ignored. - - - Specifies that the "Unknown" ProgID should be ignored; instead, fail. - Introduced in Windows 7. - - - Specifies that the supplied ProgID should be mapped using the system defaults, rather than the current user defaults. - Introduced in Windows 8. - - - Specifies that the value is a protocol, and should be mapped using the current user defaults. - Introduced in Windows 8. - - - ASSOCSTR enumeration - Used by the AssocQueryString() function to define the type of string that is to be returned. - - - None. - - - A command string associated with a Shell verb. - - - - An executable from a Shell verb command string. - For example, this string is found as the (Default) value for a subkey such as HKEY_CLASSES_ROOT\ApplicationName\shell\Open\command. - If the command uses Rundll.exe, set the flag in the attributes parameter of IQueryAssociations::GetString to retrieve the target executable. - - - - The friendly name of a document type. - - - The friendly name of an executable file. - - - Ignore the information associated with the open subkey. - - - Look under the ShellNew subkey. - - - A template for DDE commands. - - - The DDE command to use to create a process. - - - The application name in a DDE broadcast. - - - The topic name in a DDE broadcast. - - - - Corresponds to the InfoTip registry value. - Returns an info tip for an item, or list of properties in the form of an IPropertyDescriptionList from which to create an info tip, such as when hovering the cursor over a file name. - The list of properties can be parsed with PSGetPropertyDescriptionListFromString. - - - - - Corresponds to the QuickTip registry value. This is the same as , except that it always returns a list of property names in the form of an IPropertyDescriptionList. - The difference between this value and is that this returns properties that are safe for any scenario that causes slow property retrieval, such as offline or slow networks. - Some of the properties returned from might not be appropriate for slow property retrieval scenarios. - The list of properties can be parsed with PSGetPropertyDescriptionListFromString. - - - - - Corresponds to the TileInfo registry value. Contains a list of properties to be displayed for a particular file type in a Windows Explorer window that is in tile view. - This is the same as , but, like , it also returns a list of property names in the form of an IPropertyDescriptionList. - The list of properties can be parsed with PSGetPropertyDescriptionListFromString. - - - - - Describes a general type of MIME file association, such as image and bmp, - so that applications can make general assumptions about a specific file type. - - - - - Returns the path to the icon resources to use by default for this association. - Positive numbers indicate an index into the dll's resource table, while negative numbers indicate a resource ID. - An example of the syntax for the resource is "c:\myfolder\myfile.dll,-1". - - - - - For an object that has a Shell extension associated with it, - you can use this to retrieve the CLSID of that Shell extension object by passing a string representation - of the IID of the interface you want to retrieve as the pwszExtra parameter of IQueryAssociations::GetString. - For example, if you want to retrieve a handler that implements the IExtractImage interface, - you would specify "{BB2E617C-0920-11d1-9A0B-00C04FC2D6C1}", which is the IID of IExtractImage. - - - - - For a verb invoked through COM and the IDropTarget interface, you can use this flag to retrieve the IDropTarget object's CLSID. - This CLSID is registered in the DropTarget subkey. - The verb is specified in the supplied file parameter in the call to IQueryAssociations::GetString. - - - - - For a verb invoked through COM and the IExecuteCommand interface, you can use this flag to retrieve the IExecuteCommand object's CLSID. - This CLSID is registered in the verb's command subkey as the DelegateExecute entry. - The verb is specified in the supplied file parameter in the call to IQueryAssociations::GetString. - - - - (No description available on MSDN) - Introduced in Windows 8. - - - The maximum defined value, used for validation purposes. - - - Shell32 FileAttributes structure, used to retrieve the different types of a file system object. - - - 0x000000000 - Get file system object large icon. - The flag must also be set. - - - 0x000000001 - Get file system object small icon. - The flag must also be set. - - - 0x000000002 - Get file system object open icon. - A container object displays an open icon to indicate that the container is open. - The and/or flag must also be set. - - - 0x000000004 - Get file system object Shell-sized icon. - If this attribute is not specified the function sizes the icon according to the system metric values. - - - 0x000000008 - Get file system object by its PIDL. - Indicate that the given file contains the address of an ITEMIDLIST structure rather than a path name. - - - 0x000000010 - Indicates that the given file should not be accessed. Rather, it should act as if the given file exists and use the supplied attributes. - This flag cannot be combined with the , or attributes. - - - 0x000000020 - Apply the appropriate overlays to the file's icon. - The flag must also be set. - - - 0x000000040 - Returns the index of the overlay icon. - The value of the overlay index is returned in the upper eight bits of the iIcon member of the structure specified by psfi. - - - 0x000000100 - Retrieve the handle to the icon that represents the file and the index of the icon within the system image list. The handle is copied to the member of the structure, and the index is copied to the member. - - - 0x000000200 - Retrieve the display name for the file. The name is copied to the member of the structure. - The returned display name uses the long file name, if there is one, rather than the 8.3 form of the file name. - - - 0x000000400 - Retrieve the string that describes the file's type. - - - 0x000000800 - Retrieve the item attributes. The attributes are copied to the member of the structure. - Will touch every file, degrading performance. - - - 0x000001000 - Retrieve the name of the file that contains the icon representing the file specified by pszPath. The name of the file containing the icon is copied to the member of the structure. The icon's index is copied to that structure's member. - - - 0x000002000 - Retrieve the type of the executable file if pszPath identifies an executable file. - This flag cannot be specified with any other attributes. - - - 0x000004000 - Retrieve the index of a system image list icon. - - - 0x000008000 - Add the link overlay to the file's icon. - The flag must also be set. - - - 0x000010000 - Blend the file's icon with the system highlight color. - - - 0x000020000 - Modify to indicate that contains specific attributes that are desired. - This flag cannot be specified with the attribute. Will touch every file, degrading performance. - - - SHFILEINFO structure, contains information about a file system object. - - - A handle to the icon that represents the file. - Caller is responsible for destroying this handle with DestroyIcon() when no longer needed. - - - The index of the icon image within the system image list. - - - An array of values that indicates the attributes of the file object. - - - The name of the file as it appears in the Windows Shell, or the path and file name of the file that contains the icon representing the file. - - - The type of file. - - - SFGAO - Attributes that can be retrieved from a file system object. - - - 0x00000000 - None. - - - 0x00000001 - The specified items can be copied. - - - 0x00000002 - The specified items can be moved. - - - 0x00000004 - Shortcuts can be created for the specified items. - - - 0x00000008 - The specified items can be bound to an IStorage object through IShellFolder::BindToObject. For more information about namespace manipulation capabilities, see IStorage. - - - 0x00000010 - The specified items can be renamed. Note that this value is essentially a suggestion; not all namespace clients allow items to be renamed. However, those that do must have this attribute set. - - - 0x00000020 - The specified items can be deleted. - - - 0x00000040 - The specified items have property sheets. - - - 0x00000100 - The specified items are drop targets. - - - 0x00001000 - The specified items are system items. - Windows 7 and later. - - - 0x00002000 - The specified items are encrypted and might require special presentation. - - - 0x00004000 - Accessing the item (through IStream or other storage interfaces) is expected to be a slow operation. - - - 0x00008000 - The specified items are shown as dimmed and unavailable to the user. - - - 0x00010000 - The specified items are shortcuts. - - - 0x00020000 - The specified objects are shared. - - - 0x00040000 - The specified items are read-only. In the case of folders, this means that new items cannot be created in those folders. - - - 0x00080000 - The item is hidden and should not be displayed unless the Show hidden files and folders option is enabled in Folder Settings. - - - 0x00100000 - The items are nonenumerated items and should be hidden. They are not returned through an enumerator such as that created by the IShellFolder::EnumObjects method. - - - 0x00200000 - The items contain new content, as defined by the particular application. - - - 0x00400000 - Indicates that the item has a stream associated with it. - - - 0x00800000 - Children of this item are accessible through IStream or IStorage. - - - 0x01000000 - When specified as input, instructs the folder to validate that the items contained in a folder or Shell item array exist. - - - 0x02000000 - The specified items are on removable media or are themselves removable devices. - - - 0x04000000 - The specified items are compressed. - - - 0x08000000 - The specified items can be hosted inside a web browser or Windows Explorer frame. - - - 0x10000000 - The specified folders are either file system folders or contain at least one descendant (child, grandchild, or later) that is a file system folder. - - - 0x20000000 - The specified items are folders. - - - 0x40000000 - The specified folders or files are part of the file system (that is, they are files, directories, or root directories). - - - 0x80000000 - The specified folders have subfolders. - - - Used by method UrlIs() to define a URL type. - - - Is the URL valid? - - - Is the URL opaque? - - - Is the URL a URL that is not typically tracked in navigation history? - - - Is the URL a file URL? - - - Attempt to determine a valid scheme for the URL. - - - Does the URL string end with a directory? - - - Does the URL have an appended query string? - - - Destroys an icon and frees any memory the icon occupied. - An handle to an icon. - - - Gets the file or protocol that is associated with from the registry. - A path to the file. - The associated file- or protocol-related string from the registry or string.Empty if no association can be found. - - - Gets the content-type that is associated with from the registry. - A path to the file. - The associated file- or protocol-related content-type from the registry or string.Empty if no association can be found. - - - Gets the default icon that is associated with from the registry. - A path to the file. - The associated file- or protocol-related default icon from the registry or string.Empty if no association can be found. - - - Gets the friendly application name that is associated with from the registry. - A path to the file. - The associated file- or protocol-related friendly application name from the registry or string.Empty if no association can be found. - - - Gets the friendly document name that is associated with from the registry. - A path to the file. - The associated file- or protocol-related friendly document name from the registry or string.Empty if no association can be found. - - - Gets an handle to the Shell icon that represents the file. - Caller is responsible for destroying this handle with DestroyIcon() when no longer needed. - - The path to the file system object which should not exceed maximum path length. Both absolute and - relative paths are valid. - - - Icon size or . Can also be combined - with and others. - - An handle to the Shell icon that represents the file, or IntPtr.Zero on failure. - - - Retrieves information about an object in the file system, such as a file, folder, directory, or drive root. - A struct instance. - - You should call this function from a background thread. - Failure to do so could cause the UI to stop responding. - Unicode path are supported. - - The path to the file system object which should not exceed the maximum path length. Both absolute and relative paths are valid. - A attribute. - One ore more attributes. - - suppress any Exception that might be thrown as a result from a failure, - such as ACLs protected directories or non-accessible reparse points. - - - - Retrieves an instance of containing information about the specified file. - A path to the file. - A class instance. - - - Retrieves an instance of containing information about the specified file. - A path to the file. - Indicates the format of the path parameter(s). - A class instance. - - - Gets the "Open With" command that is associated with from the registry. - A path to the file. - The associated file- or protocol-related "Open With" command from the registry or string.Empty if no association can be found. - - - Gets the Shell command that is associated with from the registry. - A path to the file. - The associated file- or protocol-related Shell command from the registry or string.Empty if no association can be found. - - - Converts a file URL to a Microsoft MS-DOS path. - The file URL. - - The Microsoft MS-DOS path. If no path can be created, string.Empty is returned. - If is , will also be returned. - - - - Creates a path from a file URL. - The URL. - - The file path. If no path can be created, string.Empty is returned. - If is , will also be returned. - - - - Determines whether a path to a file system object such as a file or folder is valid. - The full path of maximum length the maximum path length to the object to verify. - if the file exists; otherwise - - - Tests whether a URL is a specified type. - The URL. - - - For all but one of the URL types, UrlIs returns if the URL is the specified type, or otherwise. - If UrlIs is set to , UrlIs will attempt to determine the URL scheme. - If the function is able to determine a scheme, it returns , or otherwise. - - - - Converts a Microsoft MS-DOS path to a canonicalized URL. - The full MS-DOS path of maximum length . - - The URL. If no URL can be created string.Empty is returned. - If is , will also be returned. - - - - Tests a URL to determine if it is a file URL. - The URL. - if the URL is a file URL, or otherwise. - - - Returns whether a URL is a URL that browsers typically do not include in navigation history. - The URL. - if the URL is a URL that is not included in navigation history, or otherwise. - - - Returns whether a URL is opaque. - The URL. - if the URL is opaque, or otherwise. - - - Searches for and retrieves a file or protocol association-related string from the registry. - A path to a file. - One or more attributes. Only one "InitXXX" attribute can be used. - A attribute. - The associated file- or protocol-related string from the registry or string.Empty if no association can be found. - - - - Retrieve information about an object in the file system, such as a file, folder, directory, or drive root. - A struct instance. - - You should call this function from a background thread. - Failure to do so could cause the UI to stop responding. - Unicode path are not supported. - - The path to the file system object which should not exceed the maximum path length in length. Both absolute and relative paths are valid. - A attribute. - A attribute. - Checks that the path contains only valid path-characters. - - suppress any Exception that might be thrown as a result from a failure, - such as ACLs protected directories or non-accessible reparse points. - - - - Indicates whether the link target is a file or directory. - Used by Win32 API CreateSymbolicLink()/CreateSymbolicLinkTransacted() - - - The link target is a file. - - - The link target is a directory. - - - Represents information about a symbolic link. - - - Gets the type of the link. - The type of the link. - - - Specifies the type of a symbolic link. - - - The symbolic link is absolute. - - - The symbolic link is relative. - - - The function attempted to use a name that is reserved for use by another transaction. - - - Initializes a new instance of the class. - - - Initializes a new instance of the class. - The message. - - - Initializes a new instance of the class. - The message. - The inner exception. - - - Initializes a new instance of the class. - The info. - The context. - - - The function attempted to use a name that is reserved for use by another transaction. - - - Initializes a new instance of the class. - - - Initializes a new instance of the class. - The message. - - - Initializes a new instance of the class. - The message. - The inner exception. - - - Initializes a new instance of the class. - The info. - The context. - - - The remote server or share does not support transacted file operations. - - - Initializes a new instance of the class. - - - Initializes a new instance of the class. - The message. - - - Initializes a new instance of the class. - The message. - The inner exception. - - - Initializes a new instance of the class. - The object that holds the serialized object data. - The contextual information about the source or destination. - - - The transaction handle associated with this operation is not valid. - - - Initializes a new instance of the class. - - - Initializes a new instance of the class. - The message. - - - Initializes a new instance of the class. - The message. - The inner exception. - - - Initializes a new instance of the class. - The data for serializing or deserializing the object. - The source and destination for the object. - - - A KTM transaction object for use with the transacted operations in - - - Initializes a new instance of the class, internally using the specified . - This method allows the usage of methods accepting a with an instance of . - - The transaction to use for any transactional operations. - - - Initializes a new instance of the class with a default security descriptor, infinite timeout and no description. - - - Initializes a new instance of the class with a default security descriptor. - The time, in milliseconds, when the transaction will be aborted if it has not already reached the prepared state. - A user-readable description of the transaction. This parameter may be . - - - Initializes a new instance of the class. - The security descriptor. - The time, in milliseconds, when the transaction will be aborted if it has not already reached the prepared state. - Specify 0 to provide an infinite timeout. - A user-readable description of the transaction. This parameter may be . - - - Requests that the specified transaction be committed. - - - - - - Requests that the specified transaction be rolled back. This function is synchronous. - - - - - Gets the safe handle. - The safe handle. - - - Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. - - - Represents a wrapper class for a handle used by the FindFirstFile/FindNextFile Win32 API functions. - - - Initializes a new instance of the class. - - - Initializes a new instance of the class. - The handle. - [owns handle]. - - - When overridden in a derived class, executes the code required to free the handle. - if the handle is released successfully; otherwise, in the event of a catastrophic failure, . In this case, it generates a ReleaseHandleFailed Managed Debugging Assistant. - - - Represents a wrapper class for a handle used by the FindFirstVolumeMountPoint/FindVolumeMountPointClose methods of the Win32 API. - - - Initializes a new instance of the class. - - - Initializes a new instance of the class. - The handle. - [owns handle]. - - - When overridden in a derived class, executes the code required to free the handle. - if the handle is released successfully; otherwise, in the event of a catastrophic failure, . - - - - Represents a wrapper class for a handle used by the FindFirstVolume/FindNextVolume methods of the Win32 API. - - - Initializes a new instance of the class. - - - Initializes a new instance of the class. - The handle. - [owns handle]. - - - When overridden in a derived class, executes the code required to free the handle. - if the handle is released successfully; otherwise, in the event of a catastrophic failure, . In this case, it generates a ReleaseHandleFailed Managed Debugging Assistant. - - - - Provides a concrete implementation of SafeHandle supporting transactions. - - - Initializes a new instance of the class. - - - When overridden in a derived class, executes the code required to free the handle. - if the handle is released successfully; otherwise, in the event of a catastrophic failure, . In this case, it generates a ReleaseHandleFailed Managed Debugging Assistant. - - - It is too late to perform the requested operation, since the Transaction has already been aborted. - - - Initializes a new instance of the class. - - - Initializes a new instance of the class. - The message. - - - Initializes a new instance of the class. - The message. - The inner exception. - - - Initializes a new instance of the class. - The info. - The context. - - - It is too late to perform the requested operation, since the Transaction has already been committed. - - - Initializes a new instance of the class. - - - Initializes a new instance of the class. - The message. - - - Initializes a new instance of the class. - The message. - The inner exception. - - - Initializes a new instance of the class. - The object that holds the serialized object data. - The contextual information about the source or destination. - - - The exception that is thrown when an attempt to create a file or directory that already exists was made. - - - Initializes a new instance of the class. - - - Initializes a new instance of the class. - The message. - - - Initializes a new instance of the class. - The message. - The inner exception. - - - Initializes a new instance of the class. - The data for serializing or deserializing the object. - The source and destination for the object. - - - Static class providing utility methods for working with Microsoft Windows devices and volumes. - - - Defines, redefines, or deletes MS-DOS device names. - An MS-DOS device name string specifying the device the function is defining, redefining, or deleting. - An MS-DOS path that will implement this device. - - - Defines, redefines, or deletes MS-DOS device names. - - An MS-DOS device name string specifying the device the function is defining, redefining, or deleting. - - - >An MS-DOS path that will implement this device. If parameter has the - flag specified, is used as is. - - - The controllable aspects of the DefineDosDevice function, flags which will be combined with the - default. - - - - Deletes an MS-DOS device name. - An MS-DOS device name specifying the device to delete. - - - Deletes an MS-DOS device name. - An MS-DOS device name string specifying the device to delete. - - A pointer to a path string that will implement this device. The string is an MS-DOS path string unless the - flag is specified, in which case this string is a path string. - - - - Deletes an MS-DOS device name. - An MS-DOS device name string specifying the device to delete. - - A pointer to a path string that will implement this device. The string is an MS-DOS path string unless the - flag is specified, in which case this string is a path string. - - - Only delete MS-DOS device on an exact name match. If is , - must be the same path used to create the mapping. - - - - Deletes an MS-DOS device name. - An MS-DOS device name string specifying the device to delete. - - A pointer to a path string that will implement this device. The string is an MS-DOS path string unless the - flag is specified, in which case this string is a path string. - - - The controllable aspects of the DefineDosDevice function flags which will be combined with the - default. - - - Only delete MS-DOS device on an exact name match. If is , - must be the same path used to create the mapping. - - - - Retrieves a list of all existing MS-DOS device names. - An with one or more existing MS-DOS device names. - - - Retrieves a list of all existing MS-DOS device names. - - (Optional, default: ) An MS-DOS device name string specifying the target of the query. This parameter can be - "sort". In that case a sorted list of all existing MS-DOS device names is returned. This parameter can be . - In that case, the function will store a list of all existing MS-DOS device names into the buffer. - - An with or more existing MS-DOS device names. - - - - Retrieves information about MS-DOS device names. The function can obtain the current mapping for a particular MS-DOS device name. - The function can also obtain a list of all existing MS-DOS device names. - - - An MS-DOS device name string, or part of, specifying the target of the query. This parameter can be . In that - case, the QueryDosDevice function will store a list of all existing MS-DOS device names into the buffer. - - - (Optional, default: ) If options[0] = a sorted list will be returned. - - An with one or more existing MS-DOS device names. - - - Gets the name of the file system, such as NTFS or FAT32. - Use DriveFormat to determine what formatting a drive uses. - - A path to a drive. For example: "C:\", "\\server\share", or "\\?\Volume{c0580d5e-2ad6-11dc-9924-806e6f6e6963}\". - - The name of the file system on the specified drive or on failure or if not available. - - - Gets the drive letter from an MS-DOS device name. For example: "\Device\HarddiskVolume2" returns "C:\". - An MS-DOS device name. - The drive letter from an MS-DOS device name. - - - - Determines, based on the root of the current directory, whether a disk drive is a removable, fixed, CD-ROM, RAM disk, or network - drive. - - A object. - - - Determines whether a disk drive is a removable, fixed, CD-ROM, RAM disk, or network drive. - A path to a drive. For example: "C:\", "\\server\share", or "\\?\Volume{c0580d5e-2ad6-11dc-9924-806e6f6e6963}\" - A object. - - - - Retrieves information about the amount of space that is available on a disk volume, which is the total amount of space, the total - amount of free space, and the total amount of free space available to the user that is associated with the calling thread. - - The calling application must have FILE_LIST_DIRECTORY access rights for this directory. - - A path to a drive. For example: "C:\", "\\server\share", or "\\?\Volume{c0580d5e-2ad6-11dc-9924-806e6f6e6963}\". - - A class instance. - - - - Retrieves information about the amount of space that is available on a disk volume, which is the total amount of space, the total - amount of free space, and the total amount of free space available to the user that is associated with the calling thread. - - The calling application must have FILE_LIST_DIRECTORY access rights for this directory. - - A path to a drive. For example: "C:\", "\\server\share", or "\\?\Volume{c0580d5e-2ad6-11dc-9924-806e6f6e6963}\". - - - gets both size- and disk cluster information. Get only disk cluster information, - Get only size information. - - A class instance. - - - Gets a value indicating whether a drive is ready. - - A path to a drive. For example: "C:\", "\\server\share", or "\\?\Volume{c0580d5e-2ad6-11dc-9924-806e6f6e6963}\". - - if is ready; otherwise, . - - - Deletes the label of the file system volume that is the root of the current directory. - - - - Deletes the label of a file system volume. - - The root directory of a file system volume. This is the volume the function will remove the label. - - - Deletes a Drive letter or mounted folder. - Deleting a mounted folder does not cause the underlying directory to be deleted. - - If the parameter is a directory that is not a mounted folder, the function does nothing. The - directory is not deleted. - - - It's not an error to attempt to unmount a volume from a volume mount point when there is no volume actually mounted at that volume - mount point. - - The Drive letter or mounted folder to be deleted. For example, X:\ or Y:\MountX\. - - - - Returns an enumerable collection of of all mounted folders (volume mount points) on the specified volume. - - - - A containing the volume . - An enumerable collection of of all volume mount points on the specified volume. - - - - Returns an enumerable collection of drive letters and mounted folder paths for the specified volume. - - - - A volume path: \\?\Volume{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}\. - An enumerable collection of containing the path names for the specified volume. - - - Returns an enumerable collection of volumes on the computer. - An enumerable collection of volume names on the computer. - - - - Get the unique volume name for the given path. - - - - A path string. Both absolute and relative file and directory names, for example "..", is acceptable in this path. If you specify a - relative file or directory name without a volume qualifier, GetUniqueVolumeNameForPath returns the Drive letter of the current - volume. - - - Returns the unique volume name in the form: "\\?\Volume{GUID}\", - or on error or if unavailable. - - - - Retrieves the Win32 Device name from the Volume name. - - Name of the Volume. - - The Win32 Device name from the Volume name (for example: "\Device\HarddiskVolume2"), or on error or if - unavailable. - - - - Gets the shortest display name for the specified . - This method basically returns the shortest string returned by - A volume path: \\?\Volume{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}\. - - The shortest display name for the specified volume found, or if no display names were found. - - - - - Retrieves a volume path for the volume that is associated with the specified volume mount point (drive letter, - volume GUID path, or mounted folder). - - - - The path of a mounted folder (for example, "Y:\MountX\") or a drive letter (for example, "X:\"). - - The unique volume name of the form: "\\?\Volume{GUID}\". - - - - Tranlates DosDevicePath to a Volume GUID. For example: "\Device\HarddiskVolumeX\path\filename.ext" can translate to: "\path\ - filename.ext" or: "\\?\Volume{GUID}\path\filename.ext". - - A DosDevicePath, for example: \Device\HarddiskVolumeX\path\filename.ext. - A translated dos path. - - - Retrieves information about the file system and volume associated with the specified root file or directorystream. - A path that contains the root directory. - A instance describing the volume associatied with the specified root directory. - - - Retrieves information about the file system and volume associated with the specified root file or directorystream. - An instance to a handle. - A instance describing the volume associatied with the specified root directory. - - - Retrieve the label of a file system volume. - - A path to a volume. For example: "C:\", "\\server\share", or "\\?\Volume{c0580d5e-2ad6-11dc-9924-806e6f6e6963}\". - - - The the label of the file system volume. This function can return string.Empty since a volume label is generally not - mandatory. - - - - Retrieves the volume mount point where the specified path is mounted. - - The path to the volume, for example: "C:\Windows". - - Returns the nearest volume root path for a given directory. - The volume path name, for example: "C:\Windows" returns: "C:\". - - - - Determines whether the volume of two file system objects is the same. - The first filesystem ojbect with full path information. - The second file system object with full path information. - if both filesytem objects reside on the same volume, otherwise. - - - Determines whether the specified volume name is a defined volume on the current computer. - - A path to a volume. For example: "C:\", "\\server\share", or "\\?\Volume{c0580d5e-2ad6-11dc-9924-806e6f6e6963}\". - - on success, otherwise. - - - Sets the label of the file system volume that is the root of the current directory. - - A name for the volume. - - - Sets the label of a file system volume. - - A path to a volume. For example: "C:\", "\\server\share", or "\\?\Volume{c0580d5e-2ad6-11dc-9924-806e6f6e6963}\" - If this parameter is , the function uses the current drive. - - - A name for the volume. - If this parameter is , the function deletes any existing label - from the specified volume and does not assign a new label. - - - - Associates a volume with a Drive letter or a directory on another volume. - - - - The user-mode path to be associated with the volume. This may be a Drive letter (for example, "X:\") - or a directory on another volume (for example, "Y:\MountX\"). - - A containing the volume . - - - Defines, redefines, or deletes MS-DOS device names. - - - defines a new MS-DOS device. deletes a previously defined MS-DOS device. - - - An MS-DOS device name string specifying the device the function is defining, redefining, or deleting. - - - A pointer to a path string that will implement this device. The string is an MS-DOS path string unless the - flag is specified, in which case this string is a path string. - - - The controllable aspects of the DefineDosDevice function, flags which will be combined with the - default. - - - Only delete MS-DOS device on an exact name match. If is , - must be the same path used to create the mapping. - - - on success, otherwise. - - - Deletes a Drive letter or mounted folder. - - It's not an error to attempt to unmount a volume from a volume mount point when there is no volume actually mounted at that volume mount point. - Deleting a mounted folder does not cause the underlying directory to be deleted. - - - The Drive letter or mounted folder to be deleted. For example, X:\ or Y:\MountX\. - - suppress any Exception that might be thrown as a result from a failure, such as unavailable resources. - - If completed successfully returns , otherwise the last error number. - - - Contains information about a filesystem Volume. - - - Initializes a VolumeInfo instance. - - - A valid drive path or drive letter. This can be either uppercase or lowercase, 'a' to 'z' or a network share in the format: \\server\share. - - - Initializes a VolumeInfo instance. - A valid drive path or drive letter. This can be either uppercase or lowercase, 'a' to 'z' or a network share in the format: "\\server\share". - Refreshes the state of the object. - suppress any Exception that might be thrown as a result from a failure, such as unavailable resources. - - - Initializes a VolumeInfo instance. - An instance to a handle. - - - Initializes a VolumeInfo instance. - An instance to a handle. - Refreshes the state of the object. - suppress any Exception that might be thrown as a result from a failure, such as unavailable resources. - - - Refreshes the state of the object. - - - Returns the full path of the volume. - A string that represents this instance. - - - The specified volume supports preserved case of file names when it places a name on disk. - - - The specified volume supports case-sensitive file names. - - - The specified volume supports file-based compression. - - - Gets the name of the file system, for example, the FAT file system or the NTFS file system. - The name of the file system. - - - The full path to the volume. - - - The volume GUID. - - - Gets the maximum length of a file name component that the file system supports. - The maximum length of a file name component that the file system supports. - - - Gets the label of the volume. - The label of the volume. - This property is the label assigned to the volume, such "MyDrive" - - - The specified volume supports named streams. - - - The specified volume preserves and enforces access control lists (ACL). - - - The specified volume is read-only. - - - The specified volume supports a single sequential write. - - - Gets the volume serial number that the operating system assigns when a hard disk is formatted. - The volume serial number that the operating system assigns when a hard disk is formatted. - - - The specified volume supports the Encrypted File System (EFS). - - - The specified volume supports extended attributes. - - - The specified volume supports hard links. - - - The specified volume supports object identifiers. - - - The file system supports open by FileID. - - - The specified volume supports remote storage. (This property does not appear on MSDN) - - - The specified volume supports re-parse points. - - - The specified volume supports sparse files. - - - The specified volume supports transactions. - - - The specified volume supports update sequence number (USN) journals. - - - The specified volume supports Unicode in file names as they appear on disk. - - - The specified volume is a compressed volume, for example, a DoubleSpace volume. - - - The specified volume supports disk quotas. - - - Contains information about a Distributed File System (DFS) root or link. This class cannot be inherited. - This structure contains the name, status, GUID, time-out, number of targets, and information about each target of the root or link. - - - - Initializes a new instance of the class which acts as a wrapper for a DFS root or link target. - - - Initializes a new instance of the class, which acts as a wrapper for a DFS root or link target. - An initialized instance. - - - Returns the Universal Naming Convention (UNC) path of the DFS root or link. - A string that represents this instance. - - - The instance of the DFS root or link. - - - The comment of the DFS root or link. - - - The Universal Naming Convention (UNC) path of the DFS root or link. - - - Specifies the GUID of the DFS root or link. - - - The collection of DFS targets of the DFS root or link. - - - An enum that specifies a set of bit flags that describe the DFS root or link. - - - Specifies the time-out, in seconds, of the DFS root or link. - - - Specifies a set of flags that describe specific properties of a DFS namespace, root, or link. - - - For domain-based DFS namespaces, this member specifies the size of the corresponding Active Directory data blob, in bytes. - For stand-alone DFS namespaces, this field specifies the size of the metadata stored in the registry, - including the key names and value names, in addition to the specific data items associated with them. This field is valid for DFS roots only. - - - - Pointer to a SECURITY_DESCRIPTOR structure that specifies a self-relative security descriptor to be associated with the DFS link's reparse point. - This field is valid for DFS links only. - - - - Contains information about a DFS root or link target in a DFS namespace or from the cache maintained by the DFS client. - This class cannot be inherited. - - - - Initializes a new instance of the class, which acts as a wrapper for a DFS root or link target. - - - Initializes a new instance of the class, which acts as a wrapper for a DFS root or link target. - An initialized instance. - - - The share name of the DFS root target or link target. - A string that represents this instance. - - - The server name of the DFS root target or link target. - - - The share name of the DFS root target or link target. - - - An enum of the DFS root target or link target. - - - Contains a DFS target's priority class and rank. - - - Specifies the priority rank value of the target. The default value is 0, which indicates the highest priority rank within a priority class. - - - A set of bit flags that describe specific properties of a DFS namespace, root, or link. - - - No property flag. - - - DFS_PROPERTY_FLAG_INSITE_REFERRALS - - Scope: Domain roots, stand-alone roots, and links. - If this flag is set at the DFS root, it applies to all links; otherwise, the value of this flag is considered for each individual link. - - - When this flag is set, a DFS referral response from a DFS server for a DFS root or link with the "INSITE" option enabled contains only - those targets which are in the same site as the DFS client requesting the referral. - Targets in the two global priority classes are always returned, regardless of their site location. - - - - - DFS_PROPERTY_FLAG_ROOT_SCALABILITY - - Scope: The entire DFS namespace for a domain-based DFS namespace only. - - - By default, a DFS root target server polls the PDS to detect changes to the DFS metadata. - To prevent heavy server load on the PDC, root scalability can be enabled for the DFS namespace. - Setting this flag will cause the DFS server to poll the nearest domain controller instead of the PDC for DFS metadata changes for the common namespace. - Note that any changes made to the metadata must still occur on the PDC, however. - - - - - DFS_PROPERTY_FLAG_SITE_COSTING - - Scope: The entire DFS namespace for both domain-based and stand-alone DFS namespaces. - - - By default, targets returned in a referral response from a DFS server to a DFS client for a DFS root or link - consists of two groups: targets in the same site as the client, and targets outside the site. - - - If site-costing is enabled for the Active Directory, the response can have more than two groups, - with each group containing targets with the same site cost for the specific DFS client requesting the referral. - The groups are ordered by increasing site cost. For more information about how site-costing is used to prioritize targets. - - - - - DFS_PROPERTY_FLAG_TARGET_FAILBACK - - Scope: Domain-based DFS roots, stand-alone DFS roots, and DFS links. - If this flag is set at the DFS root, it applies to all links; otherwise, the value of this flag is considered for each individual link. - - - When this flag is set, optimal target failback is enabled for V4 DFS clients, - allowing them to fail back to an optimal target after failing over to a non-optimal one. - The target failback setting is provided to the DFS client in a V4 referral response by a DFS server. - - - - - DFS_PROPERTY_FLAG_CLUSTER_ENABLED - Scope: Stand-alone DFS roots and links only. - The DFS root is clustered to provide high availability for storage failover. - - - - DFS_PROPERTY_FLAG_ABDE - Scope: Domain-based DFS roots and stand-alone DFS roots. - When this flag is set, Access-Based Directory Enumeration (ABDE) mode support is enabled on the entire DFS root target share of the DFS namespace. - - - - Defines the set of possible DFS target priority class settings. - - - The priority class is not valid. - - - The middle or "normal" site cost priority class for a DFS target. - - - The highest priority class for a DFS target. Targets assigned this class receive global preference. - - - The highest site cost priority class for a DFS target. Targets assigned this class receive the most preference among targets of the same site cost for a given DFS client. - - - The lowest site cost priority class for a DFS target. Targets assigned this class receive the least preference among targets of the same site cost for a given DFS client. - - - The lowest level of priority class for a DFS target. Targets assigned this class receive the least preference globally. - - - The information level. - - - No specific information level used. - - - Contains information about the shared resource, including the name and type of the resource, and a comment associated with the resource. - - - Contains information about the shared resource, including the name, type, and permissions of the resource, comments associated with the resource, - the maximum number of concurrent connections, the number of current connections, the local path for the resource, and a password for the current connection. - - - - Contains information about the shared resource, including the server name, name of the resource, type, and permissions, - the number of connections, and other pertinent information. - - - - Contains information about the shared resource. - - - NETRESOURCE structure. - ResourceUsage: A set of bit flags describing how the resource can be used. - - Note that this member can be specified only if the member is equal to . - - - RESOURCEUSAGE_CONNECTABLE - The resource is a connectable resource. - The name pointed to by the lpRemoteName member can be passed to the WNetAddConnection function to make a network connection. - - - - RESOURCEUSAGE_CONTAINER - The resource is a container resource. - The name pointed to by the lpRemoteName member can be passed to the WNetAddConnection function to make a network connection. - - - - RESOURCEUSAGE_NOLOCALDEVICE - The resource is not a local device. - - - - RESOURCEUSAGE_SIBLING - The resource is a sibling. - This value is not used by Windows. - - - - RESOURCEUSAGE_ATTACHED - The resource must be attached. - This value specifies that a function to enumerate this resource should fail - if the caller is not authenticated, even if the network permits enumeration without authentication. - - - - RESOURCEUSAGE_ALL - Setting this value is equivalent to setting: , , and . - - - - NETRESOURCE structure. - ResourceType: The type of resource. - - If a network provider cannot distinguish between - print and disk resources, it can enumerate all resources. - - - - - RESOURCETYPE_ANY - ResourceType: All resources. - - If a network provider cannot distinguish between print and disk resources, it can enumerate all resources. - This value cannot be combined with or . - - - - - RESOURCETYPE_DISK - All disk resources. - - - - RESOURCETYPE_PRINT - All print resources. - - - - NETRESOURCE structure. - ResourceScope: The scope of the enumeration. - - - - RESOURCE_CONNECTED - Enumerate all currently connected resources. - The function ignores the parameter. - - - - RESOURCE_GLOBALNET - Enumerate all resources on the network. - - - - RESOURCE_REMEMBERED - Enumerate all remembered (persistent) connections. - The function ignores the parameter. - - - - RESOURCE_RECENT - - - RESOURCE_CONTEXT - Enumerate only resources in the network context of the caller. Specify this value for a Network Neighborhood view. - The function ignores the parameter. - - - - The display options for the network object in a network browsing user interface. - - - RESOURCEDISPLAYTYPE_GENERIC - The method used to display the object does not matter. - - - - RESOURCEDISPLAYTYPE_DOMAIN - The object should be displayed as a domain. - - - - RESOURCEDISPLAYTYPE_SERVER - The object should be displayed as a server. - - - - RESOURCEDISPLAYTYPE_SHARE - The object should be displayed as a share - - - - RESOURCEDISPLAYTYPE_FILE - The object should be displayed as a file. - - - - RESOURCEDISPLAYTYPE_GROUP - The object should be displayed as a group. - - - - RESOURCEDISPLAYTYPE_NETWORK - The object should be displayed as a network. - - - - RESOURCEDISPLAYTYPE_ROOT - The object should be displayed as a logical root for the entire network. - - - - RESOURCEDISPLAYTYPE_SHAREADMIN - The object should be displayed as a administrative share. - - - - RESOURCEDISPLAYTYPE_DIRECTORY - The object should be displayed as a directory. - - - - RESOURCEDISPLAYTYPE_TREE - The object should be displayed as a tree. - - - - RESOURCEDISPLAYTYPE_NDSCONTAINER - The object should be displayed as a Netware Directory Service container. - - - - Used by function WNetUseConnection(); Set of bit flags describing the connection. This parameter can be any combination of the following values. - - - No Connect options are used. - - - This flag instructs the operating system to store the network resource connection. If this bit flag is set, the operating system automatically attempts to restore the connection when the user logs on. The system remembers only successful connections that redirect local devices. It does not remember connections that are unsuccessful or deviceless connections. - - - If this flag is set, the operating system may interact with the user for authentication purposes. - - - This flag instructs the system not to use any default settings for user names or passwords without offering the user the opportunity to supply an alternative. This flag is ignored unless is also set. - - - This flag forces the redirection of a local device when making the connection. - - - If this flag is set, and the operating system prompts for a credential, the credential should be saved by the credential manager. If the credential manager is disabled for the caller's logon session, or if the network provider does not support saving credentials, this flag is ignored. This flag is also ignored unless you set the "CommandLine" flag. - - - Contains the name and type (domain-based or stand-alone) of a DFS namespace. - Minimum supported client: Windows XP with SP1 [desktop apps only] - Minimum supported server: Windows Server 2003 [desktop apps only] - - - - - - DFS_VOLUME_FLAVOR_STANDALONE - Specifies a stand-alone DFS namespace. - - - - DFS_VOLUME_FLAVOR_AD_BLOB - Specifies a domain-based DFS namespace. - - - - DFS_VOLUME_FLAVORS bitmask (0x00000300) - Used to extract the DFS namespace flavor. - - - - The WNetCancelConnection function cancels an existing network connection. You can also call the function to remove remembered network connections that are not currently connected. - - If the function succeeds, the return value is - If the function fails, the return value is a system error code. - - - Minimum supported client: Windows 2000 Professional [desktop apps only] - Minimum supported server: Windows 2000 Server [desktop apps only] - - - - The WNetGetUniversalName function takes a drive-based path for a network resource and returns an information structure that contains a more universal form of the name. - - If the function succeeds, the return value is - If the function fails, the return value is a system error code. - - - Minimum supported client: Windows 2000 Professional [desktop apps only] - Minimum supported server: Windows 2000 Server [desktop apps only] - - - - The WNetUseConnection function creates a connection to a network resource. The function can redirect a local device to a network resource. - - If the function succeeds, the return value is - If the function fails, the return value is a system error code. - - - Minimum supported client: Windows 2000 Professional [desktop apps only] - Minimum supported server: Windows 2000 Server [desktop apps only] - - - - Lists all connections made to a shared resource on the server or all connections established from a particular computer. - - If the function succeeds, the return value is NERR_Success. - If the function fails, the return value is a system error code. - - - If there is more than one user using this connection, then it is possible to get more than one structure for the same connection, but with a different user name. - Administrator, Server or Print Operator, or Power User group membership is required to successfully execute the NetConnectionEnum function. - Minimum supported client: Windows XP [desktop apps only] - Minimum supported server: Windows Server 2003 [desktop apps only] - - - - Forces a resource to close. This function can be used when an error prevents closure by any other means. - - If the function succeeds, the return value is NERR_Success. - If the function fails, the return value is a system error code. - - - You should use NetFileClose with caution because it does not write data cached on the client system to the file before closing the file. - Only members of the Administrators or Server Operators local group can successfully execute the NetFileEnum function. - Minimum supported client: Windows XP [desktop apps only] - Minimum supported server: Windows Server 2003 [desktop apps only] - - - - Returns information about some or all open files on a server, depending on the parameters specified. - - If the function succeeds, the return value is NERR_Success. - If the function fails, the return value is a system error code. - - - Only members of the Administrators or Server Operators local group can successfully execute the NetFileEnum function. - Minimum supported client: Windows XP [desktop apps only] - Minimum supported server: Windows Server 2003 [desktop apps only] - - - - Retrieves information about each (hidden) Server Message Block (SMB) resource/share on a server. - - If the function succeeds, the return value is NERR_Success. - If the function fails, the return value is a system error code. - - - For interactive users (users who are logged on locally to the machine), no special group membership is required to execute the NetShareEnum function. - For non-interactive users, Administrator, Power User, Print Operator, or Server Operator group membership is required to successfully execute the NetShareEnum function at levels 2, 502, and 503. No special group membership is required for level 0 or level 1 calls. - This function applies only to Server Message Block (SMB) shares. - Windows Server 2003 and Windows XP: For all users, Administrator, Power User, Print Operator, or Server Operator group membership is required to successfully execute the NetShareEnum function at levels 2 and 502. - Minimum supported client: Windows XP [desktop apps only] - Minimum supported server: Windows Server 2003 [desktop apps only] - - - - Retrieves information about a particular Server Message Block (SMB) shared resource on a server. - - If the function succeeds, the return value is NERR_Success. - If the function fails, the return value is a system error code. - - - For interactive users (users who are logged on locally to the machine), no special group membership is required to execute the NetShareGetInfo function. - For non-interactive users, Administrator, Power User, Print Operator, or Server Operator group membership is required to successfully execute the NetShareGetInfo function at levels 2, 502, and 503. - This function applies only to Server Message Block (SMB) shares. - Windows Server 2003 and Windows XP: For all users, Administrator, Power User, Print Operator, or Server Operator group membership is required to successfully execute the NetShareGetInfo function at levels 2 and 502. - Minimum supported client: Windows XP [desktop apps only] - Minimum supported server: Windows Server 2003 [desktop apps only] - - - - The NetServerDiskEnum function retrieves a list of disk drives on a server. - - If the function succeeds, the return value is NERR_Success. - If the function fails, the return value is a system error code. - - - The function returns an array of three-character strings (a drive letter, a colon, and a terminating null character). - Only members of the Administrators or Server Operators local group can successfully execute the NetServerDiskEnum function on a remote computer. - Minimum supported client: Windows 2000 Professional [desktop apps only] - Minimum supported server: Windows 2000 Server [desktop apps only] - - - - Enumerates the Distributed File System (DFS) namespaces hosted on a server or DFS links of a namespace hosted by a server. - - If the function succeeds, the return value is NERR_Success. - If the function fails, the return value is a system error code. - - - No special group membership is required for using the NetDfsEnum function. - Minimum supported client: Windows Vista - Minimum supported server: Windows Server 2003 - - - - Retrieves information about a Distributed File System (DFS) root or link from the cache maintained by the DFS client. - - If the function succeeds, the return value is NERR_Success. - If the function fails, the return value is a system error code. - - - No special group membership is required for using the NetDfsGetClientInfo function. - Minimum supported client: Windows Vista - Minimum supported server: Windows Server 2003 - - - - Retrieves information about a specified Distributed File System (DFS) root or link in a DFS namespace. - - If the function succeeds, the return value is NERR_Success. - If the function fails, the return value is a system error code. - - - No special group membership is required for using the NetDfsGetInfo function. - Minimum supported client: Windows Vista - Minimum supported server: Windows Server 2003 - - - - A constant of type DWORD that is set to –1. This value is valid as an input parameter to any method in section 3.1.4 that takes a PreferedMaximumLength parameter. When specified as an input parameter, this value indicates that the method MUST allocate as much space as the data requires. - MSDN "2.2.2.2 MAX_PREFERRED_LENGTH": http://msdn.microsoft.com/en-us/library/cc247107.aspx - - - Contains the name, status, GUID, time-out, property flags, metadata size, DFS target information, link reparse point security descriptor, and a list of DFS targets for a root or link. - Minimum supported client: Windows Vista with SP1 - Minimum supported server: Windows Server 2008 - - - The Universal Naming Convention (UNC) path of a DFS root or link. - - - The comment associated with the DFS root or link. - - - A that specifies a set of bit flags that describe the DFS root or link. - - - Specifies the time-out, in seconds, of the DFS root or link. - - - Specifies the GUID of the DFS root or link. - - - Specifies a set of flags that describe specific properties of a DFS namespace, root, or link. - - - For domain-based DFS namespaces, this member specifies the size of the corresponding Active Directory data blob, in bytes. - For stand-alone DFS namespaces, this field specifies the size of the metadata stored in the registry, - including the key names and value names, in addition to the specific data items associated with them. - This field is valid for DFS roots only. - - - - This member is reserved for system use. - - - Pointer to a SECURITY_DESCRIPTOR structure that specifies a self-relative security descriptor to be associated with the DFS link's reparse point. - This field is valid for DFS links only. - - - - Specifies the number of DFS targets. - - - An array of structures. - - - Contains the priority class and rank of a specific DFS target. - Minimum supported client: Windows Vista - Minimum supported server: Windows Server 2008, Windows Server 2003 with SP1 - - - DFS_TARGET_PRIORITY_CLASS enumeration value that specifies the priority class of the target. - - - Specifies the priority rank value of the target. The default value is 0, which indicates the highest priority rank within a priority class. - - - This member is reserved and must be zero. - - - Contains information about a DFS target, including the DFS target server name and share name as well as the target's state and priority. - Minimum supported client: Windows Vista - Minimum supported server: Windows Server 2008, Windows Server 2003 with SP1 - - - State of the target. - - - The DFS root target or link target server name. - - - The DFS root target or link target share name. - - - DFS_TARGET_PRIORITY structure that contains a DFS target's priority class and rank. - - - Contains information about a network resource. - The NETRESOURCE structure is returned during an enumeration of network resources. - The NETRESOURCE structure is also specified when making or querying - a network connection with calls to various Windows Networking functions. - - - - The scope of the enumeration. - - - The type of resource - - - The display options for the network object in a network browsing user interface. - - - A set of bit flags describing how the resource can be used. - - - If the member is equal to or , - this member is a pointer to a -terminated character string that specifies the name of a local device. - This member is if the connection does not use a device. - - - - If the entry is a network resource, this member is a that specifies the remote network name. - If the entry is a current or persistent connection, member points to - the network name associated with the name pointed to by the member. - The can be characters in length, - and it must follow the network provider's naming conventions. - - - - A that contains a comment supplied by the network provider. - - - A that contains the name of the provider that owns the resource. - This member can be if the provider name is unknown. - - - - Contains the identifier and other pertinent information about files, devices, and pipes. - This structure is only for use with the NetFileEnum function. - Minimum supported client: Windows XP [desktop apps only] - Minimum supported server: Windows Server 2003 [desktop apps only] - - - The identification number assigned to the resource when it is opened. - - - The access permissions associated with the opening application. This member can be one or more of the following values. - - - The number of file locks on the file, device, or pipe. - - - The path of the opened resource. - - - Specifies which user (on servers that have user-level security) or which computer (on servers that have share-level security) opened the resource. - - - Contains the name of a domain-based Distributed File System (DFS) namespace. - This structure is only for use with the NetDfsEnum, NetDfsGetClientInfo, and NetDfsGetInfo functions. - Minimum supported client: Windows XP [desktop apps only] - Minimum supported server: Windows Server 2003 [desktop apps only] - - - The name of a domain-based DFS namespace. - - - Contains the name and type (domain-based or stand-alone) of a DFS namespace. - The DFS functions use the structure to enumerate DFS namespaces hosted on a machine. - Minimum supported client: Windows XP with SP1 [desktop apps only] - Minimum supported server: Windows Server 2003 [desktop apps only] - - - Value that specifies the type of the DFS namespace. This member can be one of the values. - - - The name of a DFS namespace. - This member can have one of the following two formats: - The first format is: \ServerName\DfsName - where ServerName is the name of the root target server that hosts the stand-alone DFS namespace and DfsName is the name of the DFS namespace. - The second format is: - \DomainName\DomDfsName - where DomainName is the name of the domain that hosts the domain-based DFS namespace and DomDfsname is the name of the DFS namespace. - - - - Contains path and name information for a network resource. - - - Identifies a network resource. - - - The name of a network connection. - - - The remaing path. - - - Contains the identification number of a connection, number of open files, connection time, number of users on the connection, and the type of connection. - Minimum supported client: Windows XP [desktop apps only] - Minimum supported server: Windows Server 2003 [desktop apps only] - - - Specifies a connection identification number. - - - A combination of values that specify the type of connection made from the local device name to the shared resource. - - - Specifies the number of files currently open as a result of the connection. - - - Specifies the number of users on the connection. - - - Specifies the number of seconds that the connection has been established. - - - If the server sharing the resource is running with user-level security, the UserName member describes which user made the connection. If the server is running with share-level security, coni1_username describes which computer (computername) made the connection. - Note that Windows does not support share-level security. - - - String that specifies either the share name of the server's shared resource or the computername of the client. The value of this member depends on which name was specified as the qualifier parameter to the NetConnectionEnum function. - - - Contains information about the shared resource. - This structure can be retrieved by calling the NetShareGetInfo function. - Minimum supported client: Windows XP [desktop apps only] - Minimum supported server: Windows Server 2003 [desktop apps only] - - - A bitmask of flags that specify information about the shared resource. - - - Contains information about the shared resource, including the name and type of the resource, and a comment associated with the resource. - Minimum supported client: Windows XP [desktop apps only] - Minimum supported server: Windows Server 2003 [desktop apps only] - - - The name of a shared resource. - - - The type of share. - - - An optional comment about the shared resource. - - - Contains information about the shared resource, including the name, type, and permissions of the resource, comments associated with the resource, - the maximum number of concurrent connections, the number of current connections, the local path for the resource, and a password for the current connection. - - Share information, NT, level 2, requires admin rights to work. - Minimum supported client: Windows XP [desktop apps only] - Minimum supported server: Windows Server 2003 [desktop apps only] - - - The name of a shared resource. - - - The type of share. - - - An optional comment about the shared resource. - - - The shared resource's permissions for servers running with share-level security. - Note that Windows does not support share-level security. This member is ignored on a server running user-level security. - - - The maximum number of concurrent connections that the shared resource can accommodate. - The number of connections is unlimited if the value specified in this member is –1. - - - The number of current connections to the resource. - - - The local path for the shared resource. - For disks, this member is the path being shared. For print queues, this member is the name of the print queue being shared. - - - The share's password (when the server is running with share-level security). - - - Contains information about the shared resource, including the server name, name of the resource, type, and permissions, - the number of connections, and other pertinent information. - - Minimum supported client: Windows XP [desktop apps only] - Minimum supported server: Windows Server 2003 [desktop apps only] - - - The name of a shared resource. - - - The type of share. - - - An optional comment about the shared resource. - - - The shared resource's permissions for servers running with share-level security. - Note that Windows does not support share-level security. This member is ignored on a server running user-level security. - - - The maximum number of concurrent connections that the shared resource can accommodate. - The number of connections is unlimited if the value specified in this member is –1. - - - The number of current connections to the resource. - - - The local path for the shared resource. - For disks, this member is the path being shared. For print queues, this member is the name of the print queue being shared. - - - The share's password (when the server is running with share-level security). - - - The DNS or NetBIOS name of the remote server on which the shared resource resides. - A value of "*" indicates no configured server name. - - - Reserved; must be zero. - - - Specifies the SECURITY_DESCRIPTOR associated with this share. - - - A set of bit flags that describe the storage state of the DFS root or link target. - - - No storage state. - - - DFS_STORAGE_STATE_OFFLINE - The DFS root or link target is offline. - - Windows Server 2003: The state of a root target cannot be set to DFS_STORAGE_STATE_OFFLINE. - - - DFS_STORAGE_STATE_ONLINE - The DFS root or link target is online. - - - - DFS_STORAGE_STATE_ACTIVE - The DFS root or link target is the active target. - - - - A set of bit flags that describe the state of the DFS root or link; - the state of the DFS namespace root cannot be changed. - One flag is set, and one DFS_VOLUME_FLAVOR flag is set. - - - - No volume state. - - - DFS_VOLUME_STATE_OK - The specified DFS root or link is in the normal state. - - - - DFS_VOLUME_STATE_INCONSISTENT - The internal DFS database is inconsistent with the specified DFS root or link. - Attempts to repair the inconsistency have failed. - - - - DFS_VOLUME_STATE_OFFLINE - The specified DFS root or link is offline or unavailable. - - - - DFS_VOLUME_STATE_ONLINE - The specified DFS root or link is available. - - - - DFS_VOLUME_FLAVOR_STANDALONE - The system sets this flag if the root is associated with a stand-alone DFS namespace. - - Windows XP: This value is not supported. - - - DFS_VOLUME_FLAVOR_AD_BLOB - The system sets this flag if the root is associated with a domain-based DFS namespace. - - Windows XP: This value is not supported. - - - A set of bit flags that describe the permissions for the shared resource's on servers running with share-level security. - Note that Windows does not support share-level security. This member is ignored on a server running user-level security. - - - No permissions. - - - ACCESS_READ - Permission to read data from a resource and, by default, to execute the resource. - - - - ACCESS_WRITE - Permission to write data to the resource. - - - - ACCESS_CREATE - Permission to create an instance of the resource (such as a file); data can be written to the resource as the resource is created. - - - - ACCESS_EXEC - Permission to execute the resource. - - - - ACCESS_DELETE - Permission to delete the resource. - - - - ACCESS_ATRIB - Permission to modify the resource's attributes, such as the date and time when a file was last modified. - - - - ACCESS_PERM - Permission to modify the permissions (read, write, create, execute, and delete) assigned to a resource for a user or application. - - - - ACCESS_ALL - Permission to read, write, create, execute, and delete resources, and to modify their attributes and permissions. - - - - Contains information about the shared resource. - - Minimum supported client: Windows XP [desktop apps only] - Minimum supported server: Windows Server 2003 [desktop apps only] - - - - No specific resource type used. - - - SHI1005_FLAGS_DFS - The specified share is present in a DFS tree structure. This flag cannot be set with NetShareSetInfo. - - - - SHI1005_FLAGS_DFS_ROOT - The specified share is the root volume in a DFS tree structure. This flag cannot be set with NetShareSetInfo. - - - - SHI1005_FLAGS_RESTRICT_EXCLUSIVE_OPENS - The specified share disallows exclusive file opens, where reads to an open file are disallowed. - - - - SHI1005_FLAGS_FORCE_SHARED_DELETE - Shared files in the specified share can be forcibly deleted. - - - - SHI1005_FLAGS_ALLOW_NAMESPACE_CACHING - Clients are allowed to cache the namespace of the specified share. - - - - SHI1005_FLAGS_ACCESS_BASED_DIRECTORY_ENUM - The server will filter directory entries based on the access permissions that the user on the client computer has for the server on which the files reside. - Only files for which the user has read access and directories for which the user has FILE_LIST_DIRECTORY access will be returned. If the user has SeBackupPrivilege, all available information will be returned. - - This flag is supported only on servers running Windows Server 2003 with SP1 or later. - - - SHI1005_FLAGS_FORCE_LEVELII_OPLOCK - Prevents exclusive caching modes that can cause delays for highly shared read-only data. - - This flag is supported only on servers running Windows Server 2008 R2 or later. - - - SHI1005_FLAGS_ENABLE_HASH - Enables server-side functionality needed for peer caching support. - Clients on high-latency or low-bandwidth connections can use alternate methods to retrieve data from peers if available, instead of sending requests to the server. - This is only supported on shares configured for manual caching (CSC_CACHE_MANUAL_REINT). - This flag is supported only on servers running Windows Server 2008 R2 or later. - - - SHI1005_FLAGS_ENABLE_CA (0X4000) - Enables server-side functionality needed for peer caching support. Clients on high-latency or low-bandwidth connections can use alternate methods to retrieve data from peers if available, instead of sending requests to the server. This is only supported on shares configured for manual caching (CSC_CACHE_MANUAL_REINT). - Windows 7, Windows Server 2008 R2, Windows Vista, Windows Server 2008, and Windows Server 2003: This flag is not supported. - - - The type of the shared resource. - MSDN: 2.2.2.4 Share Types - http://msdn.microsoft.com/en-us/library/cc247110.aspx - - - - Disk drive. - - - Print queue. - - - Communication device. - - - Interprocess communication (IPC). - - - A cluster share. - - - A Scale-Out cluster share. - - - A DFS share in a cluster. - - - Special share reserved for interprocess communication (IPC$) or remote administration of the server (ADMIN$). - Can also refer to administrative shares such as C$, D$, E$, and so forth. - - - - A temporary share that is not persisted for creation each time the file server initializes. - - - Retriev all known - - - Provides static methods to retrieve network resource information from a local- or remote host. - - - Enumerates open resources from the local host. - open resources from the local host. - - - - - Enumerates open resources from the specified host. - open resources from the specified . - - - The DNS or NetBIOS name of the remote server. refers to the local host. - - This parameter may be . Enumerates only resources that have the value of the basepath parameter as a prefix. - (A prefix is the portion of a path that comes before a backslash.) - - - This parameter may be . The name of the user or the name of the connection; If - does not begin with two backslashes ("\\") it indicates the name of the user. If begins with two - backslashes ("\\") it indicates the name of the connection. - - suppress any Exception that might be thrown as a result from a failure, such as unavailable resources. - - - >Enumerates open resources from the specified host. - open resources from the specified . - - - The DNS or NetBIOS name of the remote server. refers to the local host. - - This parameter may be . Enumerates only resources that have the value of the basepath parameter as a prefix. - (A prefix is the portion of a path that comes before a backslash.) - - - This parameter may be . The name of the user or the name of the connection; If - does not begin with two backslashes ("\\") it indicates the name of the user. If begins with two - backslashes ("\\") it indicates the name of the connection. - - suppress any Exception that might be thrown as a result from a failure, such as unavailable resources. - - - Enumerates drives from the local host. - drives from the local host. - - - - Enumerates local drives from the specified host. - drives from the specified host. - - The DNS or NetBIOS name of the remote server. refers to the local host. - - suppress any Exception that might be thrown as a result from a failure, - such as unavailable resources. - - - - Enumerates local drives from the specified host. - drives from the specified host. - - - The DNS or NetBIOS name of the remote server. refers to the local host. - - suppress any Exception that might be thrown as a result from a failure, - such as unavailable resources. - - - - Enumerates open connections from the local host. - connection information from the local host. - - - - - Enumerates open connections from the specified host. - connection information from the specified . - - - The DNS or NetBIOS name of the remote server. refers to the local host. - The name of the Server Message Block (SMB) share. - - suppress any Exception that might be thrown as a result from a failure, - such as unavailable resources. - - - - Enumerates Server Message Block (SMB) shares from the local host. - shares from the specified host. - This method also enumerates hidden shares. - - - Enumerates Server Message Block (SMB) shares from the local host. - shares from the specified host. - This method also enumerates hidden shares. - suppress any Exception that might be thrown as a result from a failure, such as unavailable resources. - - - Enumerates Server Message Block (SMB) shares from the local host. - shares from the specified host. - This method also enumerates hidden shares. - The type of the shared resource to retrieve. - suppress any Exception that might be thrown as a result from a failure, such as unavailable resources. - - - Enumerates Server Message Block (SMB) shares from the specified . - shares from the specified host. - This method also enumerates hidden shares. - The DNS or NetBIOS name of the specified host. - - - Enumerates Server Message Block (SMB) shares from the specified . - shares from the specified host. - This method also enumerates hidden shares. - The DNS or NetBIOS name of the specified host. - suppress any Exception that might be thrown as a result from a failure, such as unavailable resources. - - - Enumerates Server Message Block (SMB) shares from the specified . - shares from the specified host. - This method also enumerates hidden shares. - The DNS or NetBIOS name of the specified host. - The type of the shared resource to retrieve. - suppress any Exception that might be thrown as a result from a failure, such as unavailable resources. - - - Gets the host and share path name for the given . - The share in the format: \\host\share. - The host and share path. For example, if is: "\\SERVER001\C$\WINDOWS\System32", - its is returned as string[0] = "SERVER001" and string[1] = "\C$\WINDOWS\System32". - If the conversion from local path to UNC path fails, is returned. - - - - Retrieves information about the Server Message Block (SMB) share as defined on the specified host. - A class, or on failure or when not available, and is . - The share in the format: \\host\share. - to suppress any Exception that might be thrown as a result from a failure, such as unavailable resources. - - - Retrieves information about the Server Message Block (SMB) share as defined on the specified host. - A class, or on failure or when not available, and is . - One of the options. - The share in the format: \\host\share. - to suppress any Exception that might be thrown as a result from a failure, such as unavailable resources. - - - Retrieves information about the Server Message Block (SMB) share as defined on the specified host. - A class, or on failure or when not available, and is . - The DNS or NetBIOS name of the specified host. - The name of the Server Message Block (SMB) share. - to suppress any Exception that might be thrown as a result from a failure, such as unavailable resources. - - - Retrieves information about the Server Message Block (SMB) share as defined on the specified host. - A class, or on failure or when not available, and is . - One of the options. - A string that specifies the DNS or NetBIOS name of the specified . - A string that specifies the name of the Server Message Block (SMB) share. - to suppress any Exception that might be thrown as a result from a failure, such as unavailable resources. - - - Enumerates open connections from the specified host. - connection information from the specified . - - - The DNS or NetBIOS name of the remote server. refers to the local host. - The name of the Server Message Block (SMB) share. - suppress any Exception that might be thrown as a result from a failure, such as unavailable resources. - - - Enumerates Server Message Block (SMB) shares from a local or remote host. - shares from the specified host. - This method also enumerates hidden shares. - - - The DNS or NetBIOS name of the specified host. - The type of the shared resource to retrieve. - suppress any Exception that might be thrown as a result from a failure, such as unavailable resources. - - - Gets the structure of a Server Message Block (SMB) share. - A class, or on failure or when not available, and is . - - One of the options. - A string that specifies the DNS or NetBIOS name of the specified . - A string that specifies the name of the Server Message Block (SMB) share. - to suppress any Exception that might be thrown as a result from a failure, such as unavailable resources. - - - Enumerates the DFS Links from a DFS namespace. - of DFS namespaces. - - - - The Universal Naming Convention (UNC) path of a DFS root or link. - - - Enumerates the DFS namespaces from the local host. - of DFS Root namespaces from the local host. - - - - - Enumerates the DFS namespaces from a host. - of DFS Root namespaces from a host. - - - The DNS or NetBIOS name of a host. - suppress any Exception that might be thrown as a result from a failure, such as unavailable resources. - - - Enumerates the DFS namespaces from the domain. - of DFS Root namespaces from the domain. - - - - - Enumerates the DFS namespaces from a domain. - of DFS Root namespaces from a domain. - - - A domain name. - suppress any Exception that might be thrown as a result from a failure, such as unavailable resources. - - - Gets information about a DFS root or link from the cache maintained by the DFS client. - A instance. - - - The Universal Naming Convention (UNC) path of a DFS root or link. - - - Gets information about a DFS root or link from the cache maintained by the DFS client. - A instance. - - - The Universal Naming Convention (UNC) path of a DFS root or link. - The name of the DFS root target or link target server. - The name of the share corresponding to the DFS root target or link target. - - - Gets information about a specified DFS root or link in a DFS namespace. - A instance. - - - The Universal Naming Convention (UNC) path of a DFS root or link. - - - Enumerates the DFS namespaces from a host. - of DFS Root namespaces from a host. - - - - The DNS or NetBIOS name of a host. - suppress any Exception that might be thrown as a result from a failure, such as unavailable resources. - - - Enumerates the DFS namespaces from a domain. - of DFS Root namespaces from a domain. - - - - A domain name. - suppress any Exception that might be thrown as a result from a failure, such as unavailable resources. - - - Retrieves information about a specified DFS root or link in a DFS namespace. - A instance. - - - - - retrieves information about a Distributed File System (DFS) root or link from the cache maintained by the - DFS client. When retrieves information about a specified Distributed File System (DFS) root or link in a - DFS namespace. - - The Universal Naming Convention (UNC) path of a DFS root or link. - - The name of the DFS root target or link target server. If is , this - parameter is always . - - - The name of the share corresponding to the DFS root target or link target. If is - , this parameter is always . - - - - Creates a connection to a network resource. The function can redirect a local device to a network resource. - If is or string.Empty, returns the last available drive letter, otherwise. - - The name of a local device to be redirected, such as "F:". When is or - string.Empty, the last available drive letter will be used. Letters are assigned beginning with Z:, then Y: and so on. - - The network resource to connect to. The string can be up to MAX_PATH characters in length. - - - Creates a connection to a network resource. The function can redirect a local device to a network resource. - If is or string.Empty, returns the last available drive letter, null otherwise. - - The name of a local device to be redirected, such as "F:". When is or - string.Empty, the last available drive letter will be used. Letters are assigned beginning with Z:, then Y: and so on. - - The network resource to connect to. The string can be up to MAX_PATH characters in length. - - The user name for making the connection. If is , the function uses the default - user name. (The user context for the process provides the default user name) - - - The password to be used for making the network connection. If is , the function - uses the current default password associated with the user specified by . - - always pops-up an authentication dialog box. - successful network resource connections will be saved. - - When the operating system prompts for a credential, the credential should be saved by the credential manager when true. - - - - Creates a connection to a network resource. The function can redirect a local device to a network resource. - If is or string.Empty, returns the last available drive letter, null otherwise. - - The name of a local device to be redirected, such as "F:". When is or - string.Empty, the last available drive letter will be used. Letters are assigned beginning with Z:, then Y: and so on. - - The network resource to connect to. The string can be up to MAX_PATH characters in length. - - An instance of which provides credentials for password-based authentication schemes such as basic, - digest, NTLM, and Kerberos authentication. - - always pops-up an authentication dialog box. - successful network resource connections will be saved. - - When the operating system prompts for a credential, the credential should be saved by the credential manager when true. - - - - Creates a connection to a network resource. The function can redirect a local device to a network resource. - If is or string.Empty, returns the last available drive letter, null otherwise. - Handle to a window that the provider of network resources can use as an owner window for dialog boxes. - - The name of a local device to be redirected, such as "F:". When is or - string.Empty, the last available drive letter will be used. Letters are assigned beginning with Z:, then Y: and so on. - - The network resource to connect to. The string can be up to MAX_PATH characters in length. - - The user name for making the connection. If is , the function uses the default - user name. (The user context for the process provides the default user name) - - - The password to be used for making the network connection. If is , the function - uses the current default password associated with the user specified by . - - always pops-up an authentication dialog box. - successful network resource connections will be saved. - - When the operating system prompts for a credential, the credential should be saved by the credential manager when true. - - - - Creates a connection to a network resource. The function can redirect a local device to a network resource. - If is or string.Empty, returns the last available drive letter, null otherwise. - Handle to a window that the provider of network resources can use as an owner window for dialog boxes. - - The name of a local device to be redirected, such as "F:". When is or - string.Empty, the last available drive letter will be used. Letters are assigned beginning with Z:, then Y: and so on. - - The network resource to connect to. The string can be up to MAX_PATH characters in length. - - An instance of which provides credentials for password-based authentication schemes such as basic, - digest, NTLM, and Kerberos authentication. - - always pops-up an authentication dialog box. - successful network resource connections will be saved. - - When the operating system prompts for a credential, the credential should be saved by the credential manager when true. - - - - Creates a connection to a network resource. - - A network resource to connect to, for example: \\server or \\server\share. - - - Creates a connection to a network resource. - - A network resource to connect to, for example: \\server or \\server\share. - - The user name for making the connection. If is , the function uses the default - user name. (The user context for the process provides the default user name) - - - The password to be used for making the network connection. If is , the function - uses the current default password associated with the user specified by . - - always pops-up an authentication dialog box. - successful network resource connections will be saved. - - When the operating system prompts for a credential, the credential should be saved by the credential manager when true. - - - - Creates a connection to a network resource. - A network resource to connect to, for example: \\server or \\server\share. - An instance of which provides credentials for password-based authentication schemes such as basic, digest, NTLM, and Kerberos authentication. - always pops-up an authentication dialog box. - successful network resource connections will be saved. - When the operating system prompts for a credential, the credential should be saved by the credential manager when true. - - - - - Creates a connection to a network resource. - - Handle to a window that the provider of network resources can use as an owner window for dialog boxes. - A network resource to connect to, for example: \\server or \\server\share. - - The user name for making the connection. If is , the function uses the default - user name. (The user context for the process provides the default user name) - - - The password to be used for making the network connection. If is , the function - uses the current default password associated with the user specified by . - - always pops-up an authentication dialog box. - successful network resource connections will be saved. - When the operating system prompts for a credential, the credential should be saved by the credential manager when true. - - - Creates a connection to a network resource. - - Handle to a window that the provider of network resources can use as an owner window for dialog boxes. - A network resource to connect to, for example: \\server or \\server\share. - An instance of which provides credentials for password-based authentication schemes such as basic, digest, NTLM, and Kerberos authentication. - always pops-up an authentication dialog box. - successful network resource connections will be saved. - When the operating system prompts for a credential, the credential should be saved by the credential manager when true. - - - Cancels an existing network connection. You can also call the function to remove remembered network connections that are not currently connected. - The name of a local device to be disconnected, such as "F:". - - - Cancels an existing network connection. You can also call the function to remove remembered network connections that are not currently connected. - The name of a local device to be disconnected, such as "F:". - - Specifies whether the disconnection should occur if there are open files or jobs on the connection. - If this parameter is , the function fails if there are open files or jobs. - - successful removal of network resource connections will be saved. - - - Cancels an existing network connection. You can also call the function to remove remembered network connections that are not currently connected. - A network resource to disconnect from, for example: \\server or \\server\share. - - - Cancels an existing network connection. You can also call the function to remove remembered network connections that are not currently connected. - A network resource to disconnect from, for example: \\server or \\server\share. - - Specifies whether the disconnection should occur if there are open files or jobs on the connection. - If this parameter is , the function fails if there are open files or jobs. - - successful removal of network resource connections will be saved. - - - Connects to/disconnects from a network resource. The function can redirect a local device to a network resource. - If is or string.Empty, returns the last available drive letter, null otherwise. - - - The . - - - Return the host name in UNC format, for example: \\hostname. - The unc name. - - - Return the host name in UNC format, for example: \\hostname. - Name of the computer. - The unc name. - - - Structure is used to pass additional data to the Win32 function. - - - This method uses level to retieve full REMOTE_NAME_INFO structure. - A structure. - AlphaFS regards network drives created using SUBST.EXE as invalid. - - - - - The local path with drive name. - suppress any Exception that might be thrown as a result from a failure, such as unavailable resources. - - - Handle to a window that the provider of network resources can use as an owner window for dialog boxes. - - - The name of a local device to be redirected, such as "F:". When is or string.Empty, the last available drive letter will be used. Letters are assigned beginning with Z:, then Y: and so on. - - - A network resource to connect to/disconnect from, for example: \\server or \\server\share - - - A instance. Use either this or the combination of and . - - - The user name for making the connection. If is , the function uses the default user name. (The user context for the process provides the default user name) - - - The password to be used for making the network connection. If is , the function uses the current default password associated with the user specified by . - - - always pops-up an authentication dialog box. - - - successful network resource connections will be saved. - - - When the operating system prompts for a credential, the credential should be saved by the credential manager when true. - - - indicates that the operation concerns a drive mapping. - - - indicates that the operation needs to disconnect from the network resource, otherwise connect. - - - Used to create a temporary connection to a network resource that will be disconnected once this instance is disposed. - - - Creates a temporary connection to a network resource. The function can redirect a local device to a network resource, using the current user credentials. - The network resource to connect to. The string can be up to MAX_PATH characters in length. - - - Creates a temporary connection to a network resource. The function can redirect a local device to a network resource, using a user name and password. - The network resource to connect to. The string can be up to MAX_PATH characters in length. - - The user name for making the connection. If is , the function uses the default - user name. (The user context for the process provides the default user name) - - - The password to be used for making the network connection. If is , the function - uses the current default password associated with the user specified by . - - always pops-up an authentication dialog box. - - - Creates a temporary connection to a network resource. The function can redirect a local device to a network resource, can be supplied. - The network resource to connect to. The string can be up to MAX_PATH characters in length. - An instance of which provides credentials for password-based authentication schemes such as basic, digest, NTLM, and Kerberos authentication. - always pops-up an authentication dialog box. - - - class destructor. - - - Releases all resources used by the class. - - - Returns the last available drive letter used for this connection. - A string that represents this instance. - - - The last available drive letter used for this connection. - The last available drive letter used for this connection. - - - The path originally specified by the user. - The path originally specified by the user. - - - Contains the identification number of a connection, number of open files, connection time, number of users on the connection, and the type of connection. - - - Create a OpenConnectionInfo instance. - - - Returns the full path to the share. - A string that represents this instance. - - - The local or remote Host. - - - Specifies a connection identification number. - - - The type of share. - - - Specifies the number of files currently open as a result of the connection. - - - Specifies the number of users on the connection. - - - Specifies the number of seconds that the connection has been established. - - - If the server sharing the resource is running with user-level security, the UserName member describes which user made the connection. If the server is running with share-level security, coni1_username describes which computer (computername) made the connection. - - - String that specifies either the share name of the server's shared resource or the computername of the client. The value of this member depends on which name was specified as the qualifier parameter to the NetConnectionEnum function. - - - Contains the identification number and other pertinent information about files, devices, and pipes. This class cannot be inherited. - - - Create a OpenResourceInfo instance. - - - Forces the open resource to close. - You should this method with caution because it does not write data cached on the client system to the file before closing the file. - - - Returns the full path to the share. - A string that represents this instance. - - - The local or remote Host. - - - The identification number assigned to the resource when it is opened. - - - The path of the opened resource. - - - The access permissions associated with the opening application. This member can be one or more of the following values. - - - The number of file locks on the file, device, or pipe. - - - Specifies which user (on servers that have user-level security) or which computer (on servers that have share-level security) opened the resource. - - - Contains information about Server Message Block (SMB) shares. This class cannot be inherited. - - - Creates a instance. - A host to retrieve shares from. - One of the options. - A or instance. - - - Returns the full path to the share. - A string that represents this instance. - - - The number of current connections to the resource. - - - The instance associated with this share. - - - Returns the full UNC path to the share. - - - The maximum number of concurrent connections that the shared resource can accommodate. - The number of connections is unlimited if the value specified in this member is –1. - - - The name of a shared resource. - - - The share's password (when the server is running with share-level security). - - - The local path for the shared resource. - For disks, this member is the path being shared. For print queues, this member is the name of the print queue being shared. - - - The shared resource's permissions for servers running with share-level security. - Note that Windows does not support share-level security. This member is ignored on a server running user-level security. - - - An optional comment about the shared resource. - - - Specifies the SECURITY_DESCRIPTOR associated with this share. - - - A pointer to a string that specifies the DNS or NetBIOS name of the remote server on which the shared resource resides. - A value of "*" indicates no configured server name. - - - The type of share. - - - The type of share resource. - - - The structure level for the ShareInfo instance. - - - Static class providing access to information about the operating system under which the assembly is executing. - - - A set of flags that describe the named Windows versions. - The values of the enumeration are ordered. A later released operating system version has a higher number, so comparisons between named versions are meaningful. - - - A Windows version earlier than Windows 2000. - - - Windows 2000 (Server or Professional). - - - Windows XP. - - - Windows Server 2003. - - - Windows Vista. - - - Windows Server 2008. - - - Windows 7. - - - Windows Server 2008 R2. - - - Windows 8. - - - Windows Server 2012. - - - Windows 8.1. - - - Windows Server 2012 R2 - - - Windows 10 - - - Windows Server - - - A later version of Windows than currently installed. - - - A set of flags to indicate the current processor architecture for which the operating system is targeted and running. - - - PROCESSOR_ARCHITECTURE_INTEL - The system is running a 32-bit version of Windows. - - - - PROCESSOR_ARCHITECTURE_IA64 - The system is running on a Itanium processor. - - - - PROCESSOR_ARCHITECTURE_AMD64 - The system is running a 64-bit version of Windows. - - - - PROCESSOR_ARCHITECTURE_UNKNOWN - Unknown architecture. - - - - Gets a value indicating whether the operating system is a server operating system. - if the current operating system is a server operating system; otherwise, . - - - Gets a value indicating whether the current process is running under WOW64. - if the current process is running under WOW64; otherwise, . - - - Gets the numeric version of the operating system. - The numeric version of the operating system. - - - Gets the named version of the operating system. - The named version of the operating system. - - - Gets the processor architecture for which the operating system is targeted. - The processor architecture for which the operating system is targeted. - If running under WOW64 this will return a 32-bit processor. Use to determine if this is the case. - - - Gets the version of the service pack currently installed on the operating system. - The version of the service pack currently installed on the operating system. - Only the and fields are used. - - - Determines whether the operating system is of the specified version or later. - if the operating system is of the specified or later; otherwise, . - The lowest version for which to return true. - - - Determines whether the operating system is of the specified version or later, allowing specification of a minimum service pack that must be installed on the lowest version. - if the operating system matches the specified with the specified service pack, or if the operating system is of a later version; otherwise, . - The minimum required version. - The major version of the service pack that must be installed on the minimum required version to return true. This can be 0 to indicate that no service pack is required. - - - The RtlGetVersion routine returns version information about the currently running operating system. - RtlGetVersion returns STATUS_SUCCESS. - Available starting with Windows 2000. - - - Retrieves information about the current system to an application running under WOW64. - If the function is called from a 64-bit application, it is equivalent to the GetSystemInfo function. - - This function does not return a value. - To determine whether a Win32-based application is running under WOW64, call the function. - Minimum supported client: Windows XP [desktop apps | Windows Store apps] - Minimum supported server: Windows Server 2003 [desktop apps | Windows Store apps] - - - Determines whether the specified process is running under WOW64. - - If the function succeeds, the return value is a nonzero value. - If the function fails, the return value is zero. To get extended error information, call GetLastError. - - Minimum supported client: Windows Vista, Windows XP with SP2 [desktop apps only] - Minimum supported server: Windows Server 2008, Windows Server 2003 with SP1 [desktop apps only] - - - - A strongly-typed resource class, for looking up localized strings, etc. - - - - - Returns the cached ResourceManager instance used by this class. - - - - - Overrides the current thread's CurrentUICulture property for all - resource lookups using this strongly typed resource class. - - - - - Looks up a localized string similar to Buffer is not large enough for the requested operation.. - - - - - Looks up a localized string similar to Cannot create directory.. - - - - - Looks up a localized string similar to Cannot determine Copy or Move action.. - - - - - Looks up a localized string similar to Destination buffer not large enough for the requested operation.. - - - - - Looks up a localized string similar to The device is not ready.. - - - - - Looks up a localized string similar to Incorrectly implemented function attempting to generate exception from successful operation. - . - - - - - Looks up a localized string similar to The specified file is hidden: [{0}]. - - - - - Looks up a localized string similar to The file or directory already exists.. - - - - - Looks up a localized string similar to The handle is closed.. - - - - - Looks up a localized string similar to The handle is invalid.. - - - - - Looks up a localized string similar to The handle is invalid. Win32Error: [{0}]. - - - - - Looks up a localized string similar to Creating hard-links on non-NTFS partitions is not supported.. - - - - - Looks up a localized string similar to Illegal characters: [{0}] in path.. - - - - - Looks up a localized string similar to An attempt to set an invalid file attribute failed.. - - - - - Looks up a localized string similar to Invalid stream name.. - - - - - Looks up a localized string similar to Invalid Subpath. - - - - - Looks up a localized string similar to Invalid transaction request.. - - - - - Looks up a localized string similar to Count cannot be negative.. - - - - - Looks up a localized string similar to Destination offset cannot be negative.. - - - - - Looks up a localized string similar to Length cannot be negative.. - - - - - Looks up a localized string similar to Lock length cannot be negative.. - - - - - Looks up a localized string similar to Offset cannot be negative.. - - - - - Looks up a localized string similar to This stream does not support seeking.. - - - - - Looks up a localized string similar to The file or directory is not a reparse point.. - - - - - Looks up a localized string similar to Argument is not a valid Volume GUID.. - - - - - Looks up a localized string similar to Path is a zero-length string or contains only white space.. - - - - - Looks up a localized string similar to Privilege name cannot be empty.. - - - - - Looks up a localized string similar to Incomplete header read.. - - - - - Looks up a localized string similar to This method requires Windows Vista or higher.. - - - - - Looks up a localized string similar to Invalid security descriptor returned from system.. - - - - - Looks up a localized string similar to Source offset and length outside the bounds of the array. - - - - - Looks up a localized string similar to The target directory is a file, not a directory: [{0}]. - - - - - Looks up a localized string similar to The target file is a directory, not a file: [{0}]. - - - - - Looks up a localized string similar to Transaction already aborted.. - - - - - Looks up a localized string similar to Transaction already committed.. - - - - - Looks up a localized string similar to Invalid transaction object.. - - - - - Looks up a localized string similar to Transaction not active.. - - - - - Looks up a localized string similar to Transaction not requested.. - - - - - Looks up a localized string similar to Transactional conflict.. - - - - - Looks up a localized string similar to Network share path should match the format: \\server\share. - - - - - Looks up a localized string similar to Backup FileStream Unlock Position must not be negative.. - - - - - Looks up a localized string similar to The given path's format is not supported: [{0}]. - - - - Represents a block of native memory of a specified size allocated using the LocalAlloc function from Kernel32.dll. - - - Creates new instance with zero IntPtr. - - - Initializes a new instance of the class allocating the specified number of bytes of unmanaged memory. - The capacity. - - - Called when object is disposed or finalized. - - - Base class for classes representing a block of unmanaged memory. - - - Initializes a new instance of the specifying the allocated capacity of the memory block. - The capacity. - - - Gets the capacity. Only valid if this instance was created using a constructor that specifies the size, - it is not correct if this handle was returned by a native method using p/invoke. - - - - Copies data from a one-dimensional, managed 8-bit unsigned integer array to the unmanaged memory pointer referenced by this instance. - The one-dimensional array to copy from. - The zero-based index into the array where Copy should start. - The number of array elements to copy. - - - Copies data from an unmanaged memory pointer to a managed 8-bit unsigned integer array. - The array to copy to. - The zero-based index in the destination array where copying should start. - The number of array elements to copy. - - - Copies data from this unmanaged memory pointer to a managed 8-bit unsigned integer array. - The offset in the buffer to start copying from. - The array to copy to. - The zero-based index in the destination array where copying should start. - The number of array elements to copy. - - - Marshals data from a managed object to an unmanaged block of memory. - - - Marshals data from an unmanaged block of memory to a newly allocated managed object of the specified type. - A managed object containing the data pointed to by the ptr parameter. - - - Allocates a managed System.String and copies a specified number of characters from an unmanaged Unicode string into it. - A managed string that holds a copy of the unmanaged string if the value of the ptr parameter is not null; otherwise, this method returns null. - - - Allocates a managed System.String and copies all characters up to the first null character from an unmanaged Unicode string into it. - A managed string that holds a copy of the unmanaged string if the value of the ptr parameter is not null; otherwise, this method returns null. - - - Implements an ISO-3309 compliant 64-bit CRC hash algorithm. - - - Initializes a new instance of - - - Initializes a new instance of - The polynomial. - The seed. - - - - Initializes an implementation of the - class. - - - - When overridden in a derived class, routes data written to the object into the hash algorithm for computing the hash. - The input to compute the hash code for.. - The offset into the byte array from which to begin using data. - The number of bytes in the byte array to use as data. - - - - Finalizes the hash computation after the last data is processed by the cryptographic stream - object. - - - This method finalizes any partial computation and returns the correct hash value for the data - stream. - - - - Gets the size, in bits, of the computed hash code. - The size, in bits, of the computed hash code. - - - Calculates the hash. - The seed. - The table. - The buffer. - The start. - The size. - The calculated hash. - - - Int 64 to big endian bytes. - The value. - A byte[]. - - - Initializes the table. - The polynomial. - An ulong[]. - - - Creates a table. - The polynomial. - A new array of ulong. - - - Enum containing the supported hash types. - - - CRC-32 (Cyclic Redundancy Check) - - - CRC-64 ISO-3309 compliant. - - - MD5 (Message digest) - - - RIPEMD-160 is a 160-bit cryptographic hash function. It is intended for use as a replacement for the 128-bit hash functions MD4, MD5, and RIPEMD. - - - SHA-1 (Secure Hash Algorithm) - - - SHA-256 (Secure Hash Algorithm) - - - SHA-384 (Secure Hash Algorithm) - - - SHA-512 (Secure Hash Algorithm) - - - The ObjectType (SE_OBJECT_TYPE) enumeration contains values that correspond to the types of Windows objects that support security. - The functions, such as GetSecurityInfo and SetSecurityInfo, that set and retrieve the security information of an object, use these values to indicate the type of object. - - - - Unknown object type. - - - Indicates a file or directory. The name string that identifies a file or directory object can be in one of the following formats: - A relative path, such as FileName.dat or ..\FileName - An absolute path, such as FileName.dat, C:\DirectoryName\FileName.dat, or G:\RemoteDirectoryName\FileName.dat. - A UNC name, such as \\ComputerName\ShareName\FileName.dat. - - - - Indicates a Windows service. A service object can be a local service, such as ServiceName, or a remote service, such as \\ComputerName\ServiceName. - - - Indicates a printer. A printer object can be a local printer, such as PrinterName, or a remote printer, such as \\ComputerName\PrinterName. - - - Indicates a registry key. A registry key object can be in the local registry, such as CLASSES_ROOT\SomePath or in a remote registry, such as \\ComputerName\CLASSES_ROOT\SomePath. - The names of registry keys must use the following literal strings to identify the predefined registry keys: "CLASSES_ROOT", "CURRENT_USER", "MACHINE", and "USERS". - - - - Indicates a network share. A share object can be local, such as ShareName, or remote, such as \\ComputerName\ShareName. - - - Indicates a local kernel object. The GetSecurityInfo and SetSecurityInfo functions support all types of kernel objects. - The GetNamedSecurityInfo and SetNamedSecurityInfo functions work only with the following kernel objects: semaphore, event, mutex, waitable timer, and file mapping. - - - Indicates a window station or desktop object on the local computer. You cannot use GetNamedSecurityInfo and SetNamedSecurityInfo with these objects because the names of window stations or desktops are not unique. - - - Indicates a directory service object or a property set or property of a directory service object. - The name string for a directory service object must be in X.500 form, for example: CN=SomeObject,OU=ou2,OU=ou1,DC=DomainName,DC=CompanyName,DC=com,O=internet - - - Indicates a directory service object and all of its property sets and properties. - - - Indicates a provider-defined object. - - - Indicates a WMI object. - - - Indicates an object for a registry entry under WOW64. - - - The SECURITY_DESCRIPTOR_CONTROL data type is a set of bit flags that qualify the meaning of a security descriptor or its components. - Each security descriptor has a Control member that stores the SECURITY_DESCRIPTOR_CONTROL bits. - - - - - - SE_OWNER_DEFAULTED (0x0001) - Indicates an SD with a default owner security identifier (SID). You can use this bit to find all of the objects that have default owner permissions set. - - - SE_GROUP_DEFAULTED (0x0002) - Indicates an SD with a default group SID. You can use this bit to find all of the objects that have default group permissions set. - - - SE_DACL_PRESENT (0x0004) - Indicates an SD that has a discretionary access control list (DACL). If this flag is not set, or if this flag is set and the DACL is NULL, the SD allows full access to everyone. - - - SE_DACL_DEFAULTED (0x0008) - Indicates an SD with a default DACL. For example, if an object creator does not specify a DACL, the object receives the default DACL from the access token of the creator. This flag can affect how the system treats the DACL, with respect to access control entry (ACE) inheritance. The system ignores this flag if the SE_DACL_PRESENT flag is not set. - - - SE_SACL_PRESENT (0x0010) - Indicates an SD that has a system access control list (SACL). - - - SE_SACL_DEFAULTED (0x0020) - Indicates an SD with a default SACL. For example, if an object creator does not specify an SACL, the object receives the default SACL from the access token of the creator. This flag can affect how the system treats the SACL, with respect to ACE inheritance. The system ignores this flag if the SE_SACL_PRESENT flag is not set. - - - SE_DACL_AUTO_INHERIT_REQ (0x0100) - Requests that the provider for the object protected by the SD automatically propagate the DACL to existing child objects. If the provider supports automatic inheritance, it propagates the DACL to any existing child objects, and sets the SE_DACL_AUTO_INHERITED bit in the security descriptors of the object and its child objects. - - - SE_SACL_AUTO_INHERIT_REQ (0x0200) - Requests that the provider for the object protected by the SD automatically propagate the SACL to existing child objects. If the provider supports automatic inheritance, it propagates the SACL to any existing child objects, and sets the SE_SACL_AUTO_INHERITED bit in the SDs of the object and its child objects. - - - SE_DACL_AUTO_INHERITED (0x0400) - Windows 2000 only. Indicates an SD in which the DACL is set up to support automatic propagation of inheritable ACEs to existing child objects. The system sets this bit when it performs the automatic inheritance algorithm for the object and its existing child objects. This bit is not set in SDs for Windows NT versions 4.0 and earlier, which do not support automatic propagation of inheritable ACEs. - - - SE_SACL_AUTO_INHERITED (0x0800) - Windows 2000: Indicates an SD in which the SACL is set up to support automatic propagation of inheritable ACEs to existing child objects. The system sets this bit when it performs the automatic inheritance algorithm for the object and its existing child objects. This bit is not set in SDs for Windows NT versions 4.0 and earlier, which do not support automatic propagation of inheritable ACEs. - - - SE_DACL_PROTECTED (0x1000) - Windows 2000: Prevents the DACL of the SD from being modified by inheritable ACEs. - - - SE_SACL_PROTECTED (0x2000) - Windows 2000: Prevents the SACL of the SD from being modified by inheritable ACEs. - - - SE_RM_CONTROL_VALID (0x4000) - Indicates that the resource manager control is valid. - - - SE_SELF_RELATIVE (0x8000) - Indicates an SD in self-relative format with all of the security information in a contiguous block of memory. If this flag is not set, the SD is in absolute format. For more information, see Absolute and Self-Relative Security Descriptors. - - - The SECURITY_INFORMATION data type identifies the object-related security information being set or queried. - This security information includes: - The owner of an object; - The primary group of an object; - The discretionary access control list (DACL) of an object; - The system access control list (SACL) of an object; - - - An unsigned 32-bit integer specifies portions of a SECURITY_DESCRIPTOR by means of bit flags. - Individual bit values (combinable with the bitwise OR operation) are as shown in the following table. - - - - - - - OWNER_SECURITY_INFORMATION (0x00000001) - The owner identifier of the object is being referenced. - - - GROUP_SECURITY_INFORMATION (0x00000002) - The primary group identifier of the object is being referenced. - - - DACL_SECURITY_INFORMATION (0x00000004) - The DACL of the object is being referenced. - - - SACL_SECURITY_INFORMATION (0x00000008) - The SACL of the object is being referenced. - - - LABEL_SECURITY_INFORMATION (0x00000010) - The mandatory integrity label is being referenced. The mandatory integrity label is an ACE in the SACL of the object. - Windows Server 2003 and Windows XP: This bit flag is not available. - - - ATTRIBUTE_SECURITY_INFORMATION (0x00000020) - The resource properties of the object being referenced. - The resource properties are stored in SYSTEM_RESOURCE_ATTRIBUTE_ACE types in the SACL of the security descriptor. - - Windows Server 2008 R2, Windows 7, Windows Server 2008, Windows Vista, Windows Server 2003, and Windows XP: This bit flag is not available. - - - SCOPE_SECURITY_INFORMATION (0x00000040) - The Central Access Policy (CAP) identifier applicable on the object that is being referenced. - Each CAP identifier is stored in a SYSTEM_SCOPED_POLICY_ID_ACE type in the SACL of the SD. - - Windows Server 2008 R2, Windows 7, Windows Server 2008, Windows Vista, Windows Server 2003, and Windows XP: This bit flag is not available. - - - BACKUP_SECURITY_INFORMATION (0x00010000) - All parts of the security descriptor. This is useful for backup and restore software that needs to preserve the entire security descriptor. - Windows Server 2008 R2, Windows 7, Windows Server 2008, Windows Vista, Windows Server 2003, and Windows XP: This bit flag is not available. - - - UNPROTECTED_SACL_SECURITY_INFORMATION (0x10000000) - The SACL inherits ACEs from the parent object. - - - UNPROTECTED_DACL_SECURITY_INFORMATION (0x20000000) - The DACL inherits ACEs from the parent object. - - - PROTECTED_SACL_SECURITY_INFORMATION (0x40000000) - The SACL cannot inherit ACEs. - - - PROTECTED_DACL_SECURITY_INFORMATION (0x80000000) - The DACL cannot inherit access control entries (ACEs). - - - An IntPtr wrapper which can be used as the result of a Marshal.AllocHGlobal operation. - Calls Marshal.FreeHGlobal when disposed or finalized. - - - - Creates new instance with zero IntPtr. - - - Copies data from a one-dimensional, managed 8-bit unsigned integer array to the unmanaged memory pointer referenced by this instance. - The one-dimensional array to copy from. - The zero-based index into the array where Copy should start. - The number of array elements to copy. - - - Called when object is disposed or finalized. - - - The AdjustTokenPrivileges function enables or disables privileges in the specified access token. Enabling or disabling privileges in an access token requires TOKEN_ADJUST_PRIVILEGES access. - - If the function succeeds, the return value is nonzero. - To determine whether the function adjusted all of the specified privileges, call GetLastError. - - Minimum supported client: Windows XP [desktop apps only] - Minimum supported server: Windows Server 2003 [desktop apps only] - - - The LookupPrivilegeDisplayName function retrieves the display name that represents a specified privilege. - - If the function succeeds, the return value is nonzero. - If the function fails, it returns zero. To get extended error information, call GetLastError. - - Minimum supported client: Windows XP [desktop apps only] - Minimum supported server: Windows Server 2003 [desktop apps only] - - - The LookupPrivilegeValue function retrieves the locally unique identifier (LUID) used on a specified system to locally represent the specified privilege name. - - If the function succeeds, the function returns nonzero. - If the function fails, it returns zero. To get extended error information, call GetLastError. - - Minimum supported client: Windows XP [desktop apps only] - Minimum supported server: Windows Server 2003 [desktop apps only] - - - The GetNamedSecurityInfo function retrieves a copy of the security descriptor for an object specified by name. -   - - If the function succeeds, the return value is ERROR_SUCCESS. - If the function fails, the return value is a nonzero error code defined in WinError.h. - -   - - Minimum supported client: Windows XP [desktop apps only] - Minimum supported server: Windows Server 2003 [desktop apps only] - - - - - The GetSecurityInfo function retrieves a copy of the security descriptor for an object specified by a handle. - - If the function succeeds, the function returns nonzero. - If the function fails, it returns zero. To get extended error information, call GetLastError. - - Minimum supported client: Windows XP [desktop apps only] - Minimum supported server: Windows Server 2003 [desktop apps only] - - - The SetSecurityInfo function sets specified security information in the security descriptor of a specified object. - The caller identifies the object by a handle. - - If the function succeeds, the function returns ERROR_SUCCESS. - If the function fails, it returns a nonzero error code defined in WinError.h. - - Minimum supported client: Windows XP [desktop apps only] - Minimum supported server: Windows Server 2003 [desktop apps only] - - - The SetNamedSecurityInfo function sets specified security information in the security descriptor of a specified object. The caller identifies the object by name. -   - - If the function succeeds, the function returns ERROR_SUCCESS. - If the function fails, it returns a nonzero error code defined in WinError.h. - -   - - Minimum supported client: Windows XP [desktop apps only] - Minimum supported server: Windows Server 2003 [desktop apps only] - - - - - The GetSecurityDescriptorDacl function retrieves a pointer to the discretionary access control list (DACL) in a specified security descriptor. - - If the function succeeds, the function returns nonzero. - If the function fails, it returns zero. To get extended error information, call GetLastError. - - Minimum supported client: Windows XP [desktop apps only] - Minimum supported server: Windows Server 2003 [desktop apps only] - - - The GetSecurityDescriptorSacl function retrieves a pointer to the system access control list (SACL) in a specified security descriptor. - - If the function succeeds, the function returns nonzero. - If the function fails, it returns zero. To get extended error information, call GetLastError. - - Minimum supported client: Windows XP [desktop apps only] - Minimum supported server: Windows Server 2003 [desktop apps only] - - - The GetSecurityDescriptorGroup function retrieves the primary group information from a security descriptor. - - If the function succeeds, the function returns nonzero. - If the function fails, it returns zero. To get extended error information, call GetLastError. - - Minimum supported client: Windows XP [desktop apps only] - Minimum supported server: Windows Server 2003 [desktop apps only] - - - The GetSecurityDescriptorControl function retrieves a security descriptor control and revision information. - - If the function succeeds, the function returns nonzero. - If the function fails, it returns zero. To get extended error information, call GetLastError. - - Minimum supported client: Windows XP [desktop apps only] - Minimum supported server: Windows Server 2003 [desktop apps only] - - - The GetSecurityDescriptorOwner function retrieves the owner information from a security descriptor. - - If the function succeeds, the function returns nonzero. - If the function fails, it returns zero. To get extended error information, call GetLastError. - - Minimum supported client: Windows XP [desktop apps only] - Minimum supported server: Windows Server 2003 [desktop apps only] - - - The GetSecurityDescriptorLength function returns the length, in bytes, of a structurally valid security descriptor. The length includes the length of all associated structures. - - If the function succeeds, the function returns the length, in bytes, of the SECURITY_DESCRIPTOR structure. - If the SECURITY_DESCRIPTOR structure is not valid, the return value is undefined. - - Minimum supported client: Windows XP [desktop apps only] - Minimum supported server: Windows Server 2003 [desktop apps only] - - - Frees the specified local memory object and invalidates its handle. - - If the function succeeds, the return value is . - If the function fails, the return value is equal to a handle to the local memory object. To get extended error information, call GetLastError. - - SetLastError is set to . - - Note The local functions have greater overhead and provide fewer features than other memory management functions. - New applications should use the heap functions unless documentation states that a local function should be used. - For more information, see Global and Local Functions. - - Minimum supported client: Windows XP [desktop apps only] - Minimum supported server: Windows Server 2003 [desktop apps only] - - - Class used to represent the SECURITY_ATTRIBUES native Win32 structure. It provides initialization function from an object. - - - Marshals an ObjectSecurity instance to unmanaged memory. - A safe handle containing the marshalled security descriptor. - The security descriptor. - - - Implements a 32-bit CRC hash algorithm compatible with Zip etc. - - Crc32 should only be used for backward compatibility with older file formats - and algorithms. It is not secure enough for new applications. - If you need to call multiple times for the same data either use the HashAlgorithm - interface or remember that the result of one Compute call needs to be ~ (XOR) before - being passed in as the seed for the next Compute call. - - - - - Initializes a new instance of Crc32. - - - - Initializes a new instance of Crc32. - The polynomial. - The seed. - - - - Initializes an implementation of the - class. - - - - When overridden in a derived class, routes data written to the object into the hash algorithm for computing the hash. - The input to compute the hash code for.. - The offset into the byte array from which to begin using data. - The number of bytes in the byte array to use as data. - - - - Finalizes the hash computation after the last data is processed by the cryptographic stream - object. - - - This method finalizes any partial computation and returns the correct hash value for the data - stream. - - - - Gets the size, in bits, of the computed hash code. - The size, in bits, of the computed hash code. - - - Initializes the table. - The polynomial. - The table. - - - Calculates the hash. - The table. - The seed. - The buffer. - The start. - The size. - The calculated hash. - - - Int 32 to big endian bytes. - The second uint 3. - A byte[]. - - - Represents a privilege for an access token. The privileges available on the local machine are available as - static instances from this class. To create a representing a privilege on another system, - use the constructor specifying a system name together with one of these static instances. - - - - - Required to assign the primary token of a process. User Right: Replace a process-level token. - - - Required to generate audit-log entries. Give this privilege to secure servers. User Right: Generate security audits. - - - Required to perform backup operations. This privilege causes the system to grant all read access control to any file, regardless of the access control list (ACL) specified for the file. Any access request other than read is still evaluated with the ACL. User Right: Back up files and directories. - - - Required to receive notifications of changes to files or directories. This privilege also causes the system to skip all traversal access checks. It is enabled by default for all users. User Right: Bypass traverse checking. - - - Required to create named file mapping objects in the global namespace during Terminal Services sessions. This privilege is enabled by default for administrators, services, and the local system account. User Right: Create global objects. - Windows XP/2000: This privilege is not supported. Note that this value is supported starting with Windows Server 2003, Windows XP SP2, and Windows 2000 SP4. - - - Required to create a paging file. User Right: Create a pagefile. - - - Required to create a permanent object. User Right: Create permanent shared objects. - - - Required to create a symbolic link. User Right: Create symbolic links. - - - Required to create a primary token. User Right: Create a token object. - - - Required to debug and adjust the memory of a process owned by another account. User Right: Debug programs. - - - Required to mark user and computer accounts as trusted for delegation. User Right: Enable computer and user accounts to be trusted for delegation. - - - Required to impersonate. User Right: Impersonate a client after authentication. - Windows XP/2000: This privilege is not supported. Note that this value is supported starting with Windows Server 2003, Windows XP SP2, and Windows 2000 SP4. - - - Required to increase the base priority of a process. User Right: Increase scheduling priority. - - - Required to increase the quota assigned to a process. User Right: Adjust memory quotas for a process. - - - Required to allocate more memory for applications that run in the context of users. User Right: Increase a process working set. - - - Required to load or unload a device driver. User Right: Load and unload device drivers. - - - Required to lock physical pages in memory. User Right: Lock pages in memory. - - - Required to create a computer account. User Right: Add workstations to domain. - - - Required to enable volume management privileges. User Right: Manage the files on a volume. - - - Required to gather profiling information for a single process. User Right: Profile single process. - - - Required to modify the mandatory integrity level of an object. User Right: Modify an object label. - - - Required to shut down a system using a network request. User Right: Force shutdown from a remote system. - - - Required to perform restore operations. This privilege causes the system to grant all write access control to any file, regardless of the ACL specified for the file. Any access request other than write is still evaluated with the ACL. Additionally, this privilege enables you to set any valid user or group SID as the owner of a file. User Right: Restore files and directories. - - - Required to perform a number of security-related functions, such as controlling and viewing audit messages. This privilege identifies its holder as a security operator. User Right: Manage auditing and security log. - - - Required to shut down a local system. User Right: Shut down the system. - - - Required for a domain controller to use the LDAP directory synchronization services. This privilege enables the holder to read all objects and properties in the directory, regardless of the protection on the objects and properties. By default, it is assigned to the Administrator and LocalSystem accounts on domain controllers. User Right: Synchronize directory service data. - - - Required to modify the nonvolatile RAM of systems that use this type of memory to store configuration information. User Right: Modify firmware environment values. - - - Required to gather profiling information for the entire system. User Right: Profile system performance. - - - Required to modify the system time. User Right: Change the system time. - - - Required to take ownership of an object without being granted discretionary access. This privilege allows the owner value to be set only to those values that the holder may legitimately assign as the owner of an object. User Right: Take ownership of files or other objects. - - - This privilege identifies its holder as part of the trusted computer base. Some trusted protected subsystems are granted this privilege. User Right: Act as part of the operating system. - - - Required to adjust the time zone associated with the computer's internal clock. User Right: Change the time zone. - - - Required to access Credential Manager as a trusted caller. User Right: Access Credential Manager as a trusted caller. - - - Required to undock a laptop. User Right: Remove computer from docking station. - - - Required to read unsolicited input from a terminal device. User Right: Not applicable. - - - Create a new representing the specified privilege on the specified system. - Name of the system. - The privilege to copy the privilege name from. - - - Gets the system name identifying this privilege. - The system name identifying this privilege. - - - Retrieves the display name that represents this privilege. - The display name that represents this privilege. - - - Retrieves the locally unique identifier (LUID) used on to represent this privilege (on the system from which it originates). - the locally unique identifier (LUID) used on to represent this privilege (on the system from which it originates). - - - Indicates whether the current object is equal to another object of the same type. - An object to compare with this object. - if the current object is equal to the parameter; otherwise, . - - - Determines whether the specified is equal to the current . - The to compare with the current . - if the specified is equal to the current ; otherwise, . - - - - Serves as a hash function for a particular type. - A hash code for the current Object. - - - Returns the system name for this privilege. - This is equivalent to . - A that represents the current . - - - Initializes a new instance of the class, representing a privilege with the specified name on the local system. - The name. - - - Used to enable one or more privileges. The privileges specified will be enabled during the lifetime of the instance. Users create an instance of this object in a using statement to ensure that it is properly disposed when the elevated privileges are no longer needed. - - - Initializes a new instance of the class. - This will enable the privileges specified (unless already enabled), and ensure that they are disabled again when - the object is disposed. (Any privileges already enabled will not be disabled). - - The privilege to enable. - Additional privileges to enable. - - - Makes sure any privileges enabled by this instance are disabled. - - - Gets the enabled privileges. Note that this might not contain all privileges specified to the constructor. Only the privileges actually enabled by this instance is returned. - The enabled privileges. - - - - This object is used to enable a specific privilege for the currently running process during its lifetime. - It should be disposed as soon as the elevated privilege is no longer needed. - For more information see the documentation on AdjustTokenPrivileges on MSDN. - - - - Initializes a new instance of the class and enabling the specified privilege for the currently running process. - The name of the privilege. - - - - Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. - In this case the privilege previously enabled will be disabled. - - - - Adjusts the privilege. - the privilege will be enabled, otherwise disabled. - - - Use this to translate error codes into HRESULTs like 0x80070006 for ERROR_INVALID_HANDLE. - - - (0) The operation completed successfully. - - - (0) The operation completed successfully. - - - (1) Incorrect function. - - - (2) The system cannot find the file specified. - - - (3) The system cannot find the path specified. - - - (5) Access is denied. - - - (15) The system cannot find the drive specified. - - - (17) The system cannot move the file to a different disk drive. - - - (18) There are no more files. - - - (21) The device is not ready. - - - (25) The drive cannot locate a specific area or track on the disk. - - - (32) The process cannot access the file because it is being used by another process. - - - (33) The process cannot access the file because another process has locked a portion of the file. - - - (38) Reached the end of the file. - - - (53) The network path was not found. - - - (65) Network access is denied. - - - (67) The network name cannot be found. - - - (80) The file exists. - - - (87) The parameter is incorrect. - - - (122) The data area passed to a system call is too small. - - - (123) The filename, directory name, or volume label syntax is incorrect. - - - (143) The system cannot join or substitute a drive to or for a directory on the same drive. - - - (145) The directory is not empty. - - - (158) The segment is already unlocked. - - - (183) Cannot create a file when that file already exists. - - - (203) The system could not find the environment option that was entered. - - - (234) More data is available. - - - (267) The directory name is invalid. - - - (995) The I/O operation has been aborted because of either a thread exit or an application request. - - - (997) Overlapped I/O operation is in progress. - - - (1200) The specified device name is invalid. - - - (1208) An extended error has occurred. - - - (1222) The network is not present or not started. - - - (1235) The request was aborted. - - - (1641) The requested operation completed successfully. - The system will be restarted so the changes can take effect. - - - - (1783) The stub received bad data. - - - (3010) The requested operation is successful. - Changes will not be effective until the system is rebooted. - - - - (3011) The requested operation is successful. - Changes will not be effective until the service is restarted. - - - - (4390) The file or directory is not a reparse point. - - - (6009) The specified file is read only. - - - (6012) Recovery policy configured for this system contains invalid recovery certificate. - - - (6700) The transaction handle associated with this operation is not valid. - - - (6701) The requested operation was made in the context - of a transaction that is no longer active. - - - - (6702) The requested operation is not valid - on the Transaction object in its current state. - - - - (6703) The caller has called a response API, but the response is not expected - because the TM did not issue the corresponding request to the caller. - - - - (6704) It is too late to perform the requested operation, - since the Transaction has already been aborted. - - - - (6705) It is too late to perform the requested operation, - since the Transaction has already been committed. - - - - (6800) The function attempted to use a name - that is reserved for use by another transaction. - - - - (6805) The remote server or share does not support transacted file operations. - - - (0) The operation completed successfully. - - - (0) The operation completed successfully. - - - (2250) The network connection could not be found. - - - (2310) This shared resource does not exist. - - - (2314) There is not an open file with that identification number. - - - (0) The operation completed successfully. - - - Gets an attribute on an enum field value. - The description belonging to the enum option, as a string - One of the enum types. - - - Indicates whether a specified string is null, empty, or consists only of white-space characters. - if the parameter is null or , or if consists exclusively of white-space characters. - The string to test. - - - Converts a number of type T to string, suffixed with a unit size. - - - Calculates a percentage value. - - - - - - diff --git a/TestClient/bin/Debug/NTFSSecurity-Help.xml b/TestClient/bin/Debug/NTFSSecurity-Help.xml deleted file mode 100644 index 176b9bd..0000000 --- a/TestClient/bin/Debug/NTFSSecurity-Help.xml +++ /dev/null @@ -1,2331 +0,0 @@ - - - - - - - - Add-Access - - Add permission to the ACL of a file or folder. - - - - - - Add - Access - - - - - - The function adds an ACE to the item's ACL. The cmdlet needs to have the following information for that: - - Path - - Account (SamAccountName or SID) - - AccessRights (Read, Change, FullControl, etc., ...) - - AccessType (Allow or Deny) - - ApplyTo (This folder only, Only files, etc.) - -All the options are explained in the parameter section. - -The function needs to know the file or folder path. The path can be an argument or be piped into the function as string or FileSystemInfo object (result of Get-ChildItem or Get-Item). - - - Add-Access - - Account - - Takes the account that is will be granted permission. This can either be a SID (well known, domain or local) or a account name. The account name must be specified in the syntax 'Domain\UserName'. Well known accounts are not part of the domain or local machine. Use for example 'NT Authority\System' or 'Builtin\Administrators'. - - IdentityReference2 - - - AccessRights - - The right the account shall get. This parameter is of the type System.Security.AccessControl.FileSystemRights so the following values are valid: ListDirectory, ReadData, WriteData, CreateFiles, CreateDirectories, AppendData, ReadExtendedAttributes, WriteExtendedAttributes, Traverse, ExecuteFile,DeleteSubdirectoriesAndFiles, ReadAttributes, WriteAttributes, Write, Delete, ReadPermissions, Read, ReadAndExecute, Modify, ChangePermissions, TakeOwnership, Synchronize, FullControl - - FileSystemRights - - - AccessType - - The type of access you want to give, either Allow or Deny (System.Security.AccessControl.AccessControlType). - - AccessControlType - - - InheritanceFlags - - Defines what child items are going to inherit in terms of permissions. If not defined, permissions will be inherited by files and folders (ContainerInherit | ObjectInherit) - -There are three options: -- None: The permission will not be inherited by any child item -- ContainerInherit: The permission will be inherited only by directories -- ObjectInherit: The permission will be inherited only by files - - InheritanceFlags - - - PropagationFlags - - Specifies how Access Control Entries (ACEs) are propagated to child objects. - -There are three options: -- None: Specifies that no propagation flags are set. -- NoPropagateInherit: Specifies that the ACE is not propagated to child objects. -- InheritOnly: Specifies that the ACE is propagated only to child objects. This includes both container and leaf child objects. - - PropagationFlags - - - PassThru - - Returns the item's access control list by using FileSystemAccessRule2. item's ACE. By default, this cmdlet does not generate any output. - - - - Path - - Specifies the path to a resource. Add-Access adds permissions to the items indicated by the path. Wildcards are not permitted. This parameter accepts input from the pipeline so combining Get-Access with Get-ChildItem or Get-Item is the easiest way if you want to process multiple files or folders. - - String[] - - - - Add-Access - - Account - - Takes the account that is will be granted permission. This can either be a SID (well known, domain or local) or a account name. The account name must be specified in the syntax 'Domain\UserName'. Well known accounts are not part of the domain or local machine. Use for example 'NT Authority\System' or 'Builtin\Administrators'. - - IdentityReference2 - - - AccessRights - - The right the account shall get. This parameter is of the type System.Security.AccessControl.FileSystemRights so the following values are valid: ListDirectory, ReadData, WriteData, CreateFiles, CreateDirectories, AppendData, ReadExtendedAttributes, WriteExtendedAttributes, Traverse, ExecuteFile,DeleteSubdirectoriesAndFiles, ReadAttributes, WriteAttributes, Write, Delete, ReadPermissions, Read, ReadAndExecute, Modify, ChangePermissions, TakeOwnership, Synchronize, FullControl - - FileSystemRights - - - AccessType - - The type of access you want to give, either Allow or Deny (System.Security.AccessControl.AccessControlType). - - AccessControlType - - - AppliesTo - - This parameter controls inheritance and propagation like the "Apply To" drop-down box in the Windows Explorer dialog. The allowed options are: -- ThisFolderOnly -- ThisFolderSubfolderAndFiles -- ThisFolderAndSubfolders -- ThisFolderAndFiles -- SubfolderAndFilesOnly -- SubfolersOnly -- FilesOnly - - ApplyTo - - - PassThru - - Returns the item's access control list by using FileSystemAccessRule2. item's ACE. By default, this cmdlet does not generate any output. - - - - Path - - Specifies the path to a resource. Add-Access adds permissions to the items indicated by the path. Wildcards are not permitted. This parameter accepts input from the pipeline so combining Get-Access with Get-ChildItem or Get-Item is the easiest way if you want to process multiple files or folders. - - String[] - - - - - - Account - - Takes the account that is will be granted permission. This can either be a SID (well known, domain or local) or a account name. The account name must be specified in the syntax 'Domain\UserName'. Well known accounts are not part of the domain or local machine. Use for example 'NT Authority\System' or 'Builtin\Administrators'. - - IdentityReference2 - - IdentityReference2 - - - - - - AccessRights - - The right the account shall get. This parameter is of the type System.Security.AccessControl.FileSystemRights so the following values are valid: ListDirectory, ReadData, WriteData, CreateFiles, CreateDirectories, AppendData, ReadExtendedAttributes, WriteExtendedAttributes, Traverse, ExecuteFile,DeleteSubdirectoriesAndFiles, ReadAttributes, WriteAttributes, Write, Delete, ReadPermissions, Read, ReadAndExecute, Modify, ChangePermissions, TakeOwnership, Synchronize, FullControl - - FileSystemRights - - FileSystemRights - - - - - - AccessType - - The type of access you want to give, either Allow or Deny (System.Security.AccessControl.AccessControlType). - - AccessControlType - - AccessControlType - - - - - - InheritanceFlags - - Defines what child items are going to inherit in terms of permissions. If not defined, permissions will be inherited by files and folders (ContainerInherit | ObjectInherit) - -There are three options: -- None: The permission will not be inherited by any child item -- ContainerInherit: The permission will be inherited only by directories -- ObjectInherit: The permission will be inherited only by files - - InheritanceFlags - - InheritanceFlags - - - - - - PropagationFlags - - Specifies how Access Control Entries (ACEs) are propagated to child objects. - -There are three options: -- None: Specifies that no propagation flags are set. -- NoPropagateInherit: Specifies that the ACE is not propagated to child objects. -- InheritOnly: Specifies that the ACE is propagated only to child objects. This includes both container and leaf child objects. - - PropagationFlags - - PropagationFlags - - - - - - PassThru - - Returns the item's access control list by using FileSystemAccessRule2. item's ACE. By default, this cmdlet does not generate any output. - - - SwitchParameter - - - - - - Path - - Specifies the path to a resource. Add-Access adds permissions to the items indicated by the path. Wildcards are not permitted. This parameter accepts input from the pipeline so combining Get-Access with Get-ChildItem or Get-Item is the easiest way if you want to process multiple files or folders. - - String[] - - String[] - - - - - - AppliesTo - - This parameter controls inheritance and propagation like the "Apply To" drop-down box in the Windows Explorer dialog. The allowed options are: -- ThisFolderOnly -- ThisFolderSubfolderAndFiles -- ThisFolderAndSubfolders -- ThisFolderAndFiles -- SubfolderAndFilesOnly -- SubfolersOnly -- FilesOnly - - ApplyTo - - ApplyTo - - - - - - - - - FileSystemInfo or Strings - - - All parameters accept pipeline input. - - - - - - - - - Null, unless the parameter PassThru is used. - - - Security2.FileSystemAccessRule2 for each ACE on the object, if PassThru is used. - - - - - - - - - - - - - - - - - - --------------- EXAMPLE 1 -------------- - - C:\PS> -C:\PS> - PS C:\> dir | Add-Ace -Account forest3\test -AccessRights Read -PassThru - - Add read permissions to the test user account. Per default the inheritance is set to files and folders. - - - Path: C:\data\Test (Inheritance enabled) - - Identity Rights Inheritance Type IsInherited - -------- ------ ----------- ---- ----------- - raandree1\Test (S-1-5-21-30... FullControl ContainerInherit,... Allow False - - - - - - - - - - - - --------------- EXAMPLE 2 -------------- - - C:\PS> -C:\PS> - PS C:\data> dir | Add-Ace -Account raandree1\test -AccessRights Read -AppliesTo ThisFolderOnly -PassThru - - Adds read access to the test account to all items the 'dir' command returns without inheriting the access to files or folder below. - - - Path: C:\data\Test (Inheritance enabled) - - Identity Rights Inheritance Type IsInherited - -------- ------ ----------- ---- ----------- - raandree1\Test (S-1-5-21-30... Read, Synchronize None Allow False - - Path: C:\data\File1.txt (Inheritance enabled) - - Identity Rights Inheritance Type IsInherited - -------- ------ ----------- ---- ----------- - raandree1\Test (S-1-5-21-30... Read, Synchronize None Allow False - - - - - - - - - - - - - - http://gallery.technet.microsoft.com/scriptcenter/1abd77a5-9c0b-4a2b-acef-90dbb2b84e85 - - - - - - - - Copy-Access - - - - - - - - Copy - Access - - - - - - - - - Copy-Access - - Path - - - - String - - - DestinationPath - - - - String - - - Account - - - - IdentityReference2 - - - AccessType - - - - AccessControlType - - - PassThru - - - - - - - - - Path - - - - String - - String - - - - - - DestinationPath - - - - String - - String - - - - - - Account - - - - IdentityReference2 - - IdentityReference2 - - - - - - AccessType - - - - AccessControlType - - AccessControlType - - - - - - PassThru - - - - - SwitchParameter - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Disable-Inheritance - - - - - - - - Disable - Inheritance - - - - - - - - - Disable-Inheritance - - PassThru - - - - - - PreserveInheritedAccessRules - - - - - - Path - - - - String[] - - - - - - PassThru - - - - - SwitchParameter - - - - - - PreserveInheritedAccessRules - - - - - SwitchParameter - - - - - - Path - - - - String[] - - String[] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Enable-Inheritance - - - - - - - - Enable - Inheritance - - - - - - - - - Enable-Inheritance - - PassThru - - - - - - RemoveInheritedAccessRules - - - - - - Path - - - - String[] - - - - - - PassThru - - - - - SwitchParameter - - - - - - RemoveInheritedAccessRules - - - - - SwitchParameter - - - - - - Path - - - - String[] - - String[] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Get-Access - - Gets all Access Control Entries in the item's Discretionary Access Control List. - - - - - - Get - Access - - - - - - The function returns all ACEs defined on the item. You can filter the ACEs using the switches ExcludeExplicit and ExcludeInherited. - -Whether the item inherits the permissions from its parent is indicated in the output as well. - -The function needs to know the file or folder path. The path can be an argument or be piped into the function as string or FileSystemInfo object (result of Get-ChildItem or Get-Item). - - - Get-Access - - Account - - Takes the account that is used to filter the output. Only ACEs are shown that match the given user account. - -This can either be a SID (well known, domain or local) or a account name. The account name must be specified in the syntax 'Domain\UserName'. Well known accounts are not part of the domain or local machine. Use for example 'NT Authority\System' or 'Builtin\Administrators'. - - IdentityReference2 - - - ExcludeExplicit - - If set, only inherited ACEs are returned. - - - - ExcludeInherited - - If set, only explicitly non-inherited ACEs are returned. - - - - Path - - Specifies the path to the resource. Get-Access gets the permissions of the items indicated by the path. Wildcards are not permitted. This parameter also accepts input from the pipeline so combining Get-Access with Get-ChildItem or Get-Item is the easiest way if you want to get the access rights of multiple files and folders. - - String[] - - - - - - Account - - Takes the account that is used to filter the output. Only ACEs are shown that match the given user account. - -This can either be a SID (well known, domain or local) or a account name. The account name must be specified in the syntax 'Domain\UserName'. Well known accounts are not part of the domain or local machine. Use for example 'NT Authority\System' or 'Builtin\Administrators'. - - IdentityReference2 - - IdentityReference2 - - - - - - ExcludeExplicit - - If set, only inherited ACEs are returned. - - - SwitchParameter - - - - - - ExcludeInherited - - If set, only explicitly non-inherited ACEs are returned. - - - SwitchParameter - - - - - - Path - - Specifies the path to the resource. Get-Access gets the permissions of the items indicated by the path. Wildcards are not permitted. This parameter also accepts input from the pipeline so combining Get-Access with Get-ChildItem or Get-Item is the easiest way if you want to get the access rights of multiple files and folders. - - String[] - - String[] - - - - - - - - - System.String - - - You can pipe a string that contains a path. - - - - - - - - - Security2.FileSystemAccessRule2 - - - Get-Ace returns objects that represent the item's Access Control Entries. - - - - - - - - - - - - - - - - - - --------------- EXAMPLE 1 -------------- - - C:\PS> -C:\PS> - Get-Item c:\ | Get-Access - - Get all ACEs defined on the root of drive C: - - - Path: C:\ (Inheritance disabled) - - Identity Rights Inheritance Type IsInherited - -------- ------ ----------- ---- ----------- - NT AUTHORITY\Authenticated ... AppendData None Allow False - NT AUTHORITY\Authenticated ... -536805376 ContainerIn... Allow False - NT AUTHORITY\SYSTEM (S-1-5-18) FullControl None Allow False - NT AUTHORITY\SYSTEM (S-1-5-18) 268435456 ContainerIn... Allow False - BUILTIN\Administrators (S-1... 268435456 ContainerIn... Allow False - BUILTIN\Administrators (S-1... FullControl None Allow False - BUILTIN\Users (S-1-5-32-545) ReadAndExec... ContainerIn... Allow False - - - - - - - - - - - - --------------- EXAMPLE 2 -------------- - - C:\PS> -C:\PS> - PS C:\> dir | Where-Object { $_.PSIsContainer } | Get-Ace -ExcludeInherited - - This command returns only explicitly set ACEs on all folders. - - - - - - - - - - - - - - - --------------- EXMAPLE 3 -------------- - - C:\PS> -C:\PS> - PS C:\> dir | Get-Access -Account Builtin\Users - - This command returns all Access Control Entries whose account match 'Builtin\Users'. - - - Path: C:\Users\raandree\Desktop\ADRAP.docx (Inheritance disabled) - - -Account Access Rights Applies to Type IsInherited -------- ------------- ---------- ---- ----------- -BUILTIN\Users (S-1-5-32-545) Modify, Synch... ThisFolderOnly Allow False - - - - - - - - - - - - - - http://gallery.technet.microsoft.com/scriptcenter/1abd77a5-9c0b-4a2b-acef-90dbb2b84e85 - - - - - - - - Get-EffectiveAccess - - - - - - - - Get - EffectiveAccess - - - - - - - - - Get-EffectiveAccess - - Account - - - - IdentityReference2 - - - Path - - - - String[] - - - - - - Account - - - - IdentityReference2 - - IdentityReference2 - - - - - - Path - - - - String[] - - String[] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Get-Inheritance - - - - - - - - Get - Inheritance - - - - - - - - - Get-Inheritance - - Path - - - - String[] - - - - - - Path - - - - String[] - - String[] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Get-OrphanedAccess - - - - - - - - Get - OrphanedAccess - - - - - - - - - Get-OrphanedAccess - - Account - - - - IdentityReference2 - - - ExcludeExplicit - - - - - - ExcludeInherited - - - - - - Path - - - - String[] - - - - - - Account - - - - IdentityReference2 - - IdentityReference2 - - - - - - ExcludeExplicit - - - - - SwitchParameter - - - - - - ExcludeInherited - - - - - SwitchParameter - - - - - - Path - - - - String[] - - String[] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Get-Owner - - - - - - - - Get - Owner - - - - - - - - - Get-Owner - - Path - - - - String[] - - - - - - Path - - - - String[] - - String[] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Get-SimpleAccess - - - - - - - - Get - SimpleAccess - - - - - - - - - Get-SimpleAccess - - IncludeRootFolder - - - - - - Account - - - - IdentityReference2 - - - ExcludeExplicit - - - - - - ExcludeInherited - - - - - - Path - - - - String[] - - - - - - IncludeRootFolder - - - - - SwitchParameter - - - - - - Account - - - - IdentityReference2 - - IdentityReference2 - - - - - - ExcludeExplicit - - - - - SwitchParameter - - - - - - ExcludeInherited - - - - - SwitchParameter - - - - - - Path - - - - String[] - - String[] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Get-SimpleEffectiveAccess - - - - - - - - Get - SimpleEffectiveAccess - - - - - - - - - Get-SimpleEffectiveAccess - - IncludeRootFolder - - - - - - Account - - - - IdentityReference2 - - - Path - - - - String[] - - - - - - IncludeRootFolder - - - - - SwitchParameter - - - - - - Account - - - - IdentityReference2 - - IdentityReference2 - - - - - - Path - - - - String[] - - String[] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Remove-Access - - - - - - - - Remove - Access - - - - - - - - - Remove-Access - - Account - - - - IdentityReference2 - - - AccessRights - - - - FileSystemRights - - - AccessType - - - - AccessControlType - - - InheritanceFlags - - - - InheritanceFlags - - - PropagationFlags - - - - PropagationFlags - - - PassThru - - - - - - Path - - - - String[] - - - - Remove-Access - - Account - - - - IdentityReference2 - - - AccessRights - - - - FileSystemRights - - - AccessType - - - - AccessControlType - - - AppliesTo - - - - ApplyTo - - - PassThru - - - - - - Path - - - - String[] - - - - - - Account - - - - IdentityReference2 - - IdentityReference2 - - - - - - AccessRights - - - - FileSystemRights - - FileSystemRights - - - - - - AccessType - - - - AccessControlType - - AccessControlType - - - - - - InheritanceFlags - - - - InheritanceFlags - - InheritanceFlags - - - - - - PropagationFlags - - - - PropagationFlags - - PropagationFlags - - - - - - PassThru - - - - - SwitchParameter - - - - - - Path - - - - String[] - - String[] - - - - - - AppliesTo - - - - ApplyTo - - ApplyTo - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Set-Owner - - - - - - - - Set - Owner - - - - - - - - - Set-Owner - - Account - - - - IdentityReference2 - - - PassThru - - - - - - Recurse - - - - - - Path - - - - String[] - - - - - - Account - - - - IdentityReference2 - - IdentityReference2 - - - - - - PassThru - - - - - SwitchParameter - - - - - - Recurse - - - - - SwitchParameter - - - - - - Path - - - - String[] - - String[] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Show-SimpleAccess - - - - - - - - Show - SimpleAccess - - - - - - - - - Show-SimpleAccess - - IncludeRootFolder - - - - - - Account - - - - IdentityReference2 - - - ExcludeExplicit - - - - - - ExcludeInherited - - - - - - Path - - - - String[] - - - - - - IncludeRootFolder - - - - - SwitchParameter - - - - - - Account - - - - IdentityReference2 - - IdentityReference2 - - - - - - ExcludeExplicit - - - - - SwitchParameter - - - - - - ExcludeInherited - - - - - SwitchParameter - - - - - - Path - - - - String[] - - String[] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Show-SimpleEffectiveAccess - - - - - - - - Show - SimpleEffectiveAccess - - - - - - - - - Show-SimpleEffectiveAccess - - IncludeRootFolder - - - - - - Account - - - - IdentityReference2 - - - Path - - - - String[] - - - - - - IncludeRootFolder - - - - - SwitchParameter - - - - - - Account - - - - IdentityReference2 - - IdentityReference2 - - - - - - Path - - - - String[] - - String[] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/TestClient/bin/Debug/NTFSSecurity.Init.ps1 b/TestClient/bin/Debug/NTFSSecurity.Init.ps1 deleted file mode 100644 index e841d8f..0000000 --- a/TestClient/bin/Debug/NTFSSecurity.Init.ps1 +++ /dev/null @@ -1,81 +0,0 @@ -#region Internals -#region C# Code -$type_NTFS1 = @' - using System; - using System.IO; - using System.Collections; - using System.Runtime.InteropServices; - using Microsoft.Win32.SafeHandles; - - namespace NTFS - { - public class DriveInfoExt - { - [DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Auto)] - static extern bool GetDiskFreeSpace(string lpRootPathName, - out uint lpSectorsPerCluster, - out uint lpBytesPerSector, - out uint lpNumberOfFreeClusters, - out uint lpTotalNumberOfClusters); - - DriveInfo _drive = null; - uint _sectorsPerCluster = 0; - uint _bytesPerSector = 0; - uint _numberOfFreeClusters = 0; - uint _totalNumberOfClusters = 0; - - public uint SectorsPerCluster { get { return _sectorsPerCluster; } } - public uint BytesPerSector { get { return _bytesPerSector; } } - public uint NumberOfFreeClusters { get { return _numberOfFreeClusters; } } - public uint TotalNumberOfClusters { get { return _totalNumberOfClusters; } } - public DriveInfo Drive { get { return _drive; } } - public string DriveName { get { return _drive.Name; } } - public string VolumeName { get { return _drive.VolumeLabel; } } - - public DriveInfoExt(string DriveName) - { - _drive = new DriveInfo(DriveName); - - GetDiskFreeSpace(_drive.Name, - out _sectorsPerCluster, - out _bytesPerSector, - out _numberOfFreeClusters, - out _totalNumberOfClusters); - } - } - - public class FileInfoExt - { - [DllImport("kernel32.dll", SetLastError = true, EntryPoint = "GetCompressedFileSize")] - static extern uint GetCompressedFileSize(string lpFileName, out uint lpFileSizeHigh); - - public static ulong GetCompressedFileSize(string filename) - { - uint high; - uint low; - low = GetCompressedFileSize(filename, out high); - int error = Marshal.GetLastWin32Error(); - - if (high == 0 && low == 0xFFFFFFFF && error != 0) - { - throw new System.ComponentModel.Win32Exception(error); - } - else - { - return ((ulong)high << 32) + low; - } - } - } - } -'@ -#endregion -#endregion - -Add-Type -TypeDefinition $type_NTFS1 -Add-Type -Path $PSScriptRoot\Security2.dll -Add-Type -Path $PSScriptRoot\PrivilegeControl.dll -ReferencedAssemblies $PSScriptRoot\ProcessPrivileges.dll -Add-Type -Path $PSScriptRoot\ProcessPrivileges.dll - -#using Update-FormatData and not FormatsToProcess in the PSD1 as FormatsToProcess does not offer -#putting format data in front of the default data. This is required to make the new formatter the default ones. -Update-FormatData -PrependPath $PSScriptRoot\NTFSSecurity.format.ps1xml \ No newline at end of file diff --git a/TestClient/bin/Debug/NTFSSecurity.dll b/TestClient/bin/Debug/NTFSSecurity.dll deleted file mode 100644 index b75736123001c47d0abe741d42fe928775624bcc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 109056 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 diff --git a/TestClient/bin/Debug/NTFSSecurity.format.ps1xml b/TestClient/bin/Debug/NTFSSecurity.format.ps1xml deleted file mode 100644 index c82769d..0000000 --- a/TestClient/bin/Debug/NTFSSecurity.format.ps1xml +++ /dev/null @@ -1,500 +0,0 @@ - - - - - - FileSystemTypes2 - - Alphaleonis.Win32.Filesystem.DirectoryInfo - Alphaleonis.Win32.Filesystem.FileInfo - - - - - - - SimpleFileSystemGrouping - - - - - - 4 - - - - if ($global:tempFullName -ne $_.FullName) - { - "Path: $($_.FullName) (Inheritance $(if ($_.InheritanceEnabled) { "enabled" } else { "disabled" }))" - $global:FullName = $_.FullName - } - - - - - - - - - - - - - SimpleFileSystemAccessRule2Grouping - - - - - - 4 - - - - if ($global:tempFullName -ne $_.FullName) - { - "Path: $($_.FullName)" - $global:FullName = $_.FullName - } - - - - - - - - - - - - - FileSystemTypes2-GroupingFormat - - - - - - 4 - - - - - Split-Path -Path $_.FullName -Parent - - - - - - - - - - - - - - - - - Security2.FileSystemAccessRule2 - - Security2.FileSystemAccessRule2 - - - FullName - SimpleFileSystemGrouping - - - - - 35 - - - - - - - 25 - - - - - - - - - - - - - - - - - - if ((Get-Module NTFSSecurity).PrivateData.ShowAccountSid) - { - '{0} ({1})' -f $_.Account.AccountName, $_.Account.Sid - } - else - { - $_.Account.ToString() - } - - - - AccessRights - - - - [Security2.FileSystemSecurity2]::ConvertToApplyTo($_.InheritanceFlags, $_.PropagationFlags) - - - - AccessControlType - - - IsInherited - - - InheritedFrom - - - - - - - - - Security2.FileSystemAuditRule2 - - Security2.FileSystemAuditRule2 - - - FullName - SimpleFileSystemGrouping - - - - - 35 - - - - - - - 25 - - - - - - - - - - - - - - - - - - if ((Get-Module NTFSSecurity).PrivateData.ShowAccountSid) - { - '{0} ({1})' -f $_.Account.AccountName, $_.Account.Sid - } - else - { - $_.Account.ToString() - } - - - - AccessRights - - - - [Security2.FileSystemSecurity2]::ConvertToApplyTo($_.InheritanceFlags, $_.PropagationFlags) - - - - AuditFlags - - - IsInherited - - - InheritedFrom - - - - - - - - - Security2.SimpleFileSystemAuditRule2 - - Security2.SimpleFileSystemAuditRule2 - - - FullName - SimpleFileSystemGrouping - - - - - 35 - - - - - - - 25 - - - - - - - - - - - - - - - - if ((Get-Module NTFSSecurity).PrivateData.ShowAccountSid) - { - '{0} ({1})' -f $_.Account.AccountName, $_.Account.Sid - } - else - { - $_.Account.ToString() - } - - - - AccessRights - - - - [Security2.FileSystemSecurity2]::ConvertToApplyTo($_.InheritanceFlags, $_.PropagationFlags) - - - - AuditFlags - - - IsInherited - - - - - - - - - Security2.FileSystemEffectivePermissionEntry - - Security2.FileSystemEffectivePermissionEntry - - - - - - - - - - - - - - - - - - - - - - Name - - - AccessAsString - - - AccessMask - - - - if ((Get-Module NTFSSecurity).PrivateData.ShowAccountSid) - { - '{0} ({1})' -f $_.Account.AccountName, $_.Account.Sid - } - else - { - $_.Account.ToString() - } - - - - - - - - - - Security2.FileSystemInheritanceInfo - - Security2.FileSystemInheritanceInfo - - - - - - - - - - - - - - - - - - - Name - - - AccessInheritanceEnabled - - - AuditInheritanceEnabled - - - - - - - - - Children2 - - FileSystemTypes2 - - - if ($_.DirectoryName) { $_.DirectoryName } else { $_.Parent.FullName } - FileSystemTypes2-GroupingFormat - - - - - - 7 - Left - - - - 8 - Right - - - - 25 - Right - - - - 15 - Right - - - - - - - - - - - Mode - - - - !$_.IsInheritanceBlocked - - - - - [String]::Format("{0,10} {1,8}", $_.LastWriteTime.ToString("d"), $_.LastWriteTime.ToString("t")) - - - - - if ($_ -is [Alphaleonis.Win32.Filesystem.FileInfo]) - { - [Math]::Round($_.Length / 1MB, 2).ToString() - } - else - { - " {0,-13}" -f "<DIR>" - } - - - - Name - - - - - - - - - Alphaleonis.Win32.Filesystem.FileInfo+Hash - - Alphaleonis.Win32.Filesystem.FileInfo+Hash - - - - - - - - - - - - - - - - - - - - Algorithm - - - Hash - - - FullName - - - - - - - - - \ No newline at end of file diff --git a/TestClient/bin/Debug/NTFSSecurity.pdb b/TestClient/bin/Debug/NTFSSecurity.pdb deleted file mode 100644 index 4194beb0ceaad29006a92ba2a4732cda4b65ae01..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 282112 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�`Am`D78`@**=!n{gG`Of<|v2U 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 z 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 - -#Item cmdlets -New-Alias -Name dir2 -Value Get-ChildItem2 -ErrorAction SilentlyContinue -New-Alias -Name gi2 -Value Get-Item2 -ErrorAction SilentlyContinue -New-Alias -Name rm2 -Value Remove-Item2 -ErrorAction SilentlyContinue -New-Alias -Name del2 -Value Remove-Item2 -ErrorAction SilentlyContinue - -Export-ModuleMember -Alias * -Function * -Cmdlet * \ No newline at end of file diff --git a/TestClient/bin/Debug/NTFSSecurity.types.ps1xml b/TestClient/bin/Debug/NTFSSecurity.types.ps1xml deleted file mode 100644 index 4944423..0000000 --- a/TestClient/bin/Debug/NTFSSecurity.types.ps1xml +++ /dev/null @@ -1,155 +0,0 @@ - - - - - System.IO.FileInfo - - - Owner - - [Security2.IdentityReference2]$this.GetAccessControl().GetOwner([System.Security.Principal.SecurityIdentifier]) - - - - IsInheritanceBlocked - - $this.GetAccessControl([System.Security.AccessControl.AccessControlSections]::Access).AreAccessRulesProtected - - - - LengthOnDisk - - $driveInfo = New-Object NTFS.DriveInfoExt($this.PSDrive.Name + ":") - [Math]::Ceiling($this.Length / ($driveInfo.BytesPerSector * $driveInfo.SectorsPerCluster)) * ($driveInfo.BytesPerSector * $driveInfo.SectorsPerCluster) - - - - Size - LengthOnDisk - - - EnableInheritance - - - - DisableInheritance - - - - GetHash - - - - - - System.IO.DirectoryInfo - - - Owner - - [Security2.IdentityReference2]$this.GetAccessControl().GetOwner([System.Security.Principal.SecurityIdentifier]) - - - - IsInheritanceBlocked - - $this.GetAccessControl([System.Security.AccessControl.AccessControlSections]::Access).AreAccessRulesProtected - - - - EnableInheritance - - - - DisableInheritance - - - - - - - Security2.FileSystemAccessRule2 - - - AccountType - - if (-not [System.Security.Principal.WindowsIdentity]::GetCurrent().Name.ToLower().Contains([System.Environment]::MachineName.ToLower())) - { - try - { - ([ADSI]"LDAP://<SID=$($this.Account.Sid)>").ObjectClass[-1] - } - catch - { - [string]::Empty - } - } - - - - - \ No newline at end of file diff --git a/TestClient/bin/Debug/PrivilegeControl.dll b/TestClient/bin/Debug/PrivilegeControl.dll deleted file mode 100644 index 65804f3723e2d93fe94192ca25b05a84c0697805..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5120 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 diff --git a/TestClient/bin/Debug/ProcessPrivileges.dll b/TestClient/bin/Debug/ProcessPrivileges.dll deleted file mode 100644 index b65247a723e2854ad8a158b443fcb490854d1dce..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24064 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 ba4s+lm<@DRsO&63U2?iC&}D%`&I11*u3Q>& diff --git a/TestClient/bin/Debug/Security2.dll b/TestClient/bin/Debug/Security2.dll deleted file mode 100644 index f8fafc44b6d2c287220ae99c945505812327381a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 54784 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 diff --git a/TestClient/bin/Debug/TestClient.exe b/TestClient/bin/Debug/TestClient.exe deleted file mode 100644 index d21ec2270a0df9ec6c9ac2b132fb5f4a9f10de6f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7168 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 ae}wk%OuL4HjfwxyV39Ydugd>j2L1yK{Q1iO diff --git a/TestClient/bin/Debug/TestClient.pdb b/TestClient/bin/Debug/TestClient.pdb deleted file mode 100644 index 8ebc53dd0a21ed2ed600663d65e1ed4660707857..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13824 zcmeHNU2GKB6~42$>mM+99oI=oOSfQ10%5#10lUZnn>9|Iu!Y2+G}RWfjK}em^~`o> zOhna(HPE!`LqnvhQlv&n)VD-^X;KO0r{bZCnja|%D0#|5+A0;TP$&^YB(#yQ6-d%iawq_dsb4I9$Ak)d>tnaMOatsEQ?poIJ{ zZbkA0^PrU>#J@G*fm1UvEoKk&3h~Ke?*C%%`_k9D42%IGS`-6Th?$u>;LOYt{Kizv z9=KfmTjKcFa>(cP?H6X3k<0z_K?9|mf4l5Ae|hWh&XXr+c6`{n!q$qEk)!nf{hJmR zMa6OY2Jyh<=0Equ==#q*yR#5)kS@l}tm1(<{#Bf_2t=P8ynp+v^=DEiM#QPzzfL^! zhn@F5@wdO8PMz2u=9fPC=yy}&XHu`M$3>xG_?2_*x6JH+wk7wIe|f{!vAYhmDIaZo z_xZXv|1@^|gA0$hG`yQ}AOEGXeG#~?X1cgh?dBS5rekqOs(Rqk`Ag>+`bVji-J0L$ z+hspLFgEG9jvtf@fmhBC+Ww)yE9JkvcW7k9wx-HXa3sIi_JeHEvE3lQr|dmkE=-!1 zFNC!z^}51=W7g zf2#h>*H0Ut^-xcJydstn)3%J-?O@iOeCnz1<&|7VboOF_@|ga=9^h=-BG#wailS;t zy+Q)g$#n>j=QPb9CC`bf5Z>$ zN$9jvC%TcKY&pyH#)5&H?3LMY%&3kOuE<09O--y&TcRB74P+iy# zRhBEbg@^4)Y*XgIRNze(XbzqAk$NwyV?HqD`lW(p`}6A4%`^uri2SVQ24xQuC)&PyDu$}Vc$M%ml@x5ib0Rs`D0-@=WDdwK{?y6=ILx3%eFsNL=!1%TwoK* zy0LF0g?qI%1f63a_HkoPC4s~%1hoOIA~4SMKv}cn@C`<~U=&qjGC< zY<5gX%e6na_H>{fXTfV>ds4NTZDF^fHl+eirFOs}E#uDE-}~8pnfNN7L0?u*8`G~P zE1w#bPw7;>pCN>j40vxqr8!Rys5G2Yp9wAcz{oBDwF0PhBdZMqxn_!_tyd?$Dl*aWWzuL5_>wy_PJ4#$cyJJ!C8 zx*F&VP(SKq68(^E+yP`8vp}|S5Xd$T0oMT0j!K6@&i{|jUy}Y~Iotd#Airh7AC(7y z_X7Dh43zH&QlER!F64g*%mJr?yMaFi?g2gqgl**sAZ)MDXZE{I+$P{%P`g-z{Blf! zL5Uq=oh)yL{Bpjz2&q~xr5?{cd%+Xn3Yf8d0sJ=je@%R+yRxzKLO&jq#$h4QeFq0gqVK;Y!`P# zWSK1)5*Fgth>an_OG8xG5K6aeu6~}Yu#?R@aA})Rrfjg0={E69awVHkrfjh3eNN&s z9aHRqn)Lwpe9rBK)PNI;J{xcnG|2fG?)3|GYdBx~^FMl^V!%Ucl)(?v;yaN5I)T>9nf{?^BCSBPCri{cDWi?o@&+(t5(JP;WR=_3=egn)EaSeu?UKyW7 zz5>pJZwH?QKaEI~pwkaNi#(3t@}9@Q+zjUapo7KtQ4CNcnD@bEFxM77vjxn+wu1Ri Zs11A*IHv3Cfp9OszR!%G_QmnQzX6jN;NJiM diff --git a/TestClient/obj/x86/Debug/DesignTimeResolveAssemblyReferencesInput.cache b/TestClient/obj/x86/Debug/DesignTimeResolveAssemblyReferencesInput.cache deleted file mode 100644 index 12495dd13b1bfa383aa821bd0ecef900d459c75c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6993 zcmeHMZBrXJ5Vm=_VDi#9P4k}CY12-Ux>q~K1TvEk#Kx(ofij#EI>RwUzFQjw-N})3 zfXncuf26;l)1TO`&ga8+fMy1JCLeqruZ3Rrkyb0+vr8hGNF@HnNB`>Q(gX^3g*t*u z-caUSDg(kS6}Xg}CGL6Lua=jynYSP$<^GHOoSD;~Y^D@26$p6YL!bm<+00r{XVm!> z+BLol{)>99&?q*ZHS&44m?H%;tsxgqL3$Zb=4!mEuR!qDh9IpL2y>l?s^1Efyp4lz z6UO*HxJy!kS7+_z0|maGmAs6-OWbeJW`#1i;Sk@YE>Y0!scYrkM!;A_5D)gb*zGpe zNFCd*_qA0xb8)?2>&hAtO;GVLE2v9QtEfaiq)nd-C_{swDXP9yIKSiBbre52yHiJ9 zr|V66vWoj3)%T9dFkGip1Jf*10gmE=g1p*t6%iH?;q0stwIi=K2P!VM1aF{)^s252 zXi}*}`*=VK7p6d)@D3{KHAWB0je({W?$ccm4^FNwQ`usqtpNuIMviv3GjL6C2c+a; z31?3gt_fW(8UpTm;4A7uG-Oay$4c^6AYmOEAizge6~R4J`W`i15#8F*EXIT}X&8yb zB+7|oGHKu!Wn$v5X{#+2c<7$EzmC!lXTAa-1a-{UXsmbn&CN5q;E8xkSO9B;ig!=r zu9gziZ)P)|bhu!&etgD0{fIq#Mv6{xKEGI)gWSU6R`#rUe5O+!g&nqrYu3+PT{1a# z(NTC&e40j~{4@8dAs?WzgO0+7#tu5H7w1+|^WfAZirLhZE>3HKbRdzsfC7JJv`A?& ztHnhWv&JQq3F9(~^5J^KoSs`qr1yycJ0`ofxw>47Ib?Qk&McbwY?p#YbaVOO$hd-< z{!Esh+ixTiP+K686?Pd3ah)I7Wstjyx9rtg#mYn^#?H^@bGgN^&H^V8RJH9I62cOr z;47Qg-`fWZ^EkF1G_?lgqc!AA>mWJXiwW{EK{6fU>_F-Zy{@Y$?)6W-8wYfjV5G6f zb=@NquPzfV&bX!(M7_Sm@{}hjGp=K47He~6Ay>#RroO_z6SHY;cl|YPXkqSC-*b(d zSe`On#*ABG2@W8ww?{iWOqsK>&gPXy+!z44E*5 z$UH(@KDJ|PWuh%an%%S6u_^ku-R@Y!?h?Kb<}Sk6r>vt7+TNhP%lG9PMnJ;a0mkeV z?gkjU^zXfPj;f=<%IM1Q8o~Nc{M&b9v-uxj)eVbb|GpUDo>vf;B zCe%6)YaCG@M};`VMb4ZKBM*eR5W0l+ X7yV5BJ-*@o@BcdE8!pbbZ(aNkhYuB3 diff --git a/TestClient/obj/x86/Debug/TemporaryGeneratedFile_036C0B5B-1481-4323-8D20-8F5ADCB23D92.cs b/TestClient/obj/x86/Debug/TemporaryGeneratedFile_036C0B5B-1481-4323-8D20-8F5ADCB23D92.cs deleted file mode 100644 index e69de29..0000000 diff --git a/TestClient/obj/x86/Debug/TemporaryGeneratedFile_5937a670-0e60-4077-877b-f7221da3dda1.cs b/TestClient/obj/x86/Debug/TemporaryGeneratedFile_5937a670-0e60-4077-877b-f7221da3dda1.cs deleted file mode 100644 index e69de29..0000000 diff --git a/TestClient/obj/x86/Debug/TemporaryGeneratedFile_E7A71F73-0F8D-4B9B-B56E-8E70B10BC5D3.cs b/TestClient/obj/x86/Debug/TemporaryGeneratedFile_E7A71F73-0F8D-4B9B-B56E-8E70B10BC5D3.cs deleted file mode 100644 index e69de29..0000000 diff --git a/TestClient/obj/x86/Debug/TestClient.csproj.FileListAbsolute.txt b/TestClient/obj/x86/Debug/TestClient.csproj.FileListAbsolute.txt deleted file mode 100644 index c856de0..0000000 --- a/TestClient/obj/x86/Debug/TestClient.csproj.FileListAbsolute.txt +++ /dev/null @@ -1,44 +0,0 @@ -C:\VS\fssecurity\NTFSSecurity\TestClient\obj\x86\Debug\TestClient.csprojResolveAssemblyReference.cache -C:\VS\fssecurity\NTFSSecurity\TestClient\bin\Debug\NTFSSecurity-Help.xml -C:\VS\fssecurity\NTFSSecurity\TestClient\bin\Debug\NTFSSecurity.format.ps1xml -C:\VS\fssecurity\NTFSSecurity\TestClient\bin\Debug\NTFSSecurity.Init.ps1 -C:\VS\fssecurity\NTFSSecurity\TestClient\bin\Debug\NTFSSecurity.psd1 -C:\VS\fssecurity\NTFSSecurity\TestClient\bin\Debug\NTFSSecurity.psm1 -C:\VS\fssecurity\NTFSSecurity\TestClient\bin\Debug\NTFSSecurity.types.ps1xml -C:\VS\fssecurity\NTFSSecurity\TestClient\bin\Debug\TestClient.exe -C:\VS\fssecurity\NTFSSecurity\TestClient\bin\Debug\TestClient.pdb -C:\VS\fssecurity\NTFSSecurity\TestClient\bin\Debug\AlphaFS.dll -C:\VS\fssecurity\NTFSSecurity\TestClient\bin\Debug\NTFSSecurity.dll -C:\VS\fssecurity\NTFSSecurity\TestClient\bin\Debug\PrivilegeControl.dll -C:\VS\fssecurity\NTFSSecurity\TestClient\bin\Debug\ProcessPrivileges.dll -C:\VS\fssecurity\NTFSSecurity\TestClient\bin\Debug\Security2.dll -C:\VS\fssecurity\NTFSSecurity\TestClient\bin\Debug\AlphaFS.pdb -C:\VS\fssecurity\NTFSSecurity\TestClient\bin\Debug\AlphaFS.xml -C:\VS\fssecurity\NTFSSecurity\TestClient\bin\Debug\NTFSSecurity.pdb -C:\VS\fssecurity\NTFSSecurity\TestClient\bin\Debug\PrivilegeControl.pdb -C:\VS\fssecurity\NTFSSecurity\TestClient\bin\Debug\ProcessPrivileges.pdb -C:\VS\fssecurity\NTFSSecurity\TestClient\bin\Debug\Security2.pdb -C:\VS\fssecurity\NTFSSecurity\TestClient\obj\x86\Debug\TestClient.exe -C:\VS\fssecurity\NTFSSecurity\TestClient\obj\x86\Debug\TestClient.pdb -C:\Users\Administrator\Desktop\NTFSSecurity\TestClient\obj\x86\Debug\TestClient.csprojResolveAssemblyReference.cache -C:\Users\Administrator\Desktop\NTFSSecurity\TestClient\obj\x86\Debug\TestClient.exe -C:\Users\Administrator\Desktop\NTFSSecurity\TestClient\obj\x86\Debug\TestClient.pdb -C:\Users\Administrator\Desktop\NTFSSecurity\TestClient\bin\Debug\NTFSSecurity-Help.xml -C:\Users\Administrator\Desktop\NTFSSecurity\TestClient\bin\Debug\NTFSSecurity.format.ps1xml -C:\Users\Administrator\Desktop\NTFSSecurity\TestClient\bin\Debug\NTFSSecurity.Init.ps1 -C:\Users\Administrator\Desktop\NTFSSecurity\TestClient\bin\Debug\NTFSSecurity.psd1 -C:\Users\Administrator\Desktop\NTFSSecurity\TestClient\bin\Debug\NTFSSecurity.psm1 -C:\Users\Administrator\Desktop\NTFSSecurity\TestClient\bin\Debug\NTFSSecurity.types.ps1xml -C:\Users\Administrator\Desktop\NTFSSecurity\TestClient\bin\Debug\TestClient.exe -C:\Users\Administrator\Desktop\NTFSSecurity\TestClient\bin\Debug\TestClient.pdb -C:\Users\Administrator\Desktop\NTFSSecurity\TestClient\bin\Debug\AlphaFS.dll -C:\Users\Administrator\Desktop\NTFSSecurity\TestClient\bin\Debug\NTFSSecurity.dll -C:\Users\Administrator\Desktop\NTFSSecurity\TestClient\bin\Debug\PrivilegeControl.dll -C:\Users\Administrator\Desktop\NTFSSecurity\TestClient\bin\Debug\ProcessPrivileges.dll -C:\Users\Administrator\Desktop\NTFSSecurity\TestClient\bin\Debug\Security2.dll -C:\Users\Administrator\Desktop\NTFSSecurity\TestClient\bin\Debug\AlphaFS.pdb -C:\Users\Administrator\Desktop\NTFSSecurity\TestClient\bin\Debug\AlphaFS.xml -C:\Users\Administrator\Desktop\NTFSSecurity\TestClient\bin\Debug\NTFSSecurity.pdb -C:\Users\Administrator\Desktop\NTFSSecurity\TestClient\bin\Debug\PrivilegeControl.pdb -C:\Users\Administrator\Desktop\NTFSSecurity\TestClient\bin\Debug\ProcessPrivileges.pdb -C:\Users\Administrator\Desktop\NTFSSecurity\TestClient\bin\Debug\Security2.pdb diff --git a/TestClient/obj/x86/Debug/TestClient.csprojResolveAssemblyReference.cache b/TestClient/obj/x86/Debug/TestClient.csprojResolveAssemblyReference.cache deleted file mode 100644 index 7c2f2df4ad929688f5f4319eff90ea2a0541d98e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 37814 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

~z!a8w{u7{b#6Q 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 ae}wk%OuL4HjfwxyV39Ydugd>j2L1yK{Q1iO diff --git a/TestClient/obj/x86/Debug/TestClient.pdb b/TestClient/obj/x86/Debug/TestClient.pdb deleted file mode 100644 index 8ebc53dd0a21ed2ed600663d65e1ed4660707857..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13824 zcmeHNU2GKB6~42$>mM+99oI=oOSfQ10%5#10lUZnn>9|Iu!Y2+G}RWfjK}em^~`o> zOhna(HPE!`LqnvhQlv&n)VD-^X;KO0r{bZCnja|%D0#|5+A0;TP$&^YB(#yQ6-d%iawq_dsb4I9$Ak)d>tnaMOatsEQ?poIJ{ zZbkA0^PrU>#J@G*fm1UvEoKk&3h~Ke?*C%%`_k9D42%IGS`-6Th?$u>;LOYt{Kizv z9=KfmTjKcFa>(cP?H6X3k<0z_K?9|mf4l5Ae|hWh&XXr+c6`{n!q$qEk)!nf{hJmR zMa6OY2Jyh<=0Equ==#q*yR#5)kS@l}tm1(<{#Bf_2t=P8ynp+v^=DEiM#QPzzfL^! zhn@F5@wdO8PMz2u=9fPC=yy}&XHu`M$3>xG_?2_*x6JH+wk7wIe|f{!vAYhmDIaZo z_xZXv|1@^|gA0$hG`yQ}AOEGXeG#~?X1cgh?dBS5rekqOs(Rqk`Ag>+`bVji-J0L$ z+hspLFgEG9jvtf@fmhBC+Ww)yE9JkvcW7k9wx-HXa3sIi_JeHEvE3lQr|dmkE=-!1 zFNC!z^}51=W7g zf2#h>*H0Ut^-xcJydstn)3%J-?O@iOeCnz1<&|7VboOF_@|ga=9^h=-BG#wailS;t zy+Q)g$#n>j=QPb9CC`bf5Z>$ zN$9jvC%TcKY&pyH#)5&H?3LMY%&3kOuE<09O--y&TcRB74P+iy# zRhBEbg@^4)Y*XgIRNze(XbzqAk$NwyV?HqD`lW(p`}6A4%`^uri2SVQ24xQuC)&PyDu$}Vc$M%ml@x5ib0Rs`D0-@=WDdwK{?y6=ILx3%eFsNL=!1%TwoK* zy0LF0g?qI%1f63a_HkoPC4s~%1hoOIA~4SMKv}cn@C`<~U=&qjGC< zY<5gX%e6na_H>{fXTfV>ds4NTZDF^fHl+eirFOs}E#uDE-}~8pnfNN7L0?u*8`G~P zE1w#bPw7;>pCN>j40vxqr8!Rys5G2Yp9wAcz{oBDwF0PhBdZMqxn_!_tyd?$Dl*aWWzuL5_>wy_PJ4#$cyJJ!C8 zx*F&VP(SKq68(^E+yP`8vp}|S5Xd$T0oMT0j!K6@&i{|jUy}Y~Iotd#Airh7AC(7y z_X7Dh43zH&QlER!F64g*%mJr?yMaFi?g2gqgl**sAZ)MDXZE{I+$P{%P`g-z{Blf! zL5Uq=oh)yL{Bpjz2&q~xr5?{cd%+Xn3Yf8d0sJ=je@%R+yRxzKLO&jq#$h4QeFq0gqVK;Y!`P# zWSK1)5*Fgth>an_OG8xG5K6aeu6~}Yu#?R@aA})Rrfjg0={E69awVHkrfjh3eNN&s z9aHRqn)Lwpe9rBK)PNI;J{xcnG|2fG?)3|GYdBx~^FMl^V!%Ucl)(?v;yaN5I)T>9nf{?^BCSBPCri{cDWi?o@&+(t5(JP;WR=_3=egn)EaSeu?UKyW7 zz5>pJZwH?QKaEI~pwkaNi#(3t@}9@Q+zjUapo7KtQ4CNcnD@bEFxM77vjxn+wu1Ri Zs11A*IHv3Cfp9OszR!%G_QmnQzX6jN;NJiM diff --git a/packages/NuGet.CommandLine.3.4.4-rtm-final/NuGet.CommandLine.3.4.4-rtm-final.nupkg b/packages/NuGet.CommandLine.3.4.4-rtm-final/NuGet.CommandLine.3.4.4-rtm-final.nupkg deleted file mode 100644 index 17d08193fdaacb2f08a5faab268e89dfa398684a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1211859 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 z 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℘OZR`vqNhZq4WdCd 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

j_w&#W(iuVg6K#_%x7Kyr-A+k9 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

C%+x>b}HkYpP?hwo~jRWoPyz_eFB1g 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

YF;XxyC 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�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 b2%2pGoa>2kk`q!ZdVaX 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

;#z^Wk5r>vS2x+osEt{=H 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 z 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 &om5E*0mhOlXWCOp@L=R-fGCG8Ts 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�!&aSssObl|gu(B1ky-JENy#6Y>AKY2Yx<&N% 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 Wd33l#e?ig#ewV;}2Q6`dZ~p=9b2SqH diff --git a/packages/NuGet.CommandLine.3.4.4-rtm-final/tools/NuGet.exe b/packages/NuGet.CommandLine.3.4.4-rtm-final/tools/NuGet.exe deleted file mode 100644 index 6bb79fe5379d098fabcabf69f3e5c9e8214c229b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3957976 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

q?zIcAk{U|VH1Lr>$qLBDkJ%l8D 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%0Dr|q4 zp_#Ao+`xI(HcWYQO~-gMMTPfHZM=Uf-b|k>6T+HTK+Czfwm?B7ufn$T-bfyY#K}rR z#>sK~hP%b&)9Uf0_tP9(e{pi6k(?wFo2W>c5-0Y3A_eWm=2_%?vNU z_|0G)2IjeamM7A+rdWnt26~HE^|q%N!z~9$1J|49lGCl^s<)+GqZ83vC8Q;nFl1H6 z)OLok$lbhf=z2Hz4Lg$-Oqw@6hdM`JOZe4&jT@P`j&%@vet+#q=C4ClZtr2HWQD=fP}cuoqx33zS_zY};~3Lg)=UJ9Q9ynYJb2E0KEOGP}tBmMXl9`h^d z$6xf(nSRXpBp+Sr$3lH{ryo*3&+kb;wvo^D^kbPmW~3hn>7zIOI8`4r(~pnqqt8B8 z_f04_(o89_M{*RIFxpS%ly~kYf0f6&PO5dC2BQu6e--~*@UP~w3;)_Rp_SM+=ux=Z z#u(@SH2%-#|Kt2$%m2;%52H{xpPD20W2t*d>V6`1Kbg9hrS28(hKJbGORjAHxH_e{ zHg!Lnx}Q(o>r?lJ)V(NmZ!|X-et~O^L8tJZ(#Nf-&(HLswjrM<_3;gTWbHd21#;&7 z*1lg$8}aeB#z7xe@U4c~czs)k^$ZMZJ3uiZta*i(=nNWfXe0WSh?a>+Sn~>h7SV2P zM9+$7xrl@{ukaTUy|Inx*CN_cM8cX^_^XKC)JF6h5xq`C!kSn3n}~LABYI9mJBdhG z^9me6`+vN>37lL-)%SmMyQjOSXC}~@Nlz9fVM!<_BAqT?Ri{q-+hel_jk^{-96bJpXYu5|NeaX-nyqw zojSEwojP@DLHnQ{q+bZ>r9u+ayu#l=3V-L((SNT*4^as&Tsz*t30E6ILf^!G+1 zfq(npo<#goiFlb3A*gwU|576U!6Wa7ie{gnp)_=vYah}>=6R9XUt|O|udoIR?L&Kz zekG)r3rSG(3jY++VLeE{7SaJi64bmx6vNOI9@Rp2l37Xj4+Yr-wEjuAqi?; zf#G05=;P68PnGBa_)EL>Lh~&ft6=d@Ig76UJ69=LyRKNZc&3y3IQ)ossTGG3b5<)Z z0-{=x@}^d3AXKe5mG`=};>eyP{9Z{oOi2*5tw$&+31v@0Ha-=i2{_ZQhvoKBJ%s)s zLWhfxpym}S&}bjsgY-usy+TNWnpfx-(lI?qe-hFWLK4)xLRBmch$W4ev$v~7zk!#F zl&9GWFFleFRR;TaW$i38%%F2_nPGO!8a3KSA)gML&wH_QY5i) zf2DETcMI9n!N%OyFjHy3n?b>66b>HI3_A&u+o)alHmgr*Iy%svhzOHVgP(&I&dsIS8R1l*4FrPuXlTY91+X>K_mT>U^lN$A}$ z&rJ?}LUmyWHaSfc)*_=E@MLSo zl$;6bx|pYfv_$GY>(G#o1@}2|a`xKc&rr}=YXudsH`KX3q0UqQ9W}|~(swWJD;@VN zq4~UA&R&f3h0*C-N|Dw?7b_n$Fpv+8gC^I_gp)BOdenvz8#P?ssCr{&7ML`r;Zg znf@h;>(VT)E~>?KvEqu8S3+Q&Vqbm)XO7}FA zS7m89znca**O!Lrrt`Hz@m}fiCS6oZL(`&75~V@Y^q%e|Y4!N2t@rv}-s87cx0GBV zzfN5#L`x~NCOpjQ>@O-s`Tn9}bvOHqOxN8#v!O}7yC<{|%IG1BJWgMd9h(E%xxD={ z;z0iJ@l5_OqgVcLej&SG@Gme|Nc8M%;~6kfPLQq~)`h>dX3n&gYD2Fui zgsJ)Xlk+0Ee;vAQ=+@h(6Kxze0m)7jRk@A0llOhme&AgWUR+M4_w)V7f@WJ*OinEQ(u_Kn~CpqbbustEDc_j@#VI|rp z<58L;l1pfgqPxI8fZqhXt$G-l8r6V0EKRCvsquPhTk>9p%JiQ+Fo1Itufc!-fa`*; zXPLmN8OzcAwx(xGcAWtWn-||F$Z%hp!o+aNPSDxP*iO&Y%6^!xR>lHMDP~<<2^WEw zEa#zf0sZUKI;-_FUp0NR&7*nQ{dO^yPWE_vu5VU|&LB-!kf!cl`X@B5e7duZgrifs(^a}Au@}_5Ok!^XR2|zh zNCBeRV{sw@a7IMVHll?Nk-CVyP|OQzUbdCtM7aM;L}o$cWP; z31=n}HXo1O=G1H8KmBCZ>Sw9dH}$j`+US^nBnOj2b4C&r5vflo3w=uM?A34+YHB){ z;L7t;vdZ&_=e5u+gb~=zNEPCdWGkzoIUo$ORIon1GS0oQVtvtL1uEMZdwZg0|)8t!1+Dz!_aqk7q*F$sW^{8xeKSF)g zLu8+I0Cxyd8eN5UMK55+D)bt90TbdNFR#2`oYlU-pjC|cEJ|mPkO>1k;ra}j(NIZr z@{RHq%Vt!h!wBrBmr?~Dg$;>~P1xNs!i7YmNt=0T zr?JfgkT!{FLQwMx(^b*c38$BJSWuafMq`J!$aQoruJN>fElcZ`y=g^8t$|Yd6uaxq zcpUbS0|w<@nz^ru!;5h`_foFQzQ0PX8S~TiHhxQXd#&QzGF(o_ZN?q46XI!Yz6MUS zgpqFJ)iY}=eP-*4ppadLPm8HxrsvJ+i|5sW*r>;q69?wrJw_B@)^+-7(PrD`cTO#-32Hm zk5jK!mXk|i2oYpcG1wunWC!Ce@AE2lR_6xdNT0HrUuey>rc387*+IgL^&Cui`qyJZf|?OM)iGZP~n-TN+HBMPtO!QBpBx5gi}ha2I+ z=V(uK_A{iNXLnz?_O4IS!1eyx!`-xjaCRTYM#8;u1L5qBjE#i5c?03>-i(ced(#HO z**`}#`U6a}-TX9wfrrU)lLr9Ng}t27WFO!rRZ7B2nxaI^)JyK{}|eHx9&|yt?xv%8?jijHKZ!0)bFX@j77j^gW^x4hA!`4Xz61n?w(5o5b2|Y!cmitKEV z(Gu4k3a8+V!x;+g`K$BQkCIm_yYXvT<}qz3{^W%JCi->nQ0T2f#!u0vuLFzc5?k5k ztagWjW~LRJt5%X0ZsRyximvw#g*+{`4xN05!tsnx?Wz%r6YlF1+ zVg%(J{i;v%J?~BeROVuY55mdDE=EuuW}Ipi$*WnWS+u6qz~9(rtQO!z&f$aOByZz%Xt;Dtn6v6}#fVh-W@O#pt= zf%g&Fn$K?nm~pi^OThX@n<~E$%#`ImJZJmy_JE*Q>piVZXHG)jCF|B%=#j{pj z&umN!0UOh**FEFyZKUe%Zr=V2t^L&hCTlm6l1V*m&!Fh{5GYA>`4YhC9s=tMtlQ1k zYuazR5Z`;c{A%vB(YlbF_TR9(5uVm!!Ny71hrf(S-vbUnfzdCbn^LLm&_h^3eoN& zhBKp^MF-HIzhAs|+jM3#zT2iZZZp2SGcnXzzYkXGJ{4M7=~3gGWG=pcEpzdmi4${N zn@iRD`c0r@Q>dYmZI|`?pcC8LAiap>{L9ATEqxm>7H>(NY%E^mKLkEvfK(EJ>RLBMs|@s; zI@N95&*uD?_6Y7*7@w=#qT6a0rr!r|m+ANCSqHimynn&;yCjv9EUB-%t;HPP_Ma9+ zb6@W5Fh+H7rxV=0McfgyN0`Mk!GkdsHzh-`bSaOpbKN9~-j7+;@7TFs2d=$$&eiqO z()6dt9%k|zmafPehU_d7c`L?+_@@KXM zeBa6(&;o|Y-C^c%7@}#1nZsd-j~!+XhatXom^pwABiBXt96dm}6_(HObAOKmC?%Sl z#X(P>(JXnNfi+p(1{?e^B}K zKfE(tG88GB=*MQoO^hss>a5h8B;dZ^mn&jfAu~SRe9RPx@Uux`>Sw7K3jA!NojiJpah=sVMsXlO)Cu6Q^5{ zmqhgiwAOr&Hgw!G8as5{6N-vV@^yD?=V?C-4f>#4h)I3WTX|!P;ca>qTW{AZm(^74 z4#JOspT0xbaq>=H1Kd6;#a|zGxrj|dwW z$DMljM%BC9U}8d0^9r;X?t1M(x>-oK3rSG(3Uh^oT)0E&O+s2JBtgxqjr_Oc|7Q8W zSN?*USJ)gPWYrx&2TY7sPVU6bV(ccck@F;X@o8&u+;`*F=1M)e2Nx6EEeLM*5b=B; zp!wPK=40#0!!|PI4li#JFYhPBgrMdXwuD&NN{<`x&1G3{iw^yn_r1g1{~^upM=TGK z9CxVQB5EHHH9^~YB=_=}evpT5C)rVDQBLmTlS`cb%xIN-lP)!Eg-pR#oGi9KgeN#k zS$XuB0W(M#C-?KY!)HtOt}i`Cbn2xx;@(c=Z&l;`7egS9aj z6e4d|gPfxGpNFwkdS?9SzYo7fAx{55_CXGtP?nS7MmW_s`;{MtU+q__6vx!peMA8K z#^dCV1S{C{7_|>C1#vw}lj;3d6M~jXNqe5@M>86dtFiqaeN5%wYsY+77+^_ml4CZv zqtcvhU0`|`Vq-h@-I0f#jQ692--yg;V~ZWhoIJLyFZEb04|6-_zhpwvk&9_<^YQ<6 zeCsR|*JsC^n>tEkec=~Gi+&2-vH^%!{pi|u%*8yq$yKhtE%b$VS;?(!$NbhFoMJ|; zW5;}{1!0VL8|{ygHugOpp@^h+^)cS%_=a;@kIIpLoM-DX9Vx_nuqF>()Pp5p7}nEAlas78#!~Q1>Fs+ z=@SH)5Y)WFi@Yh=e)xgV`2_r@p9M#w%jbAAx_n-*ranyY*XYtOHRb2f6Faf8)$|3x z=@)tAygluME#?K=h@?9#-6NL11m1+8<`u?ZsgV4e2iAQhd(p>z629VOgw{dt+*Qrd zkl%PCM>sOzJSKN$anLFsC!ea?42Y8%1RP4wLxwv{g;My+f+MORB$1s()tx%#3RPEU0E`YE@CK8r95h z2=%00jI*VBKM7|e=-~Md&fN>W5UgPc->qR#QH4LN&F+Bh`}f)5s83m6^;;OHrNzWTHaf!DJ1Ocl(@LM zsMl0XS?k@Gl=Mozq86-tn7!Sih~q=i6NGP!ya&bN(=-mDKJjzeHJmo3ap9AN3#P@C%cTt!Xy{?9jC88Z;;nO zBWut)kx*HQaj$88w*0_311GxyRh-_S%XZBRn}|=StElwX*io$9a8B}dB7^dY;4Zw? zEe~=F?&YM-&072IFk{$f^pM;IsC-JkLAc@S;x~&iOqJ_vz!{5Hc6y4z+MpO49K`^2 zfvm$hqwAcBbBaTq$06r&$YYw?Uz=L5P0e@&_n%Z5vpXZ>*8Ov3eK`3h5!W_Jp5~># zq}HD&sT#foZ2V-Mz|c%#T6ImG{xeUNlwTVU!Ko|24sTl9RGe<=jQAxwwVE?Bt-m&{ zUYnLtw)t+q%>y#EKZid7cO0a+kkQO+b6z! z&&J--*?fP7I#oZHw%Mr%1B->v&1R|wuD{#p)&lK(uk0U1)$;_EI}$t;SAxF3D%ZnT0rtD>3S*Pq(90j`TQ3Q2f_Wd)u z&Y3v9?DPKI+4DP#h6hTu0b@^MzCP**HhpB@P7If=WEZ~987^W zMPKv9Y@?rgp%+ga-5R}aiz!xAv)V|k={$117uSdUocbX1xH3*xs*gfGmi19|JqWU- zrh;5V-A=TqjWn#7e484HY^Oic;^MRFbHcwvhn)beIpd~Cl#)B3M!$O}udLtIX2@4S z%x0p6@FX9Dj$d*7LKnY3yH}3>X_zxs6V#>8S^p-c>=vs`2`!&U-$dl4^e*C~<2EE+ zaFrnuje&I2)u=144OM&sE-7E8cPnXIxzcYMTFKo|%0lT@tc;K*f*ww%PRf%k8Dd6* ziHOQJZ4S302eAP;G_Q=KzC4t#VDS00b$A5`o z7$7^o#U-WnIpeodudar~FxB*ib4Hh{05Aoc%|)oSHs$C|kMX1Q7(d)wki{THKSJiG z!v<;tvIxDSI2`d&<6)ydU-%5%aOO5DDcAglQwF zEyl?Q@aLrby}a^ygxh%jA~@lL=4*OLtPO=bP#y_yq$^mm8+2G31G4dz1+v_+J;R|4 zT~^`P(20`|;el?o@8?u3u4+f|SZR4W+z-lxIBFx;>P&oBQCjJDsOb}enpgUaKGg(B z)InHs4~Girb$Wb}2W?`C=_0~j)c6d&@&r<>V&g}0AzLaoYVXB`gs9lKW=HN+L-tc_ z94Hu4mSW=sxsVkU8?Ta!Rb#Qyl#BJBwLkIu_0GJ2Rhk+n3mU11u`ZC6_ZIVT-hD0R zMZ8Nb^3uZ2-fn5MJ@TS2sSS;^nDP{PF=Hskmoe@a*G%7oVI{7&Xwb!Yv_)Gh@U1-J;adM(`MVk#9Pr?2ILY^LQH-x3d}YZ&Jo`;^vvK^_3K#Sz-^Vu`p=N*? zBi!t!YkFWe#0{f+`JCw7NKQ6Bz=QUyRY>wfpd^$Ei3+Q7k-JI(m6IRy)CQ5Vv}`iU zv&Z+L!LGtfqTi_cvRUCd;Z!S$BO8*n&mdb7QS=?x`W>(zP$8eQN z%+K(ei@DWknN+I*{2YMi?2@e&Re$mbQ5(u`b)&vkN*8MrBcnJlZNMoiTBkVBOL18b zMWO7rt%dDok!M?PHuWbT>tv_Hv&`%dKgPpqAnT)V;a*}gUrW7>8f#{S-y$|J4drt3 z3le4;$|T9^mpYit9iCBe&&;^&^}W{b6+Wwi%7vbc+{6N#6cifgQk|Y%UFB{Mx;=dM zLewm3*OA5>_|Kv(DMbD|1jlB;&*!gF{}kU!oJJE zm&_%!JCo;?C{+pnHqm$TD}Y&>@)EQ5YmF>?M+se|0A4e*C>~H0zqTmUnoLu@Fq-@Z z_hJn=UcQ>-uT^1~^$Q2Sqxupp8J&^1sV=2ZkDKZf>TBX~m0~c?dRX_}ChtDx8S3cK z){88bzNbgZiel|LHKjMwvM>wbo6sjs>Pf=4amP*dO*UmMgdfSXU>$`gI9x4ul;CWP zs+oS&zpKCVfJzY~vgrL!x+5~)x;H5lmX>&PRHtFq@Hd|48jiuRj2n%c){EvDCr;T2 zQQ1t+GhvZudQtIwyq#jY-(OZ*mM^mXsd1|Z%RjAd*!2}g#>#1hIp&y_j}{JF#MaWS zU1}DXeXDbDsecsRRWKdpg5`)cnsHNTswck{gYDn(On%P;qQA=IS6{dymtSRS&mW^( z%>-J>AHW?~&(lMawLasP#GTnl95=M1l6C#dZ0gYXcZl>324*rT+9j-3(Iba-9y;HD z@^9H|K8)C&ByU#joSzv)gx+SPE6y9Fs@+4prSNC)FA~B~zZqUipM$RSLjQtC|D^MR zmGFMGeiO*}KKoF#^WM2kzZhvZ<|}H`7hPdxfmP`rKrFqLP|4pUP0h>Aalg7D+`o5m z*?TUAzj~UOqyJ5=MJb(3bwUYYZc&MLCf-%512!^-pAly@RCIKKiS`1da%QI@_VI2t z*;x)h2ggRbyiRD|{x;}*4La#ms*B`^M@Z(;Q&-f{F?}k8|0HoB$@U}{{VpL$~+DO$BlUU6nzPwnTX1?-a7M*>a0dWQf^>qjSjhTn*de-hJ# zXc@sKHKb}TrWk0|Rg;*XfbXf0io=+jD}+CD}+X|6FhqDN}fU&K-KZc)tgqOg_7=DnFeFgl6Rff+L= z`OchFQUihA)M_YF5)+EgB5n4mr1aU1u2yPX0q?bHQj+Jf;!UTC>W#Mm?%`|H`O=zv z5+8#e(=#d=g*Fn+@2X_<$)xmI+`~id<3xHtBdt>EA)VE}sYr|_k)Ap^#Zx_|=ML8pj?Q|l&Ajq zHm-af>GnLnVSVMnz$FUB*p^O>AHs&hU?uLH7%#5uPhJNKD^-oP2Qk!eK}&Tc`6t(8 z-MKf5qOoIR@BF?A&(`^wrIoShu*N@ubcDUOtWZC@j|qYNUhMobY@Hus3K>16e)ome z?^+Kv5)g{|uvi*P>l^U!b@yR~Ion*vjF`Jmf1@tt0#c;-a+%K3xH0ce_Q|+m?9cc! zW(-EO{^*;^hoG@!on1s3TG)Wh|HS(^dS}}K*{XMAz zm(|V$HLtL(1|^LQVG2EV!zdWZQc?laH>M1_J?3s!u&eM_80SKxetg3}9H^34fUqOs!B?Hvk{!ae zbgotHLhEGOZK;L!sePKs6JUOa$}huFbok>=e++wbPI8O$LhFE zF|EGYnY#~)s@1nR3=jq}6~cz7utc)El9gS_xGyEjTFa!7^iMdErpApg5PWt*?eq3I zf(g`1sK)diYJ|)@<}A3i>;kfNER%Ats8h=F4L!Wv{HEIL<kbQS}2ZdAg9xKOem^skEtH5 zBFt*Sj8wZU&?9e6kU}yHIv0;csI;Cj|kUj4}oo?#{rySAx6 znT0by$)=SsW9=@Knx=79?skrCIvz12V}XibhuXLnbhXUTfX&Rhy6{WuJJd$hv!OnI zX=ew98?6rQ?7-B=5D&Qi1ar7t6DGz2n#RPTnpM%$xe?m9d^>WcuojvUb-lK!Qg6j z^z&H}>shiVk0|V_?gVSAQ`Ez<`a1ZWsPqzApt+N%bQgd^S1I zM`hn$$=sPmfEgoh(;hmBtSgZ=8VYJ&I=dpf!fo0>2XC~4C#ZQDo{g}rv(%`Xdiv-$ z3MX1Y?VyOQZxl_F)szQgZe2Ir)JA{ruiqbA%W6!yJMYVUeeckL4pgh{+1vTq!5@-V zt+=JkQ3@k)xUswIE79OcUSBqi_Mjwwr10Tjx;Q!*3QyCnj(yn1Y~q}ioT~c#S0$&h zEdbX7N8M3vVPt6aU(DyF9UpDGam@an!E*Q+{C7@z8W`u zut3DK74ZckQNkjw-QUIu;jMuh(rK0>#+~Y6<8r>a16c=lD~(&bp4QEj8XxXLB67GKNJVD1|M=RQDWD z$?jBv8etVfV=c24RQ<205LFGh#1)KWJDV9e=}eI>#upPgP8_%9NEfe7aFZ$FuUvzj zE4oP+XIF54x>nqW!@Qf!$m3S!_B0U1ORYg=F|8Ai0q6l_&G*|5WD7&YC$00PJTu%p49w zam4Y=;jmxiFmpKUmpRNF4tqX_nZsef%3WpI4*RbhW)5JS)u0M^1II4r85Cwf5WAoysQZbJf8^oJLAcK& zvjw-kCJ)Rk_Z$G}mg*e@HLt)>x*)J|r8z&kX{W2Q3~zT-w17T{dQ#(5&F&aJVKCT< z7rTb0@Eh12Dd9eN3)tDg-G|7%le-UfCih}@A1*gC4TXJ$+`GH`2)UQK`$)O> zcK1J1z038?OA_42j4$h*-@zqr!j6rT(Yb%$}b}ddzEy_NKxx|~~D94v5Wvw!ZTx~i2% zCHXZZZGAB5^f2MKCfvf0y1EkAq@UDT17+)!1B6F%+O7eZ{ir zn86o$+{3TD+Z8y^g%g*Omh?qHCj>RGusa=1yT1o%g^nn8Z%pd6up95KFh z@+MZ`OBK0ilSNzYq1Y6~1)?ZuTMt=uL4XoY#>)i-?SY;Umnnoz_XRaCpT?_Ol%9kH zX6ZJNY$^7*sb{{%n9Y3PrLe%MJmbeWFE zTqVFYkkV?xJuRBIYd%j8(WUeejHSesE> z0_71)NZ1yp;;_Ba|0EA~OBK`_u%Fm!s!}geo0^oiKS6b%{Z9rF>^dfkpljDxRg!IS zmIKF+s!KFY<^~bSmIK-o3kDs(l5CG}TuFA|)e?`3ZIb4w28feW2{n}NxVNmU^@kn7 zL>!>i@Ks38TIaB&LSJJiz%>po?gU!8Gaq3Y(P$x%?4l6m#j=%zy6LX^Vvi(QETju5 zkYQ9v6*b!#YBF`i(FhQbKtqs}BlwXDi zT>dcRDhNYfmJS1U}J?thPc9V==cU|q?Q{8*2 zd#Ah86G)A;LsLeG60}fCwM|ir*xMY#S+%M4qg=Y1(&5Lb#=nj-ijyrn*>V=E>fl=1 zrmS)9RlUS^GkH9VxAv(w;jN$G(jS%mj62tYe}iucSDx#E^BJKHZL-uq^0s6$9Ty$J zcNYR5z4Ye**V_50wcy_aRf_%R0k_7(_pGox=~Q1kHCo9xb58DcwE8%2fZp*Q>VSPE zdw^G8ic~-HZ;XCclRbH47rZ3Pa1Zrc-N7+YA-@AmK@7M z*~5%|dFY;wpzJ%?bObJ&+AdmjV%`tL(ampmH|L>VOnHX0Xe#P6HjC513P)#|_5sd3 zzq?kHOhs!J=F_!wZ}^x{(+$U=JlA;3>yezCM+P9kTT^FcJjIT6m=P=+;3t$wAH!KA z8mJg9w^&7&pb>NOe4gQB`sX%0y#Bg7rek)LIgLrXT0=y_GI6S2h1MXiB4%lGZ)>F- zZws%tc(s1g{>WX#t>2`vej{<0-t`+6_h@%(oqR3)u;!|zJMXQ*C0qqp>@{4? zE4@{7*i$*fibQM|ywjJ$T-Y0y+nbOb`6S{E!rezzR#5W_FBa0KJxJFGX}h7b83f`YZY=o#r#t6)sDos>NM*@%14E6llV#5-gss^G?A14B=bqm zb)xYy(bz|f)p{7aUS9i)F+t5M>2|=S$y4<7rmmL9LbGB=P+9}yo@}9 z(ZkS95}FIaj!x)1T>Gc7-!3U7qPNzgarEk_M{SgAZi1l^N z1~7D5GLoIqOFM(AG&X`|^?kgM0n-CTM(0BhQf}t`q4rZ2K$mrSE#2B=KRMll!L#(* z(8%_M0`}7WdLiza8ioCsF__RL1BZPDs6xCDUWQXgNbT-m)?p{87-TQ^#H>6_H;4(8 z3MZGz%xKLf&&JrVZqCAy-92fRRZTu4pz0#)dP6)j+qavo{%e3kJS*s^oCNn+{zib# zTXMY`GVySa6@%61!=Uw7@`1CHyVBHjcJe&tP;qz%IB~hDkJbx`H12EyELM{|gZhS& z_aS6Y>jmn$5V6e1&!Qaya+7ujVHH-8hNtGsB5? z^|l)lPM<}p5vMDp%#{WE8L6-hsp?`)7MM+vB3i&&;cZn8G?`4*dhi~qgR8F=2N?U# z$qtz|WxnSV*NWwy;bH};arSIhoIXSz46c3&B(nXVFIZ2!o<4f~@cgEiN$ZKYhZoz2 zv9-m!qZj`$@3Z%dKKjqRjTX`!sL zVAzg4G$r!ZE2-F(c0<#Mzf&WI8EZv{=4#0Qw2#x1Z66~e?0%U^P-Q0THYKa%Q^{Q3QZSnq$OCIMqECU=&4@feCZF&z z5iCVvk}0;!`TQiGDpTzlYkLo=q3mPqtrA7^@B(s|6U+_0Y@hfx=fhfGXj2M|bB{wK zJ&aC3mTnh>%`|$^M|I~{M4&t8wcuh_T1#J&QD0%yo%7Zu*@seFSgTB0m&$WZ>7^>r zQ8x5&?~}XJi5^{x8|arsAp10p@^teK!$LU0$Z`|D30Wh3w;i=g&OM^a@7W<}+>pOXq<%0G1 z_MP|Tx&JMhzw&S^$`e@wa}c3s-8h@fTKhTK4$SJ#H629t@AC|Aeh1O}eAPouW8yAd z>;Bns*`LbgJ-V@sonoi}f4L@CDmTsR784c;O>M^Y3t`SCKh9iV*cbFW1TCTKtwc+* z*9C^3YJd?Dv&q%{4ZMwtiWcSq#tNLw);^UXzDRTL+N0TPcsVA7c)} z0-Kk^%mIvX^9PWa)W1pw_ew>^&%JG<)HX@GYbqP++VdfpPo{qXq4aRt;)I~)6%HVS zXr{lE*DKUa4|Kru0vsX0K>)(R-F)n`vPB}Ie&y$&$q+>N84fQ1)*syq zuZToz>Au#!3#}%tHcoCQ*s5i@25)1t;fR}&=&A?GtJL)cWLMRTD7PsA%dXW`EEuX? z*o^C$sdG(7y%gS#!rv;93`dIRX($TbAVBaL+UWIk+PZ$G ze1{zUVLn|{U`m?To3iQtAuj5qH|sQ{roj?J#Z&g>n*=MV}AAF`q!7u#>vQ`l)BuDe@fhWT}L#ZRSuScCL+Fc0<=xXh)Db5iylDuRtEHs{^ zWv@aq(sKz<+9tAUX+o%mPn_ayRyzQZjC#TxM}}X+M&n!x!h8}ot;JskziR{VXEy*x zy+W`Cr8-R1`!+PnTx&in*HUR(1 z2H^j-0r*y<>yP*34Zv^N0Q~bCfX6e|Pk-?S;Ad|D{*Dd6KfgBoF#66}G@®FbQ_ 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%0D-B$lcXj(!M5VY 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 &075Qv=WA+vP92B5(O=;-8ki!KUdW03zHFK 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

Kr!IOq6Q7?TzDzy)-fY;^MGt18Mq3kykJ!_S6 zOgX#-1Z{OPX1L(8Oix5$Q+TVPv$dh@mDo%0ApR0w_$%a)^$nXhg)i_P#CwCvY_glv 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 z%0AEJm~z+)!rF#${zP&*0rEvM+|o5n`yW zE|dvi8#?|}07@Vgz)YTlcn#de2|%r7%>xjrc5c>odN-phELA`;I9n(ro>Fi*BV2W6k1aQ9Qn zXfi~pnOYh@Z>E$Y0@*-bbq=m-$pd1gW@SMv1hquoaQ8N8Go@H0wG2tAnG#&4nE8O~ zGXAMDUY1a{ENzN%o)6KsEX{Jp%DbT=xva7B{!Ce)tuV0=vhvCw?%uX8@8)o-@=oEg za*j4(GU;)nvL>zbScarRwy-&&#db2)9T03pSmvx$w@rqrKt0TuWS5~|4>y53Tk%^O zQj`8w-1GJ|EoJhaWOCaG6mlD@a#c6sC0#VUiy-l)K;qw8mHZ-)9As>+0!Bxui&>7s zY7D=;I5<~vG=^8IRLL#mRX4^}m3&YPyxWo$f+{I*xO@AQe~Lv?D~f-N;RWXgIq4!M zdvraahdn%-6Ed1j{_R8C1Mh4OuVvI3Ho@j}`3gr#6Uf%DSRr1e5N_Q_M{}~U*eZ^Z zYBW-D`p7!#xN=N6oCab#qYN<>Ys1Zt7uFST)rWobS=NWCq)p*UF6`u)T?L)UINA8T zC8&(gTk}%S=WT!_eBPGFAl}Yg1&ku`nY)&a&nx5Sd{(OPc?Wsbt#HNXhs5W<8oPvm z&+_<6m-1P$;PWaZB|ZyY`56ASMXLg8?_Z9%TJR(jwT$H(u89r_k@$|KyqVDE1wmNG3E>i$}9{XW=yy` znCV*c5s>{&{MO?42EQ(T>EA>i-sJZme(Umc@^f?FRglw~{Jc6NZZ?H8m2y7rV=ee5 zoO{QK&fW%34+NWg;7a+)GjAwg-f@fz@ zDEgICtZaJ$bGKv8Uxnc^vly+m-8+N+VSXWlemR5A`f+m#t?mQVDj@qCd33uC|Ho~G zZP<$rb7XypS27yeSV(#?hmQuZ zUF|2Y`XyW)BlL*GdJ^i%{zO2GALI>p|26#(u2>{h)8|FT4}vpvm}fCEdR$Q*pX$gN z9Gx5uXBJJ)zeMr>M9yu*NH$JF+||6*@8lZ~L?1nYvA>#zHBdG2k`US8VQpkk`64<04XI!zy47q84&7ZHCgK%{W+I^#EM88IMZ2&bL&Apv{oywHb;v zvdvJAb!|pQnY9^}IY?tst%cEH1T?l59wuom=wy?*;?JMU+6&R1wHGrgcc}e61X$Mo zCg)=6egoQIw?A@<@$+zk!Ov4wV7EW=XdvnS$Rl}P#Qw+#6#FBO!VBWBm^)~01^549 zf8?=5rzP1Hg3|qw0=fN>$0&!Y+{NyXRH0KiEfMnv4@9mFN zy#H>0q?nWt@)IUJqwJ47lo07uQ?eK?-l?gk+aD?9DElKDQmx+~sZyu=BaI{XX{I%D zf245r`y&mK?2l9yb^9ZYS5@(-aet(T`TuEuq;k#nM`~=a5z?7zdiga_=;c`HW%W2- z((&PbRyAWF@oP2?uky$-%H}RG_Z#LaQgoym!O_Qx%7L-sLV4A%<7%w0V#*#KBSJXbla3AeJno(<3I zw*48=Ms1@xBF7}#{?a{v6Up!~ey{Ueo1Z_<)6B7xpV#(^6P}G?Ne&$58+N)k zlxBJ3Z!aWL$A|#Wb3NAXPA4Yx!*BY0T*{5ol=F5XUVIcf-64$LVVm` z8O1`tM|ob8r&#dOKakG$fqUznEn!Qs;pDO$k?|zyo38y~w%%Ekczkf<{}qf6XM=(d zdqbYa|L5{r*Oy;zbPLP|H6a(%mn$v$^7G|Y&%sq+{-jFp#{WXlm&^0|a>W|imn+A* zzC5EW8UO3OvcY0{bfd<|XzbBF%%aEtqTlP!A5wq*U0_*%zHC#a!rY#|d?}m1t!Vtb zkRb5WwU8I{693*>$V+%+f26sWntPeKm*Xz3g;aWI)D`lo7vV~yo)S+_Gsy^nM#=M9 zNX2SwAuj-ywvZ~waPeWakZV~BDP;IG$%fD1c#3EFTgK&ZZGvW&h#XN0*U^kL9TPqF zbf$Nrw<%m#Sbfv#E*wug)@OXW5)^zofI@h-xvPPC>Nl^8@IfqS5MLu)W+Ibq&Mahe z#Rl1Tlp@-9oxJK*xYE97#VKdu69Vm%=h?>;i=@mxhHXxEGuh^@1zeYLruJr=Gppcy z<*XTr<&16a`-f;?j-S^DiG!K`r{6xuSCoN?7yj1X)I6C`2vaxdNYiy!# z{nJc;ZX-1M^SJn1d4g1G_W)rFlDR*^t%=eUaEAbnW*6d40UY@baF+loNf0Y`{FYVQ zyA7ZaNr``KfS=^xJdIefqoWo*+7Zpv<$L8-Z^u<#{*~0^2^Aw2g1RivtILYjSeI`C zR?o<%#K}dsKzaznf3|}CaF}WbAO5(ZYu>N z4b7cSB)yeP4;}=C9@Ibt)rS@CD8@rU{0NVU3?Jn&xtHoOJ$}kZaCSQB@e_M|oJTfJ z39y*4s&YblPspo2ge&R21e1n7Rpzk}NKc+8J;iE}US&2sZmX<^+rHpd@b!{>R$_4D zRw1oQm=UzIxqoeP;;yy&JL{Q}fg10x^s%(#~Cz=D6IP1Wc)gB(| zAy~RHyVBLP@{fyie+z@>>`AD5vzVg$LRH zcjV`_G2&uVINzm__79=S_2-~Q_76`29oat!8pKZtx0wDxDbhbYBd_`kT=fqxOMb3@ z5Q6?ep4UGp)+qhM(}086%Xo49gXK*B@T?-atmz+qtE^rBAcXn{`Ck8Ed5`QLly}xY zWE`n%g~ZiA2)&5@!3Z$|8v6$i^I!H4;^2t>VQY5>3pZDQO|FEQQF#T8UidtatWVgU z+fOz??06gERW_DU1RY7+g1ubZAH=^RmMM9-jr*RytSy0G*>vRBAkmR!Q7Xm|Kfwzs zL*!NaEeP(7F!x2=nv!tN^dY1Zo`QMLCOkRZYV1Z7#vwyU(UOUmh{!6PJe=ZpvxQSR2l30e z(Xr}UHiBOo{A`S$+i1lKl>1eA)faH3+^6zfgz>sD5MU&DhkiG z)P+zTkngphMq;!3E|kKJOT)$2)KG2)f#DFzgsDCgM|w8XPRIe0DY>EORWd zn-eo@)I7|Xa0@W?XU$Iw3We49DXF9n6O)_5EiGuKx4#VH*MOU*G)4O&uVl;5>w+#t zY^T`K{OtH8J41Iy8vFsu7WQkQ$EzI3R@q9qpVJg= zjX%(9sq4}1$sPO=VUsFodF;-aK_CYQZ*TU}m|o~ez2cJgEFmmFsUn*coB&ySO!#I0gJ!02P)!cew8ED64G~##3*S+VodYqt~YUAv)h& zZ%J4kN~_6x#H5-C(an)AN+^im$6Z|IP#LHkf0tMN6Rs-9>r%bzRjgPDDu+C;awt|q z<#44OF8;nw^A`M$kZB(-5e^sMQUKS73+aZnZ%9jjhvTnpG1`nMtR34SpKOAaW6I(7 zAk;qk-?Q7N=%T-K{AAmxRpOMJm8HEB1xc&ho`j`PwNRQoW z_oGF-^Yw77Yu7$T5=%=D?Ccy1tkIGkA2#^NQDctkAEUJHy0h6G$nZ~<(`3~*p(S~k znB<~}YO}OXDXNm&Reh7#(Ls#UzfJ~M^>Jw2$Jv|7x}9wjK+0VXgRDQ{HHiO>o6Fi7 z8fyvXLyS!WRnUNj=2Q9A4{^uS(EMJ~-d|y2A=J>w_r$Gu?5(r5FoD;teXw*bJ=zWv zRJW3&Rq-%m5=r@T(pYGHex95}l_#gR!gD0Gs>$g;ppeskM(Qvx@ua0x?$3D)Viv07 zE@5t9ZWC^JsyYUJywj?O`j2-?k5Oy00#`rdMWfa?#f`l!3n3V_%JV+nDHci9NK#+p z_3_S|3Rs$!7^nFWBvaWOfw5X&j#8Vz#aCuF0ny-nSL!T$1>US?Wgi0(lzle{qd)(* z(bpovf)@+#^$ALhOk5dff_@PQuIZtPsOi;Yu+A{J6$8iN&5Rd0Mo@^@K z$)hbJtxZ;d1n1OW5aaTMGjvK%U(etlXo4y`($q1&8eH-#=?e>+6*=z4jh2G8S`SbC zSI~L023kO!c%^!hZ?cp1NHn80%gU>E;7V)$C~5r1q6&f5$nzHLDHcgJF4&s{n4-HQ z+xDXTT{LF`x;=MK0GW4#*y4cy$1T1_9J(@vBogY-mA6HmzT9$u2ngwld~b`dkypRP zH~cz0k(Eh|*OjHc_)$ebCdCpE`*(MSt*Fn}fVTG^XM|1!Ghi*ASCI2im)X1L1+mS8 zPw_r`V;px}&RZmspIs(7+JHFYM$!Xt#+QM1kwmQrsI0~8^*AOpk{WBCaeFv-LB$oB zHZ*nM^=d%N?q13-TL5KK4xiBhncE0Z9-&g@{|9Yip*89AiN2$SZH9WbX*FlenDTX$ zY~6RX9*5U)de^cLkgb+f8QljpSKLGC40RZo;9OyY8{Wo3CL0_%eVw(j?EzHryXUNF zrE4hu9MxE=i`6dUQ}_<5VM7g9{j;qET+$ulPubhO~=)^25UqG@1Qc5dzpxY3^|WV8o~s5bA3pHGLB3blD9dDZ1`Rh!>ceYrx3 z#X?Y<Nk>17HsOTvrT)LmQife&%mu0_<8yxiDtHk$*hMv z8vS7_184b82bG+eBK^6apBBU1$`2iy36=|a%v}w4aXO@w(4jTtRae244!tK9mdTA3 z^?=YJd7cg_R)Y==oT1Du*XaFJUo;%9*B8sLR9lk-lKhyZ{7v~?WbuVymLkv77t1ej z`oa`m`l2cP45i|-{JXN;2Ys?Z$iC9i`Kg{*o+#H^d8TwMA1KomEmI-XvB)3pJ}A{v z%e6V&Pgn^@v{VT6uPWcu zQp>&Qw3LI(OiR@mCtB*tE=nrjmX?~(yBtfp5()(~Wz~aIR{y|iqs%B`K}MajdYF<^ zR)4HN8_n2&pQo$R98Xt!to>ZWbafq2UR(DtWu7ChchzQrVZ(vB{kV(MQ>B8Q&X!kQ z7gu`v4>9os6QL03sXR|l6{}HC%NE|t^`BCm{SmUX^#EzkT**bPo8?-ntw%CRu4pSe z#8w$v%2E*mZIw6NeMqV|mTM3mD7`^j1(&uCC>6iBA1mX72xU5ZuyUTC>a69A&aR(l zjn4i{S)XTGBZPET{&4r9b$K_3hbZp^j?My;B>_Q*k*JX z!yApM9wsrS`a1F>_;U|GPe&xROh?jjw)Pp#0g>)AQai`kx3H$^&Rj5zvENdOE5owO zYz%~ZdCZ-UTT^7VB;dx&GQeIi2Pb-gPuAflFsrXCJc7Z84MxHxfV%Nkbh8Xghr*=6 z84Rjjf<{Mpn1E{wSly6B^Vxj39|?`^Yq8x&w(W~;h?egZvMhxg=oH_0BjQBk;c|2c zBXISXhidVZX_Q9bDiOM{iM;AOTrD&Gx5V0M8YKk%rM%(p)l#V{7D*jWQtB@Sm+Y09 zeF^Glo~21#xB`X{=JP+|xubb-Pf8JeO4>T;rY^ua1gKz2qw``QJk-m$xYVy94Wqi3 zuoZWfJIZ!jF&9&m-8gR|p~0?$x7y2fA6QE6153#reba&AO5zzVelGLS_35^#)XZQf zu^Jbw_zcYI_RM&gF^zj>j)X&NK;-548kePi8h*jx4`X5k<(F8=LGb5io|65 z0k$H#t1#Sq$GDVz70Y63jRuL3><)NvvAYArC1)%)`i*c5KDO&DHTZa#F>c%05=09M zR~9yVH(lP}Quw^M#L|haSf%&YbG6%HX=@w5w*dvesX_32J6__c#_#QU7|TKkxGvA*x?(kO-BB}KJdqk(sldK)m{dF~kmY1q zG<*=w5!naf)DCp(-I*Oow2k-%yjKwK3Y^vbxbf~d;VI;w*~B|%HrZKD>%hB8adW#5 zyQZ+krkWxaEqZad*aEI{w5Z;eS)|=*KBF=g;KDr!mZir&&2Mt=g6=NfS>f<^lrI~& z>cqMxqrHiOj7|{)D1=4D9J!C}dbD zX&Hd19WIuIJ65b)0%#cEcv3g2jGP9k=ZHk=exDb>%QC-7P@dEYm1u|tOXmb^ZD#^B)wVJ}yq_s`ZA*LZu5E!|jP*vF z#W?{@6p(WQ1PFghK+SjE9{llzo9S=+O$Ux5S9IXpAcIPmbl_`1xRu7-LEPG59-tz? z;U3^<0gmth#|Us_28i?6vEqfNq4%8Qp%%QQZKw-EI41n-VESKxk$hM>OQgidS_)sq z-rdCB%@6s)B(%)td@$0b=?fg3A}A+E(J+;U$hOa$xHpURecmen=kS!ldR(n zVsT;AyQ}K=V_4zDRx>z>MgAGh-rfsYzA{eG>)S0>>H#}joDJ*0OIP-vJeiW);?dH$ z#iPWEa@*qJ%E3Xx9c8RYDwBguoI6EVTpcKr=FW^Mj_b66fpOkA&cL9~u$yBNt2=gG zed^#(qZwHncZa#^57WIMDO}c&U4S2iufG)jG4Eo4>Z;(R2wEeW?Mw7%tkD+~JvZ_|~a;hD?X5gAGiVI7axvrJET)7n&wgV(~? z$uSlaRZBMKrh#&c(H_3ehj@4Pv^3ZbR++ z9hIYaBxXk|rEn{wquwfiIxMs=*OrlGz+l9rpAJSm%$QN_`cvWeO8h*ziO@`LlV?t{ zdBrS~$qAs4$#_bL?OtDQlY2(a070vBvqNl7fa z@l501e@|kUF|XdLEG{KhWn3)gQr>Bhtfq()CEeBMhL6^BJqdoc>D6~Yp;x^CxXXtZ<8OGSdbuDz2Y?4QC21?U z)dMRUgU%&{YmDC~O1ea##kJ_xVzWLy3-cSo8W_Y4EF+g)w6Il!!1cq zow-X0X1MY^Jyk4bxTdGfaGjp!?0AX%^7TjcMYZoJb~Qr(xV)GzibCD2)gvMmeABJj8hkKd)_3xjY?MsxSpS*T!L+y$}>SaJ!LmF)!g|kTSN# zoxAjyfiDqw5A=6H^I2BR>wQDs!&ZjMX+gQJ1`sk0Umyif2^K6Y%I*|jN;F-pspMQD zTz$iHlrNiy!aCA@~0pv5*J)~*Ljn@AH==yyX z&=sV!h`OQj!2BEJRjydOzAD#AehO8I5AgF^z5ILh`wl-%Rwqv8~(z*zWc9L}m13JE8C^@N-PIH-bX8 zcZl%b+1mgQ;vWLDPnHNp&n7k)ev_U}v_-Fe1o6#+CzYg>h*xz!h;IR7$}w;}8Mt=_ zTZ-V4+4ItfNmSKB&M6h2I~YLiM+crZBP`|7!{p4v&GkUYlu4Ei4Z!KHtjg+RPj? zN}KsTSadZ%ugw$-GhImSzl>z>va`bd zjHQ19tfn*&?>%}}N<81IXQjvUeR@`^L9F2MDvZ$>1+S!0u#P_saLGq~fvJ+Qt@q@737Can>dsma3)3q@zy3bByC`+IRiwZy7H|L>(`eg_rY< zmrsC#m$Jok`wK6uq{m%wjK)v5P|Rr#>{_X?As8$DEy~m8K7$+mkU0I{84>PT3(**w z#p#OkgOr`JT-Of-L?82s=jBy@j;r~^l47PaiwnVgLY~J<#cG&OSMq#tkngCAKorknu8YA9Od#!GzoZp4yVm31@ULUDr*Aza+d3cz>mba8)$5HH>Lm zgZM=tLHujnVklPIRVJwM3qWiLVK?5k*d=I#-7@RAwaY&db1R$_P#Vt)4{>&#&lNB=P*Jo<#=FLwZ&&taHar+o09+Ht01&zK*-N zHb}J42E8G#`Vy|%pr!IQNC?^>d0rc&SpTnWkmYPyHnu@ICX+7>e^7X((DruT27MZ2 z-wH(c2wATi#J@B6?VJfoo094P@ZSp_RS_=m$upNOyoZfuBa_XWppeau$cBmdTf9ZL zBl6nYJf(mi3Gj{wxI=(H2~b%Z0o2~rW9(c-4A*5&R8y|hQ(Cx#Q3Z!LQhF=TrY)h& zIZ7Gk-b13MBPF}|*9};n2bc}$O>m@GJG41ztDk^{WjeTxKJ{l4sAi%rn$Hu5I3D@Cvj~; ziOJG2^v;Z-b<*Lxs98`+sZf7?rdVQHl3bsey}J*jSS$o_J&+kajUUDbjGlEpP>xCK zmCoAI-vRtyfLXJs2P(~~$r`nNc@BY{%1?bt`X}wW8`uNJ~?^sNc>9^_?3x&b>gp=q%$w^H% z`-sSM^TBk=182jHNVt+A@Eu=CVL%ZS)J<*|kIV~=P~OCw_MoW~Z@k3FJ2 zEsu!3OCDQDKXyZds?C?~-ho(s%=Gl^b`4hFQv4Xx6y&- z6Y)63S)P;P?STw{b)+zRFqpeLAx)bw;}u5tRt9v@n_3w<0Wt45p9t75?E_a=Z5eQBpYsnz#T% zltc%+XJMlQMXU5?q%19>=@hph5MsD^7=bI_ltjLTGYu6Id}u`puxC9RTgKufOA6{_ znOq>tULBCLTsWzO3&%YOJVytJ5=XIITkWd{x7yb~P1bm1%wdLKw<6rbWamSs-%qcG zrpMvop(uwaPXAPae-7+9ej;reO$6tnNTITIz>{b8*_w+lTAf-B6m@Dp0#m2Xz@rwe z0MM&NeY`p#TQ!8rwus2aWoz%V)wW6xMGoavm&cVNcS`1COp%2^k>z6p)=G97CPX!LEggry9|ACXd938&xIC?wcu4z?^?x@)+_S(#5G zo%$1DCB^JS*jeLw<8)Xpt3h{YV$C+tg>L*e6_W$+3r1q#Tr=urmTKxv=(c)tu?J|M6IvehGWb&F0&2i z1bCHg{PHj@;fY}Ax6<>gLj*BES@*&3!Pg&;g{%1emfsz`?0{btkU#17`smR{_4+M6 zYYIRDD^OMTZEBhyl>nV;bBHQW99)k{wP1MJ(L8! z_Ha^RGxTY5)0eeCdHV7^rM*NVWAg@>AYRAZb#WJ`FG>Y{nI*5fHm>w#g4p+aB^C>T zzR2_RMX?(6Mf(K50GM4YxC6UdY>$Rad(`~ZYmd=TuFY0#M+42@MA5L9r6L5)pFB@{ zjD{xH64U(I9w;qEGwId(m6(yTU;{0>%6EO()dkbK?C^$Adp*>c4NQ=-aJLE3*b4Jw z$y{vgwo${D z-3V8#TUxB^w(24Ttdr;Im|~HXHFykMq+_bGn*!!S5!?ZF^>s8Xrpg)(<=WE$X?Zm&zlUi!H}>uKGTj%E9xo>r-iMc48!xv5mFxZl z;OPF&0NLnc?vA*NYc`Ysy1$FO>h`$O{VC$c8A>b`0^OJAH5-aGve{UQ7^MaC>zj=( z#tI`_j@nM75X5qwSg$wU>)i(W;c0weo)sI=D@Z2Rh7IZ(GFeGju&}FAc12;q!c-OI zAxlRHEm)B6N!H3zzd_w33*C-DzU@i4#@2of*4?+Pf7Xq{MWh>hyA}3`!4*-$usWv) zryBm2PovtXZ5-Qpn9;^IcfsuY`FV9t;`8*R)7IH;V|ub1DD-4&sHctmo%qpJ+Y4Y2 z?|~aF2b&gg@PVSDA$!ZK?v5)BSzc^ilkB-@0}vV_&(jda8mS>#e-@M$tS1$Dk#;G( zi>*?%FA+9~<(`?enW8C(_rzUPO_s!svU2Uq3hXGOCa)mME>u3T5Y%LOp1h5+`kIWW zlVOe{qw=8IOk+=1LY-brjCvT^bQ&o}Lu1qFVbZ3vZhWv4Ox&|xj$(4198U(nt;um8 zP&=(v;^(Q?W)$)9P$#!TOmr zwF$U(0AcH>$tvy0fvQnct{to>jv6G`mrGCxBq-05pi#4E35tNqBa)yorYoUHFD5}f zjFg~}Vl*^L(8DAW^v8GGz_y+1|l*GTF}LcL*rtmyGX@;4O#`Gxu=Z#R*O^ z5!{jTs)yoAaMQ%9n@rh-KydOr!70{A!L3e=(t^2l4Rw9jtI-`JzRJ^Lqa#zU@lOvU z`#7V|2y5))JWN9$=iQB@5@kHY1|0EjwqtvMUSLP1FnciA2;1>j6lU_wl?t0-JKo-S zJ_rb&zeohyJ{GX5?W+RBtH}%Eqwzee*H;DgfKM{Um^gbC#q^*y@)%@j&&4A|7~HYU z>4?!}Y%BwN3hIo{U$-2p=EcV-pC72yl|0Y* ztXODO-9DFIBPFOR$He&je^;=N#pcRMGNT?xT7fam@txglO5K^Dt!THvOY65}Ldg&8 zQSV?yE7iWCG+fazp@b@$GeHZ12}Pb)VXSC@Gu*IzR0sCxI0;jiSoBm*gfdLfq9i)O zJqsHhFN&ppj$&V;7BO}>rNPa{1g@MSxtxk46SUy zDap4)iKAGqRa!lathB}>V@_kG^)TtIjCt+ahz9Zef#1{U-)+1!+Mvf#?|S)p;}YqW zSGQfAWu4hVgU?5V*adaoTMO}ausZuKP}JE98Bu2+G?h3_#X1QDd&129Hm+A|l^oZV zn0tayS;sTdR;~2W`_tuBkH?kXuPo&_(ez#j^j@CV@hBF0Zp*+)(UM}0gE zum3Z6Q)y*x9K?DLAL6jeb```KEi9;&!B{YO7yB|<0Ch4!dsu3z!o}aj>6^7Y1)r7{ zSMcHD>C&7((LDEcHrEtNE7+~LV;PW+c00BzgO!)T@fk!&3e4bmx(a;08j@HD4UXk| zw_{t08*j&EH=FY11|D)`w;eChtw<58uomE?XMwv_b_6?=Ch^sJo3}nbYMq$a!@gVJ zy8T|=xZ0Q@$-2R{GiR4_bGBBFiE*qD(*nMsqeys^tXQV%vZ}jmt=^E{kX0vBJ4<=2 z%d|Dm)Y;I-cC@D3Zk2XtThP(Qwp%^B+$PTbn1j~3Qe%0$_CA>)OyfG*!_%qznX%l% zw1j7X;k@AeU46S8u1=v~vS<3Xa&>9L{5}G{8UC;F`7fmKeb8kM`RC&6Pd4;tcz%JO zS3jlyP2riACH1h!?z`R5>fxE7T5VD0_lZk0b-tDEEZq1~>tW93(T>889zzA-nE`Yp zHM__2XPwQ%*W1Y@7PcSF@fobfv_!r~A}z@99833HbI-#K*JJfr^c`q28}(T{I2*O5 z@S;k4WWOuF`W;;DkzGaF{J6-Bg^-O}{&4qKX~cu>Bpx>Evq?T>J<2_-Dyyx8v~pcWxtz+To3l}O&xl zxA5QR*C?lDkwIU*oWzjq?$sHU^Jv)@ zUI8pyXTd$J%TNuPqA9qQ9jH^&SEWE66m^a2HrDvNT23d2Wfe; zD~~LqbyQO)^|F}adQmjxGsE_uppdaZ(PWTqrD!z*F1Qjvx=Kog9WI`)9_<`h+_zB3 za5eO!ok6)Jz6Nnh(aN~xQnV5t`~C1oSE8%1&)xj-CgnQr$mHWT~3_Z&}-OG|4-NjLft)4DaSe~Fc~zXr$N zwFYNP(%CiRWwr)K(yCj7W87@*?<9Cn<+~8lniR99vhsW#UQPVS*5+JFDCRj+3q$DC zZkERl;2ATm4uHbl!W&oX;3n6;de-}vP*=8gg=e!nhTB;P-!cMg3G{EI#Nr>4N_-_8 zcbA)4s;vfYZ$kO1zKQsg%2$O4 za)!5=V9fOAGJaB2xr{GY#`o60yDZsBXQjMZ+5emd+s*+q+n^l;HeZp{VTd)_%yg^# z>W#SC%rrv{(G`}k5E}l-_l^QnJT^1gQDAIlvZKH_-fLhrB6So8CvD4_U!4<}f2s8i ze26Uu$jig_L*?L~UTHKLE%XHE`7MlxX$j8`We=M(hJFdput4jt&qe%$H-13IIzn=ElibYZvk(5sF5*#zT zQ(d=NSd_$9pd^kQMwKduPgQ^**--b$Y6ty0!F zWo+Sb!tH5#_zO_z;VuB!h{;Q$M^9TJo-y}X+`NTX+fskhqtZZko|9L75?8vjmUL%d zOI8SUN1oTbD;7yv^G@5M<{e{+cQlzLYw0!Ik(nbJ@5ns+!fcPF=W=zG&`m%zX)WaTkOtDT@BGyy`D;RrIx0^rJ0xAt<^$?}AXp zqUinwp=~8orIK9~+K>1OJ^r;KmXBq?0S0xKsOFe*c&>j(!}Ygh-!Mg($BXX50c5b3 z@#43j;KjkB)(&Q@{T>MWIdKzJ7&5?X=Du$38@SO^>TE_oDpHBUl{e*8U%?eu))7}U zI1geW;EFu2F;T3B#>5VZZ0p~hSS33ovYjuQ<-Cm@mFna=IXS%12T@W&yrN_ zL{KIv^8wG&NStk!fPv^7$>gZd%lvaBO9NVHksS2tLf2JhE1?yQ%3ODtq=!iklO&>eitYs%E2AUlu;#H83BZsz*okXgZmnEa!~zC4qbZiD1$D;eLq0$ za6rvo^V?*?bNK*`k;2fr-fy4{29*a-C7zWl#p$}6fqlRwVeR@G#?-3}X!Jigepy{f zVW|kS;4QLC`w8)JxOkiTiA!Nz-$Efn8mv|9{v4^9qEp?pa5K&DvxW@y&Q;i>WGKvn zKaR-o_B=x&y$r`B8IDOa6u-;1Dm19Rr?7UDz=o1sSM37;l-;#qCcA4)c8X+2_HvC9 zk3p=M`7ynAYIptcTpGdXx%Q#_>N~jOS?0B_YO9-o2%%+O^1b$3@mMov?KjK3Y{K;YiXF~(A z$WDz7Vm)@Yx^sUV?_i;FaTH>0>==vn&`~>r=DDx^=kw3KGnFwmGO#qh8NWK(!ejjY z+{3hn$69}mEfKjDp2fKw|1>&rH84l2Gv_abpUu0bH%}vDAO1iBUyg;zf~&olOSRpE zpVwYUcunC~(|&$j;h%*2veo;4fTG?*2X*BmEBVLf{>$7?%>B2ypPKt0+~}cnS~s%O zSAw+hpUJEK6IX5g7o;`ETOLBt#>?}RMzIOkBMnDf7Z0G2=tiaXJ#TU$T z>}OwP=s+Vt2+VWxyiQWFNXkasnCEn!ayYAjN0zcB36D%O)z?U8b4=MOCh$>sBx*c8 zTGH;b+ShnA26Euhenw)8Xpc*{iFvYYfL3$In%jn(b3tlU&jqE28nw%-7ICFUv&DtI zEejz~BY7Sd6suvV;0+utO-rm?uOd03f<@_ttKB|%YkXS}@v z4XRB5!nAChyto6`47aszdlxjm&RS&$7;oTCbGvZEO|YOXVhE+Y;LAjL)unL7m-WOK zjrrLV1qi;#^Z24z4SY$4P%9G44WatnZi-kmx!#?@U+Zy$yKd^3J;L>{#NIfCrRp@hI8yZ;)M-K=1#+nhSa=Xg=p2V zT#cU_ycCfNw358)3b?93>#G8}K2QiMki6mUYHILOERwp0q|~wt9$m|e*Sc83mSWkB z{3ResI!Bb;De`&Sdh&O&d8tUr#`LoJABKz%u(EQgfy%0lH`ogQXhoh5EQnVzcU9cQ z6@Lp32#)_y!s^G zHH9}>Q07k^g>AtfXfm1!Dwol7M*W(=f_N=+*T!9(j1(Uktt+p(2Cif@Pn>X5Vlq3SVXl zkT-=YH#)bWyy|+m(zy*J?@!@(5DS6M$@5m9C>BY*LQ-l9H=*|N8BwcF?At}<6}Ztp zbS)_)<#I?@kiZxcy^e6&hrUUeX(6@>fzzkD?lU!>kRA%QKF|EiRZzdex93iu1~*TBa!JF^S`Y7=h3PsbrV7Bsup z+K0FJ?acGT_&)qgR4a93v+?z(`Rc1Yzsb+5-_pgV@UHs$%{iHy0Ox`sb2nBPH@193 zRXrQa92mr31Q*>;MVQ#TOl5mMWQH4})n?=FDNG`-gRS0gMlkCApCN*N^-2g0DzB)@ zZ*4hjfg9gKogCZK*23J1mDNw5+Dw{`$Fup0e8)9emlhWuR9MnZ&YmFlQ9;#U` z7X6r*9nI|{N0lw%jpX<$ZI9@wZG*$U7F;Xev~u(lV%m4rdzATnWv=h4Dwe*hZY#gK zIj+8|Zlrp>oXQvrq3^2lhr1W1-Kyg8UG-iP8_#!D!L?;sIbsG9Pce=-DnyV`!4y*+ zZp+Z^R`d*R+;@Zz7hhGAbRWsOl7|~ZN_4-7FOBCagN%5M2psXH+IGs$5nl?zO+>sK zp9z7oSLF|Pf3uGGQutF5UvlvD!>%d6rEBS-{B^yLhiP%WPi~i$&E+6|8tSBa&ZFt= z@8IP-{5-uCuSfJtn+Ngsz)ew_!VOGUC(oQ-xC1>r#Po1S(CA@E!a?PADd4U^xFW~g zopEbQfxc;Xy#4_q(s3~PLYBJ#iCxE`;CWVqZ58z%IZy+&!Pl3N=7uE5-kKYAcmZ}s1#ezs#5fMQVu^@_F)PN`^78V2rfyG@=VOg+OG+>XS z5jE=D7>ONQtWhCq>{!rP5o}RWj3(mmIdivMuq23Vu@oL3<*NFq9sn9O?H-du}PhlM#a}RbF3`NEWL+BB1if5xk>NEF{I=QBZmGj$$qepqE8{&RJHYp^rgm zzIpTCO5`N`X{Qz@awDAlY-1#h`tXZUv4-FfRtQ3%zaca2BJ7%HT>pC))eLdz3x=s1 z4LO5=x_H99Cz=$hjr}HU&#%>%q{hG#UoT2A?Lz@jf6@uA z71br&6u=VqQvq#wc(MNCTlg&n1o}n#U?@Gw_ZP5t#p9XTyVwolY2Ot=8>gkQ8%9$l zX#Lm?@0Y0cV>i5ClGcyi2-5XZzQWKjSx$6aUWW4L@bu8zu`IaTh?BtdUV)&{d)|(f zf(L9=Vb=+`%AcZ@%1@y@)DVi`>R;X{A{xR(ax#>-QbXuR4Phn{$F3!Kp&^h{U4Mpl znnbaXR56mGUX1)Rli{cR^^-WS7QY6+%HI&ibutm9{gJG|(#5i7dDgOY=?NN3m)4HH zd7IA8MXc)VTv{1nO)bd?-_@e*24X%!>!R$~UfM(^r!){CCwfOme;Sa}ey1Tn=>U?PB*2GN3Gu|{Qi}d;ZpL#*tn=kgz!Z$V<>IxC=F<}SBPJAzhY_9? z<2f{fFC9xsZ(L(5@|krlh%%$OG%FWYc_0;R3}c80v?8BefqjjY%!s$I zY5bXeP4hCzmd~-YnXt5GHEN&KU+5_&8mn5(b&@k6(`-P{Zb{}kyV^%OF%?vuPSj&( zOe8U#m+&U#QZrh_5J?5D}mA0Mz&kYm+6*imA2DX=_tYG10sn32k$MkU90) zg1RJGee@0l`&%~i?~bxzE~l+y_%C4ofAap0-cqgq zwt}$hLR{4p8}CI+;rPoC(LgDpa7$PS{<;YFs(pBkSIlOuj$*T172OTEWGTJ(sEIke zQt`VS&!FL|ms1M%>hH)=u_X30>l~%Y%Hl9zj33=y?G*Qu@kzSDh=XM>3QPK$AA3*~ z*31pNBoH+l23f3aWA9p&Dt5)-s(IHU5B^;XMk$ujeE8_zwe*Fm78{_H+IKAqgjb1W z6x$rL5w_jz<998RCf>DHkdu*%E4^!llIA30s5MX#0q+1{>!n6n>cw15cUb zSqyum?v}|9N>$nhiybIGX6K zeE9k!(=(<3R;FKkam0o$KHnNIjx~*pwerK-6hZRlyphpN9*y5$1t-v%Tbb#MjJ� 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

atVm+*N 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

E-dX(#V9smO0CBt?_5MK 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

gt|@rrlN16 z*TkXda`f|c2~>uesbh7W0(Dvjek824FrU*^x}sT9bCxil^Crg-8jVeQ*DR5_#4(0U zPUcbzo9K2Z@d2r#g@#YP6Q!IjF*>*O^C1e+79CbRE{FyAZ%Lmf4DTr6jv-?3Dy^Rg zNF^FFVQRy;Eh-W)#gswqVTVG)^r#elE{wBg1L+X0#J;t7d z_mrZ+c130>X5%MXWq-7rx_%1Z!g)MaaE8tWar%T&ASa*~;h@u6i53-e7cqBqF{?k6 z9byNL{avqmc=g`Gy@s|? zn1t)~k8;2KlyKE$T{X7**SRn?GfXJ??{>Dtxty$Z{e5BOW$;HYavCqPb>wB2H2CJx zrc&jqX5X~C9H2gMAd$y(FHp3BqS2<-6&6!^cW=5Isuh*F;r!-`eo@#C>5dmR)I-%K zRs2-(6L%BSN^(dLWpRi)(&VW=ww_QAAv6-PO-Q3DP?itM<{lzC^LtL)##{ zj7v=GO>mC|#Ad&MPe`gPuhXBC6Z}`?@|&8EGw6wX5xe&Kp)# z%DQ;N_@ZQlmvB3!uU~XkgO#&x?#It-R^cFPs8$UXs-@h zrbO$%K?%XnQXYA3Ju;4Pc}3IkuW-z4)cL9#6sQIR2ZP`y#GfySZhT(D;Hx5l=nMn6 z8P(=M6?xPMd#Y`LFfR}fg5e^+R$c#8bwb7R8vg0s0o84U)O2=tD{`teY{diZf4^ol zn|JfSw}#!UI>h_G+!83fYz%Khl#)iwgfm&lSYv&WAbkS^CSrd*dAyLZl;h|d2rH3Q zhlMkV(h{k@E$TE(_YN=158p2;L7gGVoz#!+&sk$S%c zR8xMwV}%|H_XXis`L98KOS!$ZPAV3o=589+6a)Ur8Hq$!K+hza3@7EgqD2wo^TOg^ zZtsA=F3j{8ct$@$uT#{6LY1#9DzU?{Xr_5CYKtu8PS|*ht0?y37zPChwUuFpBGkQH zPzlvta_HMqZl_)jL6-JS%xmL^NUa>p3Fv8K;P?6PGe6QbJt1pvg)rB|R`pe3!^=y` zk6@5>soom5Sfqs#jf~DPRVXoH<||%$VYu_*^0z0pK&wo`_AiUnZn%_Su8H7Gt3Nr| z^Y~htU}p0nLX2OqP%liRWR0ZnN$L^L{j&ms|<#aN-(AnYM^vFgqa;+vYmG;jbq?gGHidh zU?sjO?b^Gw`L1)Le_t#Rsl~@le|5asjJTV zLMpz@4XO7gH{`K=DJ1u+OCe>dT?$!fb}8f`_;Z}wII~ERY7QEn}X2IomjUj2;JAMAhe%NL1@Qe z1);Mc93s~b2>b1JMA*grh_L!EBf=6tMuc^28yS|^DKczd=g6?{yG4c#gfqP&!{!c% z3~M?%GOYK{kzw!J9hlp&*MYfhdLNi;WDh|H=DJKjFgJewfw`L_56s;Tri%~Em9`$3 zyJ7o*xfU4*=9W4eIq&uE8R4H`;hq`c%hG0q%ZF!#ryiRTUgg4!@M+Ixgg-Bw5pMBz zM!2)d%q)IOr}BKwH&rS=gUSJ_7_eYG}n%BQuFbxOrXj{hn)a%zRx$SYsRMpkJM8(9PH zn#V@=a)^zbKRPyY^-t_~kB#gcYZ7&9t4Y*9+f1U49*1itQR`orL=App5_MIs5am_6 zLXZ7RO9-YQ60=Oqdr<@Mvb(~jM~~iGin=L7?c_1 zJ~T6`wM%ByCil#!YRw8;xIZjxVV$V3h0|7qEo{3wY~io*VGH*__=d2B z<+g+^ymdBgVe@NY3p-!uxI1AB-#om($Ya2pMg8yfSR6O>^pe%_^_M!vYnQj!q+MQq zn|68K9opp!j%$~|$ISYpe9Xpc9CNpPOu?1rF-vbX zk2(3QdCcV(&13q%Z64zxw}>fk(jq3KMvIu2nierV8@7nCg@UFnVuG8uh{^eNXUv|b z6<2x&^Hziz|Ap8ENjZW;A#=@>p}ZrN^3b9X!?yvi4Z>95VWN ztjYP_W6iUlJl6CXS{qSY%#3wIf>%MpyTMv8+U&j7Z?NzL4-B+=z z%wENwYV#^~V&_+}p*>&4F6;Fw_Cn#W>uPp3jf=N3jXTuSG;Y}#)41he?qV9(!_71< z*~>KUr-`O<6<3;IYHRce)jqKe)xO>wt^EWGw?u1~ZHv~*snOchJ<-}Kr=qpf z@}srS??-Db9!G1PKSgUN8ZFc=D+5;#YcJnFti1+19vs$c{yD5|TX_&h)qh(j7@TW7@Jh}DcfGgCatTzE~#bxbxEy2(_mdvlKHwMBdc{uKTN)} zwYSskZB-ku+&28XmD|R^1gUF^H$ z^k3g4yX<+F95cG~_N(=;Z?BpYu){wuV8_0@0Xq)EqI&^5q^AKpOv?uDNUapOqo7*g zjxLP?cW4?1?)bJ@;Et-T0(VrLur{UMq_ruJgV(0yhOA8~6S+2J;fl2>55a%;+LTb3 z3-1qcOvc)jfv4A|?0-=z^$(QaZKz*QHbU)GeJ_szK@0?%$S9ZQQnW zYKIP`Q)_f7o%+P4bZSoI>(uF0s_%OCveNEb?RoyFbIAC<^6s4em3KdLuDm;8is|lW&-?6+A2TGauBmHUJ=jvkHEnM-*R&>e zT+=R^xu(UpbWN+-+BL1ix2|b(`?#hp|DOF0u4w~?x~6I4*QHrKJDRqu@MxM@#q_ip zjnmUAHBV2AZIPbV=9~1iP7u%GcU6VO+ zk0#T4uO_oEL><#)*4mzsX%$}O#I?vOCx))Caw6xKDkm;L!saR`;ty9j(dvAa6WuSs z<0>cY%T_%xx?I&0WouSFvFOw0-}Y|JKlye~{>cxJwKxCd%Y*qRdmqg|IrLcm$(cF% zCx6Ig`AYst*BALG17GEzY+dTk$<_Djoa$Oo=Twy!bxvJ+Q|DA?sqU$kW$K<nd#a~R-BX?W)jef0xbCSsL+YNo(B9(IXgiBjpX@D8efZhp)RS=*rv`ajoEi#0 z`&yieon~?BkEIr;t}U}TRVsmFwpyH8_WSNr?ah~*er;5EdP9}M(>tpco=$HGy$esD z?^}5K$AN{XEe02!{sw*?Rd_mMQsL>%QwmQvTv&M8?}Kqxn&Y&rkwd3t)g3o2E5~zM z)}Tq#vW7ylfN5Dt)23zZp9y=XWz9Jr22%DUni&wdrp zgpR6sX8gE{XUdPScxH+Z+X5<{$qKG`=GDB4XXNmTXUf3!M_tc&e81$(($TNa9H?CN z>_O;PrRv$^wX2>DGOK#FN6V^b_gYpxd!bF$v%}hhL)EiQ+^e2#?@{&ac1?b7h`gOb9}8%^o@=fWwA|Lhz5;m?QfdS3YOvFC-#Wvnkmm$$yK zr;_!ByBg~YzKyLfRBd5>!NtP*f-6*Zw7#%zu=NGYVb&Kqjoxq}`=7}d$G)0;@#&k% z7uSBAd@&XteVTmH&uq%Y#Z9JMtkq)5MZ2z3Esd*P4q~h2($2h&U+v86ZN4+lsmac~%58V%Ww{*7^YcEImlS*~Z{PG|c?mO)<+Thw zmS?x%Sl)<5$MPO5JC=7b=~$j-^Rc{UkhT3--o3=&Yo*^@yk7n7#p`#Ba<5-6pL=~; z_uT6dJ#()|!;8MT*YDWpUbh{Rd%e=|-0QcUbFa^H$-RE2jqQ!XXWMSveZB3*h)>&Y z`~>5r>JIuW#7>5$iCrmDEmg8boTw0eWQF<_Klba**6+J%)ZeWYUS0w*#JDQ*1qZV zPwks`Ue>-D@VfTRm+x!etZrQAW^CCyHv`P;+?>~<&drsr>fAirrOwT6%e&pY_T96a zJs&LlyTkgRTLTIw-X8OM;_c<-Cf)X_GU;}oI+JdnwVZU@wLNX9wA<(AD`t@%&Y@8AAY;h*8p>lY4x-ulDv=NC(lcwV;V zi06yyjCh`GKH_;>>k-fAKp3>P9r65--H7J{28?)qz%K5^;&9u-elfO%qgL4#di-iz zXuY5Gv~A(EGq#1N{;)0dx@cQi?uKpQi$dGNV=rwBkHesdkFSDPe0=2<`|;J~_>Zrq zZTR@AR?5d$ImbS}x&XJ2e|$AN_v5Sn_ddQFd7oqDPp_6OTJ-kv+C^`#!H(EPZ#9XF z-nQMe=xv(=i{9oOTl98hF6%cIy*0VF=xxt8i{1`;zv%6f)aUQ}AASCQWXALN&GVkW z?|Jq4`~8nuE`0ue%j@UwPriNr{wtFg?>p3b@jj#Wi}#sevgzE1g1o#BOK<0WIQdWB zhs%X|ANs$```}@8^+WjzS3hLby!zo~!>b>9nqU233kA)teh6-H^~1^FS)bC)fBQ7G z-CKFpcW-4=tGDuHySK9EfVc8%$G7sbA#dg7kU#XTY`v6iYu?J`H@ubWCcKpo&TeVc zer`*nxY(9PA9l7hTDZ5RQN4XFjZzM_G};UD5!P?DG_ovcY1HFkOCz`UEsZXBA7}it z?KtB(4&#iM4j5-_9W>7PpQ&sM8D~6W&NyR}dE<;Lz~39k8B3eT8PDG~&N#4sj&YfW zImXM)bBw=ho@3kt7C?K;9OHv+bBt?z&p!Jc<6nNrG2S~Y$M}(3j`3^1ZlylKLjP{1 zmIZbzB~R;CDs@)3QdO3AD>ZFRfiHhjZBmLC$4Y20NGCJBY`vt1n~!D(AAl zYn{uMueGvl|CHRa|D@%XZGIxRZ0A$CWgDH&ExYyi+_I-Grv&mY+F@+U#Ds&F1FQ7{JyVd($g8HRx@e1xSC1M@@gid*Htqq&{i{f z2*-|8Gr5sb&1C#<)lBNH=wnh3wyf-9vUhbKlP20eCKnU?n8g3u$E4=&J|-RZ_A!~8 z)yHJ{@9aO{$7DcWACuLC+)SQLi8h%(JKALH+-Q^i^P^3g$48rJH$eRvkR>Wz|(&|#t zby>*Es=tQ5ta^Ih%c}CqmsL&IysX+T{$P z0o7)$38+?KdqA~T=>gTc9b?<6fNFQM1FG$fs#l}O;(9ekFRxdl-OhS7+QYFu^=ddA zsaNA;M!g!>FT+3eY9yP~uW_(K{TlA|>erYOVO?_;REo5&SuNVSX2??Onr&BF*IcsM zy5_s%);0Z4Ti4w3yLHW**R5+l{hMR%TG#xeRC>*Ab<%4ds-IqSlUaJr*5>Io9W2so z23e-p%=tdOW+S`wnvG%fp!AxLoziRm;hSF5^mn6Lr>_{*x^m5^*8NvTwbCWyTK7$j zYrU&#T+6P8ajk-S#2@JU9QgjhUMyPZCb9*{ubrxH1Aoi zj<#31Iv#_{)v4pezES1slpj;BPRz`5bsEhsSEn(YIB~U37mvkt4|dP2+wRuRdPiUF zte5k4XT4z4UG-+dz$&}y`PJA}@2$nIdgog2s+ZGlSG}!Wch$RLzpLJ}fxGIx`etH% z3(IBot94vf->&zv`onFP)o1NGR^K9c zS^WdkhnXFOelv%e9iKPMEGTlAS&vo2%=WGwW_DrSFtcInVgE3*Cg+ElwZAyb?D4H( zW;M5Xo5d%4n;rVq+icl6Z?olK{-?KDkBi=B$$8#pKi%{;t60v*tln2XW<5-O%udwu zF$;^{Y!UY&I+Vdb3%R zkDJXB_U&oV>0LKX+~3g+Ph5D>F!$n%hV|~gXqf*5nin>F)v~bRly-#;?K&1V8~|sn z3LA#?C~VkgP+`NnLkk<`{nggIPTwWw^`XFaiMgxe67!(JOU!eBTw)&Qyu>_U+!FH| zK1UG&5xc4JPcVMnrp8x)+0=OX z=1q;A4s2@t>folvza8Dw_+rMU#uc(RH7>losqxte_a@n6Oq#y&GHF^c$)xFsK$E8L zCYv-}HP@u+;8i9~oxpXiNmD7=q-oY6lcs+i=GcoSO~38lyV-P$F3l&M)>xFw(O9(1 z)mU`-OJkArRAZrep|Q9xH?&w&x}in63JonHDmS$Fx^+W~gfb*wV=n@&?!`gJn@#jjJlO@5uMkHTfYPD8Hvb;`Tt z*J;ZgzfQ?;M)as~<)gTbci8Y}EwDk2AJPnb6T{q}1DLG_+*S zz?wCBTkX>Hwi?>3w^gD=Z>v46dRtwyBJI=LD)Xn_Ru`OmTP>Q<+iHqd+rxZ^wnw`Z zZ4c{H@VBiMxA)!nAd^6oY@S9Z5?*x21>r0p7; z*+bXZEE%@OCSeRLSYz{TCL|WHoYST*!2E-f=%xPUz^^EaH)Jk z-;tFP`cA2y(D!N0gueS4C-m*tBB8H;>x8}maQxeZz76dY`abwEq3^rV34JdGCiHdq z^N{VN(TnWLxh=A5>AA?Ri_apvq&bW1G~tWv?k`_tw`LXl;uqOPY*=LX^|3{E2^ov* z62bfLY`aBwvhCvTXWLzPn{D^_W42v|PuX^1#yNJA>gU)=W;u3c!J%!A-N%kOcHUMw zc9+_=>Nh+)%f8{|EPJCHS@zX#X4xMtcgDV9wKMkZzCL4ru>KkQ2+bM$Xb92G_hy_Fqy9jNSJcD}O1j0cq+Dm||35c{OEL!0N79XdfsA?vkG9kw?# zbvR;f>X6^o)Zv|J(t!66Q6*`>*WV@$SlK>lKAM?rvxW4|dLj^n3#INq4y z;kY@%!*S#y5625DJse$DdpNqnlNj^CXSSLTzPjCf@W7qsgMAK|4_jsC;95y7wVVKj@p~IZCZo`~@bsy$5D0rCD z-!q0eU0XWLsd>yWr`C|MYM9g3t;3uer3`bj-aX8z@vbvY`Gqyb{u{;&vCf#4aebC^Bsq~+;JT43Y9Ai8osX5py8I)1`QuqrNfAz zsvSlgGVd^=cS~^XFk*yzhY|NYI*fP%O{R4iadB3M5hoUO7;!tQ!wBys9Y$0L9y8*{ ze>_I4@!UPaBBIKu(>3Eq?Q9S~>i#$Jqh7a(ALZFGepE}__)&lNiyw8;DSp(YQSqZr zkBuKSEHHkQb5Q&!cj!F*{7==sX)tE(w++VZYu{i@*Uk;bZ0_D*%*b91#w`A!!I+iM zba;a?$EG$I^HpSnF}0#NW?6$V=_7*2{57qk^Htb7y`%HWB^{mH$98nSxS^wS<6k;D zcTDQ&{8JifdPnEpe|25%B@GB?fBW%&X2AN6z@aLUsq?)V7TV~tw~o~U5_TdbTx0W(5?1lZ}*IO-tIZ!-tJnhw|m>2 zr2D+xL;mn~Ka}U~-v5TTyFHxD_jWh`5;1$15SoXMbvtk9KE}&#!xee3l*v@(Gi)KAXyF zefE^o`h2LZ^>G`d^{L^c^$8oP^;!L+)~ET;TA$X?c&yfEo4eMh%xtaCX`2cYY%YZR zcD)+z>-;F(cjDu4--J^0eI0Ah_qEZ?_r2bBzVH1G^L-z~-<{_BdfLzT?dde%_r>_0 zlj>|p^s5gA35kBL+Yj%@5Z))izk;Iws>-lk&7qW zk6%1_?^vrTJ>0FPjP|se(r$s(l=g5e%4&*3jMbEntF5M7-vKABrX=6AnsV@Ot10gP zSWQ`Y-g!!y*UnR<*kjkH;3<1Q1wT0WDR}GIPr+le zKLvlE_bGVz-=Bi}-TxGv`|eZl&G(;z??BZKuci*Sdo^_oJnr{u>T~;7Q=JFDnmT0s ztErPbUQN9c#YU;W5ucq2P_=bas1 zoN<1z<&0-TEN6`JW!pr{8Re%~&ahr!Im0o^a)zxOF=I?d(hTFehi3Rsx0^YsdBM!c z&IL2ybSs#-wnxFt?*V4A%zu6^m{|y=Tnc7tSFkOvV5Zlmf|*m33TFED95~B< z=)hT{M+}_x$LN8x9=Q#iRl{T8EZb=VXZeKwQEeE;Ck=d|}&Fv(~ z1*-Rxq&U*cAob^1)(66Ih&d-q_mX6(-DchooPsOA@T{;Hnr@P%NpKL#a@=582c1?+ zQZo2K`YN6e-h(MzSjlBbSFe$zMsSZ~ejrzSjPAg0M<7Md$OlDb*lchQ9Wa${pV)-z904w%SgPtrOa*(9yFvXtt1YKEv z*H#0wH=DHA9r8pUSt|F4-*DX#0g|+0pe#AT`2n(2opccCQZR)- z9AwD>7D5HcB9BDCwZ6Rn%d(UNF0lNPEFI64rShZ$!HjK}Nhkj$OKm~E!uusX7Rx*4 znZ6^P0o&Kg(sO7G9^kZw>q6FQSz1GS9m-agrGoDysj#dhX}ZW#t{3O@mZfND$nptK z@+#>)*30|KQZFA_ih~~}@IFa*kZvUJcMah=?n%-x&_L>4Nty=tq1}DHE!&PmSPvsT$NCIt)S2_c!e^2+ z2(qBuKa$i3LZS0>NjgIM9=>_OeXd*tjV6tHB}>iV8QgtK9(_mogr!jGJ>Lt0AdB^GqzylCucRYM zm%%#nY58%~!DaYnunwM;mZTFUgIRmV-fp&slVFt9Iyb+ zK;?EkAH={VsN0^h0YAZQXx2fJoF4Ga(j=)Ryn)QUk~A7#?x7CaO+8Jz2rTzgAMTT+ zpCN|jM>Aw;9Piftt|T3*P8~O#{Z!#=c_$SHNs={eg&^>8l%x%i3%?KKK1o-Twgy-D zj`e+`WNFw%S*in9FUXSbpR%+K?t_+f7ibEVa%Cx-W0pgImPa+^IeN-cYF5?kfdlZ&m}Li-=8!ShWFxoM^L{npbWu$s4|~=GhCK_B>e|A!6%OC7fBu^^?={! zQ=VZqY=Yb2d?Q!^zVJOXgtqK6ff10%_dGS7vPU`!9#4~{*{pYhA6c#j8{za+Sqg#g zp#ESDfe{i{Nib&l3G9OIV6g+41!|=5 zUP-kuh-H^8$SzQ2t1Q*nCQEgbWhs;N29@u zB>ixbvJL}T{sq>bpiP43$0g}CsT<$2{=YrF`?@f~+T?d8;EFbitM(2kR)!mljPg#OTP1#J=BW_bqbp0|?J!I=8}ds$lIOg`Q% zOKYLS9@<6Hal0rBAhSGsC-MTcgVm|BbO-9NPyF-$ne#5?9^TOhaF?Waf5?(EY=`g9 z$x`35)P>ZwZ{P;Y-~3MgfZw1x$1G!8hcNQWGTJ}thF6OvDZxpSHgnE7Jln72%L=t* zX+TX`N`~rR%aT9jz_&G!rQr#j<`^%SPg~mpR&c)R2(Ukm zOb=UFc0VagU&CIwnT0$6kJ-1F)T1KpW(C@II0qeBHwL3hlJo~@EUabucNh;HznM zK0&<&w6V6x6syRiP#5m3B!9tls0vqCP%n^iVfi83qoMy{-rW)EVc5d*Z=}awk;g!OElE9L7956YZ>Sqctw<+RPTr92hwoU9 zAkY6u9k-18JiCWFW-s{>PC)H6S@MP>P<5Xyxq-=kSxO`QiS$=!dX)O&5$zm&dMHc1 zN!ySH!hZOrfbRkIAol_C4LGyBN6WFav%6{`8$n-~0mp05kElsoM7j`$fd($IZ9RCx zM9StLVELZ@3p|AWAIO*R)ko?}X!?mVNjjJGHuNAL?puc34|QN5q%5V*g1%4%@|IB7 zkZvONgKn_pGHqTY^`1oqD}cINfSs{lMV(G*v)z`j(Jb|;b-bl>LPEj zg@vr|giFu>dc)f>l9U1$z=L%=>Wj+I3f$qJMeKvMFcZ??5ZnI(EzE)8f3P2}LC){A zh43}Y4bLId!6w+5P2U9`uso6U-dJQxSOY2CTP}QrCan8|J#=*8USKqY!S`0=6SxNR zy6`TbURUZ3_yFVJNHSGV;jJ;0evH(Jo&_zJ}jn z!$a~a_(DQ~Bwd8BSiS(c52(u^5xTK`B9sT8(#Za$$YWs6@>XN&P$TLn(wAV(_Mb^- zv8_Ga=NnF%NIryjaMu?Z2wJh+a}xOmPQx`no&hSuYKU4$-yW_+QxB86ky^l$DB2eY z1}*E|NsZwodFR*$WS(E>BOsT3xXb&3agcq7_Xzb^UUrZ61+Kx7`@B2KNdRdJn4e4C zSf0AiM3xG_lBMA+FC}da9_45gpl4a?tTMDkP=@sc)_X}t(kgfaD`g|;Ay^w3Nh_cL zY*>F_Y$U}%Pv}v~NQzFOEJNjA>8tJFo?ro-1{1d1!xHv6LJm|*rLXV}WgY5UQdh$U z3(8Up${cCwmXt@x0?StX7GA*Vza?qxZpy(>MgcyBK-(*W%@IXkUzk+G5V$^d=t`Bq&=H*t!A`Mr1hF3E3>?ev^@8;khCBfr6}+mhrAl^~h*1GlK#;cMv1Z#_G3U3dXAJED(( z3@FzLSr{Ck-glG@QfJa%z;p@qxF_{s9ol%<1wYjzuanx;<(tAesL8g6uo2qTC;!0J zuW6fL7_5Qg)sUm1Ty^vir0;2W_d$Qwvtc37oJzUDl2lNOGQ1s~ia+gbXJqad=&+v4 zQghPD@aY-t@jukPq|Q(k*0CPJF%L<*l3v%Mzgkb31wTlDKcVynS?UPm;1sNax6m?y zI{XTC|M$q%QPdT?$s;?t|6SB=u#x5GsnmJD@{LICSzp9*N4T28GqUaLLhAL}yh{j$ zhIJ(AC`7_T*7w3tmdDgZo`OP_my=EyMH@7dJ}xw3Icqre!U)O%X$N>PjOS$ChW*<} zUx|Ixca}>y-(X2v3725)5b^`mhM#^Q4?!Nw4V}nCEXTuGmaj)jQWuy6N$?a|rdb5P zfqg88LVt*1{R|j$%*L`t(&I8lQcKeDFuSyo^cD_5FDL`2DEq&1OaOEOC+hBByy!>3 zdQb8^JoiA}f3ny-6I^Bg zK+@wa_!e=cRl<+<5@lr#iv;MiG7Y6HPwLYsH@46+qC!M9nw zv(tQYsK9y#>r=tam+y2;mi|tsJ%IJ_<55}q>j-in>1xv9P!q1P-hlnIqh3c_$F+EK5z`9dMXroHK8D+R_;79az@i|6~n zJg5Q>*fxgLTuVMC{S)k1{&6w&F6@C@&~Op&dm-&13}AU0B*6tRVt;GsSeb7QDewp^ zOwqMKBHRSCD)gga6kLF+RnfN`pzZyZx)Uz9Auo_tB>k&3vMmIFHBGZJ zz7c&BbJ|}hfQK5|GU(8d`iZm(oNPcl#JVZ_eCq1 z3~V7CQm#{f-{Ad_Ubsg4L;42l-{gMTZv8i745T|)cZb)oe?Y7Z5Rk;)Yh%uqd0dxYTV(CS=HDCeGY|N$Xb<7TFY3 z5KvY{1Z3Z2#}eqi1lxYCwbs^<01~UUwzbPw|L48Wy|X2m%suyB|JorlbI<#nbI*OB z=bZDNW%`WAI0k>8!{5K-wZ0U6R=mcA(Wk>}KVBE2Z_srvo+Uxp+mMM_Y^6`FJhF z>sQaBFYrEmrU`B07_@13z;~vguJO7DuX%W#ss;D)+KyL8d>)9u=iv3*8t61$6YzR& z8hm&v-s5!)uMYV90AA-!NB!XSTf9H>G1%huQ+%F_*H8Zsb1*d+15HN0c)f`FdJV6S z@#>1t_uw@huklFJ3$OWjeGjjhMnGGTKzo4KYj~Z5&qMM0R3+*dukYjiKk&EbL_BZ& zeH5<;(BAy{Y3Rdfj6sSpCsK&|8h|kx{w~JrfAM}aUa$4XK5)Fgg7-@YLL2b<8eYFc znuiYK+2eH`Ufb)Sw|LFQ`m;YEgW8P%G3P(ZX6nGw^Rz z8?TMTl_ISS|Blx}+7Ns<5$_|oTCBPWo8V|&W2ojD)g3P=RB2nk|5`6o6I4agHY zAvc|0;$qxGr54LCaR?=@(3a$vxCE6K)P9s-;xKAEXm&I5sJaO#L{#g1T3)qLh6fba z9?mau1)gb{wld$uhBi(+nqT5LYB`~OoL^!CB`(wYe#-Q=a%2()8Ss=$j7$PWkO);CDy%1mz?mtSIf+mrbvrneo*FEPFC!~7D{+phUc zUN=Z@i{+bGylrECiRo>B%r7y$?Uv7?i`UYTMu2M~%`q@;0+L*jJBjUSi}OutXg|&` zsd(8(`6Q)}U442UWu=EbkWW(j*W>vlrFR|7CnC!2R^QYWC*DS}^(hUmx5hTd-e2b!%$Ij&DKg}Y2E z1=h4lQ1%17OBU8TP6&%@g$SXK9?mu3^k(J#(@6n?m zbLV>nM|QvK9h@jYkFz|wS*k?XD>y32QNUf1+3y)@>PZL#h`US;iCX${_7@QG%rB{} z2w!(*@4%$HxMfr;fv1ko8V28v_O8krbPhzSN~9~+{tlxXof_F*eb(8^ z#)fuG$J`~zyn^!{0D#^k}vYQ|*5VKrlN<1IB~vgAyJY89M>eCe)gEX*0D zW=sw}tY%C$&4+Op5+eb&NE{|blQ;&$!|+W4|1pTP1<9|^KY3qtO(g~-1E2jcy;aTB zCgQ7ZAq=g~9fXkbhi)K9&7Zh|AVGib27)yGr5gy6^?%(!kg~74fgo{z?*@YOeajt$ zkoavk5TtUW8we8mBp|NIpJq0-npMmU?IY)ALZLIh=&+Ea&3R7ENRHvF}6{xJ%z;R7Uq}O_WEVcjSOv#QzP;CtJDzX{LbmL12SWCI;0}arx(MqzTs$4J>t1&tWZOh{AY|Vr zcOX^=%Poko^V45(Rk37iCwCxZZv{YZX^Vh&qP2P$kq2=pqYVZx0l)w^05*%i=M9jd zHF*IfZ2tVYu5XQu?&%(gtgdtqL}o8_4@7n!a}Pv@pLU+>$|lRNcMn9SPw)ar*gn%e z5E;MTJrG%c3_xx6NXLNfAvC?i(KD4yxA#@x`N>gK|NCsobKheN97WX8v; z=Hy6k?AuVPd9tNi)ttO}Mb(@P`kSgbxpXb|b|~GuIPN&@9#wPlYp$v}nf6A$%zR)_%mO#+6tL5GVsc5Df*)YiJDVC za$OcDbCK?ODrT5Ob#5judV^Cly6I4-W^~oKQ!~2jET?94*%eOB=(f9@n$dONaB4>P zec!p6xbUaH?$EjD#uqp>qbv7Y9Q00wj&RBZe(cRb!sF|yuq0fUHENh zMs(mV-*8kBbl>}&8PRzcIWwZ`{=}IP9ryDWJGv*j?Hx{y#Az2eGos7>(3ue(R=)%@ z>1{h~`jz6W9Tm3wPH+ohXw%(6h-*LZ27-?MBR3Fq`}f>HkOUX#E}jS}(Z>x02@-Jw zLApHa27=@{mJE}jT!b~7OQq?0MLi<7!yFUL;bZDkYf9`_)I_NZGB zA=@%{Af($5-GPvBr`&;%a;JB6^>j$OPVPWRy8-S%NIb(G2&uQuEr^isr|v*VzvJ#e zNWjluilJ{IqD?ZL8AsQPqlzd#8Jg@Gl$D*s5Rn>}+!=8rOvbilGRPdN@L$>17_nwb z?JX4cMnpS+n=lu@8Q5JILq_F*9+(^YZY{OBLbgCgP%eANkE~aSTM^=)<+`!kabr?8 zxv>=7XD`F5^0smxio9fh=4jBo0yoJCVEeXY<7akh9s%5)-oe>w_nIHDh;Lu+d1*xv z=XecEjeOs0SgPiOS9n|r)X~FU!%|tV?&NW4skPI+hNb$x>oqL(`2NlwR{~>~zwsKD zn%(zGk4sAx-v!tK`ASW;PNl2n*Sp{pATNMywMuvkXlOt85>OPX(^a0`GPOxg2KA^8 zsY)Mu2S_~{+tsrYQi=9?2S^P%?`qFVNcE}m4v@Ojv3|4LlJsN5~t2q7`xLq9{@eu0$_)#+?@23O+|6@G>rsuR4GwE9wB0k)NvrP&O{?pJRU}dH!*859jSaLuE`KkmMGXXCOb!J*I*FT z4`A1)gULuJbp%f4$Z;&RLB?l1pJ5S9uSqu@2H{AJ#(1WUz{vtXS(46au0t@pG1E*A zdt9Bvqs0m@U^VjkhK|7 zoNT2_Xt%*6qe9v@u|?`pRZ~M-uVyO3^amAFO45bbDcmc?Xt0VYWoU|uDFtY|iYcY% zn2ISy=eFw=s)=&5P|Z~O6Gv4{DKVeDL7~7Dm-}Iwq0qv?)B#xua}L|yRh$}mq$nxp zwr2DZDC@GrF-7v>prM@YB*${ts&uGj&JxpV-_WMt2krn2?SdOy+AFZAfTVrP4S-Ph8@-h4fCMg72Oy0X0HAY< zln{eNM3(GuW<+Kjb!J31{L7gU8Ssr;9921c#zUML(bFT&jOg8KVU*E@%HwtGchvz% zv6s~WNVlWv0Hoe$Z&iK@q+u6z08;XPbpXVJwdYdx_ z4O0+BlTn!rVr9P0jz`H}F&RWkP)V+)PH`Ion2e@NU=nE8D)65qmtkY}1n4#xbkKJHL;^oP^O=J2N7ShdMJNbED3T$krLojL6V+&Wy;) zA2~B36F+ihMD|_Y*U@vb8b@bFWLdE@BQoo87lc@fF)%s=@6 za7(tfNH0>3y(zI4H4EDW(w@ri*$+oh+s!bK+9(0H!{D^+n33fI@?O{+GRt&340<{- zu(|fAnxUa>QZW?H9d~X>-d)ku{mvcjMvEKm4l|w$( zsu)Tu_%BKp!y{a?~dii6wYH z9R@v}7}(zPlA58R{Y1r3JnTK^hV;3M?sR;Q^ujUD4e6IP&JF3Q>zo_XcYo#Fkly@- zQI0Ez{@qW-P&~fMxgj~Q%DEv~@gWQch{sDMXR_i!Oqhl6AAj0L&U=%|e;Ln7e=>Wv zuG45#R(n7Ua&p1AeHic%7~Up^smc4ya>%vRI)Ti5C0X_HC)Ud0@di=j0-0Jh zB%L^kX7M)?ID|`0Im`g`1O7nU%3D3o=PV5EJ4L=`A*y>{v5#3$bDs$Lm<1L0^%5Vm zpx$0m>SGpE+i=*&EU2~Lp5S8^RN96zAG4s&jx6^z3+cPgkNTJeHFkf@$1JF@s~^Uy z%v>^*EuJ0nPi$y6 zZUOud3j7q@=N_Nb&?k&Xa-h%?x>w~$!slO~JBi5RL)AG@_^f}OD+!DQT zhhFfg!o#8GepAJi9$l(pN>87uW-1KWrD95Eyrp7F#&rH4EV#;a|McBTBXGH6+m~%7 zJd;l{ERbnGnRxi=-)$#TdUNmglF@UYZ!a0W^v~@jqeu3g+)ml(ebd`ZMo&B0UNU;s z;F@+aWy|?&d&%f6Z?~6>o^ektmLSW|naj{Pb7rHp1thDH{F?le+n%#W#mvx-IyV!~ zYIJHwPy5^yhxbO$>*~~uo;cL089lSusTn=>f1H}pbGJD)qbL8)xtVC=f1R4q)4w{^ z;d7(s-vYC)t-JDr*lxz{C=3ye!DuC--3^1DP7G}CpP*)FX#b;PC=8hE+>jhtl)OuX97P;lgQ-9e{l3reY|J80_4ToOr;wAz3jMhBxMNa%m?R zE*;fkU*#ege^HF(cUbIoiSOgf3$wqpsqv}lZC*6Av)j5TE`CYt7wN_YtzV?8ezWz9 zbjOjcU!==D*!o4fRlN0!be);4U!;3H+tx*Kfwiq)YJA-?X!Cwunru1gi=@H27-dP*bM|_^LuU}D6Sv5fuIEIvs_dsg*xE|f^xpz z9fXMfpWHyOY544H7j?k~WFR0qXP)BM7ZM`}FNk`Ha>@2>ZXAyz@s0T=eo*6D7y0cr znS`=*+yaP_n&6sn0F?W|%-ZpLAHP3G?%3;>zrp|i!7qa7I4 z=?jk9t@#R?WuAJOx%<|hEJ>KnaU~k#V(t4d>y>@-W&36};ofs&ZfIYdtDL(Kub-+p z$ro2OCjr;0nv;ZoQZ*+L&z+}ObtL1hs^%o*Y*llT@~7(NLd-LtRJ?bRv$v`_2|6F< z9fgX0F-{0;w}YBhX^gU|QI}6LL;L1a?V^dRA8s!hU3&b}?V!DsG`ie7?Ip9c{+V{r=t2)HY&V(dDvR1lMweLKUNS!Vsf#hoDUUu=A=3r*@@MgD zwz-qo9x^=Nq*(BkUsCaub@?Qvx4e^2QhLl~&*gDj^qPC}NlMRIo=;MG&(HEnN)PI^ zB#*Mvi^}p#DxUOmK1u0KZ{(Ad9;GiutXj_JtiV`#e6lrvP|FMmq*9EA!DXqBcJu$B z)j3G5bexEU*Ni~irUW8YgjdU$N%~Bo9avZnvtG{4Y@a^h#@x_;t8Om7|ADGG`EdR+ z#d{}5da9aRyiqkLm%goPPJS&_H7DnOtZGgko>Vs%Zl1kd@xhU=1*+!ca0KQ((?_+L z+`S9jWHfY zka_2?RIUSZub(;q+4o&_0P?TS4S>nO=auV#9PFbGKo;%;K=*VqWrv~$prc*^)=6xO zznM|2{R>7nIyJJ{*XspkV?%pb)mT`!TFsb@`;VG2**0jE(mj)DbJdK=ve(s&$*}WY zR4O*vHAl^u%xY3K7FOM~TB+D%)HF3?vgy+=A#R&FJCixdm^#kT4l7NB$@R`mY$nZA zH8r%=YNo=XS5-{Oq2H;Pl0hGjVMDYqhd)*MhV zC1+k&F(qUE4b!2y-Cw4bL)aN1%l$YnD)YtZ2U4g11j|>}YT9To0d2P3;tw$TxPAZ& zQ|EdQOdcQb9+)iutM|Z`2CVbkE2t26dJjzfc-VVjs>^!sfvG)z@&j0u>8zJMe|Xfb zYrO}is(lB*_qr3IQ6O+RZeD%@oQp?NKQpxx@ZX-G~|%`kf86 z@wzs8sIbraoelN&cm8K1>U+*cpPvo2xX|xx zsLU&o&7HZV(;k-%M9f2e6?A|Z|Bzj|!f!dQvkJ2evU0E#@eo<1CoA&a0BladSA(^c z_=}r-gg3O&{=tj#KIIoY758_3!Bc6wZT6||sjw6Mf~T_X@e7`c`WL_8sidQ~_*C~) z&@KMKi*kPG7d#cS*H)h@hf28&@OOKmlw5z6sh58O_(Ohy+p4K=^F0$BFYR|GqM*ocLIF7h`MD(m0<&4l`T?G9h7iz>U=-%O~r|L1omqPT@SeXTC) z?jnCPq55jCV5dqhfy|sOmxbR^b3;kk?4=skf^z$3%nAXQv)k(o&Q{oIe!v>qZtr15 zMc?%rmb%$#m&bKWr8K;Tr8e&K8kTDK+1(yj0`+g0*RWK)-mU|#-#}fBIRExFlfv68Vy#NwL_?~+pYQQhu1CjOb z04V1&28o%G^|F3e&ZDw-%KaOrx8}$9Y*U-*pWEjW!qC3q4no-7#SH{`-OCLG89mqy z1i5^-8wj#E>;{7Tt#SiF<}PppLC(JD4no+v%MAp1`a?GmWayiK=$;?VMw@GIWjB5^ zjBa#lWV7-kbz?*O%znk3g^6EQGbRT+s2P)e-PDZ9yIa+a$+(ef#^ljWc(vq~`K>11RSLsCS1DNM`@rJ3zAiSQ=43Xw(1P|fiJ*@_H#dg zMTG|Z(DM>gjsEOCFjeWvA9-G4s?(q!dk##MI_)Q(15>T$c@Iq0n)6f7OHB3p*3WzZ z78N_^=bi&o&6ao%OjSGd3ml`LYfzDSEj@A|C*+r7-Ax<>uC8xqiX=Z6Tfv_963)^qob(EgN^;dNHEm!f%`^8~jl#Tw>|6|EKfkQoi{i6H9_^7?>O}l8fEw-%l&vV! zy@oWj{oX=~vYhe~lIqgqS02_S6~^!qk}9*!OGqls2VO!_Z7%(_hjmHCsq_+(s~%UZp%)K)%Rw&m;4l3#Yl=zM(8;OGVe=$viQ01y z$OyB~$eyEkyqrrj55|4c-QS6^?d31K2f?p`xCId={LLK*xpCp2T-6EL(#IVL`BUx= zgp69?4ul-r?hb^kJLwLDJp9_*uAUBmZRcipAmr*@?m)=i$pE>~W@GlrZ_9D9XImFj zr@oQs+@K)8-B_gUg&}6iE3sCk6zgea2bjd0WcQaOOF#Q9HFo?nj4(^?%*fV&%Nmr8 z4Q-IBv2Z@2W=yWXpk_>tpHed>x34^=RAJCyZDL&A)aE_6XKZMJ9uhA}6j1p|t?XaIu}|aei}71TTMUDqP7G{zEmJeZscI^Q z!l;eT4aueL&JD?;Jo64xpPCZ<#p$V+0?Xon;AYIj0lCahx~no6z^*RG0+`^&G27&1%;oldC!wl3DfWQ0*Y+k z=miuRf6@CM+#p&1uoqBd{!uTW$o`Ih@!$rj0Q0?oq6&QA4V1LwgFo=#2B`+iynv!2 zbonbz;v${pH|OGDeCE(me#f(4Us{(~!+r z^=vXntlauwLl=LjX%F}VZ3|VS-&q*i{eScIE=1UV>Sq=dyxacn<6Te)kNKGe1#-ea ze7p+^=Vw3iF$)Un(|%?_q3!oiAMb(!+~jW-BFvTl^6@Sx*#Gh~3kvzpe%)7$`vvaM7Hpl;Qv15lOTQwN~tod18yPl1Zk zR~>+Q@t`^Y)!+$r0CIhs8vtSQZ`1+E(~s2w$if@{iyu_aMW*y$ILSVFU;sK*ademD z2Y;n2#zR4eprbVrov;Y57Hjt*gJM53uvxwSlgY@?{`N^^Br0+J$G%q`)#P#iGotEz z=zm63r(s&aZ?B_@ZS_ARs@)d?zTXj5af<&LQ9Vz55*dlg4m!>Es-qe|>wiX6?Vg_s zXm{ok)y(l{W=bkLm-7vSddrbCLGuXb`GCDQGjZnFS`F4#=)s@%5#G?w{)}(%qQ;B; zf~N*Q`&pk#Pvu>Hx=--b+uAdHf~U%soaqxhwe`-=`2=q%>gRoer;a{ymT&N)o}n-J z1W(QEb+%9NRLYmn3D{GEt&cJ@e~vkOthw-u0efmt#oSiDJzl`zCvM%th?4!)EesXw zf-kwO8!A(wTNo&WZ_iLytvpZZE5_mEf>*j9sX{$^lk#eQZW3Np{X45%$X@-G9b&Kc+W z_K>MZH~W_Xl`8IE2Gp<@{L6sq_Ba1Bpzd9Fo^KDCizUMTWk9W56m3hwT;Nk|9&2My{0_V*kb8xVI<(!Q7=CAA zXzTsWLRyMH`I!YB!=WQJ9_Qf=FtptfPrri=-!5bN31DRU|FQFR877zjJD0 zXn%2LA_{fJ#SRKa#p&Y2gbFgii3t_qekUem_;;O{kg*G$n2>=#bz(wB{l%GyFyxX; z96T3#{7p_w=)vP*a{VZHsiF17R-LeRJKk4iE%;5pG77%VO>y6a>8)y}wuisy7Q)be z;SNF=@J}}oWW>d~i@G2~#=3zZW2U%)AcJ zkYxN}FCnP_pS{$>$3sQ9$xBEoMBGbAs}1%Nk_z%`FCnQYU%t%4$HREUonAsxacaGU zqyl{pkatoxq3hCS>B6t(LGFQBMdN4-P{@LHFD9pb*&Lqco-_e)%3+$6fn2Bhq0Amsh4nu_I>Z*L?Pbu3XUpq@s%Fc z9hG8~S8!B|#a_WtG5+Wk9982pT|BBgD#tLd;HVyRyn_=3`KecMRFS|{9@QO{cL$d8J&JD?{Kv&0}!|}n{&JD?xi<}#h6$LQtlFP{p(J@bP;+sf*P5#Mk zMhsLjGqgLLn+Y54b81E|lsGjb6CQSIMjkxs)Ql{c?$nGNc+#mE8L-%?8U25yb2Di_ zHaIn-@9%VKM$i8t%n%80d!RT3o}b!vnV#|&FhwL>#nfiR7q4~+VQ9CwgAk@f-9V5v z&%1#jgZ|z(sYESySCWkY#mlAjr5&y1BR!vM=EdLYTPQ4Fp;FZ#NKR=!EX= zG^2JLD0{TG5r((q;%8fiHap*U2ViJd^>9%FVP=s!fW=F70J8EQ>Hy?q;Wf&2Kt|3} z2OuARr4B$gcDYvh7RbdZZUBUd`_%!+!%y{8z6G-IVE_!yO{SPO41Gic5!=#aEI7S! zOr12c31B0=0<+nA(tA)t)35Wmq{8Z<-hz_p^SuQn`~U1MsHF(kds?Sdi6^`TrE(nf z7L;o8g&RD*eJadYuR%q1mU#V--^>K*yUDs);-wq+&`oKcr$x&OV}IN@gxoF(v;FshJAP znp8~5rPF#TJRCBn2TXGgUZpoZ-i(Fvpht;?W;WTw0g-c#wS5SiQAJ)s8Cs<`P{O#! zynrGDmw5q2M(*$eiVXdk7f@tugBMU_@ZY_FBBL+3*#j3P!@GC`C5$ih0*VUoEia&` z2nzs}b8xS@^q3tSX!ra$1+ zwZr~^Q{B$!<4c`W;AZ zXFqena(*4J%z6E`v~Ut2$ENFDE-lOt(pJLtenA`B@BD!l6+EZE4;4ZU9P9@)6>ydx z(A2*l`Tj~uBm-D`2kJko9hQOb?b*oV62TFVFgfTrR-;|DYq?4A$*?Z=&fYv=10mop?Y1rJk6w>TPY9nBjlk%+@*=#+eZfs~@ z9y5tS+`Ejm~0z#hf>aD*)LU%W#sV9 zJC$-Kt2U|`lTE=S363eP~;THme4Wb_HN)Pr3mRcKt~mz=}4EQN9JT z>}To#WLn`^KU4=G<9gnuTmrK0H|hXnUeVpkC1Bh3OLYJ;aNs@4B_IpGcyGG^ z6__oS^`W6w=Zqf%z<_jmX2%%E;Gm*h05&UM@dn7y{^$jeu=MnAxxO{B^=9`#WNq9% z5ZSxgJrG&^H}^nf^A-2Gu57Y8;vR_XUh4&rw6V?Zfynlb_q(nmvVH=9(36!P1ux1v zqk}v0$@gOPVk^OVrh5)X=*c=Wve~^$-Pq86t!gYReoxJq%suM?rF$k@yQvwIp|`6U zla=GujLF2QYQ|*WW;J80C#z~KEc;N+n9MroL8a$RHeCy2?80r081@Ogh1w(5noOMV zh2+?Un{RTPLA5GohPKtYnXu*$PR+=da~^VdZ)D17r)K0xjZ-tSW2aLy@}kM985z+p z=&(x2g?Y}+ga!ZW)QtZBsc{YqNzaeLth)@i>^`D zixAhg!RSV(Mm7uHQa8pg;uR_8ER48L&6vC>Rx>6$mZ}+(BR^I%CR09EGbUfIELN&* zvgUp@V{&JisZp;1c(U|SMv`H%b((;dHDo>x870dLJOF(Mz{FGorVCzQR#X z^xFHJ8PR)x;>?I%+~Z+K#p86)3TH<2>eJ$ma-w%v!RU&%WHR$7pbsHwn|+YXq_$`O z$*GB<{nwd^c=d$|2L+=~_jF=HkG|iD3H`aoi3z=VtrHXa@=+%yR@d8bP-FDt8=RSl zCXaJsLLZ*z#DpGv7$$8t^fDhAF}uTIyo+jYA#t1foSoSA;*Xsh8Cu6mhdGHS-{Q=O zzI=}}BYJbKGb8%*24_a}=-)UqqEG*yGb4KS^%EUcIsLlGsgZd0lg^Cj+lQSQ(YyZz zqZTpJq3~t-@hX{$&+b&nAx$zAl%VTZCt=xLwz%hOY+lAw!Z5QgzSCn zJD5$$O+c9nv43vP9+tihvtG{4Y{s7Ts0(vLyGGqySUO78+~TLIIhnap)tsDcR5d3X zFZv(FnkNs3s+yC5PpX=ed#|aROPlz)?<(Fq`8G(^oJ@Nh=9dX&%J7P5ld=}Gq$VAA zB4O8j654F~xibSpYjR>BjQMZ=2IRt-Is*dNEk%5uRnbNXq##vjg2PoL0!3kXayCK=MLwP})q^KUre5O(6ggb#4V18Zp%+l( z{i|L;Q4#(MsM~VUS$^m*4popJ6_n*DcOvE%#ee)sL0LRJ2v-d({(1y|^=UYr$~!n) zDf;;Viyt=i9##}&j@PhMlf7QUQdye3hNa4UZo0>wK*j0qH7wOKGW_qGD*PQOq5Hq0MpwAPV!M zIsmogpgI6m<8^fa>cc09kkp z0GNnqYdDY{>TG?%#76)b>=wjk=LIu812eQ6yaE%}-sue(8C>BF7}>ng8!$5aRd2w^ z@{`_xk@4ru^29aB{=VLTQ3;}6fr%&M@vttbC~Lihq^|tOOGv8A=*K<0acayi zFCnQkouBZql+>HK-a?A%eBdP{wP)m94{w|bbO?}`fNi_KlDg8`0fgtw!>^sIo7+lr zsTVMY*3&(VC`zGQ7^+CvEew@ox?32k#R|7DRES+}VWVaV(RU~2^a)I%X!Znf1MVlN#C^`6V^kl220d;*0b1C@UGzHJ_yP_5S%JrB~mdPg44C zBA=x6)MxTZN}oKKUsCA-zLif>`q|&}NlK48Z-F^cpGcc=O2Bz!o|^O1*&C#S8)sgV}v!btyumo!ZmS;hXFLy z3m}_Co4f@yw10UCD6G3>k!QC|Ha_DWAX)m6cYtK?pv9iuGFknscYtL3TiyXu1@3y* zvsDKL?4aLi!4VA zX=7mCPu<*Bh=dm~hBntdjHtrPZegeg^=@IP1b=Z0Lk+m_d6!R$?C zvhW}7K*+{1YhB$AS-I352-$hsI#(qjOUJnd5w;$52SV1K@v^JiA$u19q{W!n-rqd{ zj1_kpj=$U!5ymG&dlyD6+QRmXY_@h=uWXDX167TMo$J($$;yw^jLF8kHYnXQS-42e znC$zFnlV{-&PJtTlWjBAjLEV;s~QWt3O6Ygo2;6mW=u9U!uXc#PT~+mn0w})_}QhK5eRn!V6$w9H$Y&V7eKX}ViX*0PDpd7tk!;CXm zn0pWH9&xd@7KSb4A|FGW|Wd zNNVm%|G8 zN;*weF(rv!Q!yoVx*ky|FbNY=F(pmjRxu?xuKT`1fw^*hv5F~)(4b;U_b>kePQPjC z{#E9WFUe`U(iX+dcvIYp>87u&l(TU{h(g(v*z6@7);Ijnv(gE5I{nBaIMV6wUcr%K zzyGmEr6cY3{lp_UQgO*oJ%S@W@B5iYaHQ<`pL+yH8u$5yXK>Qm-Bj-p9O-`EQIFs# z0k^)^N+?P;q6@VX2uVdu`WIufK^X6OEVqG!@_PKTl_gbTXzxx4W0j<=u`aeES?O!9 ztFp$`Qvr5&wh*a;WskUD0r*3Hf!o^mq5qi}TDM>Md?%ul#r|eO^?c6XOsJ`i{$@g@ z?fh$Bp9%Fh;%_EY<*oi^Lajdce|@bkD)<9_XCk`3*xyX3_OJV!3EP0dzrk5`UI}C> zy74q%@AV$mR@@za!W-Ia{=tjNHv0uneLeHHKGi*y^;*B+si{G~;Hjpw{DP;B?(hqq z3i?;S;HjNof88g~;XwChzu>8tC4RwEDVG9%q*sz=3)xS+2Q{=0y#^K0y6|_N-ae)3 zR&PNmP}SaoQkHgl3raEiv$vp>ApH$b9~6bB)LT%>%}TF9rE6C2Ehwes^xu10rxcVy z0By0Fvh{(l48TJef){I#!l=b+%Jz(GwRv9M*wB8eYAovUzM3&r;^H@z?wM+Era{-|b5Hg$L_papu33>K9I$A|Pz z-|qfsCp{R6hl0gbdgzgG!bs>rLoW%1igB@rT#Od$;e;NJP7FrE#RY+@^0zGrjP7*x zs90sZDAY+$ObQ!Cr2-X=8G1!LHZfcrDlX8Yl@(><_3EnWtx($aPFRRoi1j}MN@(NrvAZUcb zdPk(_s27LI^^w7{kb!DX;JY69t~4C2t}LnBH$D^%T-A4cJTyKS*Msq*((uHXRg7Q+ z_xNyS$O!30v2ytq4=2#A?}S*T5sK@mi;^(Xcg}xj^W;FmfLL*Gf?g2`m+5a$UdHDqwObJ^3x^D=Zsm&kC~;fG;i7OX zYF69Bm1)&xx<)Ls*80@XuRl<~rG9h$*808mJL>n>@2cOSADxOXcH@i9)|0B=s@EUH zcYEr09Ie&y2XFbn0#~9$olu@cRWNaQOZ4y-DVRJPawZlD#)D;gs4Nl+6!a}07am_3 zt4v7EiWl>a3-pn(L?S#6&j8G-3?+JruM`BjH9ooj*xpqsuif={)1oJiuiV%$xwdic zrV~^4AAfdg%Ta+xI*+7>UJ03B4j_-nxC$*C4s14_WE!EN?5&VGyc} zn+CKvw4$9XSgqkmSn4$v4_nD^X{f1fsF~VO1Bb-F>l$jeHB4F7Fa`h4OjcRboW~kB zKFexGn#ReiEbE(3ty}Z%qFwJUu>JMax@o6Y>~3B*?bPfUr)IAz(3@-5H$S^phxeYE z^`fMEXY*5*@i&Kula*dn9Sz~`BcY;DG#pAfw^{Z3BH>9PeNr%P#Ev{yWS6{qT3yy{ zfGf39nTfg$6GLIUI`6Gt3b#H`za6f9p#By7yZPv2=D%~rj}O%EgD>yLWy{qI^!lgF zg!}OC&iegFXM+z(JCh(s=UO+@wO=R_jwiy^dReTz(y+@iA|gzHx*c8~ibq0mEA`bW z?~hd&V5ptG4d*{OdFIKLyH%Y3WX-OVE2br%B%fh!=U=Ipi@V1XMlR>?mgfBW2;PJ# zD_c-L|OZ%R&2=+wlGF7ABdJm*mF4gJ&5L$4Pg|6q^WT)|{6RfdQ8Xc#pW~0HsC%jI1ye-C@sl^2R+E{Ie_!j4 z4}acmYWdO0aQuCu=SL^o0+zq)cT2i{B2@QMC>koWA8i}ne@(y2aHKdK9WVWz385m3 zEqV#M3q~-GPLEy^50-}}#o_{m2D%_{eba^)8kej=Pv!V?8=F=<*0geZ(=xLYV>Wfi z=Pz%XF%KNU)g(=%8R$VfXua62Sq!75mu3@HZ``}*`2LNJn`b2ZHDYq(*eYXU-AZWy z^aNB%%2;M{LEh^{bsHkFiLpxdL=0T2j90Rex@n}9mVKH@;W#>Eb^GFaF*;!PhC`9m zZLx=N89#r zWw02xZao~!q^P0xpxL$AD&3qZGj!<|O<6BrOuUPu-tX-#G+^3(~J?GTZOWs|u=$&mV^yXzVnrH2>8m2(M+sz7(O$thb zV^$TOWQu@#aU`fGjCiFy-zs!!ib9dtq|gL2h3Ru}%Kq^%`c|yxjK_rsCblpQ$`i|a zOeOVCfqMths_aF3lk92Lp!0PAT-;N?3$(1dkv9-XTnosRFNhqe_d zOa`NO2JTKZt@jCv<6B|}HJ~^wE4__KHa>TtO?i_yj+2M7M^SWs|#y0(O z-vMI_?;Kq?y#J8Cz3|}BM+}_XSH2oDYE-nMx*yMw zSH3i2)aX0!Ej+TfaQKiye)YM&DZ>u+%j;LvFFbH||?-^6?!s7w!1! z?dC8?GSQ=JS{Vo@YGQF_v-zJkC7{Uhj(a!eCOidf~uAo|P&fv@&24JXs#hN4i5 z*u7;b55+D-B7ctp=NeN?JTnc_*_Hn({dM=6Bt7iAyM<@1IdiA2>CFqLr%|W_+AtkGV!1;!yfM8jQdv};-iQUh-oG@hG}36{o?>!K#VApS`e)(L zPaJ*Bsth56E*&xqIJOHf3Ibn~`^9KGSPJn$Pih?8Ga4)p79ZYH5cr%_bLXmV!>`l> zfhzg`rN+I%Xd;FQpeH{r#CRu}a9V4Kq2jsM5RX!>8aGWpzM{r{_dJF=fztC zg1rJ?9EP|8T&w~}At74e%p_>wOEN~S-EE2Wl$p4CM)QLC=+fie>4SrbBek(!fzOT# zMN0v7Ht4k3l%>5#=Sb3#!8pcrc-LWMBot&@De()@lt-%cqBxW%YJ@SO?-e-z#HLr8 z=FU5I;JIUaUpPK*dgEgonjYWSD{#SymuK^PeWYo1V%_5>Hq7i5xcuH=acBYtj|9Vj zEL<819$5)*MiZ>p?ZHqu)GKgvzp#NsW;+^+>Z9P2CQdL~9*Pu)!cp`p%FQMbSF6zm zjt#{nrhw6YufP>ZS`mxO7&!!vVJvDExd=tZXw1HmUV&T3hR|h!o1>3X8IOjgC6(Y$ z5*vv-;l^>Zh&QA+z>id+&I1<>jENP36efN(@WZ^XUV$6zb`eeED`+N9Y?LU0=Do9Zt=_zPDF$FBSywE1XWI@m ze9f~rAVKq@RRw`dM>2YVLDZyhu($}S6h;#licbnbVa!_Y73d%(MK>;}r`HC;Q>n@r z1YMO;|IYedXqylrn1WFh`i}Mh3F9Yl*cvUd8QXKTrheDe_-6;)XRG<|=3ap=L+kb# zC3q}+!e!xd32clDN5&%r6Awqj`ZyU>p@Y*4h0pY`G~bebBc=S(G#`8M*sj^f_UvhV za*>1p=xnC;Uz&6{gszYX!y|MJk;rm9Gf}6c^R?=BQetM=yQTZ}ZQt|EULgT;yP)*_ zn66O41>>Ozd=afi-3q&j{d%jOXbw!#0AJIzex(B!G^^?ws8?D?EH795Mysxf9vAPm zO(#rM$MsH}(Cju5x`*v^k6~kCl&u7JyNeiOOI+ z42eAt-$6nUN{WONFt3c8QhgS_Mk)is0;x+c$d?&dL2c{JOShj|Jr$XsJ3LrDDX3Q- z*;i$h#U@3=WunbrGBKE0-AXgJ4(JK(Lr0Qb(4%t@(>MTHq7Nw@ONnU&zI1zK1f!9| zTZ#^E>5Ik|UtNt(2|BVx@i0gGlb{gbff=wC4kA7cohV|+svvN2(~@-*_NEQ17=sg% zZQ72wopdrf9NV?J)g(=G=bkvYS(0=cDT5B&Ji?WBJdVAp>R@r*%BX(iK;6n>Gh7#| z2q)0t9cYfW!l49I#R|wxGJ9BMXbD32Dp6D#4~6mY$3tB3&KQr5I)`AlveQ*+YN6FC z1QDx?Vx%h0V%b!!c{0visrW-<;d!uZOx zG^2Yc_i%L7>eiqYLr+cWG8)F;U<7z}zSh{x9E_pJWmF4!WFnUoE3!8TuD#CODx+gNo&8W{o z^~>O(yU=P#dm^!Dd;Ie_9Mv58qy_CT>cQ}*_Gk^7Bl)+se(TXG(kvAOI`ylxqH-Mf z1nXWpyrnFHUZmZ?M9M?O;ex=IWQHYCRX#2jk#=!nC>}WH`1;k2b6;s%@_6H{m5qzn zm|vV&y!_a{J@TD=!IYNWkxhZKMwti}z&euCvn=~6Jzo5LGX=442~Ng8W)ctGLCW1`Gt{i zc{my*r;37646-pY2%I~rvZ4Y3@q~m%gVAUuMmwRv`AiV8;uJbHoL{PUFHSdIzqxQ;(~J3&r>d4nGGTR*PkU-oF$oBjhZLV@^ZHfV~3)Z6h-@ z6~yFAN2KkDk!QqwRE8P6#aPtpNux)rkF_2jRLMw$4D=d%2fEuhGDzhkjMuFcUpBKo zbZ`I^7(-SJM8Z)talHe*QWhY3LLP4zjbqXT)0(AdjYHK}BeW*1h-n!@GuS)OBWW9q z*R8Og40<+bj)Kf^Y$e1bnOmrL;8xoNPGMH0Im(@BJ4(_y7Ncs9?|k;eO85#KMP}uY zvUgyBWe;)e45ztLFwn^X*D#|Yo^)#7T6>D)oo!Q_r$27?wU@lJbp_S&o!xVK2l^F8 zLgi?_?5D0*BdBi1o4~AS`0!$*D*3dkFAwz?n@MNIAsO;fY8KXxgIjg5e~-uc^EMzyw>h!_TD?pdfIWos5!$ z0beYF>0<<0(mXwIg`Emcj7Hz`V^nKVEFMSv6+J$5yU={t>FlQ5y3R+NbY(<%?1WZJ zZXp>KQkvryq{uEUG(y|EWPZ4Xdx~~RN60Q}(j9FlT-3ZUJ*av4$XI#Rk>?^3(zIO+ zA(u=q#7Y6Xpwb4XJPJJ-FcUtQKyRjN3)QoYTDnw0;Oq9qals?YB~Vi((NpmTX;(X1 z!TTI)7`TLKGKJ43j?_VCbOy)OZ72l^sCGwY#1N*BA{Jn0PUQ=9us^q{a)FDihDYXN z?bMcf1ujl+eB?_?wk=hGuk|jv1$cfD6f$5ebYR&cjDgH(Vy6X`$?h2|8DLi}1LK1K%P==T%^ zZb-)$%X|$hh9yjN-3XV5u#7~P*Q8Qe6=KAzWY!7|kCYl?A9M0bMkm(WIMx8f5#bCa zx|%D5hF9XY3PO)yRY?#4<|>{t1d_}&`HyV}c zgd(}Y0;`UOMD1H<^$g3hDUL(}_cbkC(X?%WbVFLXY<5d#tvIoN|M4w*8<)*)k*0qv zSGIwBk563*bfIi(=qL8gY@GJu$(73lxO(8a zqT$lm#AsCuQ&dhtpj`T>qXFD8yZE^a*HJHn!&^anvlEqV4|uavg$QO;N3R@z3IatO zUshBiDvGuMo#MDm>lxvSSc~%IE&!w`0gP614U9*?9W$tAuOnQJ^(0(NgV{h8$0`n0 zRANluT1IybvCxGWxEq8$5!1*{nQ7^5`mMoq^rIl+^?^5@dP>W2bFLC!^c>ibRZ$&e1V?+EstB zMPb{yQL}rR{cI%LaoJzC17sjbgh|kBD?sUW`>G}KEVQkv+lPf}Q4BKC$OXnY)95T$ zH`}jP@(bMKp+INm8MrH@&aK{RhCFANEu#jrfFE=!&6)P?>+*#BbU71NQIsE273Iv_ zb0~7L3q@{`$tN$zEyyJ_u{yX8yhhKZ#bwz*$Ri&u&Z?gLgt#J?5F-qU-eWr&oRw|6 z0vvKHz*!k$%+gAQ1>zp6Z&r?NO7DZ&1<4^CdJf%9iy>s{?!`&n#k4Ax_F-8$`}yWN z?Sepe>pD8qG|wVN_OB76b+iDYrV8 zDJ(Qd!(zpVjG0|e&Sn&1FcKUW3Rafjwu?h?nbcscL%N%T)0M3PK}p0kW6_c@X2Th7 zMGq2#bi_DhF$VtXl~Ji8OnAgldv>)U6fj^Y>&{$GlDtxaThc2+@p2goVJaxn37a7h z!IN=vA{b7fyMuSdu_(g9A&hcvO7AeDyNFf!C^Lel_Txg{m=-q>;ge-6%*Q}A1_O8C zNi}XdaAGZ%(m!uTz_CtjW8;eLjq_$SOs>I`YMk|)Oo4EPnJiw$QnMM-_glFJPqU%s zrG}cvlYKvVRQ*ovo+?Yn7Gtr)0?dD`LC1}fb86On%%@`+^NZ$0`m^(!w{CcML2F&Q zerZZl9z*<_Jvs?XqH3^KOjavn&6qw(Mvmi9A&ARZkF=<2LbR&9Ake!NZGeko**@00 zz}@Y~gJ;5LBYiomZm^!eAaGy(LiDf9Y4)Qv2=|$xd|ARQ>+~f)y$e(EnAbx<4-56p zp4V21S=aB=@zoBQ#g|Yv)5uZE5+m$`W?5i1W?AbpjjfG1?xXVT#Hi{#2JF1Y3GuT0e zui7cB{WM{WUxQe;fdyTca^s9S(FB*p$WP`kC2WyIDF_VoWb9uM=rLNRLJ@U@hntbv zAWDL2gS#80s6bh6k|ktUW0sUVa~fCe#;%*jc`rAvdiL0^bthhWp>g`Qre}6zkt!32 z|8_@mSt;_&;>J}6nEcqT$&Hg|n~NG`+k<6cZrTxx8%ImT9Lt4{94Nzb<8g^#Y2^g$ zvZ&io1jmF*>DU1Q6|na099bMPr*bwFVB3jIsK)gX@!}}{z$HuTRz(cG9NQm+!RElL z%)q9fP*{}brb5)Z3^6J~@>fFna1p({Zl$@51Ttf9;-LgdO_-8|Z65taGB9Yh>J5fa zmk4wZljBi%5I6JKb%(MIHFJ_F+_bDJ!gafKI44Z(q*i-TY)zKR4xY8+H$NShG(MQE6ec|xF<*i z8;`)8mMsX3sowyVfPTm(pM$c}MULJw?ZfH^Yuk`4PQ@6^j4T!u#^Y$w zrB`My7w2}iM1k3mji;bss~LioSlxjwWmfuFQBftvx5WtCAsciJB+e!Psl8oHe`({Y zsaT7awIi-+;m*d#_MDu*n29=_SiC?IrEh<0T3ma4@jk3NKRIX9iFMo#6SzjUzUkE! z=x^AOX_AT2+2Yudm6)|C!#q#bxWms8yz4-08iKQr3x&&NX<9IjcQXAZ%8|A~&MFG) zLw3EHH^m5&%_eizCKL7>1Hy$+2bf{TtUAK_n9Yt>qQ#G4*N{Ym;xgN2hKcaW=9P(H zE)_y$_8AqHH3<+~E^3Pjoq#DShTcr16Xt5M!_S(HEk;x!yLt=L`I20By0P)G)u>O* zi3;s%*ECE45kbK@#~1HGjoK4&GWWroDYTZOntS2QMtSR^Q>($3MbcKEn!C7p!3-Ts z+)ll?NG5nsZC=tmW$C-mq)m*N&T-3KRSDzpw2JVNT7BG++QZX|W#s}EtjaQ$>X3mA zMhw6RlhRg#vk+Gd3`Q_Z6f}dq;!mi1Y{9T7Bqe0J;pW^K7I0%Lo!REfn(kWAD19p( z*Zx{-yb*Lqk{RF=NGET0fnJ~;@gx$T+Eb^8k1R(}A{;M+iPBw{Un z(D7IopX`Lfl`GH}MC==DDv=NiMy?!+w_ts+yl#yl8{;5Rk}MwPVwwcn6iJG1Ws6%D zpOx&;H|k_}2(b}!dPD6CyhV7LnE<0$bPG+r?vT7c%;Yvt-68@l7^%HHfi8C;W+xrG zNmxILxLwi$t4OS^Y4}!*u&#N8F65GiG3#ky#v4gcw40Om5La^@Ki8~?511V?&feOa z)MS}~tbiFlX6R5XPOp2W8ug3Cl6|X!aqOzZ!f58)DN`^r8b8^=oOIK)vY9)PQB+yT zh0&AkFFHF+$qRI!bjRsH$H`8Z?m}JCTqrZ2mX6dV%aQbsnI-5beNF2=FM}tEL(p$B z)1}<#S`1wJ^y$N;S6KdREw?cXlI>EWlBh#WRwkcXA`3U=SUs{FE4vD0)qy;aG#9fr zZYQg=O-JjV?Pyu`*3#Xsw%jeNxJk|kx3C7(cD=q?=@cCB8%YPu!lDd$Z)nlP{ z7srI#=xj@G5S?Mnj@c7}$sSr)Fy7pMZ@2GVb!q!KwN@|zoM!`rUMwU5d)_ga?`C$i z?eRcrmeF)$>DyzW3D&KIlGBdor$#8_WIEE`P;p_CIa9`cWEnfi&a(ml=3X%-7jgW? zD3k$v8|?XKEFy@8s*8i@0tmnL^me_F+q@u#6LAx!_=CjBwjA^Bvh~Z_qYm4;nOGiG zBpxcA+SHb=rT&6T=bQrcA$>m5mSwD;?wCw0%{XLtv3Udv(E8X7c0=baK;_ ztoS>%Zf{0Q8t9ld=uKd+D@x8`Z*oIAHlZZjN<40vxJ2y1Dq5%dWvLd9yPS4O|I*(1 zw8O5R^UZe8YTd9Y$=>rZCy;uA5t%SWx~_V-1OqEbSLhM6Kjw_HjP5YS5|uRQ333J* zZfTC4qY|^=g7R|gP?zozu3!faT&6NQE)pv$gH7jncs#b{6k#-82Ir)hV<^A|o!f4SrZOzFk zYxofcSSUsdelH(;2d;0$;`p=E+cLr>+Vv8U#z^#JQyhswDZY8SpBu0PcXV^C{ zn2I%H&CkxKy?r_PEf$Q4{b-z#VA{(Y*@ZYMQH`E!nJi!8Euh22ik28#W`f>^j7;%h34kLCRszh_x8##t^d*&& zhiUY-)~mNT3xycy_3%Ix036@>w1r`h8Kn?|&{opoHSJbEQqwCIrU)gxTc z|1K&8HtHe$EEg*zH9id7G(VZt^2`=lpSSRN8L4I-`ho&L0a}EBYG=!mJuEbsT$5!W z!#IH1XTT(vpvpr0zymE$f=P=NVK{PX6IOa7EVN|bsZEo!&xeuW3Xh0sYn}dxk(p=4 zAP~*Ps2B?uBkmrpf)65u9hwwGK#9l6U}A#7rU}?lk~(yTY#2TwW9-{WkBXF_qJ!3v zGw>YCQAA;iCl`vHL&{=$BT>UD9n{dty+kZ10E$jU=4y5TSD+lDb8FT*` z{-hs8BLnOy61Uc&Oj!Rf>kO=L6foiLfg8z!YQ!mJ^E0x|j5!sD4=?B3Kl@K|P!0BS zVJ-JH17%mR-ox&Vf^kME+7-)H?GCHyN(FjnbV;rZ^uj)2Y#&Bc7C~IfL5uX%7zAs1 zasm34wCzdT#%b7iFteqVsVcDI$puNPej{UtABWglTaN4Yqrot{&t=AuO+ssm2nMEE zYTe)Jj9-4p2HQQXc zZ`+h)UrZ-3sGhlzX1O&4Ogqj%0t-EK#Nb^zPyEnD}+VW2vR#9#8HQe%1+c$f2Vd}{s6l}VQSx4pRk>RY8+Qx&iGiM7T z5}VCcJ?2yqZan?S0(9w<>;s2IQZj~iHqs4Q-)BXE!Bgv=xbeHV(l)$~j0DqcPQq_< zld=a$c?*dpg9faAbV5t9zBvaib;gImN)sGjkj73i9-z)nlveIrPzKxljGEbul+ke+ zwAC3y1*yfTQYCJO#b&#ya~EgUgwuP1rZrldQ$I z0zOvZt+}rw+kKKkD0PGb845lfNg`j<|7yyE~*}f^?){ot5S+x zw{21yi?b^L;og)_+?wLDxg!&b8B3UTC@cEYCVH}pZ&&*rE$NK8oOC*a!du&;bViYG z%F3!GudPRn8A$U;2QphK<&uH2Q$!{i()QPP)hA*_ff>KVZh|FPSiJ4Trq##yPCs^V zWmC;2biuLp`^3hBCl_v%8xM4BTwQx|$>bAjw;kWU8S|tk*36PLFV8+XdBuq}>&!G) z4hTk$ti)*4%15R_^d zBmktTuEaD+X)uB&3!6el%IGUL4j<5bnscCbesUU?bz{t?(@4bn?CH+5yGO(U%t}-O zvDz$p=aImYkJ!$OT{u=!*&-UY03{kE6>$Trz?|S*WsXv@|3GFsrT!5hYMfhpd>Ugx zxR5$tAaE_V7B^2dk9Ip%yB%k^H7}hkh{-Tf^X6U6D>r8zF>qbqaaDRHMyqAAwAG%Z zwC{HU3KuIzpR)MK9ywYk7CpR}Pa;`Is3Do3v@9?;xI@A%=CkMh49Af40QW6RNF4n^ z*|9vwI&Q!WW$uuvO7kL)%BiW}hhyB(RH3toZ@0)H1n6gqotbry0YS{_lmx3Wj5bdm zu+GMj>MZS=}ohNEzA<$`WC@9baU6OH0b|=x+q=v2g7Rc6g1Thz2Nlb0vQrti% z-AadL`U_^5{lyxb*x5LDiac^8GIty%hnUe&1vb@TwGJK4%o+bRw4T=7|$?gc>pz`EHxj`g)*OGGdw>X<-0{+2cv! zVw}5zbweOa46{zMC|rh9<{_VG7o>tywI!n|vx4i^MR9P6Rl_piGLNS#M<9?8cC z|IeDsmqkJ{&^m~n)3R?G(@*9}hxkx~H+wPI!gQudq2#%rM`xoD1*VUUmqXvolMhiq zkVJNXO_XD#%xS6AWIhTl0Z^MIIu1HOTpm;x9%3wj#eG%;CvDY^WMOVonXwR4@^Im% znUf*^DYswxm;`J#&OGtLH1TM2-;%l8HY2?inMoyHDvA4!wS%5XH}9&WGX=NPE8&^N zXd94!R~>T?I9pZXF;QVDmK0$-Er?POxCOT)4V5)&#Zo*o_EL%|2aKM0_^CMoYKK~^ zd&43Q9QxMl9yxyn^SH9yOn7NbN3X4o#)x3L=L_RY1LiWDP3Y&`H$nm&U`lPCIXbW0NS&}Dr zVeZF0Qd^~)A&zSM;mS^M>>wL$J_++dkWS*Vd<^BLxdb#Y3&bUP*7HNfj>YkA2$gaL zjd@J&(b-+)lPsXwfx~j-Oaq>Hjunl= zVK69`b+t022l-?r3Bw!aD%!eza_SG8CCfw6{Io)|i<2ZuGAr5E2vaV!uP-H&2qsr9 z>&Jtg5wMgBMRzWXCkSt11>XSZl1YbTF(4G^IfXH3$e_e!HYL&+krrt*H4K|m5mB_< zUO)8mp%uvb(27HQ&805co-Q-G$y1!Eftbk6^y*k(V3yZfZA&bTH)1>B%2aJ(_D_!Kk_9J-&ofyLzrqP?Ok?^F zx;kcXEa^Rcuq4TxPJ;l+0;=R%NpxUjT^8G8yM0fK)h7=|za=BMZuU}=uEmIobYo`D zXj-zqal=BKwsCCN)>Jp9ho#(Rm&NLHwX}i>nsTe>)91*dka76AYD}P_Mr4X3r+AW0P`QyZ3`L=Y~ss-JHLYRcfZ&T74Ulk7xMZDwfHR1Rwv()VkZ?TvR0V-MMww4LXm8(z z+HglN+6ELAB9jqL$3jai5yMzSmXq1XU`iiNR*y+H4J&%?&f*ulSk@CoW6~nHCTE<; zS)t~_OT=mW+nSThoA26gf zmsC!~eps`FoeIs8n)|@5obQBhAiB{>wvl(j+K3P)vOW&TtRc>KnZG940G~LxsPPFo z{o%yy7jg7UOB*-sKCx*jPDz&8$;THoKDHNW zli0^MuEYvVoL+<-2Q^)xP+TI`ONIb1f+Xa<#&2x;d>w1^_%?k-nC~BKTRxma`RChb78@^La=l4&<_9B z0EPS=RWH_`*>nG?t=u;4htA3cc=MUe87O+!{t?;UPb^wG*l@T|v^KCQbULk?*foxp z)QFTlbI7#d!Vo0Wq{FbnM|)R;#^=!Y#SFF>6MYq@ft4k|Hs~YahC(HkrGObJt$r33*(EZ6c*eI7Wzmq0bG5@F#PjH1v} zj#YGE`$P*U48TStZvwG}kx@QC=G3&Ks59BCD+rt1ME(9BKA~gSPG7l<@Tegq1FY0e z*q+|HvaHOM$|oLMwv3><`RB&*%*_jz_(}2a`6dRI!3dgnIk9~2V3(n>+6N8nkGF$0 z$7wm3-;BeC|DZ-9)8+)h(Ipg6PaeAv9zoNH059vxs);uS)h$Kdr}>mRj>S?lV3|li z9DTBjZp(N#7*n7=q^>FI-|b}Jh|QipybBGu-bC$>Rb^*c%Yd$^FGo#5`pS0YY2+;l zQv5Nm2l_5FB^kCxgOLQe-k$5g~ z-gb*uZQNxVMMC5u02{TMpC(>dj&Iuzr_iJFAhvxCD;AYe^E0BTYh~PKg_Dldcm{Ch z!CQ?MZV#(mNgBzAK5<(gSZ=4Tr~7nT0a`oaZFPla!Sdq?KA6_%7el~e zMDYwFu{v;ZIA`P7GSa5P}G@AGC|u6O@iJ zlB7>07*KlocJj4l53vFn99o=K;!*plna@J=YoGv3exgM`R(|8r7bZ8ZZ`XJg{*c!a z-^mjv&T*nZg?L70M1k8MhdP{aocb! zWndnNTKFIMgP$HWug!fzmWsij*72Hxkb9g4TqWhw>1W=8OE>0m7{!_$rIWkwBe`nE zA>rwGl=58>uaDaQ$Mzl;Lj+55>zKfZ`TU7>l(tE*R|ES0`4fe;aBlzWQ`;Z5d=e{C z(=o}j@Hpk|_isD*kQkVuVBC#?p?s8`yU)FFAiuLZ6T{DD3_kBJN(v53DpZgg(yZ?Kpz-vr z%-0-yV!Rh*(=V{ldyXGb!koWcK~?!U2)K3wk!XyMb+04_l^pR%o%SBFbCk8KA_W~n8dUKf@f>lA3rfK zojJ~%il{+k$_Kx`va(psQsT_v zoCeahU)OKMN>yYb9MecqUXCl8P@Mq*gV6kCqkG~-J9`z8AhQagseUPoIi8xWUqE3B z&KOBgKbX-@(G2wDg~(5|ghtSIYT2oOrHVBcvk*qCG1`QA{`Hvu>=*n^AnAd6wWk;DDu<~0_zo&V?d!16utv7P+Gy0%1S4Li@+7tisUrs%pN7R4zTnpinfTQGB=iB;`9Ete?*bzmTpi8 zs76PQ?QpO%G(w}sB@B$2m}GQ-8fzYLpFSh=q)38?jze3Op4(mZF;cj?Q8lL>omu3< zpx5%9U=)wHSKh?Hh-#@eX&OpmZ5& z9|EN)e3^X_56)aUmgKu5GPk@bMUTM7-`WLScO2t|kJfK@2dsk3N48=xD>iVE-5wpQ zKtn@IW5)40w{Vg6=JUcO>^@OR&Q13ceL)hri%U_=OS!59)!3FU7s24rFc;xX2jg2@ zByOcg=jPTuGQ796`Vqfsm#0!Vcj~Ew9G#^Mz^~X16|WwGDt?ofDk(Zf$D?ab{T7Gq zTqjxR6l)cf4w9_(zHQh5gnLB#Ik)hOVYDA(Z4cl~8!s&b;&BV@M9>6AASz(qz(|N` zRZRj+9{d_4l8&ICLphpdu@WguqB*2ge$qe#c_Gww!p~a~z-Vp6H=&j}cJYIa`8POyXZQ1`uuYffYLJydC!dnS zZ6KVEzX*$9uv!_Z}$*uaG8%+wS)LY4)1TtkgT`wFvz4NYsT-hnzKhL;9lZ9KlCR*b`}F(ORlo>5<*O)K;M}R204ud_i~G9nNPs)Ic&s-ggeNKaC0$=H>&mY9CE+gfreY}zUy244wWo4h z-{8KG4lh|{;Ju(dv!b2-p`Dq??;(t+s}&Mb>(< z(nQ8lG<5lm3G$XIo_dAf%6u(Q7JO2-qzX{+-I|%DfM(FIQ75XEtz-#H@Amsa{Up4@ zska_Z(Yd64r;=B=z(7E7k3{p_^w7zp_wZYItuI7wNHwthDHgBar)R%M?JEOJj8pS- zWrX!aHU8~d&UG)$W^mEBbGr{cRPmampY-OpHnrITWTFa*$lI%CnJ$z7rQz9Xy|!BR z_Y3;5gTysbk%{5!SnBvCf~_D|PEp&9!#z9~FK4&jA~HdnlR}Y*^E23ri9p+GsQ{-^ zKjC?sFie;0X>yrTmEyD;UP23p{J07pA_wGd1>scS#~-mqKuXlB$2ZA@9Qi;Y4u!9r z-XYA+3%BavHg&!8!TpAHY|0NqOYRQxM)hu~_Eqd~RouO>H^f3yh;+$q)4cdgQ-V}rHq zW~-2lhRVA2KCh~eVKiXQ74}^XP2bDmITV5@Fg#iCJ#r^i@hDHBN_e%5@?q)Rjxh4i zlbGbyN>gZEJNa|zXAgtxx68~H61dyyl8(h1S}$Nj(Iq!lU4rjZ{%QtuhGWE=BI3saq49JDifX3o|0RjN~(5Os16vN8-09jlbe zSij`wxR^9wsC@+DDrHLlhBO~oDd1ci?zb$N>~m-K98@Xxy?5t#+;)rq_L)-;ZaVey z{lyPooTmhox_$sGO$*)V9jwjlGq(Vl862OJ9{r+j!7?H?<~R0n@afKrS}#}yP+jpp zfsRXkx=1`+iVYohh;Gr5&!2nh2(p1tgG5E~R_kA>dn-Bq)b`)rF>Fp;>kFkM{nxMa z;2b&lOo@c55{1$#8NZEI3Pj28`rIwxd;l)ftyv?Xy|11fzNU}_o4rCv%`H>uWGrp zyuX38DJH3O>sMNC{rT;;FD8JIn)+fvxB`kmIFvA(_h<72qj%-0`eg_^T*T#ig>71w zFyYV#2}lNp6G|H`BHC*9j?B$hjE)Y?u|8m?xvO*}{@XugPW%~DPz+$-mhPucm}X7G zEgkYx04)#6al(R39K<+Lb%(=dZClyN^TFwlQJmwZ7$vXlpMQ;%hH`cM70W~cvg==UkHZ< zYL%FfD)|x0KaYnBNTbyf4tPRuirErQTfx-EFAK~5Vb-H|78#dXaQVu%*` zA~xljEri{aFHz2k`0j0R*og2!&<@-{O>rHf5|)NXPf<*6#2^)6(a(sda3JNNOd za!!kUhtiPV>a(VR`^;!?g7Vd1y7aLJA(5~^cC2l$k^H_j30BoAi-kmnQYuk6)!NI~ zUjv!pcym>s*RLyQE>w;+@*IlbW_Fp4qv5tKgy&!BgE$Zu&QCb(j#|*^E#gq78&$(; z-4P1YMi|U{>}uqa$NNDxQN-hS(I|?CX$rf$qk2i`c9B5X^IHD>dun zI2fo8{&N$U5WZ8kTy!4H%DR53h6=|4_pyt0o9YdFdvm?wa7UlPbQ)lMHt?2}s+J~i zf&sfL#p*A+PC>E2)YuK8+mHlSayab}7%%oTi0z8CrfA~bDA`()oTW&Rs4m1wov7HpG5OGMPd~WtT;b0o51cM z!U4S6ZHeN*nGbYZ?K;)v3#Nq}PvVwFyMXqH1HfE&3aIdhp9SA7?2OK2(w>Il7FnVg z$-cKl0$#bd@a0C}Wb2_ljgB*eC{> zOM`Uf?Pi|f5f-JiQ3aLb0m_94<9@RZjZjO8L)z)+OAH|(s7QC)Wyc4ot#$*41Huaa z{nQ#wISiZ#s`dWl)Xt~yas$lSGG!`xjyD_?(TSuh*qa~z+GYW%*&q)aMaf*+g0h5J z(4R_W;F3b6rR)Xj^)5)p4+BK$gy9hzUUOTQhD?Si*qSf^OFGjCU@hS!Hsus2G5<~O zXO0;W_+Sr!kuYw0`@w+(Hs>TWF{&|lpu`$&9|1UJWUNj+G*Jj-ccqHb`Mkw9<&%5w zIs3b3!M2|~_-L|)we+-vOLwq#9c6#=ou?*W*@nZcdfhSiA&%Jv>VMu)-_5;aUAfn_ z*3#dQRbPGjz%zuJ&pz-v&jKv({PuJcEx=eHnE!^?=zu%pVjt37>c&f(LpNrnZjk5w z+qX|1R+-prXNYxrQHf~WzYQ3C;uV6F8kD*Mnqwew-2>3^9zHJZ(%dV_3YHFaEs;-Z zrWdVgFDtN0;fCM|L`QBkiva1wD6D#|HKg}TKhvXN>mA^AaIeH7d6G}Z--1V^^UXTEY&{4) zI$o#vyf{bf-qvPxh8=Cg5pFGy|kPCNe z-)wWOqXV~vhouZ0!4>#6&cO9~@o`;}yc+3wgY^~EztPF=es8L)E21le9sLUm!HVE= zZF!;z@qAzlCeD;R=nes_+-srU`WSX+fe|b(Xy}bW1A+xC#e-+b{qEo@Y17I9GTyQ1 zW2m8)LU2!xdOGr_A^+oePqcsKyE~Kqad#pV%YHJg6W_YF3a$gzk1O8f61Da1+IRvd z|GtACoJXvy<^B@8Uv^DrzkkrSoiwcF@me-N1OxPvGMOJ*>2xGvVhF7=`(?9Z=pce| z?1a#nf#h#{=RdUkf)u|X2EX&l_UyWrmQDJ0ChnV>E+Fv}L#Ff;I(iY2@R^W$K0S$F zR*S(38`47CK=D9kw2#L1p`yE~*~Bo;L(kVa#_{dN!S@-~xVE8CWO>|(9bzBBV#L!a z)}t8P9&8S+@@g#DtBbL)pz`U#T^)a|J{7o9Av?JkD`Fk#|W zJmBKa8AX49J1RLaP99Y0t2{k_>a|@U9Kwyt4BiHtuQ;-}ODfd0oF=m%81kpwy9V9* z_MPPPo_bAbMONqo0mE;U+)4lnXvQN*=Qq((QVz>fAcz1B8>HhdvEHF2IIY$$?CLug z8Pw)CWrIfEo5l*JLWT(#PJgOIAMx|_HC*=5z^KQ(aVP`BAe^%VK1^nqO-elPmI=bl zMHr`Q#{nftEh(WeG}VH1Kt)mbjr{yDxZfx}6rVAl3m_G}br3x+-upv~9+DFFjw{w$ zq)@8+o1{jkw%Sn)*>&EEiBnv6NqM!Wr=HrD-x(6A%(>T@wc(~kxb^CK4gdL#IXIGc zuLJIYT+Cv=N{KwZE2%7*`pPB}|{6cC3Dw6_xRZpYJYyHR;aw=bp-#v9dBn6OQfIg)XexQ2_*a3AR zYuQhHUFNfJeJ^c{Ku)ltKEl|r;3xq;4BI+XU5-2qxAcvU;pA7HpE{wd?>h7??+VX% z<%%*LSufKC*UH{EPd$1_VC`_7hr6`mo(i`>A?Y{`% zI5KPjC@mGW3v1tLhkDKRK#l8(U6|U*4Kbh^@}kySp)!h&t&5KHB2B>u$kb(H85JD~hsfK`a|vi=NxR~}G?a;1C-Y)e_EBFejij+Y0NrZ9#2 zo0Nv9fafg{nOC$Dl_Iip$>o26msqNCEG{mZOokjeQ5aVUiT55b z5y7cjB6|U*^gELthHEliPPu5)nPa6*S<8mzDHUmuq^AC3uactdIa1^tB^wBhz_YCK zrJ^8P#hnBCp_X5VsYKm$FcO?*vrL}lFP_!`-?DujW+Hr&8$WBxE@9Y^R$!1Wn9ulbgh z{xbU}JWx=$3R}Ql^fF8(RUY}yI`Lu5sWzp1NoqBhP^mCeq1SUL2zNsBFaMfbKnD9*(b(=&j z>WY68b2F(*wd`{HR3DaD!bvuQ83JiYvKtL7@D7LorPGRY3KhmYKBlQy5r$OU313gi z7ON>vmyz3agtyeTA1oBEjyFB~Bg{Tn#sEjV9xu2x$E`iXB?RuWo{u67YkWes+ZDGLDyHyMTK_ME~J@)qF^Q+M6TqfecA{V~!tPwzhrBn+F`3zp~v zCV}(OLr8Pq8`GZFKRUhrAk9!;G&EqfOK3p6TH6m44Rk!wZ&>1GkHq2##;lL()#y`F z_s7L9)z^=bUmOx%O(`JJ-1+G|R@su`{MSh!7|gt-6tNy$-nSfpGjtTD4*I+^#0c;{%1=8y|HcHu&tfe&4eJFqPte%ntYP>0q@-1GZGN=~FRw?&P z5oj5l0w|!KN~z)|^HeEGZY2CSD?rP|P4-=zUcwDMeLlI^9(pI?&c_?dRFN#nOSsiT)5NIx$+T`;W zmDBNj#sb-*6nIn3nOyA;{B;C@HG`T%PvHx5SX3`Et=!V=UNa1xwzI-67HxrA0!|0r zBK2I6n|Dd4X;sd+Ual1!Psn-KdHy#CAOBB&e*`}SN&uJ+sAt(%3j>%gn=a?&w0}IE z6tK#iQ4-iq_F)nb=C+lFUdw(uojefoA<2VjDy>QJ`)NmE;C0oKJeaP`ni}}YwDN%3 zn^7W!dpLd+p~JBoO#&!5i)}rV9PmIb z2~n-3R>%q-sz`~>Mc1fA+(CB8J5ZJ%r6pmG12cCJELqQt5@c_i1PM9ForK6VrO`C) zOD{x-P^@%n>;2UdNj{`emUJkRmK+G#4V`3(!qFY%iGnv)HO;NC3U=z&l0b<^KoBTa zBCRS_ikrji%fo25q%vx?Y+0&}HluX0w3KN?%moxzLsh#F38Q*won?$&$$lc_y8-77 z7TY&?eZQE{aF`gTHu7a8(Gs#9Wwaq)LC*i8^%3VAQT%i55t5wb!nagMCymzn=&9BX;wA4&Gm(C2+ulF^cpkc~|S>U8)bm z`RyrGDYr2VMROU>LIgm>+e#ET*NQm_Tbq-UpBD<_Vxy((-Vg$ivoQS1&P9bl`=Hg7 z;TzlS@P#ez|5~=-rqCl9x&06r1~L`sMq6h_vVfRF>XDKtc&!mWFK)X#GOs8d7}p__ z7>jRIxSq|2xc9`}>&$70))8bz_OrGYouWnA!{!}K>51oz=GnpoDz5rOa1v(M|B8$X zFW(+Vq|>CcyN$rPNI^cf(TSjsZLDS2Es7H+H6YGcTi;?mL_s|?UE0`bw(jhhifo+B z$&c5;&7Zf@#9(o^zL=_*tv`{3(TO>R={>eXBubTh!$iw0q9ODN9MOL>zjvg2xX(gY zp3n2CGkXu5+V)`h$Ek-NI`a-0(ww;2Cl^zcos=2<{aLCeb+3TrU;L%vr_hvn$Ni_z zm0A~eTu+8KTE4me@~JZ~zFfQ!nmWKne&w$gr5A?B47u$WKMyAL9aF@FHbJrSpFcBi z;yI&j8VJd0pI(9qrCc4q{@F5>jsNs1C!XpV{UYJ~g@Zp|iWT_&+`^>k5Qncu1c~a54PLFZRYE{2Rab z`GJ&U_~{_&;%mw+e@YzeJD>E|w6wbbn!4xMFMjd!0lM(2rM3YZ@}EDsq%qtK)72<) z!YUq0c)+Nd1r9K1vxD9JP08#!L7Rc40NsO`6aIs;Ga{QU-o;>ZokJ3XbvrjKMZScq3Uze zv2}3I^PP+`__NbS+`0d=>1z;oTX51PVV`A_|8!E>GchO_Y*eX3!=6Ata#a( z7hhy+Ik-61NAs8M%1Tx4BQl~X`@2-@K3}vN8t5lRduIcoFiai>*^1%8CgE_m!i7eP zj$24MCU(IXeQY~sESTX{^^m(lqs3i_EKf$}W#<3FQD$J7Se$JQq{u!Ok7t(KGEBG< z`nCnm5p99XP;!I`ULq_pzlkVm1k4jqn2!y$l0hE;2>6r2d zt2qti5aVl5(p!KL$EtGmu_gmQ(pbt;=j0DB^9Ur$K+MXPVvw9xVLgMV(}I2_o4Ai* z=?=O>C)c+6tIae%XSH~RTe=HJFdHiv9C%n}#XV+W*kLb#2N(~10;~@?r|4AjqpPkn zJtlzZsggaj2qDD)gZgX3Toi#D_x^6q%B7zJ3ol-sSC}QJ)pWQLvhrmu@9orM2c|Y|I(P6lMM&xqUC3du?mUI}9!F)b_RKo`c+%nuXt*xn|)G!zBmMaS<5-OB@0t1a60V*9^id zJJNUTiP?|`^cHSnM4cDOmS+j)ljPhQKvb+iV9BWz;t+A(ZX{SvG>ud(fTe_*;E5{Y zF9KfqVlP)owB@xiBQ*~_yRH~j490jU#y|=1tZ6qQM#=(&we3zSOV}xGN8ym`E0Gvt zW^HZIZk|R+{NIU6ssbne03jbE&=9-@l2lw`s?)s%yt2`ehWMP|##|N`>KnQ#g(?lT z2sY*@SExuwQ@bp8XrIVh6r~$L0ktB|Y9+hk;S3A$L#s#Y zvJa{s0n-ejh2L!Z7Ie~HOepW8X-v;$A5mj+6sk^hWlf?v1@-4+ z*PC{JbiL_TVPNNA|M%ps4t>lD)c%iIfl6{Mr;HPLR%4R-*mbFcAG0nM_9fWnl0NkR z2es<|`siv^;+GQxL$ZI?>EcOyZgT_|&fZFIep=xfiNhSKuEj%&s78W>CM9jH()FfA~bC z@%*o(d&!9=tYM@{b9e&k)dp0hLnNdrsidk;{g+qKUe7LAMGL%Yn4pfNuz2ZzEmcia z-$X?4$Xz*dRfnuH^m?d9YuPuQvLSh#`7qHI0o?dVMlq&O?c0O7E?ZqliylZWoii6J(XdgWJMLOXVV&9c%^;ah+MGEF&sF3{mUsY zU?XHd7K{wv4D_Z>nlmQ$fu{aO`_go-gz?9nF*sdFdL@@Y=>kSx2_1q%#PLzar`#-n z2fme|WVR?xouWRxK#cUI76OC(i;rrh&yO6Yu4c#9jp;r7WSxVpB$NbyJ0GCf%F>Cq z*&dcx058=%r!losu;yDdZUK;a1bm#D9gWR<6Uf}z3W^g%F85mY;{}0DNEUn*K|}{4 z$$I#rVCApIezz0?9#6ESk;4=Z7F!@j{%ditjdVrXmpI%AbWq7!iBsQ%F+sIrsYYta z^74mkRwCJXcpCfD^66{Y;)vN-<*7JoiJd%6XgR)*BWWfs((7Wb_|Di|pbhWHcmf>g zITdrQc!;u}1;SCsM2AlIH<$Xq%M(dWp)u;#cu*e~k5a)$A-w!vc^dHcMtn~(e9WXZ z#4`0{Z89cm*?(*y1YLN?lEn+IpA!#7VSS7@I~ zS2w7ZK!pGAT8n`@_zoffiYF5-jp~{?j=ixKEwg^@B*uIm8Hc#I7fCs}ox_0WmwZzZTLY;hy z^3YO%PQLYE`Z4&Eb{_(Gss(yydYuiZeGk8LYAvD^`n&w9 zGDz=x;LQ5BCwIJ=x~In1W(#}!L8&?&A|75H$b1j_zAB$W8P^PI)GG*=P$8s_w@rbt zB6hZtvnOBmr=3(nq&OLX!+bSi=I#}gosI#qF%Fj;9PIIB1IrCNbqCrsXgHw-FF%}oG&{r+nlA=U>A5WXc$VX{I+5B6as2bA(5kx0wJFVi- zKin_Mj8#jj4M{T!C8xXUtEGMR%<8?1w7jNbfOKepV>T8XA!=NXSs5W{pO*`%_NNlJ zqBJ&{i-?EOCYd;TJELLqs8^dL!vv=Ey0E{%gL;=YtxD#sSZ>4;&9ePjdWU3LXOaVg z(zf3e`q{IC_3bn@>^+5uI#r0oivnjYp`^8z?~51Zi4%8Inv#GNQKl-w|L!fmpCb3o z`Q0qpgGH|?(|9Ey|Es9+e$+}fQq^#(Oz>Bz+WGqr9XR*Eqo#4c`24v?b{3Zks)ll~ z$?GakJzmrivE0GUyWfB8zN(_Jwd}?)J>3XuTy#empjMXB0+4{|4NK6~5|JR4+ zUhI7m37c(kr8OhtVVg)1g3r^1Dze7!P^?LtE&>NdphW&F zs$^JU)$MmZxHXR#QTD=uxW4TyEkvgcn~t-0C8frUwu*3;?>oO%Y`eR{wqw_Y!Xt*+ zpl);LC=twvRvqM^#d%Cj;UCyRFz0mwJp_CR1Mw&6&q{TEN6e$jDDqlxMTrp68yk?v zD%wvMN-|zKHKSNh*@{t4g&m49!lW16EvVIN{9L|Oq~8B2$_Y1T>f||E&e4srlE?sQ zjVULIoXKHNuBKKT!g*BH?U|%r$}p1>>3>2{R3DjmgUa^^RhR-+BP%$6dz!~~D9!`+ zAVr0;ix+c{#-t2_>%*9GrVG@vuZOe?s=#mAnDn%Aj)qR9F2Ad+s^K26JPu34&^=#U zjDB>#UUE##$j#n}(F8 zzfAf9(W<>DS4Z0(xy==KB)rkCRH(H&2cQ?$e5PuM6|+sP#H5}e^f^`2o4 zE3kRx!9{=Z>l8pyRjIP8*(35KzpL8lVU7vIa=!PV6<_7n^(MpDA;Q;V`K+^(L3C(_ zACORQab4rM`6a-hIyF0GOtTG?`cf&kG1gc$JBN{SbQx3Fu?&ahs6Y7p*|qqncCyNo z-JxY|IqDBSKe_SQQ|q4RqDx?1`QmlSOqPjEYKqv?S&>)Wv|>2;PhEQ-&=Mwvb#ZfK zMLuz4DF^p3B_6r;%S$X#9rg`=lT8R`1YQ7h7GX91vY|3}K`~|HM;a}(SM;X%Ylc)t8}Cl>7j_AkuMS- zMZcYUH1x0L_4j9gIl1xqv+JKv|NVdkY|QA` zkQ5ks_G4;XZok0*e_Oce7gUm?!f!3R@yzQRI1*34dU*2b%_&kNY4GaP0BXLmhKL*eyKSvC3U%d`|a>bWs(?f7GA=O@2J_Z%H0h1Mp5j+@*V z8I=%PWpLV%F=vmTfqA3%SHoY%aYRNA>aWYr$L_QqC64tu+DGir`3#Q zS4*>SJ}$fk5&{OjueYb(6Fx?KYVem^A`GrRD7zcs%dv&g7CDXM<(39(*=?b{Vc2m- zp~v-k6x>+T$C*7GI~tozNigxIwl)`~HsMHvXNIK?F#6TZ28|Jc|?i?mefU-@{CW4w*WOz=fX{E%u%h>;4elh$L=pDrZqln=^AOK+90# z>-}w8MFwXb6q}ZRLdea1>Ofnwet&xs&Ej9dj-yQ5HJ(Y6v|wyg2ACx>UI&Wo*05Q^ zXjvhnhU?AN7uB-G^KAMlt;76Bcc)w)o#$VcF0+c4KHktaxXa#s2G6^AD2~Y7Q$GD6 z(S)iswtmRH!)v{G?ZaZaH+j|z8C^(Q@z=8VUl5l}y+9&oL z=@2cC%RuA-7G%n_SuFW8+#+q_*$jBE}0^ zh0xXVO}G+2`S1fLo&Un7Ns@`0RD0f0`1q+OPOZJ$1(ig{&ss!~`s8XpkI1j{&|^G) z_NgaNZQSfaiN>8OgKnsWMG^q)@${QX(WB!tN3em z5?LdE+BrC}YkW0M6h5t%t(=ca&5%|^jw-h;#b-7;9@FluDdbgEa%qfk=GkOZvZuKW z@0oD^6jvVZTPCHC%9@gCtLlS;wd{@sourWl!ImjiG>Y% zOH#^KW+`z`f|s2qq2{9=x=f!H3`D`8(caMEq3MK{dhAX@yOY1+tOihy=mObJ+2X@0 zIIPNT4-hzHb+KAZLn$O&N1G=5rw#&)mq}fj+PZ6M!$FlKL+3nqKcv)8`iJKTt#g0e zAR$MnaBAn>m^2SeZFtpWS=ncp-L6Gh5?8i4OkByI%33}4#L!^x%6v^pk5?cb@H(s5$=A!?Dj=TG8IRc&8b8e2yo+n4g+r@ue@AX(eA(FjFmenPUd~tyMM^h zr>2owR%Fpu6*SV*Ex29~Pw9+cM&!6)a0ey+$$1(4*Qh-3vve8beT zf3)MTD);bc5x0Y+nPtP$LEiaNsP{lu&~n9A8buAcsU#yYx@y_~lFjmxT8l#z=>`iT zi9C$LOgNuVyf|}X{)qW9^4p~+xZRHZz^Tlh8C}ul#(?PqV=tc*^YP~6D(@Z@%GNw2 zBgDb1UYGfp*mUe@!1B;}qR#0Zeai(T*R>A&T`tSb9$_`|qwtpdiPK?$RY$ zK9z_W<`|~{J&W|O@dljARnJWPq_$V-liEMDmaRVJscXCT;8TE;k&xM$ceYJFxWj2* z^JK@eL(|_WmWCux@Qe=MmxHj1JEV<`xy z*Ckj-`*6zlwjW7JgN-Vi7#9|bMz~bu)>i<7**?Su z7wI&}k7qiZ%oGiAG^LRJip-~B7NEtpIa{O-+uNK`Sf@>6khm5Ch_YvF8Mh>1r?IoB z-K*8r-lwj-!AtV4_Fi>??5}0(E8)4g3O#(*Db8jFoz`Mq$yC+oTo|dcAE$kc8jv6R zwkqv{Ct3n?c+SG^HS|gmU@LZp5l@AV@PU;GUFb+BEX+s)cAxfPVw2j14t={n_07(| z=niBnavY}Mo3g>!lraEDk4TWl5*>wb6ozC-3htfr!^UDrM`9NpyH?;t_H!$wwC*i2xaU7@?l z8)Up(uuyM*IJgzgJ+Lo-f9r;+-#@D3I^7pycDg;LfbGnu+G2bix*O0!?d#oQcpV&= zTe5{5*CF3aoWCgO_lBsNc>Ls|l7D|qPO*3y$m3&cpv|NHYU0Y%59Ey5e&L%LHTMXKFtvltEmrO6F&Qi~wfB+Tw9jFihJBzB!(!Ne_fL zvGHqh5DAc!{k0ut86`wGs!jvQd>ZjPGZ!LlnA`c(qrDG^2}eoX>f>;o`sK&f!J0?)+1A~a8I@+yp!2qy&Iz+JL1D3ES9X-NiJ102(( zZ&v{(wZeH8-ZzKOn!JB|1shm^0`O1wing(c*d7{J!_ zu9QQfu|@$Mg|tTbPa2ae3X+}jXG#~ZeCYRa25w}{AFx$>C`IXlGeB{M`^;64A`PLZ zT{l8IN*pH=a)qd_+x6j|g@IeT!zv1%L?ceg*Q`JdaNSSJE_*vFhKk{hgrgMaB9?oZ zq{4N$LScLS4FYa~mAk_`r37x>r1kbwG2N2~ylazdWUhh1!JSXvV;+$<=MCJE__#Z~ zr%IrMjSp9$l&(hbp|>bxI3k@^qn7n*B}YQ;_LkkVXes}{!f({3SDEg`P?~cRSgt_m zLf(eG5Xg9H*{|^HMY8U8Y3aVkK--dcQ{)oAd(?)Q9L#SaCQKm90igK_*rV>m-re4L z?H;zJ?0TDZrTSZ`T49D_^Ja;d%nwVzG$1dqtNd1CtN4uwq*rU=xjU|P`wL>f9=P_oo(83f~+ zyAI6{2G^x8DCmQV#Z(mK^~Hq$L5nG1Y97xFDMP`gX%E+Ga&zfCHvi@(hs}f&*g|Gj zUf{j8ordwfhZIobf0HI4szRj%7%s=05Jyz2pqBjyRal~zMlFLc3T-=+>Y(fq}IM4<{wt zlYNEnkA1{_=3A>}6Pd>oJKNRPZ?86acH3*GUU??;9QdlU!JK+>$JxgZoIJSs%-e4# zfgW%c;C+s)C2~~lwaa<@x|4eko!R@;sa^MQ`{V;#C+|JXy{V1Udv=|E_@2opC<^}6 znfuqBUU!Jfn0Rhay|IZF00yOyln#bX;VUYJdOVM2_z0(%;Q-MW9J$ZW6Z&&%3$Iwq zkNKU!-1qK0vgAh>u9)23;NAJz#=A#sZ@ZnTf{+|r#9Y9Jm*z8&mMXkyafOIey zHN)_Z*Ov|xXlH#2KRa4q(cuVMdTjd&ymL-N6RxvVMtfItFkzSbs^G#4d1Do4Lp=HL z2-Ye1QkfLeMo>+FzRR8`e}YH=^(pDXYH%Z^V~<>fVPS(6HaWg))$r&b1sve4gsJ)X z(N$xv=B)dKt$kEe0kNWQ8n>e#e9PG)1R6$dR_51n8z=(>wpuRZJwQ7NbT__(Vk;B7 z1=;Pv7c~NRKV)BMh|57jj0h58JU0CkyL-U1OuVsd87Fyy{m!@Dv8)%UQI`w5-oY+& zXS5GNxAwhwcg)Go-#6p_;y+;a`Ib3hFLhDz&UykqvTrqDne?{7P%XZe{jVkpuE%Tp6!P=R`vnqGQlzkF{-ZU=o*3^vzApa- zUXvbZkk~%OTY>oK7z482JubLAeHb4L6>~7x1&Yu9rzGOS<}Z9#0u2Qj?)%$B zcq8n9rS-nMG%oJ!ihDaT7@4LV#J5sL`tCB|dP#V5$LkW_jn>a|ktWB-;KY7p8HW!A z27|n2r&|wghYtwe%TdO7+56%?|KC3WNNpOgmjH+zyk4AGpZ;X2%xZGA3DowQG<1v3 znafRx`2Fv#C4Tp2C&!x$K$!-DvCCn1M2dbJ84^Dd;7bfj)MtIIIur(|6N+NZFMO8LJRmDCGxX z2^iEajWHR==JprXweb5F89Vp}LWKcoQ<@w?!uD}L?8pOBWY@&p0ydWIW2^Y;&`Yqv z`f_Wo@K!D@)l1I4F`c!|N~7v}a6fuau5l~3#Sv+P+u8EfS`2lflGD*{ub7x_9O~Zh zFTMb)PoI+~zoGZ+$F{+vwdD9jJUBFGF2JyS9pKY$L}lO7Aau4fIDa_w&>xeh&)@jn z_{cPRJCiJZ*`Kp}Y%;$&qbh8LjrAgP$=L&oUDmgU13P-_Y;di7{7W%hSkX5%$Uo7N zNM1K#X8aXN&#AcI+B0LmO_m!0GV_bIsV!Dgr|cc`(V7!StMGdHOKo&Zo-e=smJfWm z#>9FZhNMDU${44g4dM6n!O>%d9QJZL@%_kb6YS*xlBeHXJMGqhOhIY&cAf;^6k?Ae z;3k}446nF@qD>ZyD91q1E0dcZpS<@iKoDUDlHW$t^iyvm_~^M4wwJb+EUC*Ayh0nr zX8QXJ+Dy&WxD+DSiwBt$6Rms|PIH|Id@k;Ve7;4Q+DnFG?k^`O#>mLpx8aQ&GC=D( z?7Zva!f3bfk*aP*M}C+Xx@zm)!q~`kdyxQ^0N&)AOuT?T7_xd}jH|7^pU%8VvHAw7 zk17?Sb)>@l|5HnomBR?jtW573=B<5$PrHF{ZEZayw1JR2w{F|i;|IuAVhc)ukI18;J&J9@SIS2io)Z znx5&&qHj~3ZliSFcr>Edwu~9|6BbwBpUy|=i?)mvDh>;o$ETMQvoAnSn9}0Xs4N>? z6qwXz7tbgU!r@z%2caCM#M?A7;3pqm23TirZr}I(4zTFM?Dg-*1@Zy*y7l6^_~3`z z-`2)87rv*9xw^H368RA~?*e)gBitWh!+!6BZ&(|KtK(2!$R@QX{^P&ouCzB8(U%>{ zsJX`qLj2!iWpDT*Q5 zu%h46^W>0syMDiRSDB zue;eTY#owaH03Tt^yZ;kVKYZTHo8&HY6mpzkRM^*DZ8sBNQcwNfn84XPINZBj zkp#hS%$%?%zM?ye5gV!ZLv2Tsbk?qaN1rc0ukN!Ib0jp31?&UaA)oUa-TnT$-F_>+ z)hof+U!@iedB1b*)YH$l<#%3tGw28ME{UrQFY8^2n_R6F`9Z0YR-KA1bvSJlJGV|= zIZuTs86viZp7Af2actjH8ldmJ`&-NX#EW$Fy^Sm`+e5z4p9YcsQ>J zV*4Ae(lEHH?~Us<^9JiHScAaRfwEKL&g$o7voByBTG;o$`8EiotE=k~8tI(h#j9vN z>98*KL|T{O_L*ew~?54@6ps8@7c$_b9`PBJfnvh#4DXt4osW0#Y$qw`8^|SL``b@3^}wCl?m6bb9L( z{;TA3&CS?A)XvS%zZ#lmANkG79k2_!|67!p8Sh=~91=ye9eG4%2)SmkbPd;uP)xj? zE2XS=HHWPBjk#=b@b~vy@4Y{W+*|;%VFG-^3QZ&3a*atX`^f@DdIwZ?1;OR)5d5X= z6GMjOvy_)SE99$&JG~vmKC%PHC%@|9Fltf_+z<&LC?_ZqU#}L6-Ry-VW9b$S7m}QL z0lCh7vqG{dZIM1GYDb*`wd~p!GZOh92(cNf@B%&sL1pyjzRkZrr&kFs;1(4tJedyU{mCxbc}Ix^d3m0~x?` zD#}@azoU?09_?e{KsvFCaa~C!AtA9oz#!1gu|v9IU%L#e0f57M+XXYK)FF~mDJAWk zD4*tbqv(ButX=jA6BjlQu@mC=#zN7MpVZ?9fWuw|QMZ77^0S}) zjJuTwY3!wR6Nf584F+Mr@~IelI>8zNPyrll;zhAwMD`VS5IXUa)CJpjVqfG|pwITK zMxKI<@hdrMo<|~t8R6VHd2km%SybehCX-sC?s^MO^A{FdqgP@8lOsNg?gp-#-OElQGsy;hk zsk$Jjl_SU3X|@*S3&ZANXeV}QY#EN;LG;cZ0CPe)F@9-MaLClMh3N6}nH(Tu2lP*Y zJK^%R87vOTl2>3+dDVyC+rsar>MKxaidKLi+E(E@ow!*E@@V+o$6lSMy};Q7M5kfD z!K>n+`F@4n6u;|TrD}u!c0S4>@t&USucRpb@opBd{W*E}llt?Mzpk%BXoKZyWS^Sf z8v#S3*{A3C!f&M1L;07u#-tm*X5xkH-&vz}32KPH1ieh{$?UIvj+m8AjQ#W3r+zhd zeBH5)-SBbtW}l=v+AjwOcyH?U z)*bru-!2C9j0*`~ig^LzG@5<#=S6q_%{)PY=;~k1^G{Gey+&sCm)_6plfNpu_iyHf zzWogrd9`Q%dI1b_gV|4|$A)ty2@)N~eS?MyPPv4bIIC5Z%W8)9K~`xec#T+%@hNk( zaz>wuh;ilrJ@oL&quc2m5O6L@m|UIi^;0_G!YlSyZdZIt_JH3b1;zkF`rqvxKD zEK}xz*!kq2_rESE&gNHu?M!V$RhYlH!6N8QxBdz+qGZ0-UW0D%&$N-0SBIb3cxo z-t}&_{Kx>#HK$bv96R2FL}=gsQA=MUExok=O>=?)Zdpj{=ZRW5FjtiWdy^n zN2RgUvReu*zEuhgHL;6WRN|LiUGJWFMU@w;(jcfXNgCV~boxT`;3ILzkP{|Z;A)A) zZAW<^jVQ{C>^kTh_;*qR5e1z6h=QT!#B2156C7KnNfGO^NbpBYAfN}_t_h)F0ZO81 zT=z!#(3%LEq(Qi|&~iG7f?t(HLEu`T?B5}(?rk~uTUZy`5;sfoAlwh#Vh4F}t(y+Q zjtND9?KUQqo649X3Hip9p)o)5`r-%Ws^lLsI4y>CIM$t{P@ZhU}^e)90) zlW%V=o9NoS-$;)slg~2s!(qSupo+Gc{T*I$!$N_G$j3vC#nR4?AD!66-hQFgCMV&( z(L*`diC21JAy{qp)y>e(KP(t=|0;sg&hf%Vr`6@X&TS36T`LCMdk>nec;vygr%i6; zc{~h8d4NqHTE3$*P$@D(hJB44k1f&%Adom9Mu}y>H-;x(;SB;47RG*P_QnWO!Z2ao zMapUP25oJA3915r#mO?hdZ=CqH4cuZWXf;GhLnaL(M~{_O(OVvgBKvY`IflJpC`}a z%)JMu$qi4Z{WJim_#JYDyJ`RD{YUug$kd^2A$-v49I(@UI!M$FB}i1GN9(~jlaC*% z_gDmZd^x`=l&qZ`6aj%ulhYt{XmNXPn&6ERJDDgwzhtzPFIL zQKAF|{bb2~ppxy8cUX>u(86c6Y)wJORoB3WTgyI^_GM7UKbL+e)a|^wA;(&GBsjy? zt>&6?vCFWaea~P+#-Yb06L*Yj(uBa~HM>iit?d95;#&5Fg`8PRGjyHR)--ZG`+A{) zPO~N@eY#xfoN=vnX{{OVPLL^ZVR4Z;At}qMmR+*Y)=JU=)0fbbIjz*AnsSr-&OnV* z2%8xB|1M4-cq4y~m$j^%m7#S1{x%EOa7I%d(I;$f_BWWcr}jTTdCwNNs{EHT&mW$= z=YF57x!LFaL5woYqbM+opUndqET6%-*%uZiVHDy+7_1|6v%d}RLW*7e&U!9UA zhvlp*bn!axU1U`iN76f}3pF>p_T9&WM{U3FDx3tZJ~eHZs(StILE5`n7}-&A2=NzQ zHCUGCX5U&I4m$rza-8s`Nu{%0!WJW%L!O3_q*?J3T&EiPO)7J8>dnKG_wPhnqUzeY z$6U0Yb=QPiS$3vL^(`HD{*I!#$M#J=^R$-ewZA51Xl2Uog2$}HSr+1o<)SFchj#YY z>t)!Mj<$4`xtdxA+?MO4aIlNBjL_q9B8_u>=*x$a9a(;qg^{7c%5qi+7b+!Gz8?m% zbSx2%qhxVoAe>0l3~rE`_CkEp%BxVWNh_-ClGY(9IUL`&ypL3}@V=tX%B`nf-c`~| zTdM^Wp6acHr#fm2d}i(+A4i~55R8{f=qS5=HSFu+U_iarBFwf|=Y$^GM@pGh9?WGs!I%szavBga^V&bWF z6G1;`ezsoWuISz`Eu?l&%u zxUUvnz`k1d^3?BN(7viF){A7)#!Zedrqoe$=M2% z_=W8`T<(RhIA5wN7{vii;G=o{%Y;Q?|;Buh!rOf zH}1F(w+E9aAH(t{9A0?1Aw?TvoH9lm8fGGwgH`hDhmv_SMjOJDDcW%BG_l7E zk2oZUWQ;&Am^K308g>XlwP_-e9(YK8gbRs16gOXZ_`y69Dp+xW;RnB;O#M#bhaVk3 z1jM2T1cedFwS*uD*(hAO5=?M?O`q-}bG}sSW`5@|q_IAcT@>OE=L8yr1r= zL4uAF%@o={r<4Y@6#M#RdnOmTOOKHb0Zk;ZeDsQL)F_n{5eppGL^P$=`D=3;uC~5@h9OvT8cw&uOE`vbuVj$m$q?2}8iwqc_TOYBl{v+E9+KumqT2byjTngJROxGUynDrIJ@)H~y71 z?J-!|op@m-B=;~4qnAWq7C+#Ow=9z)He&=oxOA+faOJff5FGM#0p!pkq;zhlh;6E{ zq>`NG3#+SaNch@5^M)6+HI4M482RmSUEb8)$bO&2IBvjsuw+Ag_wi?xQMl;^*1D=W ztbbdUMJqpW5d#9%w)V^)i3Yz^^{bg1SQ?YSY}|8d17MICMxI$Z-0;ZZMHOn z&y>Xg6`eZ*sa(Q}E7rLc)6vRv408Yr-`8?Zlp@Ol z?r|)HI$5Fx5qDq7S7=Nj3SPY8 z0rF-?h4o+T2#Ol+&(k4<7W&~%prF1M$B(PDANBa@jmM9x!yo(U6BOrl|3wd<(%Dni zvvu}#(zE}i&z`keXO+D30c6#oKjI0LH28Q5t)vIbEGm=Wy_~D9#}IX1KFl!`o7O=@ z#B^utNmS_YfQ|k|52NBuAK*Mn=EA?&c{HPeF__MylI0K!A_9I)XA=6(hdh%?4cD@N z?rf5@ol7i_4|y)7IJzlctcd^IaxQhWF(Rm{a!|D$QyetrV}Va1j%~r23hZ;*v4`C9Ui7nqECNy1GF^ z)F9gR*Sv>rF_$41p?nXE_YyUv)X5HTicqUtT&rzfaQ_ySv$W@{A>42HujMs#^6e+t zq8--I*X-UzN_OtKE$1HDU0o?(Eqkj+$#5dIrBS40*RqSR9~RYN>P*S;+|_Y1&0KiX zyvf95zGC07w1h5zu8Po0bC^2hO#oH?Inm`~^%h3p`ei%LS(fAWA@VZ3M)0J(k0Gt4 zsbfmLFoqLfpR_zSJ#*%d_nhAT*yNt|n!<0`>nGoQHQig>2uS4Q;b*yha_>vJ_nX|C zo62jwpk@ZdmVerb=cRXOglr;lJT#O7x024xSys!g_wUD8ORkVqLPOx~;WZ926}fTO zoMl~<4;;uRp2TfJxj|efSSIATS`Se=z0^edbW8cCOeWc&ptHb`S&E&Hmfsp27UbYs z!W(HLe7)0%sYc`gsWH$+FlP3K<$WCBsp5vchJdp@B1k-DZQp1UPi-yxb+N)+J+t~F z2BS&l{{5%6Q}h|Uc!fKb_n%nzJ0IalIZ;g!xh1T~D8z!zUoqX!J+No$u>(_&>27tdCQxET{QVt(SMHRFg3&1KYDEA5J_`! z2Bh(HoPy?38=8q%=4b|1#x-yDGibE7njcuak9xLS;2KhTT(F}73(A~M`Eh7BfkqPo zP!MnXR7nq*D5U$Wuj_2$T%+)kA+rHAPdw+=tl$9yO6jA-48-}%@R;$J6`P3`Gt286 z1qK`f1=25bBfz(!l0MJuu~58m&MB+>cJlCpMM+|>2FlU@=pn#x+I?2TQ2XU_rEu-v zdS(xc;XtZAERiMh0&7#Z&GABO$}j=aLUHebW7}cD9RJf!IuZCJsf|mWMVcmvE5GFJ z{7Z#3L)J#UsY;w865>lEgT}<}z+UdP&$7Q;SmKrJt`98j!=EmtA(Y)!$5O4tYa({q zLD);{Bi&6Aj>Pi5J~Z`E5jc#`mGL0~t_K=D#&sgphMKK3|81|stlv)D4OH?z9}fQU z(&X;@7_Lz1GFG(FIQ`VO#^Vo9Z3ty5ubg`F$W`zY=dsf6hWy!ii=7}#?&0f zxoQJP0(4rw>5zctirhkK22cs@)Yg5c9+2}rF5JnZs-~M@kEG6*R7*|MDD!UwHrcw?8dqHWultEYxrVD=)MS zVGaN#RIcz*-->Ha3zd>e^u-9uNi86Jt~}O3Fu;~*5FeQpAJH-u1h)J} zCaT|fbm|Q#wL6to`DSU6t{H3e3?F-9DIxNEL;oD`Ux;)P=R44#hGEDVEFU(!vJ6`s zfa|ASqlSch?_O0YGeL{MRn*&qXokjr(-$qLrshz=4@OayO0`a?zStZ9QLpmKV2(i= z6NfQ+A|QRmDz#)ApFc{0tit`$WC9ewLI{d-N=eur-4g9QYR%ONkDrz<3zewT>0Nt7 z!9$w!qdU;?oS8~%xJb3}zVX}XXWpWOpY$U1*thpMU6t$$jes5=>xYHAckF$LVpH;fpcQK%yUraRJJ zQKphm62&JxO{bRKTo%+3TpxzGmd_jMT|V)aI50G$irgW>>6+64yU7PGVu<*k7&4~G zrU|1zk8}b!Bj&7buu;_(JHkG5G+BPGftMO8XVVnT^ig5Hju+Vq3Xo(&E6a^wBYDlF z=ZjOL&)3Qf^uZnIx_~b~xB2v5==oz_?%j{5L^6dLpLy%dizr&1vh03iuS)v;)HE43 zd70`6Ba z6y)+_BvQ7YH^ux16T=i|PFBqpvmKTt%Tr+zpySB1Cb?h?^jODjUJxDI!nODVT;uF> z;~Ga}+d@{(y_`@)J;=}#bvSM${xGc!S)lBFs=gOQ=pqF%&VoRd43OT$K_EtU0pQD> zR2LHT3IpfZ4i^`kWp;rL^~K2N8VdVeNn2NGn_lGnjG$NCSjmekAgZd>{QMe>*K(`O z$MEe~$1lIq#^5R}VD?3&+BNdn&?WO#fR7_%bvMbjUPCHgyWs-F_ZS1mqKuR)Qbt1%cqDN3B1X4Fh0%q&U!!MiAP7QSs@Ey2)Qxkgl=jW67D~Uy61Sz*S1)|7@XGJP|%P@6m5Xaf%*uk3aTK3BicqZ66pv4#oThLh1wp!i;5pmRoq&^kN zmW5m|9}lzoV7D3}E>dQNar)o3h8M+#+m8zloyuu3(x-fp)YFbcz=S@}du+7yLB>Qi z$R9JaF68Lwxxk~N<)s#Nx0<;+Jv{0@!wE7_IzdXQogI9Voeq<5h(K{eWH-><=+9{> zh5utGT`^S{=zPGyGYQKkmB6rs%FBr#2in(D^P`_RN0C#Mut>}~0&rOzV}r{vgjma< zBUL(`H;zAvqR0IJtnrZl-QUxPDP>8{rNiga7BOea5DKYpi0n&A=(wg?)?mMc( z31pKop(eSMU9vc+j&!rNIK-^^B~@?+VUl&Z2tXldA~xW=EbD!tf2qJjbvqYYUF&`2 z-C5S!!hPRqSH=9R*j&?Bf2i5h6|Kt5o@vyt?5b&Yfe%`)FBw~`kuOz_q?URN7raQW z>U>TRATR1Igx)4^P0L#GTa6kz-1+rRvOJYlhfS|y_9zHfaa`PwkR#cB9v*>vL|;RLjA#Rp4|7;nY~+suYb4~|5hKZk1ei~ z1x$g=$&LGyz9oI>hSZ=(K-~#6x%(&=C$~L*=7m2_)6}MWPd&6foWiv84@;~lBjxhy zMi{&bM5YzX5xC5FE&%ubdKGLXy+j(MfZ^?vv%@uybbkVDdLslpbN zSXJI;&7}rSW{-hT9+FptQ>Gt}ORSYBv}F?xKmA@Dp~F1TgvD2y8PyUSg9A;utA^V? ztr53h%SNR=vOQ#!&~7>s^95vpj1lZmC!~!#p%!-upfIa0o-(|+xCrz_X)WuH zFVyJ}O6rJP(r5+i(02;k!Ra?(T$TaU>QOoX%J@#S_FPvEa zlFH^$_-^`>rKPD8>mU={eS+e6>#3GpiK|4#uaj3`pg>H%|ImSR55Teon0*?7(=r?R z6fEFRZh*<78gqI4<${P1C-i|5L)TzgV)Zx32_fjerjAR`x4n#tkRXl2hythkmo`@_ z22&y~RAoC0*K`}HxN689+t@uW5M@gTfzWnP@`}1hnz#TGW&)t{03>-k`b24EPVAaf zEKSfUp;B9Q@M{?*m7kJ9853hvy$!!%;a|XEpt#Ok@2zjgJnjH8={|#3Q;erj`J5H# zbu(A>>`}1>y?5VxTi$!nnkq+va7DEC>>o`IP(HRkGV#VR6>2KNIKQnTI@s2M!y1~! zfTe^@e3k2oveCxy3By%mrNpjm6Xa1tGzWla^W&kJL}pR|$gC+>7n5N9YPu^Nl*W{> z2_Ai%9lGI);M%a)sJ<9~80A7sjj?YTe#A81p$DM^DT@O!O?^*$v=?*$*)vGeS zCYoYKR*n*|bJ^1u%SH(KJk9Q>$QTZnSdOf+d55Yc$wWz0QapY*^CoOBO;#S^`RCbK zu?$O#+bz~?3Mz?@pGQA!_2{@5Qw6{3e#pLX#~`(s*9_X3znsV84Nz2n)* z-@bkF@b0;36=z?-$T_v`L9JB36z;!xA$b=Qy9QvS7r^Sac!{KD=H29u;Mv;Y6QVJnx6Zz z_s~*;DeX#yRsQ$B_~e(Twr+_GYnJ!);>L4355=pOGUF(gn9)>_?(J3;&bh_RW?!my zm#XEZ{?69K5!rhaN{QDIhwCH_Mfm!bi7*9H2&cp^|KfGPwFi+e3X3&3jbj%+A19!1;PDgdf@u(&ZJiIVARDh<9Ogp@QTIw(O}i}n(xPxQ zd0%ZV(rat&bKxjO4jv}Q%Yz<$Z*BVU(rgGRfW%)F`|y?PRh>T8MR7Gd@VuklqKhp78OlL7EMg zNo+CX?{H@blvV(HXk;nk(q3L`4r)?;P0zTM?M14M9(!VFuyK5QH;EzvrB_$g+%Q

9zD!W!R&0Y)Zpyd+2o5G-fcVmRv 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

x4)BdgdV_?M1t7FU}ls>IKNlf6BeA(7z)_? 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�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�H?s7>kZa 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

j5h_yN4(`Z(zwoll0)mCy`^ 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 z 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

P!%aBS7G9X@ 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 z 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

`$7q0mOk)0&n7L;_vmCI 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

u`~u-4R_QwH34fjNiJ#YXwiBMQTDPA`_yNKP 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

S!LAcQfFx?Hrq0eITQ>_vDsF1 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 z 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�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