[ C# ] BitLocker で暗号化されたドライブ情報の取得とロックの解除

Pocket

ここでは、BitLockerで暗号化されたデバイス情報の取得とロックの一時解除を行うサンプルコードを掲載しています。なお、ロック状態を解除しても、USB デバイスの抜き差しなどで、再びロック状態となります。BitLocker 自体が無効となることはありません。

スポンサーリンク

BitLocker で暗号化デバイス情報の取得とロックの解除

暗号化デバイスの情報を取得および、BitLockerロックの解除を行うサンプルコードです。もちろんBitLocker が無効なデバイスの情報も一覧として取得されます。なお、ロックの解除はパスワードによって暗号化された場合のサンプルになります。


// 暗号化デバイス情報を取得(仮にFドライブのみ)
string scope = @"root\\CIMV2\\Security\\MicrosoftVolumeEncryption";
string query = @"SELECT * FROM Win32_EncryptableVolume  where DriveLetter='F:'";
ManagementObjectSearcher mos = new ManagementObjectSearcher(scope, query);

foreach (ManagementObject mo in mos.Get())
{
    string deviceId    = mo["DeviceID"].ToString();       // デバイスID
    string driveLetter = mo["DriveLetter"].ToString();    // ドライブレター(F:)
    bool encrypt       = (mo["ProtectionStatus"].ToString() == "1") ? true : false; // BitLocker暗号化ドライブ
    bool systemVolume  = (mo["VolumeType"].ToString() == "0") ? true : false;       // OSがインストールされたボリューム

    // BitLockerのロック状態を取得
    ManagementBaseObject protectStatus = mo.InvokeMethod("GetLockStatus", null, null);

    // ロック中は "1"、ロック解除されていれば "0"
    string lockStatus = protectStatus["LockStatus"].ToString();
    if (protectStatus["LockStatus"].ToString() == "0")
    {
        // ロックが解除されていない場合に、次のようにドライブ情報を取得すると
        // 例外が発生する
        DriveInfo di = new DriveInfo(driveLetter.Substring(0, 1)); // ドライブ情報の取得
    }
    // BitLocker 暗号化のロックの解除
    if (protectStatus["LockStatus"].ToString() == "1") {
        // ロック解除(パスワードで暗号化した場合)
        ManagementBaseObject inParams = mo.GetMethodParameters("UnlockWithPassphrase");
        // UnlockWithPassphrase関数にパラメータ設定(パスワード)
        inParams["Passphrase"] = "masaonohimitsu";
        // 解除実行
        ManagementBaseObject outParams = mo.InvokeMethod("UnlockWithPassphrase", inParams, null);
        // 実行結果 "0" の場合は正常終了
        string ret = outParams["returnValue"].ToString();
    }
}

 

スポンサーリンク


Pocket

Leave a Comment

Your email address will not be published. Required fields are marked *