7

TrueCrypt コンテナがドライブ文字にマウントされた後、ドライブ文字がどのコンテナからマウントされたか、またはコンテナがどのドライブ文字にマウントされたかをバッチ ファイルで特定することは可能ですか?

バッチファイルで、指定した TrueCrypt コンテナを指定したドライブレターにマウントしたいです。コンテナーが既にマウントされている場合やドライブ文字が使用できない場合は TrueCrypt エラーが発生するため、指定されたコンテナーが指定されたドライブ文字にまだマウントされていない場合、つまりアクションが実行されていない場合にのみ TrueCrypt を実行したいと考えています。すでに完了しています。

任意の提案をいただければ幸いです。

編集

報奨金の概要簡単に言えば、ボリュームがC:\Vol1.tcあり、ドライブにC:\Vol2.tcマウントされているとします。ドライブにマウントされていること、およびバッチ ファイルまたは C# コードを使用してプログラムでドライブすることをどのように確認できますか?XYC:\Vol1.tcXC:\Vol2.tcY

4

6 に答える 6

1

これは私がこれまでに持っているものです:

どのボリュームがマウント/マウント解除されているかをユーザーに通知する C# で記述されたカスタム アプリを作成しています。それらがマウントされている場合は、ユーザーにどのドライブに通知する必要があります。ボリュームがマウントされているかどうかを知るために、次のクラスがあります。

このプログラムは、 http://technet.microsoft.com/en-us/sysinternals/bb896655.aspxhandle.exe またはhttp://download.sysinternals.com/files/Handle.zipからダウンロードできます。

また、管理者としてプログラムを実行している必要があると思います

class TrueCryptHelp
{
    // I have that program on the working directory
    // it can be downloaded from http://technet.microsoft.com/en-us/sysinternals/bb896655.aspx
    const string HandleExeLocation = "handle.exe"; 
    static string systemProcessFiles;
    static DateTime dateFilesLockedInfo = new DateTime();
    static string SystemProcessFiles
    {
        get
        {
            if ((DateTime.Now - dateFilesLockedInfo).TotalSeconds > 2)
            {
                Process p = new Process();
                var psi = new ProcessStartInfo();
                psi.RedirectStandardOutput = true;
                psi.UseShellExecute = false;
                psi.FileName = HandleExeLocation;
                p.StartInfo = psi;
                p.Start();

                var output = p.StandardOutput.ReadToEnd();

                systemProcessFiles = string.Empty;

                foreach (Match m in Regex.Matches(output ?? "", @"(?sx) -{20}  [^-]  .+?  -{20}"))
                {
                    if (Regex.Match(m.Value ?? "", @"(?xi) -{10}  [\s\r\n]+  System \s pid").Success)
                    {
                        if (Regex.Match(m.Value ?? "", @"(?xi)  \) \s+ \\clfs \s* (\r|\n)").Success)
                        {
                            systemProcessFiles = m.Value.ToLower();
                            break;
                        }
                    }
                }

            }

            dateFilesLockedInfo = DateTime.Now;

            return systemProcessFiles;
        }
    }

    public static bool IsVolumeMounted(string volumeLocation)
    {
        //DriveInfo d = new System.IO.DriveInfo(volume.DriveLetter);
        //if (d == null)
        //return false;

        //if (d.DriveType != System.IO.DriveType.Fixed)
        //return false;

        //if ((d.DriveFormat ?? "").ToLower().Contains("fat") == false)
        //return false;

        if (SystemProcessFiles.Contains(volumeLocation.ToLower()))
        {
            return true;
        }
        else
        {
            return false;
        }

    }
}

C:\Users\Tono\Desktop\v1.tc次に、にあるボリュームがマウントされているかどうかを知りたい場合は、次のようにメソッドを呼び出します。

var isVolMounted = TrueCryptHelp.IsVolumeMounted(@"A:\Users\Tono\Desktop\v1.tc");

今、私は質問に答えることができません!私が投稿したクラスでは、C:\Users\etc... にあるボリュームがどのドライブ文字にマウントされているかを知ることができます!?

于 2013-07-28T23:11:45.447 に答える
0

これが正しいことを確認するために:TrueCryptがスクリプトを介して特定のボリュームを特定のドライブ文字にマウントし、ボリュームが既にマウントされている場合は何もしようとしないことを確認したい.

おそらくいくつかの潜在的な解決策。以下にいくつかのオプションを強調します。さらに追求する価値があるものがあれば教えてください。詳細を調査して更新し続けます。

オプション 1: お気に入りと自動マウント

TrueCrypt は「お気に入りのボリューム」に対応しています。

ページから -- お気に入りのボリュームは次の場合に使用されます。

  • 常に特定のドライブ文字にマウントする必要があるボリュームがあります。
  • ホスト デバイスがコンピューターに接続されたときに、自動的にマウントする必要があるボリュームがあります (たとえば、USB フラッシュ ドライブまたは外付け USB ハード ドライブにあるコンテナー)。
  • オペレーティング システムへのログオン時に、自動的にマウントする必要があるボリュームがあります。
  • 常に読み取り専用またはリムーバブル メディアとしてマウントする必要があるボリュームがあります。

注目に値するいくつかのこと:

  • お気に入りのボリュームごとに特別なラベルを貼ることができます - 便利かもしれません
  • "TrueCrypt.exe /a favorites /quit"実行してお気に入りのボリュームを自動マウントし、終了することができます。truecrypt のお気に入りページに次のように記載されているため、これをテストすることをお勧めします。If it is already mounted, an Explorer window is opened for it.

オプション 2: ドライブ文字のみを確認する

ボリュームを常に特定のドライブ文字にマウントする場合、そのドライブ文字には他に何も置かれないという合理的な仮定を立てることができる場合があります。

それが妥当な仮定である場合は、いつでも PowerShell でドライブを確認できます。

$DriveLetterToCheck = "s:"
$DriveLetterMounted = Test-Path $DriveLetterToCheck #true if it exists
if(!$DriveLetterMounted)
{
  # Run your TrueCrypt mount command
}

何か良いことを思いついたら更新します。私が正しい軌道に乗っているかどうか教えてください。

于 2013-08-03T05:37:58.657 に答える
0

単純化しすぎているかもしれませんが、マウントされたドライブのドライブ ラベルは一意ですか? その場合は、次のような単純なルックアップを使用できます。

private string GetDriveLetter(string volumeLabel)
{
    string driveLetter = "";

    DriveInfo[] dis = DriveInfo.GetDrives();
    foreach (DriveInfo di in dis)
    {
        var dt = di.DriveType;
        if (dt == DriveType.Fixed || dt == DriveType.Removable)
        {
            if (di.VolumeLabel == volumeLabel)
            {
                driveLetter = di.Name.Substring(0, 1).ToUpper();
                break;
            }
        }
    }

    return driveLetter;
}
于 2013-08-01T16:28:04.143 に答える