使用 C# 应用程序中生成的批处理文件解锁 BitLocker 驱动器
Posted
技术标签:
【中文标题】使用 C# 应用程序中生成的批处理文件解锁 BitLocker 驱动器【英文标题】:Unlock BitLocker drive with batch file generated in C# app 【发布时间】:2021-04-02 09:17:06 【问题描述】:我正在开发一个用我们自己的 shell 替换 explorer.exe
的 C# 应用程序。我们想让用户从我们的 UI 中解锁 BitLocker USB 驱动器。
C# 应用程序会定期刷新连接到计算机的驱动器列表。对于找到的每个驱动器,它通过启动一个执行manage-bde -status
并解析输出的Process
来检查BDE 状态。它工作正常。
问题 解锁驱动器给我带来了问题,因为
manage-bde -unlock <drive>: -password
是一个活动提示,我们不希望用户看到打开命令提示符来输入文本。他们将预先在 C# 应用程序中选择驱动器名称并输入密码。
我的一个想法是使用驱动器名称和密码在 C# 应用程序中生成 .bat
文件。但是我不知道实现提交密码的正确语法(此处为.bat noob)。
我的(非常)WIP 批处理文件
@echo off
set driveName=F:
set pass=thePassword
manage-bde -unlock %driveName% -password
我应该如何继续提交pass
变量?我知道以纯文本形式使用密码绝不安全,但我需要的最重要的一点是知道如何在没有用户输入 cmd 的情况下在批处理文件中构造它。
谢谢。
【问题讨论】:
打算尝试使用 PowerShell cmdlet 来制作单行代码。将回来查看。 你为什么使用批处理文件/cmd.exe,或者powershell脚本/powershell.exe?我想知道为什么你不能直接从c# 代码运行带有参数的可执行文件。 也许我可以从 c# 代码运行可执行文件。这只是我想出的解决方案,因为这些命令似乎可以满足我的需要。 您正在运行带有参数的单个程序,不需要使用较低级别语言的脚本来为您执行此操作。 您是在建议我使用 C# 以编程方式执行 BitLocker 操作?你知道这方面的任何文件吗? 【参考方案1】:在尝试了一些建议后得到了一个 PowerShell 脚本解决方案(感谢 Compo)。它解决了在用户不与命令提示符交互的情况下发出 BitLocker 操作的问题。我知道还有更优雅的方法。
public void ToggleBDELock(string driveLetter, string password )
string directory = @"C:\thePath\";
string scriptName = $"bdeunlock_driveLetter.ps1";
string scriptPath = Path.Combine( directory, scriptName );
string output;
FileStream fileStream;
// Set up location for the script.
// yada yada yada
// Write the script to the file.
fileStream = File.Create( scriptPath );
using( var writer = new StreamWriter( fileStream ) )
writer.WriteLine( $"$SecureString = ConvertTo-SecureString \"password\" -AsPlainText -Force" );
writer.WriteLine( $"Unlock-BitLocker -MountPoint \"driveLetter:\" -Password $SecureString" );
// Configure a process to run the script.
var startInfo = new ProcessStartInfo
FileName = "powershell.exe",
Arguments = $"-NoProfile -ExecutionPolicy unrestricted -file \"scriptPath\"",
UseShellExecute = false,
RedirectStandardOutput = true,
CreateNoWindow = true
;
// Try to execute the script.
using( var process = new Process StartInfo = startInfo )
try
process.Start();
output = process.StandardOutput.ReadToEnd();
catch( Exception e )
// yada yada yada
【讨论】:
以上是关于使用 C# 应用程序中生成的批处理文件解锁 BitLocker 驱动器的主要内容,如果未能解决你的问题,请参考以下文章
在 c# 中等效于在 c 编程中生成的要在 URL 查询字符串中发送的“Base64”编码的加密字节字符串
使用 Selenium 在页面的 onload() 中生成的 JavaScript 警报的解决方法是啥?