文字列:
"win32_logicaldisk.deviceid=\"pathroot"
エスケープされた二重引用符が 1 つだけ含まれています。私は専門家ではありませんが、次のようになると思います。
"win32_logicaldisk.deviceid=\"pathroot\""
ただし、実際には結果の WMI クエリに pathroot の値を含めていません。これを行うには、次のようなものを使用できます。
var query = string.Format("win32_logicaldisk.deviceid=\"{0}\"", pathroot);
ManagementObject disk = new ManagementObject(query);
私はそれをテストしていませんが、「deviceid」はフルパスではなく「C:」の形式の文字列を想定しているため、これは機能しないと思います。次のようにフル パスからドライブ文字を取得します。
var driveLetter = System.IO.Path.GetPathRoot(pathroot);
var query = string.Format("win32_logicaldisk.deviceid=\"{0}\"", pathroot);
ManagementObject disk = new ManagementObject(query);
ただし、UNC (ネットワーク共有) パスのドライブ領域を照会できる必要がある場合、このアプローチは機能しないことに注意してください。
最後に、パスを含むハードコーディングされた文字列はエスケープされません。たとえば、現在、\Program Files の \P は、リテラルの \P としてではなく、エスケープ シーケンスとして扱われています。文字列を @ でマークして、次のようにします。
string pathroot = @"C:\Program Files (x86)\Personal\movies"