├── SOURCE
├── Core
│ ├── signkey.snk
│ ├── packages.config
│ ├── Properties
│ │ └── AssemblyInfo.cs
│ ├── Enums
│ │ ├── CertificateType.cs
│ │ ├── ForceEncryptionType.cs
│ │ ├── ActiveDirectoryFlag.cs
│ │ ├── KeyProtectorFlag.cs
│ │ ├── WipingStatus.cs
│ │ ├── HardwareEncryptionStatus.cs
│ │ ├── FVEMetadataVersion.cs
│ │ ├── TestStatus.cs
│ │ ├── LockStatus.cs
│ │ ├── ConversionStatus.cs
│ │ ├── KeyProtectorType.cs
│ │ ├── TestError.cs
│ │ ├── ProtectionStatus.cs
│ │ └── EncryptionMethod.cs
│ ├── ExceptionHelper.cs
│ ├── API.cs
│ └── BitLockerManager.csproj
├── Demo
│ ├── App.config
│ ├── Properties
│ │ ├── Settings.settings
│ │ ├── Settings.Designer.cs
│ │ ├── AssemblyInfo.cs
│ │ ├── Resources.Designer.cs
│ │ └── Resources.resx
│ ├── App.xaml
│ ├── App.xaml.cs
│ ├── MainWindow.xaml
│ ├── Demo.csproj
│ └── MainWindow.xaml.cs
├── BitlockerManager.sln.DotSettings
├── BitlockerManager.sln.DotSettings.user
├── BitlockerManager.nuspec
└── BitlockerManager.sln
├── .gitignore
├── README.md
└── LICENSE
/SOURCE/Core/signkey.snk:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/roman-miniailov/BitlockerManager/HEAD/SOURCE/Core/signkey.snk
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | SOURCE/.vs/
2 | SOURCE/Core/obj/
3 | SOURCE/Demo/Demo/bin/
4 | SOURCE/Demo/bin/
5 | SOURCE/Demo/obj/
6 | SOURCE/packages/
7 | SOURCE/Core/bin/
8 | *.cmd
9 | *.nupkg
10 |
--------------------------------------------------------------------------------
/SOURCE/Demo/App.config:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | ## BitLocker Manager
2 |
3 | Using Bitlocker Manager you can lock/unlock/create/encrypt/decrypt/remove/etc. BitLocker drives.
4 |
5 | .Net 4.0 and later.
6 |
7 | Please use NuGet build - https://www.nuget.org/packages/BitLockerManager/
--------------------------------------------------------------------------------
/SOURCE/Demo/Properties/Settings.settings:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/SOURCE/Demo/App.xaml:
--------------------------------------------------------------------------------
1 |
6 |
7 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/SOURCE/Demo/App.xaml.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Configuration;
4 | using System.Data;
5 | using System.Linq;
6 | using System.Threading.Tasks;
7 | using System.Windows;
8 |
9 | namespace Demo
10 | {
11 | ///
12 | /// Interaction logic for App.xaml
13 | ///
14 | public partial class App : Application
15 | {
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/SOURCE/BitlockerManager.sln.DotSettings:
--------------------------------------------------------------------------------
1 |
2 | DO_NOT_SHOW
--------------------------------------------------------------------------------
/SOURCE/Core/packages.config:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/SOURCE/BitlockerManager.sln.DotSettings.user:
--------------------------------------------------------------------------------
1 |
2 | DO_NOT_SHOW
3 | DO_NOT_SHOW
4 | PIN
5 | TPM
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2020 Roman Minyaylov
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/SOURCE/Demo/Properties/Settings.Designer.cs:
--------------------------------------------------------------------------------
1 | //------------------------------------------------------------------------------
2 | //
3 | // This code was generated by a tool.
4 | // Runtime Version:4.0.30319.42000
5 | //
6 | // Changes to this file may cause incorrect behavior and will be lost if
7 | // the code is regenerated.
8 | //
9 | //------------------------------------------------------------------------------
10 |
11 | namespace Demo.Properties
12 | {
13 |
14 |
15 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
16 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")]
17 | internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase
18 | {
19 |
20 | private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
21 |
22 | public static Settings Default
23 | {
24 | get
25 | {
26 | return defaultInstance;
27 | }
28 | }
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/SOURCE/BitlockerManager.nuspec:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | BitLockerManager
6 |
7 |
8 | 1.0.1.0
9 |
10 |
11 | BitLocker manager.
12 |
13 |
14 | Roman Minyaylov
15 |
16 |
17 | Roman Minyaylov
18 |
19 |
20 | https://github.com/roman-minyaylov/BitlockerManager
21 |
22 |
23 | https://github.com/roman-minyaylov/BitlockerManager
24 |
25 |
26 | https://github.githubassets.com/favicon.ico
27 |
28 |
29 | false
30 |
31 |
32 | BitLocker manager. Lock/unlock, create, remove, encrypt and so on using C# or VB.Net.
33 |
34 |
35 | BitLocker manager. Lock/unlock, create, remove, encrypt and so on using C# or VB.Net. Source code - https://github.com/roman-minyaylov/BitlockerManager .
36 |
37 |
38 | Bug fixes and performance improvements. Please check changelog.
39 |
40 |
41 | Roman Minyaylov (c) 2019 - 2020
42 |
43 |
44 | bitlocker encryption encrypt
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
--------------------------------------------------------------------------------
/SOURCE/Core/Properties/AssemblyInfo.cs:
--------------------------------------------------------------------------------
1 | using System.Reflection;
2 | using System.Runtime.CompilerServices;
3 | using System.Runtime.InteropServices;
4 |
5 | // General Information about an assembly is controlled through the following
6 | // set of attributes. Change these attribute values to modify the information
7 | // associated with an assembly.
8 | [assembly: AssemblyTitle("BitlockerManager")]
9 | [assembly: AssemblyDescription("")]
10 | [assembly: AssemblyConfiguration("")]
11 | [assembly: AssemblyCompany("Roman Minyaylov")]
12 | [assembly: AssemblyProduct("BitlockerManager")]
13 | [assembly: AssemblyCopyright("Copyright © 2020")]
14 | [assembly: AssemblyTrademark("")]
15 | [assembly: AssemblyCulture("")]
16 |
17 | // Setting ComVisible to false makes the types in this assembly not visible
18 | // to COM components. If you need to access a type in this assembly from
19 | // COM, set the ComVisible attribute to true on that type.
20 | [assembly: ComVisible(false)]
21 |
22 | // The following GUID is for the ID of the typelib if this project is exposed to COM
23 | [assembly: Guid("952243c9-2f6e-45eb-9be2-a8390a170a9d")]
24 |
25 | // Version information for an assembly consists of the following four values:
26 | //
27 | // Major Version
28 | // Minor Version
29 | // Build Number
30 | // Revision
31 | //
32 | // You can specify all the values or you can default the Build and Revision Numbers
33 | // by using the '*' as shown below:
34 | // [assembly: AssemblyVersion("1.0.*")]
35 | [assembly: AssemblyVersion("1.0.1.0")]
36 | [assembly: AssemblyFileVersion("1.0.1.0")]
37 |
--------------------------------------------------------------------------------
/SOURCE/BitlockerManager.sln:
--------------------------------------------------------------------------------
1 |
2 | Microsoft Visual Studio Solution File, Format Version 12.00
3 | # Visual Studio Version 16
4 | VisualStudioVersion = 16.0.29709.97
5 | MinimumVisualStudioVersion = 10.0.40219.1
6 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BitLockerManager", "Core\BitLockerManager.csproj", "{952243C9-2F6E-45EB-9BE2-A8390A170A9D}"
7 | EndProject
8 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Demo", "Demo\Demo.csproj", "{F881124C-BCC8-4A37-861F-9122E796550D}"
9 | EndProject
10 | Global
11 | GlobalSection(SolutionConfigurationPlatforms) = preSolution
12 | Debug|Any CPU = Debug|Any CPU
13 | Release|Any CPU = Release|Any CPU
14 | EndGlobalSection
15 | GlobalSection(ProjectConfigurationPlatforms) = postSolution
16 | {952243C9-2F6E-45EB-9BE2-A8390A170A9D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
17 | {952243C9-2F6E-45EB-9BE2-A8390A170A9D}.Debug|Any CPU.Build.0 = Debug|Any CPU
18 | {952243C9-2F6E-45EB-9BE2-A8390A170A9D}.Release|Any CPU.ActiveCfg = Release|Any CPU
19 | {952243C9-2F6E-45EB-9BE2-A8390A170A9D}.Release|Any CPU.Build.0 = Release|Any CPU
20 | {F881124C-BCC8-4A37-861F-9122E796550D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
21 | {F881124C-BCC8-4A37-861F-9122E796550D}.Debug|Any CPU.Build.0 = Debug|Any CPU
22 | {F881124C-BCC8-4A37-861F-9122E796550D}.Release|Any CPU.ActiveCfg = Release|Any CPU
23 | {F881124C-BCC8-4A37-861F-9122E796550D}.Release|Any CPU.Build.0 = Release|Any CPU
24 | EndGlobalSection
25 | GlobalSection(SolutionProperties) = preSolution
26 | HideSolutionNode = FALSE
27 | EndGlobalSection
28 | GlobalSection(ExtensibilityGlobals) = postSolution
29 | SolutionGuid = {6F7F8233-27CA-4FDB-BC7A-1AD0383B42C5}
30 | EndGlobalSection
31 | EndGlobal
32 |
--------------------------------------------------------------------------------
/SOURCE/Core/Enums/CertificateType.cs:
--------------------------------------------------------------------------------
1 | // --------------------------------------------------------------------------------------------------------------------
2 | // The MIT License (MIT)
3 | //
4 | // Copyright © 2015-2020 Roman Minyaylov (roman.minyaylov@gmail.com)
5 | //
6 | // Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”),
7 | // to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
8 | // The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
9 | // THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
10 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
11 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
12 | // --------------------------------------------------------------------------------------------------------------------
13 |
14 |
15 | namespace BitlockerManager.Enums
16 | {
17 | ///
18 | /// Certificate type.
19 | ///
20 | public enum CertificateType : uint
21 | {
22 | ///
23 | /// The certificate is a DRA.
24 | ///
25 | DRA = 1,
26 |
27 | ///
28 | /// The certificate is not a DRA.
29 | ///
30 | NotDRA = 2
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/SOURCE/Demo/MainWindow.xaml:
--------------------------------------------------------------------------------
1 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
--------------------------------------------------------------------------------
/SOURCE/Core/Enums/ForceEncryptionType.cs:
--------------------------------------------------------------------------------
1 | // --------------------------------------------------------------------------------------------------------------------
2 | // The MIT License (MIT)
3 | //
4 | // Copyright © 2015-2020 Roman Minyaylov (roman.minyaylov@gmail.com)
5 | //
6 | // Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”),
7 | // to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
8 | // The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
9 | // THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
10 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
11 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
12 | // --------------------------------------------------------------------------------------------------------------------
13 |
14 |
15 | namespace BitlockerManager.Enums
16 | {
17 | ///
18 | /// Force encryption type.
19 | ///
20 | public enum ForceEncryptionType : uint
21 | {
22 | ///
23 | /// The encryption type is not specified.
24 | ///
25 | Unspecified = 0,
26 |
27 | ///
28 | /// Software encryption.
29 | ///
30 | Software = 1,
31 |
32 | ///
33 | /// Hardware encryption.
34 | ///
35 | Hardware = 2
36 | }
37 | }
38 |
--------------------------------------------------------------------------------
/SOURCE/Core/Enums/ActiveDirectoryFlag.cs:
--------------------------------------------------------------------------------
1 | // --------------------------------------------------------------------------------------------------------------------
2 | // The MIT License (MIT)
3 | //
4 | // Copyright © 2015-2020 Roman Minyaylov (roman.minyaylov@gmail.com)
5 | //
6 | // Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”),
7 | // to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
8 | // The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
9 | // THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
10 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
11 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
12 | // --------------------------------------------------------------------------------------------------------------------
13 |
14 | namespace BitlockerManager.Enums
15 | {
16 | ///
17 | /// AD flags.
18 | ///
19 | public enum ActiveDirectoryFlag : uint
20 | {
21 | ///
22 | /// No effect.
23 | ///
24 | None = 0x0000,
25 |
26 | ///
27 | /// Specifies that the SID-based protector was protected to a service account.If this flag is specified, the caller should ensure that it is running
28 | /// as the appropriate service account before calling UnlockWithAdSid (by temporarily dropping impersonation, for example).
29 | ///
30 | UnlockAsServiceAccount = 0x0001
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/SOURCE/Core/Enums/KeyProtectorFlag.cs:
--------------------------------------------------------------------------------
1 | // --------------------------------------------------------------------------------------------------------------------
2 | // The MIT License (MIT)
3 | //
4 | // Copyright © 2015-2020 Roman Minyaylov (roman.minyaylov@gmail.com)
5 | //
6 | // Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”),
7 | // to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
8 | // The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
9 | // THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
10 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
11 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
12 | // --------------------------------------------------------------------------------------------------------------------
13 |
14 | namespace BitlockerManager.Enums
15 | {
16 | ///
17 | /// Key protector flag.
18 | ///
19 | public enum KeyProtectorFlag : uint
20 | {
21 | ///
22 | /// No effect.
23 | ///
24 | FLAG_NONE = 0x0000,
25 |
26 | ///
27 | /// Specifies that the SID-based protector was protected to a service account.If this flag is specified, the caller should ensure that it is running as the appropriate service account before calling UnlockWithAdSid (by temporarily dropping impersonation, for example).
28 | ///
29 | FLAG_UNLOCK_AS_SERVICE_ACCOUNT = 0x0001,
30 | }
31 | }
32 |
--------------------------------------------------------------------------------
/SOURCE/Core/Enums/WipingStatus.cs:
--------------------------------------------------------------------------------
1 | // --------------------------------------------------------------------------------------------------------------------
2 | // The MIT License (MIT)
3 | //
4 | // Copyright © 2015-2020 Roman Minyaylov (roman.minyaylov@gmail.com)
5 | //
6 | // Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”),
7 | // to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
8 | // The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
9 | // THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
10 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
11 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
12 | // --------------------------------------------------------------------------------------------------------------------
13 |
14 | namespace BitlockerManager.Enums
15 | {
16 | ///
17 | /// Free space wiping status.
18 | ///
19 | public enum WipingStatus : uint
20 | {
21 | ///
22 | /// The free space has not been wiped.
23 | ///
24 | FreeSpaceNotWiped = 0,
25 |
26 | ///
27 | /// The free space has been wiped.
28 | ///
29 | FreeSpaceWiped = 1,
30 |
31 | ///
32 | /// Free space wiping is currently in progress.
33 | ///
34 | FreeSpaceWipingInProgress = 2,
35 |
36 | ///
37 | /// Free space wiping has been paused.
38 | ///
39 | FreeSpaceWipingPaused = 3
40 | }
41 | }
42 |
--------------------------------------------------------------------------------
/SOURCE/Core/Enums/HardwareEncryptionStatus.cs:
--------------------------------------------------------------------------------
1 | // --------------------------------------------------------------------------------------------------------------------
2 | // The MIT License (MIT)
3 | //
4 | // Copyright © 2015-2020 Roman Minyaylov (roman.minyaylov@gmail.com)
5 | //
6 | // Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”),
7 | // to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
8 | // The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
9 | // THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
10 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
11 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
12 | // --------------------------------------------------------------------------------------------------------------------
13 |
14 | namespace BitlockerManager.Enums
15 | {
16 | ///
17 | /// Hardware encryption status.
18 | ///
19 | public enum HardwareEncryptionStatus : uint
20 | {
21 | ///
22 | /// Hardware encryption is not supported.
23 | ///
24 | Notsupported = 0,
25 |
26 | ///
27 | /// Drive encryption is not supported.
28 | ///
29 | NoProtection = 1,
30 |
31 | ///
32 | /// The encryption method is software-based.
33 | ///
34 | UsesSoftware = 2,
35 |
36 | ///
37 | /// The drive supports hardware encryption.
38 | ///
39 | UsesHardware = 3
40 | }
41 | }
42 |
--------------------------------------------------------------------------------
/SOURCE/Core/Enums/FVEMetadataVersion.cs:
--------------------------------------------------------------------------------
1 | // --------------------------------------------------------------------------------------------------------------------
2 | // The MIT License (MIT)
3 | //
4 | // Copyright © 2015-2020 Roman Minyaylov (roman.minyaylov@gmail.com)
5 | //
6 | // Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”),
7 | // to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
8 | // The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
9 | // THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
10 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
11 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
12 | // --------------------------------------------------------------------------------------------------------------------
13 |
14 |
15 | namespace BitlockerManager.Enums
16 | {
17 | ///
18 | /// FVE metadata version.
19 | ///
20 | public enum FVEMetadataVersion : uint
21 | {
22 | ///
23 | /// The operating system is unknown.
24 | ///
25 | Unknown = 0,
26 |
27 | ///
28 | /// Windows Vista format, meaning that the volume was protected with BitLocker on a computer running Windows Vista.
29 | ///
30 | Vista = 1,
31 |
32 | ///
33 | /// Windows 7 format, meaning that the volume was protected with BitLocker on a computer running Windows 7 or the metadata format was upgraded by using the UpgradeVolume method.
34 | ///
35 | Win7 = 2
36 | }
37 | }
38 |
--------------------------------------------------------------------------------
/SOURCE/Core/ExceptionHelper.cs:
--------------------------------------------------------------------------------
1 | // --------------------------------------------------------------------------------------------------------------------
2 | // The MIT License (MIT)
3 | //
4 | // Copyright © 2015-2020 Roman Minyaylov (roman.minyaylov@gmail.com)
5 | //
6 | // Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”),
7 | // to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
8 | // The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
9 | // THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
10 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
11 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
12 | // --------------------------------------------------------------------------------------------------------------------
13 |
14 | namespace BitlockerManager
15 | {
16 | using System;
17 | using System.Reflection;
18 |
19 | public static class ExceptionHelper
20 | {
21 | public static Exception SetCode(this Exception e, int value)
22 | {
23 | BindingFlags flags = BindingFlags.Instance | BindingFlags.NonPublic;
24 | FieldInfo fieldInfo = typeof(Exception).GetField("_HResult", flags);
25 |
26 | if (fieldInfo != null)
27 | {
28 | fieldInfo.SetValue(e, value);
29 | }
30 |
31 | return e;
32 | }
33 |
34 | public static Exception SetCode(this Exception e, uint value)
35 | {
36 | BindingFlags flags = BindingFlags.Instance | BindingFlags.NonPublic;
37 | FieldInfo fieldInfo = typeof(Exception).GetField("_HResult", flags);
38 |
39 | if (fieldInfo != null)
40 | {
41 | fieldInfo.SetValue(e, unchecked((int)value));
42 | }
43 |
44 | return e;
45 | }
46 | }
47 | }
48 |
--------------------------------------------------------------------------------
/SOURCE/Core/Enums/TestStatus.cs:
--------------------------------------------------------------------------------
1 | // --------------------------------------------------------------------------------------------------------------------
2 | // The MIT License (MIT)
3 | //
4 | // Copyright © 2015-2020 Roman Minyaylov (roman.minyaylov@gmail.com)
5 | //
6 | // Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”),
7 | // to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
8 | // The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
9 | // THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
10 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
11 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
12 | // --------------------------------------------------------------------------------------------------------------------
13 |
14 | namespace BitlockerManager.Enums
15 | {
16 | ///
17 | /// Test status.
18 | ///
19 | public enum TestStatus
20 | {
21 | ///
22 | /// If a test was requested, the test has succeeded on the last computer restart and volume encryption is now in progress. For the encryption status,
23 | /// see the GetConversionStatus method. Otherwise, no test ran on the last computer restart and none is pending.
24 | ///
25 | NotFailed_and_NonePending = 0,
26 |
27 | ///
28 | /// Volume encryption did not start. All key protectors were removed.
29 | /// To resolve a failed test:
30 | /// Consult the information in the TestError parameter.
31 | /// Add key protectors and use the EncryptAfterHardwareTest method again.
32 | ///
33 | Failed = 1,
34 |
35 | ///
36 | /// A test has been requested and will run on the next computer restart.
37 | ///
38 | Pending = 2
39 | }
40 | }
41 |
--------------------------------------------------------------------------------
/SOURCE/Core/Enums/LockStatus.cs:
--------------------------------------------------------------------------------
1 | // --------------------------------------------------------------------------------------------------------------------
2 | // The MIT License (MIT)
3 | //
4 | // Copyright © 2015-2020 Roman Minyaylov (roman.minyaylov@gmail.com)
5 | //
6 | // Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”),
7 | // to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
8 | // The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
9 | // THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
10 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
11 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
12 | // --------------------------------------------------------------------------------------------------------------------
13 |
14 | namespace BitlockerManager.Enums
15 | {
16 | ///
17 | /// Lock status.
18 | ///
19 | public enum LockStatus : uint
20 | {
21 | ///
22 | /// For a standard HDD:
23 | /// The full contents of the volume are accessible. An unlocked volume is either fully decrypted or has the encryption key available in
24 | /// the clear on disk. The volume containing the current running operating system (for example, the running Windows volume) is
25 | /// always accessible and cannot be locked.
26 | /// For an EHDD:
27 | /// The band is perpetually unlocked.
28 | ///
29 | Unlocked = 0,
30 |
31 | ///
32 | /// For a standard HDD:
33 | /// All or a portion of the contents of the volume are not accessible. A locked volume must be partially or fully encrypted and must not have
34 | /// the encryption key available in the clear on disk.
35 | /// For an EHDD:
36 | /// The band is unlocked or locked.
37 | ///
38 | Locked = 1
39 | }
40 | }
41 |
--------------------------------------------------------------------------------
/SOURCE/Demo/Properties/AssemblyInfo.cs:
--------------------------------------------------------------------------------
1 | using System.Reflection;
2 | using System.Resources;
3 | using System.Runtime.CompilerServices;
4 | using System.Runtime.InteropServices;
5 | using System.Windows;
6 |
7 | // General Information about an assembly is controlled through the following
8 | // set of attributes. Change these attribute values to modify the information
9 | // associated with an assembly.
10 | [assembly: AssemblyTitle("Demo")]
11 | [assembly: AssemblyDescription("")]
12 | [assembly: AssemblyConfiguration("")]
13 | [assembly: AssemblyCompany("")]
14 | [assembly: AssemblyProduct("Demo")]
15 | [assembly: AssemblyCopyright("Copyright © 2020")]
16 | [assembly: AssemblyTrademark("")]
17 | [assembly: AssemblyCulture("")]
18 |
19 | // Setting ComVisible to false makes the types in this assembly not visible
20 | // to COM components. If you need to access a type in this assembly from
21 | // COM, set the ComVisible attribute to true on that type.
22 | [assembly: ComVisible(false)]
23 |
24 | //In order to begin building localizable applications, set
25 | //CultureYouAreCodingWith in your .csproj file
26 | //inside a . For example, if you are using US english
27 | //in your source files, set the to en-US. Then uncomment
28 | //the NeutralResourceLanguage attribute below. Update the "en-US" in
29 | //the line below to match the UICulture setting in the project file.
30 |
31 | //[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)]
32 |
33 |
34 | [assembly: ThemeInfo(
35 | ResourceDictionaryLocation.None, //where theme specific resource dictionaries are located
36 | //(used if a resource is not found in the page,
37 | // or application resource dictionaries)
38 | ResourceDictionaryLocation.SourceAssembly //where the generic resource dictionary is located
39 | //(used if a resource is not found in the page,
40 | // app, or any theme specific resource dictionaries)
41 | )]
42 |
43 |
44 | // Version information for an assembly consists of the following four values:
45 | //
46 | // Major Version
47 | // Minor Version
48 | // Build Number
49 | // Revision
50 | //
51 | // You can specify all the values or you can default the Build and Revision Numbers
52 | // by using the '*' as shown below:
53 | // [assembly: AssemblyVersion("1.0.*")]
54 | [assembly: AssemblyVersion("1.0.0.0")]
55 | [assembly: AssemblyFileVersion("1.0.0.0")]
56 |
--------------------------------------------------------------------------------
/SOURCE/Core/Enums/ConversionStatus.cs:
--------------------------------------------------------------------------------
1 | // --------------------------------------------------------------------------------------------------------------------
2 | // The MIT License (MIT)
3 | //
4 | // Copyright © 2015-2020 Roman Minyaylov (roman.minyaylov@gmail.com)
5 | //
6 | // Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”),
7 | // to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
8 | // The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
9 | // THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
10 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
11 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
12 | // --------------------------------------------------------------------------------------------------------------------
13 |
14 | namespace BitlockerManager.Enums
15 | {
16 | ///
17 | /// Volume encryption or decryption status.
18 | ///
19 | public enum ConversionStatus : uint
20 | {
21 | ///
22 | /// For a standard hard drive (HDD), the volume is fully decrypted.
23 | /// For a hardware encrypted hard drive (EHDD), the volume is perpetually unlocked.
24 | ///
25 | FullyDecrypted = 0,
26 |
27 | ///
28 | /// For a standard hard drive (HDD), the volume is fully encrypted.
29 | /// For a hardware encrypted hard drive (EHDD), the volume is not perpetually unlocked.
30 | ///
31 | FullyEncrypted = 1,
32 |
33 | ///
34 | /// The volume is partially encrypted.
35 | ///
36 | EncryptionInProgress = 2,
37 |
38 | ///
39 | /// The volume is partially encrypted.
40 | ///
41 | DecryptionInProgress = 3,
42 |
43 | ///
44 | /// The volume has been paused during the encryption progress. The volume is partially encrypted.
45 | ///
46 | EncryptionPaused = 4,
47 |
48 | ///
49 | /// The volume has been paused during the decryption progress. The volume is partially encrypted.
50 | ///
51 | DecryptionPaused = 5
52 | }
53 | }
54 |
--------------------------------------------------------------------------------
/SOURCE/Core/Enums/KeyProtectorType.cs:
--------------------------------------------------------------------------------
1 | // --------------------------------------------------------------------------------------------------------------------
2 | // The MIT License (MIT)
3 | //
4 | // Copyright © 2015-2020 Roman Minyaylov (roman.minyaylov@gmail.com)
5 | //
6 | // Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”),
7 | // to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
8 | // The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
9 | // THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
10 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
11 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
12 | // --------------------------------------------------------------------------------------------------------------------
13 |
14 | namespace BitlockerManager.Enums
15 | {
16 | ///
17 | /// Key protector type.
18 | ///
19 | public enum KeyProtectorType : uint
20 | {
21 | ///
22 | /// Unknown or other protector type.
23 | ///
24 | Unknown = 0,
25 |
26 | ///
27 | /// Trusted Platform Module (TPM).
28 | ///
29 | TPM = 1,
30 |
31 | ///
32 | /// External key.
33 | ///
34 | ExternalKey = 2,
35 |
36 | ///
37 | /// Numerical password.
38 | ///
39 | NumericalPassword = 3,
40 |
41 | ///
42 | /// TPM And PIN.
43 | ///
44 | TPMAndPIN = 4,
45 |
46 | ///
47 | /// TPM And Startup Key.
48 | ///
49 | TPMAndStartupKey = 5,
50 |
51 | ///
52 | /// TPM And PIN And Startup Key.
53 | ///
54 | TPMAndPINAndStartupKey = 6,
55 |
56 | ///
57 | /// Public Key.
58 | ///
59 | PublicKey = 7,
60 |
61 | ///
62 | /// Passphrase.
63 | ///
64 | Passphrase = 8,
65 |
66 | ///
67 | /// TPM Certificate.
68 | ///
69 | TPMCertificate = 9,
70 |
71 | ///
72 | /// CryptoAPI Next Generation (CNG) Protector.
73 | ///
74 | CNG = 10
75 | }
76 | }
77 |
--------------------------------------------------------------------------------
/SOURCE/Demo/Properties/Resources.Designer.cs:
--------------------------------------------------------------------------------
1 | //------------------------------------------------------------------------------
2 | //
3 | // This code was generated by a tool.
4 | // Runtime Version:4.0.30319.42000
5 | //
6 | // Changes to this file may cause incorrect behavior and will be lost if
7 | // the code is regenerated.
8 | //
9 | //------------------------------------------------------------------------------
10 |
11 | namespace Demo.Properties
12 | {
13 |
14 |
15 | ///
16 | /// A strongly-typed resource class, for looking up localized strings, etc.
17 | ///
18 | // This class was auto-generated by the StronglyTypedResourceBuilder
19 | // class via a tool like ResGen or Visual Studio.
20 | // To add or remove a member, edit your .ResX file then rerun ResGen
21 | // with the /str option, or rebuild your VS project.
22 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
23 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
24 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
25 | internal class Resources
26 | {
27 |
28 | private static global::System.Resources.ResourceManager resourceMan;
29 |
30 | private static global::System.Globalization.CultureInfo resourceCulture;
31 |
32 | [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
33 | internal Resources()
34 | {
35 | }
36 |
37 | ///
38 | /// Returns the cached ResourceManager instance used by this class.
39 | ///
40 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
41 | internal static global::System.Resources.ResourceManager ResourceManager
42 | {
43 | get
44 | {
45 | if ((resourceMan == null))
46 | {
47 | global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Demo.Properties.Resources", typeof(Resources).Assembly);
48 | resourceMan = temp;
49 | }
50 | return resourceMan;
51 | }
52 | }
53 |
54 | ///
55 | /// Overrides the current thread's CurrentUICulture property for all
56 | /// resource lookups using this strongly typed resource class.
57 | ///
58 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
59 | internal static global::System.Globalization.CultureInfo Culture
60 | {
61 | get
62 | {
63 | return resourceCulture;
64 | }
65 | set
66 | {
67 | resourceCulture = value;
68 | }
69 | }
70 | }
71 | }
72 |
--------------------------------------------------------------------------------
/SOURCE/Core/Enums/TestError.cs:
--------------------------------------------------------------------------------
1 | // --------------------------------------------------------------------------------------------------------------------
2 | // The MIT License (MIT)
3 | //
4 | // Copyright © 2015-2020 Roman Minyaylov (roman.minyaylov@gmail.com)
5 | //
6 | // Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”),
7 | // to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
8 | // The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
9 | // THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
10 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
11 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
12 | // --------------------------------------------------------------------------------------------------------------------
13 |
14 | namespace BitlockerManager.Enums
15 | {
16 | ///
17 | /// Test error possible values.
18 | ///
19 | public enum TestError : uint
20 | {
21 | ///
22 | /// No errors occurred or no hardware test ran on the last computer restart.
23 | ///
24 | NoError = 0,
25 |
26 | ///
27 | /// A USB flash drive with an external key file was not found. If this failure persists, the computer cannot read USB drives during restart.
28 | /// You may not be able to use external keys to unlock the operating system volume during restart.
29 | ///
30 | KEYFILE_NOT_FOUND = 0x8031003C,
31 |
32 | ///
33 | /// The external key file on the USB flash drive was corrupt. Try a different USB flash drive to store the external key file.
34 | ///
35 | KEYFILE_INVALID = 0x8031003D,
36 |
37 | ///
38 | /// The TPM is either disabled or deactivated or both disabled and deactivated. To turn on the TPM, use the Win32_Tpm WMI
39 | /// provider or run the TPM management snap-in (Tpm.msc).
40 | ///
41 | TPM_DISABLED = 0x8031003F,
42 |
43 | ///
44 | /// The TPM detected a change in operating system restart services within the current platform validation profile. Remove any startup CD
45 | /// or DVD from the computer. If this failure persists, check that the latest firmware and BIOS upgrades are installed, and that the TPM is otherwise working properly.
46 | ///
47 | TPM_INVALID_PCR = 0x80310041,
48 |
49 | ///
50 | /// The provided PIN was incorrect.
51 | ///
52 | PIN_INVALID = 0x80310043,
53 | }
54 | }
55 |
--------------------------------------------------------------------------------
/SOURCE/Core/Enums/ProtectionStatus.cs:
--------------------------------------------------------------------------------
1 | // --------------------------------------------------------------------------------------------------------------------
2 | // The MIT License (MIT)
3 | //
4 | // Copyright © 2015-2020 Roman Minyaylov (roman.minyaylov@gmail.com)
5 | //
6 | // Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”),
7 | // to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
8 | // The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
9 | // THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
10 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
11 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
12 | // --------------------------------------------------------------------------------------------------------------------
13 |
14 | namespace BitlockerManager.Enums
15 | {
16 | using System;
17 | using System.Collections.Generic;
18 | using System.Linq;
19 | using System.Text;
20 | using System.Threading.Tasks;
21 |
22 | ///
23 | /// Specifies whether the volume and the encryption key (if any) are secured.
24 | ///
25 | public enum ProtectionStatus
26 | {
27 | ///
28 | /// PROTECTION OFF
29 | /// For a standard HDD:
30 | /// The volume is unencrypted, partially encrypted, or the volume's encryption key is available in the clear on the hard disk.
31 | /// The encryption key is available in the clear on the hard disk if key protectors have been disabled by using the
32 | /// DisableKeyProtectors method or if no key protectors have been specified by using the following methods (WMI):
33 | /// ProtectKeyWithCertificateFile
34 | /// ProtectKeyWithCertificateThumbprint
35 | /// ProtectKeyWithExternalKey
36 | /// ProtectKeyWithNumericalPassword
37 | /// ProtectKeyWithPassphrase
38 | /// ProtectKeyWithTPM
39 | /// ProtectKeyWithTPMAndPIN
40 | /// ProtectKeyWithTPMAndPINAndStartupKey
41 | /// ProtectKeyWithTPMAndStartupKey
42 | /// For an EHDD:
43 | /// The band for the volume is perpetually unlocked, has no key manager, or is managed by a third party key manager.
44 | /// This can also mean that the band is managed by BitLocker but the DisableKeyProtectors method has been called and the drive is suspended.
45 | ///
46 | Unprotected = 0,
47 |
48 | ///
49 | /// PROTECTION ON
50 | /// For a standard HDD:
51 | /// The volume is fully encrypted and the encryption key for the volume is not available in the clear on the hard disk.
52 | /// For an EHDD:
53 | /// BitLocker is the key manager for the band. The drive can be locked or unlocked but cannot be perpetually unlocked.
54 | ///
55 | Protected = 1,
56 |
57 | ///
58 | /// The volume protection status cannot be determined. This can be caused by the volume being in a locked state.
59 | /// Windows Vista Ultimate, Windows Vista Enterprise and Windows Server 2008: This value is not supported. This value is supported beginning with Windows 7 and Windows Server 2008 R2.
60 | ///
61 | Unknown = 2
62 | }
63 | }
64 |
--------------------------------------------------------------------------------
/SOURCE/Core/Enums/EncryptionMethod.cs:
--------------------------------------------------------------------------------
1 | // --------------------------------------------------------------------------------------------------------------------
2 | // The MIT License (MIT)
3 | //
4 | // Copyright © 2015-2020 Roman Minyaylov (roman.minyaylov@gmail.com)
5 | //
6 | // Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”),
7 | // to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
8 | // The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
9 | // THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
10 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
11 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
12 | // --------------------------------------------------------------------------------------------------------------------
13 |
14 | namespace BitlockerManager.Enums
15 | {
16 | using System;
17 | using System.Collections.Generic;
18 | using System.Linq;
19 | using System.Text;
20 | using System.Threading.Tasks;
21 |
22 | ///
23 | /// Encryption algorithm and key size.
24 | ///
25 | public enum EncryptionMethod : uint
26 | {
27 | ///
28 | /// The volume is not encrypted.
29 | ///
30 | None = 0,
31 |
32 | ///
33 | /// The volume has been fully or partially encrypted with the Advanced Encryption Standard (AES) algorithm enhanced with a diffuser layer, using an AES key size of 128 bits.
34 | /// This method is no longer available on devices running Windows 8.1 or higher.
35 | ///
36 | AES_128_WITH_DIFFUSER = 1,
37 |
38 | ///
39 | /// The volume has been fully or partially encrypted with the Advanced Encryption Standard (AES) algorithm enhanced with a diffuser layer, using an AES key
40 | /// size of 256 bits.This method is no longer available on devices running Windows 8.1 or higher.
41 | ///
42 | AES_256_WITH_DIFFUSER = 2,
43 |
44 | ///
45 | /// The volume has been fully or partially encrypted with the Advanced Encryption Standard (AES) algorithm, using an AES key size of 128 bits.
46 | ///
47 | AES_128 = 3,
48 |
49 | ///
50 | /// The volume has been fully or partially encrypted with the Advanced Encryption Standard(AES) algorithm, using an AES key size of 256 bits.
51 | ///
52 | AES_256 = 4,
53 |
54 | ///
55 | /// The volume has been fully or partially encrypted by using the hardware capabilities of the drive.
56 | ///
57 | HARDWARE_ENCRYPTION = 5,
58 |
59 | ///
60 | /// The volume has been fully or partially encrypted with XTS using the Advanced Encryption Standard(AES), and an AES key size of 128 bits.
61 | /// This method is only available on devices running Windows 10, version 1511 or higher.
62 | ///
63 | XTS_AES_128 = 6,
64 |
65 | ///
66 | /// The volume has been fully or partially encrypted with XTS using the Advanced Encryption Standard(AES), and an AES key size of 256 bits.
67 | /// This method is only available on devices running Windows 10, version 1511 or higher.
68 | ///
69 | XTS_AES_256 = 7,
70 |
71 | ///
72 | /// The volume has been fully or partially encrypted with an unknown algorithm and key size.
73 | ///
74 | UNKNOWN = UInt32.MaxValue - 1
75 | }
76 | }
77 |
--------------------------------------------------------------------------------
/SOURCE/Demo/Demo.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Debug
6 | AnyCPU
7 | {F881124C-BCC8-4A37-861F-9122E796550D}
8 | WinExe
9 | Demo
10 | Demo
11 | v4.5
12 | 512
13 | {60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
14 | 4
15 | true
16 |
17 |
18 | AnyCPU
19 | true
20 | full
21 | false
22 | bin\Debug\
23 | DEBUG;TRACE
24 | prompt
25 | 4
26 |
27 |
28 | AnyCPU
29 | pdbonly
30 | true
31 | bin\Release\
32 | TRACE
33 | prompt
34 | 4
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 | 4.0
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 | MSBuild:Compile
55 | Designer
56 |
57 |
58 | MSBuild:Compile
59 | Designer
60 |
61 |
62 | App.xaml
63 | Code
64 |
65 |
66 | MainWindow.xaml
67 | Code
68 |
69 |
70 |
71 |
72 | Code
73 |
74 |
75 | True
76 | True
77 | Resources.resx
78 |
79 |
80 | True
81 | Settings.settings
82 | True
83 |
84 |
85 | ResXFileCodeGenerator
86 | Resources.Designer.cs
87 |
88 |
89 | SettingsSingleFileGenerator
90 | Settings.Designer.cs
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 | {952243c9-2f6e-45eb-9be2-a8390a170a9d}
99 | BitLockerManager
100 |
101 |
102 |
103 |
--------------------------------------------------------------------------------
/SOURCE/Demo/Properties/Resources.resx:
--------------------------------------------------------------------------------
1 |
2 |
3 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 | text/microsoft-resx
107 |
108 |
109 | 2.0
110 |
111 |
112 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
113 |
114 |
115 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
116 |
117 |
--------------------------------------------------------------------------------
/SOURCE/Demo/MainWindow.xaml.cs:
--------------------------------------------------------------------------------
1 | // --------------------------------------------------------------------------------------------------------------------
2 | // The MIT License (MIT)
3 | //
4 | // Copyright © 2015-2020 Roman Minyaylov (roman.minyaylov@gmail.com)
5 | //
6 | // Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”),
7 | // to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
8 | // The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
9 | // THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
10 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
11 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
12 | // --------------------------------------------------------------------------------------------------------------------
13 |
14 | using System;
15 | using System.Collections.Generic;
16 | using System.Linq;
17 | using System.Text;
18 | using System.Threading.Tasks;
19 | using System.Windows;
20 | using System.Windows.Controls;
21 | using System.Windows.Data;
22 | using System.Windows.Documents;
23 | using System.Windows.Input;
24 | using System.Windows.Media;
25 | using System.Windows.Media.Imaging;
26 | using System.Windows.Navigation;
27 | using System.Windows.Shapes;
28 |
29 | namespace Demo
30 | {
31 | using System.IO;
32 |
33 | using BitLockerManager;
34 |
35 | using BitlockerManager.Enums;
36 |
37 | ///
38 | /// Interaction logic for MainWindow.xaml
39 | ///
40 | public partial class MainWindow : Window
41 | {
42 | private DriveInfo[] _drives = null;
43 |
44 | public MainWindow()
45 | {
46 | InitializeComponent();
47 | }
48 |
49 | private void Window_Loaded(object sender, RoutedEventArgs e)
50 | {
51 | _drives = BitLockerManager.EnumDrives();
52 |
53 | foreach (var drive in _drives)
54 | {
55 | if (BitLockerManager.GetProtectionStatus(drive) == ProtectionStatus.Protected)
56 | {
57 | lbDrives.Items.Add(new ListBoxItem() {Content = drive.Name });
58 | }
59 |
60 | if (BitLockerManager.GetProtectionStatus(drive) == ProtectionStatus.Unknown && BitLockerManager.IsLocked(drive))
61 | {
62 | lbDrives.Items.Add(new ListBoxItem() { Content = drive.Name });
63 | }
64 | }
65 | }
66 |
67 | private BitLockerManager GetCurrentManager()
68 | {
69 | var item = (ListBoxItem)lbDrives.SelectedItem;
70 | if (item.Tag != null)
71 | {
72 | return (BitLockerManager)item.Tag;
73 | }
74 |
75 | foreach (var drive in _drives)
76 | {
77 | if (drive.Name == item.Content.ToString())
78 | {
79 | item.Tag = new BitLockerManager(drive);
80 | return (BitLockerManager)item.Tag;
81 | }
82 | }
83 |
84 | return null;
85 | }
86 |
87 | private void UpdateSelected()
88 | {
89 | var drive = this.GetCurrentManager();
90 | if (drive == null)
91 | {
92 | return;
93 | }
94 |
95 | if (drive.IsLocked())
96 | {
97 | lbStatus.Text = "Status: Locked";
98 | btLock.IsEnabled = false;
99 | btUnlockPin.IsEnabled = true;
100 | btUnlockPassphrase.IsEnabled = true;
101 | }
102 | else
103 | {
104 | lbStatus.Text = "Status: Unlocked";
105 | btLock.IsEnabled = true;
106 | btUnlockPin.IsEnabled = false;
107 | btUnlockPassphrase.IsEnabled = false;
108 | }
109 | }
110 |
111 | private void lbDrives_SelectionChanged(object sender, SelectionChangedEventArgs e)
112 | {
113 | UpdateSelected();
114 | }
115 |
116 | private void btUnlockPassphrase_Click(object sender, RoutedEventArgs e)
117 | {
118 | var drive = this.GetCurrentManager();
119 | if (drive == null)
120 | {
121 | return;
122 | }
123 |
124 | try
125 | {
126 | drive.UnlockDriveWithPassphrase(edPassword.Text);
127 | UpdateSelected();
128 | }
129 | catch (Exception ex)
130 | {
131 | MessageBox.Show(ex.Message);
132 | }
133 | }
134 |
135 | private void btUnlockPin_Click(object sender, RoutedEventArgs e)
136 | {
137 | var drive = this.GetCurrentManager();
138 | if (drive == null)
139 | {
140 | return;
141 | }
142 |
143 | try
144 | {
145 | drive.UnlockDriveWithNumericalPassword(edNumPassword.Text);
146 | UpdateSelected();
147 | }
148 | catch (Exception ex)
149 | {
150 | MessageBox.Show(ex.Message);
151 | }
152 | }
153 |
154 | private void btLock_Click(object sender, RoutedEventArgs e)
155 | {
156 | var drive = this.GetCurrentManager();
157 | if (drive == null)
158 | {
159 | return;
160 | }
161 |
162 | try
163 | {
164 | drive.Lock();
165 | UpdateSelected();
166 | }
167 | catch (Exception ex)
168 | {
169 | MessageBox.Show(ex.Message);
170 | }
171 | }
172 | }
173 | }
174 |
--------------------------------------------------------------------------------
/SOURCE/Core/API.cs:
--------------------------------------------------------------------------------
1 | // --------------------------------------------------------------------------------------------------------------------
2 | // The MIT License (MIT)
3 | //
4 | // Copyright © 2015-2020 Roman Minyaylov (roman.minyaylov@gmail.com)
5 | //
6 | // Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”),
7 | // to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
8 | // The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
9 | // THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
10 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
11 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
12 | // --------------------------------------------------------------------------------------------------------------------
13 |
14 | namespace BitLockerManager
15 | {
16 | using System;
17 | using System.Collections.Generic;
18 | using System.Globalization;
19 | using System.IO;
20 | using System.Linq;
21 | using System.Management;
22 | using System.Security.Principal;
23 | using System.Text;
24 | using System.Threading.Tasks;
25 |
26 | using BitlockerManager.Enums;
27 |
28 | public partial class BitLockerManager
29 | {
30 | ///
31 | /// Is OS supported.
32 | ///
33 | ///
34 | /// Returns
35 | ///
36 | public static bool IsSupportedOS()
37 | {
38 | // only vista or higher
39 | return Environment.OSVersion.Platform == PlatformID.Win32NT &&
40 | Environment.OSVersion.Version >= new Version(6, 0);
41 | }
42 |
43 | ///
44 | /// Enumerate drives.
45 | ///
46 | ///
47 | /// Returns
48 | ///
49 | public static DriveInfo[] EnumDrives()
50 | {
51 | return DriveInfo.GetDrives();
52 | }
53 |
54 | public static bool IsLocked(DriveInfo drive)
55 | {
56 | if (drive == null)
57 | {
58 | throw new Exception("Drive can't be null!");
59 | }
60 |
61 | var path = new ManagementPath
62 | {
63 | NamespacePath = "\\ROOT\\CIMV2\\Security\\MicrosoftVolumeEncryption",
64 | ClassName = "Win32_EncryptableVolume"
65 | };
66 | using (var wmiClass = new ManagementClass(path))
67 | {
68 | foreach (ManagementObject vol in wmiClass.GetInstances())
69 | {
70 | var letterObj = vol["DriveLetter"];
71 | if (letterObj == null)
72 | {
73 | continue;
74 | }
75 |
76 | var letter = letterObj.ToString();
77 | if (drive.Name.StartsWith(letter, StringComparison.OrdinalIgnoreCase))
78 | {
79 | using (var inParams = vol.GetMethodParameters("GetLockStatus"))
80 | {
81 | using (var outParams = vol.InvokeMethod("GetLockStatus", inParams, null))
82 | {
83 | var result = (uint)outParams["returnValue"];
84 | switch (result)
85 | {
86 | case 0://S_OK
87 | var lockStatus = (uint)outParams["LockStatus"];
88 | return lockStatus == 1;
89 | default:
90 | throw new InvalidOperationException(string.Format(CultureInfo.InvariantCulture, "Unknown code {{0:X}}.", result));
91 | }
92 | }
93 | }
94 | }
95 | }
96 | }
97 |
98 | return false;
99 | }
100 |
101 | ///
102 | /// Gets protection status.
103 | ///
104 | ///
105 | /// The drive.
106 | ///
107 | ///
108 | /// The .
109 | ///
110 | ///
111 | ///
112 | public static ProtectionStatus GetProtectionStatus(DriveInfo drive)
113 | {
114 | if (drive == null)
115 | {
116 | throw new Exception("Drive can't be null!");
117 | }
118 |
119 | var path = new ManagementPath
120 | {
121 | NamespacePath = "\\ROOT\\CIMV2\\Security\\MicrosoftVolumeEncryption",
122 | ClassName = "Win32_EncryptableVolume"
123 | };
124 | using (var wmiClass = new ManagementClass(path))
125 | {
126 | foreach (ManagementObject vol in wmiClass.GetInstances())
127 | {
128 | var letterObj = vol["DriveLetter"];
129 | if (letterObj == null)
130 | {
131 | continue;
132 | }
133 |
134 | var letter = letterObj.ToString();
135 |
136 | if (drive.Name.StartsWith(letter, StringComparison.OrdinalIgnoreCase))
137 | {
138 | var status = (uint)vol["ProtectionStatus"];
139 | return (ProtectionStatus)status;
140 | }
141 | }
142 | }
143 |
144 | return ProtectionStatus.Unknown;
145 | }
146 |
147 | public static bool IsAdmin()
148 | {
149 | var identity = WindowsIdentity.GetCurrent();
150 | var principal = new WindowsPrincipal(identity);
151 | if (principal.IsInRole(WindowsBuiltInRole.Administrator))
152 | {
153 | return true;
154 | }
155 |
156 | return false;
157 | }
158 | }
159 | }
160 |
--------------------------------------------------------------------------------
/SOURCE/Core/BitLockerManager.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 | Debug
11 | AnyCPU
12 | {952243C9-2F6E-45EB-9BE2-A8390A170A9D}
13 | Library
14 | Properties
15 | BitlockerManager
16 | BitlockerManager
17 | v4.0
18 | 512
19 | true
20 |
21 |
22 | Client
23 |
24 |
25 | true
26 | full
27 | false
28 | bin\Debug\
29 | DEBUG;TRACE
30 | prompt
31 | 4
32 |
33 |
34 | pdbonly
35 | true
36 | bin\Release\
37 | TRACE
38 | prompt
39 | 4
40 |
41 |
42 | true
43 |
44 |
45 | signkey.snk
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 | This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
--------------------------------------------------------------------------------