WMI (ハード ドライブから開始) を使用してユーザーのコンピューターの機能を照会できる単純な Windows フォーム アプリケーションを構築しようとしています。
これまでのところ、私はこれまで持っています(HardDriveCheckResult
私自身のクラスです):
ConnectionOptions wmiConnOpts = new ConnectionOptions();
wmiConnOpts.Impersonation = ImpersonationLevel.Impersonate;
wmiConnOpts.Authentication = AuthenticationLevel.Default;
wmiConnOpts.EnablePrivileges = true;
ManagementObjectSearcher managementObjectSearcher = new ManagementObjectSearcher(@"select * from Win32_LogicalDisk WHERE DriveType = 5");
managementObjectSearcher.Scope.Options = wmiConnOpts;
List<HardDriveCheckResult> hardDriveCheckResults = new List<HardDriveCheckResult>();
foreach (ManagementObject managementObject in managementObjectSearcher.Get())
{
string hardDriveName = managementObject["name"].ToString();
object objFreeSpace = managementObject["FreeSpace"];
double freeSpace = objFreeSpace == null ? 0d : (double)objFreeSpace;
... additional code not relevant
}
私が抱えている問題は、managementObject["FreeSpace"]
常に null を返すことです。これは、WMI 呼び出しが行われたアカウントのアクセス許可と関係があるのではないかと考えているため、ConnectionOptions
Google 提供のコードを含めました。
タスク マネージャーは、プログラムが管理者である私のアカウントとして実行されていることを教えてくれるので、WMI 呼び出しがすべてのデータを返さない理由について少し困惑しています。
アクセス許可のために呼び出しmanagementObject["FreeSpace"]
が null を返すのは正しいですか? それとも、まったく別のものでしょうか?
ちなみに、への呼び出しmanagementObject["name"]
はドライブ文字を正しく返します。