3

私は、自分のシステムで動作するより良いドライバーをプログラムがインストールできるように、障害のあるドライバーまたは見つからないドライバーを検出する方法を見つけることを任されています。私が試みていることにはsetupapi.dll、レジストリから値を取得し、ドライバーに問題があることを知らせるフラグを見つけようとすることが含まれます。MSDN、「その他のデバイス」のクラス GUID が4d36e97e-e325-11ce-bfc1-08002be10318. ただし、これらのデバイスを列挙しようとすると、デバイス マネージャーの下にそのカテゴリのデバイスが表示されていても、何も得られません。このカテゴリのデバイスまたは一般的なドライバー エラーを特定する方法を提供できる別の Windows API はありますか? 私のコードは次のようになります:

static void Main(string[] args)
{
    Guid displayClass = new Guid("4d36e97e-e325-11ce-bfc1-08002be10318");
    SafeDevInfoHandle hDevInfo = NativeMethods.SetupDiGetClassDevs(ref displayClass,
                null, IntPtr.Zero, DIGetClassFlags.DIGCF_PRESENT);

    if (hDevInfo.IsInvalid)
        throw new Win32Exception();

    DevInfoData did = new DevInfoData();
    did.size = Marshal.SizeOf(did);

    for (uint i = 0; NativeMethods.SetupDiEnumDeviceInfo(hDevInfo, i, ref did); i++)
    {
        if (NativeMethods.SetupDiBuildDriverInfoList(hDevInfo, ref did, DriverType.SPDIT_COMPATDRIVER))
        {
            DriverInfoData drvData = new DriverInfoData();
            drvData.Size = Marshal.SizeOf(drvData);

            for (uint j = 0; NativeMethods.SetupDiEnumDriverInfo(hDevInfo, ref did, DriverType.SPDIT_COMPATDRIVER, j, ref drvData); j++)
            {
                Console.WriteLine(drvData.ToString());
            }
        }
        else
        {
            throw new Win32Exception();
        }
    }
}

また、特定のプロパティを取得するために使用しようとしましSetupDiGetDeviceRegistryPropertyたが、多くのデバイスではすべてのプロパティが存在するわけではありません。これに電話して返してもらいたいのですがSPDRP_INSTALL_STATE、この電話で実際の応答をまだ受け取っていません。

4

1 に答える 1