Better way to detect devices & drivers?

So I’m deploying an NVidia video driver through a Fixlet. I have a good handle on the installation logic, but the detection is rather complex and I was hoping the community could improve the relevance. And if there’s not a better way, maybe this will help out others. And if someone else has a better way it would certainly help me.

What I’ve observed is that the device driver .INF files contain a list of PCI devices for which the driver can be applied. In the Fixlet Debugger, I built a query to retrieve the device list from the .INFs and I’m going to use that device list when I search the system registry.

>     Q: concatenation ";" of ("%22pci\" & it & "%22") of unique values of (following texts of firsts "PCI\" of lines of find files "*.inf" of folder "c:\temp\Display.Driver" as trimmed string as lowercase)
>     A: "pci\ven_10de&dev_0ffd";"pci\ven_10de&dev_019e";"pci\ven_10de&dev_040a";"pci\ven_10de&dev_040b&subsys_30c3103c";"pci\ven_10de&dev_040c&subsys_142310cf";"pci\ven_10de&dev_040c&subsys_20d917aa";"pci\ven_10de&dev_040c&subsys_30c5103c";"pci\ven_10de&dev_040d";"pci\ven_10de&dev_040d&subsys_019b1028";"pci\ven_10de&dev_040d&subsys_04811558";"pci\ven_10de&dev_040d&subsys_05731558";"pci\ven_10de&dev_040d&subsys_0770152d";"pci\ven_10de&dev_040d&subsys_08601558";"pci\ven_10de&dev_040d&subsys_09021558";"pci\ven_10de&dev_040d&subsys_2052161f";"pci\ven_10de&dev_040d&subsys_30c3103c";"pci\ven_10de&dev_040e";"pci\ven_10de&dev_040f";"pci\ven_10de&dev_0429&subsys_01fe1028";"pci\ven_10de&dev_0429&subsys_20d817aa";"pci\ven_10de&dev_042a&subsys_00011179";"pci\ven_10de&dev_042a&subsys_00021179";"pci\ven_10de&dev_042b&subsys_019c1028";"pci\ven_10de&dev_042b&subsys_01f91028";"pci\ven_10de&dev_042b&subsys_01fe1028";"pci\ven_10de&dev_042d&subsys_019b1028";"pci\ven_10de&dev_042d&subsys_01ff1028";"pci\ven_10de&dev_042d&subsys_024a1028";"pci\ven_10de&dev_042d&subsys_024b1028";"pci\ven_10de&dev_042f";"pci\ven_10de&dev_05e7";"pci\ven_10de&dev_05e7&subsys_059510de";"pci\ven_10de&dev_05e7&subsys_066a10de";"pci\ven_10de&dev_05e7&subsys_068f10de";"pci\ven_10de&dev_05e7&subsys_069710de";"pci\ven_10de&dev_05e7&subsys_071410de";"pci\ven_10de&dev_05e7&subsys_074310de";"pci\ven_10de&dev_05f9";"pci\ven_10de&dev_05fd";"pci\ven_10de&dev_05fe";"pci\ven_10de&dev_05ff";"pci\ven_10de&dev_0619";"pci\ven_10de&dev_061a";"pci\ven_10de&dev_061b";"pci\ven_10de&dev_061c";"pci\ven_10de&dev_061c&subsys_019b1028";"pci\ven_10de&dev_061c&subsys_051810de";"pci\ven_10de&dev_061c&subsys_0770152d";"pci\ven_10de&dev_061c&subsys_16d91043";"pci\ven_10de&dev_061c&subsys_211a17aa";"pci\ven_10de&dev_061d";"pci\ven_10de&dev_061d&subsys_02ef1028";"pci\ven_10de&dev_061d&subsys_09031558";"pci\ven_10de&dev_061d&subsys_1520103c";"pci\ven_10de&dev_061d&subsys_214f17aa";"pci\ven_10de&dev_061d&subsys_219f17aa";"pci\ven_10de&dev_061d&subsys_51021558";"pci\ven_10de&dev_061d&subsys_71001558";"pci\ven_10de&dev_061d&subsys_72001558";"pci\ven_10de&dev_061d&subsys_81001558";"pci\ven_10de&dev_061d&subsys_86871558";"pci\ven_10de&dev_061d&subsys_86891558";"pci\ven_10de&dev_061e&subsys_019c1028";"pci\ven_10de&dev_061e&subsys_02511028";"pci\ven_10de&dev_061e&subsys_02ef1028";"pci\ven_10de&dev_061e&subsys_04811558";"pci\ven_10de&dev_061e&subsys_0539103c";"pci\ven_10de&dev_061e&subsys_05731558";"pci\ven_10de&dev_061e&subsys_08601558";"pci\ven_10de&dev_061e&subsys_09021558";"pci\ven_10de&dev_061e&subsys_211817aa";"pci\ven_10de&dev_061e&subsys_212517aa";"pci\ven_10de&dev_061f&subsys_02ef1028";"pci\ven_10de&dev_061f&subsys_09031558";"pci\ven_10de&dev_061f&subsys_1520103c";"pci\ven_10de&dev_061f&subsys_214e17aa";"pci\ven_10de&dev_061f&subsys_214f17aa";"pci\ven_10de&dev_061f&subsys_219f17aa";"pci\ven_10de&dev_061f&subsys_21a017aa";"pci\ven_10de&dev_061f&subsys_72001558";"pci\ven_10de&dev_061f&subsys_81001558";"pci\ven_10de&dev_061f&subsys_86871558";"pci\ven_10de&dev_061f&subsys_86891558";"pci\ven_10de&dev_0638";"pci\ven_10de&dev_063a&subsys_019b1028";"pci\ven_10de&dev_063a&subsys_02511028";"pci\ven_10de&dev_063a&subsys_02ef1028";"pci\ven_10de&dev_063a&subsys_04811558";"pci\ven_10de&dev_063a&subsys_08601558";"pci\ven_10de&dev_063a&subsys_09021558";"pci\ven_10de&dev_063a&subsys_211917aa";"pci\ven_10de&dev_063a&subsys_212417aa";"pci\ven_10de&dev_063a&subsys_30ec103c";"pci\ven_10de&dev_0658";"pci\ven_10de&dev_0659";"pci\ven_10de&dev_065a&subsys_02501028";"pci\ven_10de&dev_065c";"pci\ven_10de&dev_065c&subsys_02501028";"pci\ven_10de&dev_065c&subsys_11471734";"pci\ven_10de&dev_065c&subsys_30e7103c";"pci\ven_10de&dev_06d1";"pci\ven_10de&dev_06d1&subsys_077110de";"pci\ven_10de&dev_06d1&subsys_077210de";"pci\ven_10de&dev_06d2";"pci\ven_10de&dev_06d2&subsys_077410de";"pci\ven_10de&dev_06d2&subsys_083010de";"pci\ven_10de&dev_06d2&subsys_084210de";"pci\ven_10de&dev_06d2&subsys_088f10de";"pci\ven_10de&dev_06d2&subsys_090810de";"pci\ven_10de&dev_06d8";"pci\ven_10de&dev_06d9";"pci\ven_10de&dev_06da&subsys_081a1028";"pci\ven_10de&dev_06da&subsys_1520103c";"pci\ven_10de&dev_06dc";"pci\ven_10de&dev_06dd";"pci\ven_10de&dev_06de";"pci\ven_10de&dev_06de&subsys_077310de";"pci\ven_10de&dev_06de&subsys_082f10de";"pci\ven_10de&dev_06de&subsys_084010de";"pci\ven_10de&dev_06de&subsys_084210de";"pci\ven_10de&dev_06de&subsys_084610de";"pci\ven_10de&dev_06de&subsys_086610de";"pci\ven_10de&dev_06de&subsys_090710de";"pci\ven_10de&dev_06de&subsys_091e10de";"pci\ven_10de&dev_06df";"pci\ven_10de&dev_06df&subsys_084d10de";"pci\ven_10de&dev_06df&subsys_087f10de";"pci\ven_10de&dev_06ea&subsys_00011179";"pci\ven_10de&dev_06ea&subsys_00021179";"pci\ven_10de&dev_06eb&subsys_00011179";"pci\ven_10de&dev_06eb&subsys_02331028";"pci\ven_10de&dev_06eb&subsys_024f1028";"pci\ven_10de&dev_06eb&subsys_3a2517aa";"pci\ven_10de&dev_06f8";"pci\ven_10de&dev_06f9";"pci\ven_10de&dev_06fa";"pci\ven_10de&dev_06fb";"pci\ven_10de&dev_06fb&subsys_02341028";"pci\ven_10de&dev_06fd";"pci\ven_10de&dev_06ff";"pci\ven_10de&dev_06ff&subsys_071110de";"pci\ven_10de&dev_087a";"pci\ven_10de&dev_0a2c&subsys_1521103c";"pci\ven_10de&dev_0a2c&subsys_214417aa";"pci\ven_10de&dev_0a38";"pci\ven_10de&dev_0a3c";"pci\ven_10de&dev_0a3c&subsys_040c1028";"pci\ven_10de&dev_0a3c&subsys_05111558";"pci\ven_10de&dev_0a3c&subsys_05121558";"pci\ven_10de&dev_0a3c&subsys_1521103c";"pci\ven_10de&dev_0a3c&subsys_158410cf";"pci\ven_10de&dev_0a3c&subsys_214517aa";"pci\ven_10de&dev_0a6a&subsys_00011179";"pci\ven_10de&dev_0a6a&subsys_00021179";"pci\ven_10de&dev_0a6c&subsys_040a1028";"pci\ven_10de&dev_0a6c&subsys_040b1028";"pci\ven_10de&dev_0a6c&subsys_172b103c";"pci\ven_10de&dev_0a6c&subsys_214217aa";"pci\ven_10de&dev_0a6c&subsys_215c17aa";"pci\ven_10de&dev_0a6c&subsys_21c017aa";"pci\ven_10de&dev_0a6c&subsys_21cc17aa";"pci\ven_10de&dev_0a6c&subsys_21cd17aa";"pci\ven_10de&dev_0a6c&subsys_21d417aa";"pci\ven_10de&dev_0a6c&subsys_21d517aa";"pci\ven_10de&dev_0a6c&subsys_21d717aa";"pci\ven_10de&dev_0a6c&subsys_21d817aa";"pci\ven_10de&dev_0a6c&subsys_38a417aa";"pci\ven_10de&dev_0a6c&subsys_391a17aa";"pci\ven_10de&dev_0a78";"pci\ven_10de&dev_0a7c&subsys_172b103c";"pci\ven_10de&dev_0cbc&subsys_040c1028";"pci\ven_10de&dev_0cbc&subsys_1521103c";"pci\ven_10de&dev_0dd8";"pci\ven_10de&dev_0dd8&subsys_091410de";"pci\ven_10de&dev_0dda&subsys_04a31028";"pci\ven_10de&dev_0dda&subsys_14a31028";"pci\ven_10de&dev_0dda&subsys_1631103c";"pci\ven_10de&dev_0dda&subsys_21cf17aa";"pci\ven_10de&dev_0dda&subsys_21d117aa";"pci\ven_10de&dev_0def&subsys_21f317aa";"pci\ven_10de&dev_0def&subsys_21f417aa";"pci\ven_10de&dev_0def&subsys_21f517aa";"pci\ven_10de&dev_0def&subsys_21f617aa";"pci\ven_10de&dev_0def&subsys_21f817aa";"pci\ven_10de&dev_0def&subsys_500517aa";"pci\ven_10de&dev_0df8";"pci\ven_10de&dev_0df9";"pci\ven_10de&dev_0dfa";"pci\ven_10de&dev_0dfa&subsys_04a31028";"pci\ven_10de&dev_0dfa&subsys_14a31028";"pci\ven_10de&dev_0dfa&subsys_1631103c";"pci\ven_10de&dev_0dfa&subsys_163210cf";"pci\ven_10de&dev_0dfa&subsys_21cf17aa";"pci\ven_10de&dev_0dfa&subsys_21d117aa";"pci\ven_10de&dev_0dfc&subsys_05341028";"pci\ven_10de&dev_0dfc&subsys_05351028";"pci\ven_10de&dev_0dfc&subsys_15341028";"pci\ven_10de&dev_0dfc&subsys_15351028";"pci\ven_10de&dev_0e3a";"pci\ven_10de&dev_0e3a&subsys_04a41028";"pci\ven_10de&dev_0e3a&subsys_14a41028";"pci\ven_10de&dev_0e3a&subsys_1630103c";"pci\ven_10de&dev_0e3a&subsys_163310cf";"pci\ven_10de&dev_0e3b";"pci\ven_10de&dev_0e3b&subsys_04a41028";"pci\ven_10de&dev_0e3b&subsys_14a41028";"pci\ven_10de&dev_0e3b&subsys_1630103c";"pci\ven_10de&dev_0e3b&subsys_163410cf";"pci\ven_10de&dev_0ff2";"pci\ven_10de&dev_0ff3";"pci\ven_10de&dev_0ff6&subsys_05cc1028";"pci\ven_10de&dev_0ff6&subsys_060d1028";"pci\ven_10de&dev_0ff6&subsys_15cc1028";"pci\ven_10de&dev_0ff6&subsys_17ee10cf";"pci\ven_10de&dev_0ff6&subsys_1909103c";"pci\ven_10de&dev_0ff6&subsys_190a103c";"pci\ven_10de&dev_0ff6&subsys_197a103c";"pci\ven_10de&dev_0ff6&subsys_197b103c";"pci\ven_10de&dev_0ff6&subsys_221017aa";"pci\ven_10de&dev_0ff6&subsys_221117aa";"pci\ven_10de&dev_0ff6&subsys_221a17aa";"pci\ven_10de&dev_0ff6&subsys_221e17aa";"pci\ven_10de&dev_0ff6&subsys_2253103c";"pci\ven_10de&dev_0ff6&subsys_2254103c";"pci\ven_10de&dev_0ff6&subsys_2255103c";"pci\ven_10de&dev_0ff6&subsys_2256103c";"pci\ven_10de&dev_0ff6&subsys_51061558";"pci\ven_10de&dev_0ff6&subsys_52811558";"pci\ven_10de&dev_0ff6&subsys_71041558";"pci\ven_10de&dev_0ff6&subsys_74811558";"pci\ven_10de&dev_0ff8&subsys_176a10cf";"pci\ven_10de&dev_0ff9";"pci\ven_10de&dev_0ffa";"pci\ven_10de&dev_0ffb&subsys_053e1028";"pci\ven_10de&dev_0ffb&subsys_10db1462";"pci\ven_10de&dev_0ffb&subsys_153e1028";"pci\ven_10de&dev_0ffb&subsys_175e10cf";"pci\ven_10de&dev_0ffb&subsys_175f10cf";"pci\ven_10de&dev_0ffb&subsys_176b103c";"pci\ven_10de&dev_0ffb&subsys_21f517aa";"pci\ven_10de&dev_0ffb&subsys_21f617aa";"pci\ven_10de&dev_0ffc&subsys_053e1028";"pci\ven_10de&dev_0ffc&subsys_10db1462";"pci\ven_10de&dev_0ffc&subsys_153e1028";"pci\ven_10de&dev_0ffc&subsys_175e10cf";"pci\ven_10de&dev_0ffc&subsys_176b103c";"pci\ven_10de&dev_0ffc&subsys_21f517aa";"pci\ven_10de&dev_0ffc&subsys_21f617aa";"pci\ven_10de&dev_0ffc&subsys_51061558";"pci\ven_10de&dev_0ffc&subsys_71041558";"pci\ven_10de&dev_0ffd";"pci\ven_10de&dev_0ffe";"pci\ven_10de&dev_0fff";"pci\ven_10de&dev_1021";"pci\ven_10de&dev_1022";"pci\ven_10de&dev_1023";"pci\ven_10de&dev_1024";"pci\ven_10de&dev_1027";"pci\ven_10de&dev_1028";"pci\ven_10de&dev_1029";"pci\ven_10de&dev_102a";"pci\ven_10de&dev_102d";"pci\ven_10de&dev_103a";"pci\ven_10de&dev_103c";"pci\ven_10de&dev_1056&subsys_04931028";"pci\ven_10de&dev_1056&subsys_04941028";"pci\ven_10de&dev_1056&subsys_04e41028";"pci\ven_10de&dev_1056&subsys_14931028";"pci\ven_10de&dev_1056&subsys_14941028";"pci\ven_10de&dev_1056&subsys_14e41028";"pci\ven_10de&dev_1056&subsys_163610cf";"pci\ven_10de&dev_1056&subsys_21d217aa";"pci\ven_10de&dev_1056&subsys_21d317aa";"pci\ven_10de&dev_1057&subsys_21ce17aa";"pci\ven_10de&dev_1057&subsys_21cf17aa";"pci\ven_10de&dev_1057&subsys_21d017aa";"pci\ven_10de&dev_1057&subsys_21d117aa";"pci\ven_10de&dev_1057&subsys_c0a6144d";"pci\ven_10de&dev_1057&subsys_c0af144d";"pci\ven_10de&dev_1057&subsys_c0b0144d";"pci\ven_10de&dev_107c";"pci\ven_10de&dev_107d";"pci\ven_10de&dev_1091";"pci\ven_10de&dev_1091&subsys_088710de";"pci\ven_10de&dev_1091&subsys_088e10de";"pci\ven_10de&dev_1091&subsys_089110de";"pci\ven_10de&dev_1094";"pci\ven_10de&dev_1094&subsys_088810de";"pci\ven_10de&dev_1096";"pci\ven_10de&dev_1096&subsys_091010de";"pci\ven_10de&dev_1096&subsys_091110de";"pci\ven_10de&dev_109a&subsys_02701558";"pci\ven_10de&dev_109a&subsys_04a41028";"pci\ven_10de&dev_109a&subsys_14a41028";"pci\ven_10de&dev_109a&subsys_1630103c";"pci\ven_10de&dev_109a&subsys_175410cf";"pci\ven_10de&dev_109a&subsys_51021558";"pci\ven_10de&dev_109a&subsys_51051558";"pci\ven_10de&dev_109a&subsys_71001558";"pci\ven_10de&dev_109a&subsys_71021558";"pci\ven_10de&dev_109a&subsys_72001558";"pci\ven_10de&dev_109b";"pci\ven_10de&dev_109b&subsys_091810de";"pci\ven_10de&dev_10d8";"pci\ven_10de&dev_1140&subsys_220017aa";"pci\ven_10de&dev_118f";"pci\ven_10de&dev_1194";"pci\ven_10de&dev_11b4";"pci\ven_10de&dev_11b6";"pci\ven_10de&dev_11b6&subsys_05cd1028";"pci\ven_10de&dev_11b6&subsys_10fc1462";"pci\ven_10de&dev_11b6&subsys_10fd1462";"pci\ven_10de&dev_11b6&subsys_15cd1028";"pci\ven_10de&dev_11b6&subsys_190a103c";"pci\ven_10de&dev_11b6&subsys_197a103c";"pci\ven_10de&dev_11b6&subsys_2255103c";"pci\ven_10de&dev_11b6&subsys_2256103c";"pci\ven_10de&dev_11b6&subsys_51061558";"pci\ven_10de&dev_11b6&subsys_52811558";"pci\ven_10de&dev_11b6&subsys_71041558";"pci\ven_10de&dev_11b6&subsys_74811558";"pci\ven_10de&dev_11b7";"pci\ven_10de&dev_11b7&subsys_05cd1028";"pci\ven_10de&dev_11b7&subsys_11001462";"pci\ven_10de&dev_11b7&subsys_15cd1028";"pci\ven_10de&dev_11b7&subsys_190a103c";"pci\ven_10de&dev_11b7&subsys_197a103c";"pci\ven_10de&dev_11b7&subsys_2255103c";"pci\ven_10de&dev_11b7&subsys_2256103c";"pci\ven_10de&dev_11b8&subsys_02701558";"pci\ven_10de&dev_11b8&subsys_03761558";"pci\ven_10de&dev_11b8&subsys_05cd1028";"pci\ven_10de&dev_11b8&subsys_15cd1028";"pci\ven_10de&dev_11b8&subsys_190a103c";"pci\ven_10de&dev_11b8&subsys_197a103c";"pci\ven_10de&dev_11b8&subsys_2255103c";"pci\ven_10de&dev_11b8&subsys_2256103c";"pci\ven_10de&dev_11ba";"pci\ven_10de&dev_11bc";"pci\ven_10de&dev_11bc&subsys_02701558";"pci\ven_10de&dev_11bc&subsys_03711558";"pci\ven_10de&dev_11bc&subsys_03761558";"pci\ven_10de&dev_11bc&subsys_053f1028";"pci\ven_10de&dev_11bc&subsys_153f1028";"pci\ven_10de&dev_11bc&subsys_176210cf";"pci\ven_10de&dev_11bc&subsys_176c103c";"pci\ven_10de&dev_11bd";"pci\ven_10de&dev_11bd&subsys_053f1028";"pci\ven_10de&dev_11bd&subsys_10db1462";"pci\ven_10de&dev_11bd&subsys_153f1028";"pci\ven_10de&dev_11bd&subsys_176110cf";"pci\ven_10de&dev_11bd&subsys_176c103c";"pci\ven_10de&dev_11be";"pci\ven_10de&dev_11be&subsys_053f1028";"pci\ven_10de&dev_11be&subsys_10db1462";"pci\ven_10de&dev_11be&subsys_10eb1462";"pci\ven_10de&dev_11be&subsys_153f1028";"pci\ven_10de&dev_11be&subsys_176010cf";"pci\ven_10de&dev_11be&subsys_176c103c";"pci\ven_10de&dev_11be&subsys_51051558";"pci\ven_10de&dev_11be&subsys_51061558";"pci\ven_10de&dev_11be&subsys_71021558";"pci\ven_10de&dev_11be&subsys_71041558";"pci\ven_10de&dev_11bf";"pci\ven_10de&dev_11fa";"pci\ven_10de&dev_11fc";"pci\ven_10de&dev_11fc&subsys_00011179";"pci\ven_10de&dev_11fc&subsys_05cc1028";"pci\ven_10de&dev_11fc&subsys_10fb1462";"pci\ven_10de&dev_11fc&subsys_111d1462";"pci\ven_10de&dev_11fc&subsys_111e1462";"pci\ven_10de&dev_11fc&subsys_15cc1028";"pci\ven_10de&dev_11fc&subsys_1708172f";"pci\ven_10de&dev_11fc&subsys_17ef10cf";"pci\ven_10de&dev_11fc&subsys_1909103c";"pci\ven_10de&dev_11fc&subsys_197b103c";"pci\ven_10de&dev_11fc&subsys_221017aa";"pci\ven_10de&dev_11fc&subsys_221117aa";"pci\ven_10de&dev_11fc&subsys_221a17aa";"pci\ven_10de&dev_11fc&subsys_221e17aa";"pci\ven_10de&dev_11fc&subsys_2253103c";"pci\ven_10de&dev_11fc&subsys_2254103c";"pci\ven_10de&dev_12b9";"pci\ven_10de&dev_12b9&subsys_1909103c";"pci\ven_10de&dev_12b9&subsys_190a103c";"pci\ven_10de&dev_12b9&subsys_197a103c";"pci\ven_10de&dev_12b9&subsys_197b103c";"pci\ven_10de&dev_12b9&subsys_2253103c";"pci\ven_10de&dev_12b9&subsys_2254103c";"pci\ven_10de&dev_12ba&subsys_17ed10cf";"pci\ven_10de&dev_13b3&subsys_05cd1028";"pci\ven_10de&dev_13b3&subsys_15cd1028";"pci\ven_10de&dev_13b3&subsys_2255103c";"pci\ven_10de&dev_13b3&subsys_2256103c";"pci\ven_10de&dev_13ba";"pci\ven_10de&dev_13bb"

I’ve observed that the Registry contains a list of all PCI devices detected in the system as subkeys of HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\PCI
(note - varies by device type; for example when adapting for RealTex devices search HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\HDAUDIO instead)

q: pathnames of keys of keys of key "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\PCI" of native registry
A: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\PCI\VEN_104C&DEV_8241&SUBSYS_1589103C&REV_02\4&27cbe021&0&00E7
A: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\PCI\VEN_10DE&DEV_0E1B&SUBSYS_0967103C&REV_A1\4&3a58d9f6&0&0110
A: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\PCI\VEN_10DE&DEV_0E1B&SUBSYS_0967103C&REV_A1\4&57c889b&0&0118
<snip>
T: 0.769 ms

These keys have values for “HardwareID” and “CompatibleIDs” that include PCI Vendor and Device codes that can be used to identify the proper driver.
These keys may also have a “Driver” key, if a driver has already been loaded. The value for the “Driver” key would be “[Class GUID]\[index]”, for example
{4d36e968-e325-11ce-bfc1-08002be10318}\0001. If a driver is loaded, there should also be a “ClassGUID” value that we can use to speed up the query (by discarding any non-matching ClassGUID values, if present)
The installed drivers in a system are stored at HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Class<CLASS GUID><INDEX>.
Once we know the installed driver for a given PCI device (if there is a driver installed), we can check the driver Provider and Version to see if it matches

So the basic logic is

  1. Identify the devices covered by the driver. Use that to build the device set I’m trying to match and paste that into “set of()” below.
  2. Search HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\PCI for subkeys that have HardwareID or CompatibleIDs values matching the driver
  3. Of the keys that have a matching device, determine whether there is already a driver loaded.
    3a) If no driver is loaded, the Fixlet is relevant; if a driver is loaded, check whether the driver’s ProviderName matches my driver and the version is equal to or higher. If so, the fixlet is Relevant, else Not Relevant.

Based on that, here’s what I’m using now. It seems to be fast/efficient enough, but is certainly difficult to read

q: /* Check for the presence of the NVidia cards (by Enum\PCI); matched to the right Class; with no driver or an earlier version of the driver; with a CompatibleID matching our PCI device list */ exists (keys of keys of key "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\PCI" of native registry) whose ( /* if class is defined then class matches expectation (in this case, "Video"); if no class is listed then its an unknown device and may still be relevant */(if exists (value "ClassGUID" of it) then (/* SUBST CLASS HERE */ value "ClassGUID" of it as string = "{4d36e968-e325-11ce-bfc1-08002be10318}") else true) AND /* if there is no "Driver" key then true (no driver is installed), else check the driver present in the "Driver" key is the correct provider & version */ (if not exists value "Driver" of it then true else (exists (it, /* SUBST CLASS HERE */ keys of key "{4d36e968-e325-11ce-bfc1-08002be10318}" of key "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class" of native registry) whose (pathname of item 1 of it as lowercase ends with value "Driver" of item 0 of it as string as lowercase AND ( /* wrong Provider */ not exists (value "ProviderName" of item 1 of it) whose (it = "NVIDIA") or ( /* version too low */ not exists (value "DriverVersion" of item 1 of it) whose (it as string as version >= version "10.18.13.5456")))) )) AND ( /* exists a hardware ID matching our expected list from INF*/ exists (substrings separated by "%00" of ((values "CompatibleIDs" of it; values "HardwareID" of it) as string as lowercase as trimmed string)) whose (it != "" and it is contained by set of ("pci\ven_10de&dev_06d1";"pci\ven_10de&dev_06d1&subsys_077110de";"pci\ven_10de&dev_06d1&subsys_077210de";"pci\ven_10de&dev_06d2";"pci\ven_10de&dev_06d2&subsys_077410de";"<rest of list snipped>"))) )
A: False
T: 3.875 ms
I: singular boolean

I don’t like that all of the Registry inspectors have “of registry” as part of the property name. The File inspectors make that a lot easier, i.e. I can query for file (it) of value "X" of key "Y" of native registry as string, but cannot look for key (it) of value "X" of key "Y" of native registry as string. That limitation makes this query considerably less efficient than it could be, if I didn’t have to scan all the keys of HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\GUID to find one with a pathname matching a Driver value.

I’m also not (yet) handling the ExcludeFromSelect that could be present in a driver INF file (but didn’t exist in this particular driver, thankfully).

So this use case is where there isn’t a driver installed at all for the device, not that there is an older driver installed and you are going to update it?

This should be the set of HardwareID and CompatibleIDs of all devices missing drivers.

(it as trimmed string) whose(it != "") of substrings separated by "%00" of (it as string) of (values "HardwareID" of it; values "CompatibleIDs" of it) of keys whose(not exists (it as string) of values "Driver" of it) of keys of keys "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\PCI" of registry

Driver registry path:

(it as string) of values "Driver" of keys of keys of keys "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\PCI" of registry

Driver registry keys of PCI devices:

keys whose( exists (pathname of it, (it as string) of values "Driver" of keys of keys of keys "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\PCI" of registry) whose(item 0 of it contains item 1 of it) ) of keys of keys "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class" of registry

This would be true if there is no driver already installed: (I think)

0 < number of elements of intersections of (it; (set of ("pci\ven_10de&dev_0ffd";"pci\ven_10de&dev_019e";"pci\ven_10de&dev_040a";"pci\ven_10de&dev_040b&subsys_30c3103c";"pci\ven_10de&dev_040c&subsys_142310cf";"pci\ven_10de&dev_040c&subsys_20d917aa";"pci\ven_10de&dev_040c&subsys_30c5103c";"pci\ven_10de&dev_040d";"pci\ven_10de&dev_040d&subsys_019b1028";"pci\ven_10de&dev_040d&subsys_04811558";"pci\ven_10de&dev_040d&subsys_05731558";"pci\ven_10de&dev_040d&subsys_0770152d";"pci\ven_10de&dev_040d&subsys_08601558";"pci\ven_10de&dev_040d&subsys_09021558";"pci\ven_10de&dev_040d&subsys_2052161f";"pci\ven_10de&dev_040d&subsys_30c3103c";"pci\ven_10de&dev_040e";"pci\ven_10de&dev_040f";"pci\ven_10de&dev_0429&subsys_01fe1028";"pci\ven_10de&dev_0429&subsys_20d817aa";"pci\ven_10de&dev_042a&subsys_00011179";"pci\ven_10de&dev_042a&subsys_00021179";"pci\ven_10de&dev_042b&subsys_019c1028";"pci\ven_10de&dev_042b&subsys_01f91028";"pci\ven_10de&dev_042b&subsys_01fe1028";"pci\ven_10de&dev_042d&subsys_019b1028";"pci\ven_10de&dev_042d&subsys_01ff1028";"pci\ven_10de&dev_042d&subsys_024a1028";"pci\ven_10de&dev_042d&subsys_024b1028";"pci\ven_10de&dev_042f";"pci\ven_10de&dev_05e7";"pci\ven_10de&dev_05e7&subsys_059510de";"pci\ven_10de&dev_05e7&subsys_066a10de";"pci\ven_10de&dev_05e7&subsys_068f10de";"pci\ven_10de&dev_05e7&subsys_069710de";"pci\ven_10de&dev_05e7&subsys_071410de";"pci\ven_10de&dev_05e7&subsys_074310de";"pci\ven_10de&dev_05f9";"pci\ven_10de&dev_05fd";"pci\ven_10de&dev_05fe";"pci\ven_10de&dev_05ff";"pci\ven_10de&dev_0619";"pci\ven_10de&dev_061a";"pci\ven_10de&dev_061b";"pci\ven_10de&dev_061c";"pci\ven_10de&dev_061c&subsys_019b1028";"pci\ven_10de&dev_061c&subsys_051810de";"pci\ven_10de&dev_061c&subsys_0770152d";"pci\ven_10de&dev_061c&subsys_16d91043";"pci\ven_10de&dev_061c&subsys_211a17aa";"pci\ven_10de&dev_061d";"pci\ven_10de&dev_061d&subsys_02ef1028";"pci\ven_10de&dev_061d&subsys_09031558";"pci\ven_10de&dev_061d&subsys_1520103c";"pci\ven_10de&dev_061d&subsys_214f17aa";"pci\ven_10de&dev_061d&subsys_219f17aa";"pci\ven_10de&dev_061d&subsys_51021558";"pci\ven_10de&dev_061d&subsys_71001558";"pci\ven_10de&dev_061d&subsys_72001558";"pci\ven_10de&dev_061d&subsys_81001558";"pci\ven_10de&dev_061d&subsys_86871558";"pci\ven_10de&dev_061d&subsys_86891558";"pci\ven_10de&dev_061e&subsys_019c1028";"pci\ven_10de&dev_061e&subsys_02511028";"pci\ven_10de&dev_061e&subsys_02ef1028";"pci\ven_10de&dev_061e&subsys_04811558";"pci\ven_10de&dev_061e&subsys_0539103c";"pci\ven_10de&dev_061e&subsys_05731558";"pci\ven_10de&dev_061e&subsys_08601558";"pci\ven_10de&dev_061e&subsys_09021558";"pci\ven_10de&dev_061e&subsys_211817aa";"pci\ven_10de&dev_061e&subsys_212517aa";"pci\ven_10de&dev_061f&subsys_02ef1028";"pci\ven_10de&dev_061f&subsys_09031558";"pci\ven_10de&dev_061f&subsys_1520103c";"pci\ven_10de&dev_061f&subsys_214e17aa";"pci\ven_10de&dev_061f&subsys_214f17aa";"pci\ven_10de&dev_061f&subsys_219f17aa";"pci\ven_10de&dev_061f&subsys_21a017aa";"pci\ven_10de&dev_061f&subsys_72001558";"pci\ven_10de&dev_061f&subsys_81001558";"pci\ven_10de&dev_061f&subsys_86871558";"pci\ven_10de&dev_061f&subsys_86891558";"pci\ven_10de&dev_0638";"pci\ven_10de&dev_063a&subsys_019b1028";"pci\ven_10de&dev_063a&subsys_02511028";"pci\ven_10de&dev_063a&subsys_02ef1028";"pci\ven_10de&dev_063a&subsys_04811558";"pci\ven_10de&dev_063a&subsys_08601558";"pci\ven_10de&dev_063a&subsys_09021558";"pci\ven_10de&dev_063a&subsys_211917aa";"pci\ven_10de&dev_063a&subsys_212417aa";"pci\ven_10de&dev_063a&subsys_30ec103c";"pci\ven_10de&dev_0658";"pci\ven_10de&dev_0659";"pci\ven_10de&dev_065a&subsys_02501028";"pci\ven_10de&dev_065c";"pci\ven_10de&dev_065c&subsys_02501028";"pci\ven_10de&dev_065c&subsys_11471734";"pci\ven_10de&dev_065c&subsys_30e7103c";"pci\ven_10de&dev_06d1";"pci\ven_10de&dev_06d1&subsys_077110de";"pci\ven_10de&dev_06d1&subsys_077210de";"pci\ven_10de&dev_06d2";"pci\ven_10de&dev_06d2&subsys_077410de";"pci\ven_10de&dev_06d2&subsys_083010de";"pci\ven_10de&dev_06d2&subsys_084210de";"pci\ven_10de&dev_06d2&subsys_088f10de";"pci\ven_10de&dev_06d2&subsys_090810de";"pci\ven_10de&dev_06d8";"pci\ven_10de&dev_06d9";"pci\ven_10de&dev_06da&subsys_081a1028";"pci\ven_10de&dev_06da&subsys_1520103c";"pci\ven_10de&dev_06dc";"pci\ven_10de&dev_06dd";"pci\ven_10de&dev_06de";"pci\ven_10de&dev_06de&subsys_077310de";"pci\ven_10de&dev_06de&subsys_082f10de";"pci\ven_10de&dev_06de&subsys_084010de";"pci\ven_10de&dev_06de&subsys_084210de";"pci\ven_10de&dev_06de&subsys_084610de";"pci\ven_10de&dev_06de&subsys_086610de";"pci\ven_10de&dev_06de&subsys_090710de";"pci\ven_10de&dev_06de&subsys_091e10de";"pci\ven_10de&dev_06df";"pci\ven_10de&dev_06df&subsys_084d10de";"pci\ven_10de&dev_06df&subsys_087f10de";"pci\ven_10de&dev_06ea&subsys_00011179";"pci\ven_10de&dev_06ea&subsys_00021179";"pci\ven_10de&dev_06eb&subsys_00011179";"pci\ven_10de&dev_06eb&subsys_02331028";"pci\ven_10de&dev_06eb&subsys_024f1028";"pci\ven_10de&dev_06eb&subsys_3a2517aa";"pci\ven_10de&dev_06f8";"pci\ven_10de&dev_06f9";"pci\ven_10de&dev_06fa";"pci\ven_10de&dev_06fb";"pci\ven_10de&dev_06fb&subsys_02341028";"pci\ven_10de&dev_06fd";"pci\ven_10de&dev_06ff";"pci\ven_10de&dev_06ff&subsys_071110de";"pci\ven_10de&dev_087a";"pci\ven_10de&dev_0a2c&subsys_1521103c";"pci\ven_10de&dev_0a2c&subsys_214417aa";"pci\ven_10de&dev_0a38";"pci\ven_10de&dev_0a3c";"pci\ven_10de&dev_0a3c&subsys_040c1028";"pci\ven_10de&dev_0a3c&subsys_05111558";"pci\ven_10de&dev_0a3c&subsys_05121558";"pci\ven_10de&dev_0a3c&subsys_1521103c";"pci\ven_10de&dev_0a3c&subsys_158410cf";"pci\ven_10de&dev_0a3c&subsys_214517aa";"pci\ven_10de&dev_0a6a&subsys_00011179";"pci\ven_10de&dev_0a6a&subsys_00021179";"pci\ven_10de&dev_0a6c&subsys_040a1028";"pci\ven_10de&dev_0a6c&subsys_040b1028";"pci\ven_10de&dev_0a6c&subsys_172b103c";"pci\ven_10de&dev_0a6c&subsys_214217aa";"pci\ven_10de&dev_0a6c&subsys_215c17aa";"pci\ven_10de&dev_0a6c&subsys_21c017aa";"pci\ven_10de&dev_0a6c&subsys_21cc17aa";"pci\ven_10de&dev_0a6c&subsys_21cd17aa";"pci\ven_10de&dev_0a6c&subsys_21d417aa";"pci\ven_10de&dev_0a6c&subsys_21d517aa";"pci\ven_10de&dev_0a6c&subsys_21d717aa";"pci\ven_10de&dev_0a6c&subsys_21d817aa";"pci\ven_10de&dev_0a6c&subsys_38a417aa";"pci\ven_10de&dev_0a6c&subsys_391a17aa";"pci\ven_10de&dev_0a78";"pci\ven_10de&dev_0a7c&subsys_172b103c";"pci\ven_10de&dev_0cbc&subsys_040c1028";"pci\ven_10de&dev_0cbc&subsys_1521103c";"pci\ven_10de&dev_0dd8";"pci\ven_10de&dev_0dd8&subsys_091410de";"pci\ven_10de&dev_0dda&subsys_04a31028";"pci\ven_10de&dev_0dda&subsys_14a31028";"pci\ven_10de&dev_0dda&subsys_1631103c";"pci\ven_10de&dev_0dda&subsys_21cf17aa";"pci\ven_10de&dev_0dda&subsys_21d117aa";"pci\ven_10de&dev_0def&subsys_21f317aa";"pci\ven_10de&dev_0def&subsys_21f417aa";"pci\ven_10de&dev_0def&subsys_21f517aa";"pci\ven_10de&dev_0def&subsys_21f617aa";"pci\ven_10de&dev_0def&subsys_21f817aa";"pci\ven_10de&dev_0def&subsys_500517aa";"pci\ven_10de&dev_0df8";"pci\ven_10de&dev_0df9";"pci\ven_10de&dev_0dfa";"pci\ven_10de&dev_0dfa&subsys_04a31028";"pci\ven_10de&dev_0dfa&subsys_14a31028";"pci\ven_10de&dev_0dfa&subsys_1631103c";"pci\ven_10de&dev_0dfa&subsys_163210cf";"pci\ven_10de&dev_0dfa&subsys_21cf17aa";"pci\ven_10de&dev_0dfa&subsys_21d117aa";"pci\ven_10de&dev_0dfc&subsys_05341028";"pci\ven_10de&dev_0dfc&subsys_05351028";"pci\ven_10de&dev_0dfc&subsys_15341028";"pci\ven_10de&dev_0dfc&subsys_15351028";"pci\ven_10de&dev_0e3a";"pci\ven_10de&dev_0e3a&subsys_04a41028";"pci\ven_10de&dev_0e3a&subsys_14a41028";"pci\ven_10de&dev_0e3a&subsys_1630103c";"pci\ven_10de&dev_0e3a&subsys_163310cf";"pci\ven_10de&dev_0e3b";"pci\ven_10de&dev_0e3b&subsys_04a41028";"pci\ven_10de&dev_0e3b&subsys_14a41028";"pci\ven_10de&dev_0e3b&subsys_1630103c";"pci\ven_10de&dev_0e3b&subsys_163410cf";"pci\ven_10de&dev_0ff2";"pci\ven_10de&dev_0ff3";"pci\ven_10de&dev_0ff6&subsys_05cc1028";"pci\ven_10de&dev_0ff6&subsys_060d1028";"pci\ven_10de&dev_0ff6&subsys_15cc1028";"pci\ven_10de&dev_0ff6&subsys_17ee10cf";"pci\ven_10de&dev_0ff6&subsys_1909103c";"pci\ven_10de&dev_0ff6&subsys_190a103c";"pci\ven_10de&dev_0ff6&subsys_197a103c";"pci\ven_10de&dev_0ff6&subsys_197b103c";"pci\ven_10de&dev_0ff6&subsys_221017aa";"pci\ven_10de&dev_0ff6&subsys_221117aa";"pci\ven_10de&dev_0ff6&subsys_221a17aa";"pci\ven_10de&dev_0ff6&subsys_221e17aa";"pci\ven_10de&dev_0ff6&subsys_2253103c";"pci\ven_10de&dev_0ff6&subsys_2254103c";"pci\ven_10de&dev_0ff6&subsys_2255103c";"pci\ven_10de&dev_0ff6&subsys_2256103c";"pci\ven_10de&dev_0ff6&subsys_51061558";"pci\ven_10de&dev_0ff6&subsys_52811558";"pci\ven_10de&dev_0ff6&subsys_71041558";"pci\ven_10de&dev_0ff6&subsys_74811558";"pci\ven_10de&dev_0ff8&subsys_176a10cf";"pci\ven_10de&dev_0ff9";"pci\ven_10de&dev_0ffa";"pci\ven_10de&dev_0ffb&subsys_053e1028";"pci\ven_10de&dev_0ffb&subsys_10db1462";"pci\ven_10de&dev_0ffb&subsys_153e1028";"pci\ven_10de&dev_0ffb&subsys_175e10cf";"pci\ven_10de&dev_0ffb&subsys_175f10cf";"pci\ven_10de&dev_0ffb&subsys_176b103c";"pci\ven_10de&dev_0ffb&subsys_21f517aa";"pci\ven_10de&dev_0ffb&subsys_21f617aa";"pci\ven_10de&dev_0ffc&subsys_053e1028";"pci\ven_10de&dev_0ffc&subsys_10db1462";"pci\ven_10de&dev_0ffc&subsys_153e1028";"pci\ven_10de&dev_0ffc&subsys_175e10cf";"pci\ven_10de&dev_0ffc&subsys_176b103c";"pci\ven_10de&dev_0ffc&subsys_21f517aa";"pci\ven_10de&dev_0ffc&subsys_21f617aa";"pci\ven_10de&dev_0ffc&subsys_51061558";"pci\ven_10de&dev_0ffc&subsys_71041558";"pci\ven_10de&dev_0ffd";"pci\ven_10de&dev_0ffe";"pci\ven_10de&dev_0fff";"pci\ven_10de&dev_1021";"pci\ven_10de&dev_1022";"pci\ven_10de&dev_1023";"pci\ven_10de&dev_1024";"pci\ven_10de&dev_1027";"pci\ven_10de&dev_1028";"pci\ven_10de&dev_1029";"pci\ven_10de&dev_102a";"pci\ven_10de&dev_102d";"pci\ven_10de&dev_103a";"pci\ven_10de&dev_103c";"pci\ven_10de&dev_1056&subsys_04931028";"pci\ven_10de&dev_1056&subsys_04941028";"pci\ven_10de&dev_1056&subsys_04e41028";"pci\ven_10de&dev_1056&subsys_14931028";"pci\ven_10de&dev_1056&subsys_14941028";"pci\ven_10de&dev_1056&subsys_14e41028";"pci\ven_10de&dev_1056&subsys_163610cf";"pci\ven_10de&dev_1056&subsys_21d217aa";"pci\ven_10de&dev_1056&subsys_21d317aa";"pci\ven_10de&dev_1057&subsys_21ce17aa";"pci\ven_10de&dev_1057&subsys_21cf17aa";"pci\ven_10de&dev_1057&subsys_21d017aa";"pci\ven_10de&dev_1057&subsys_21d117aa";"pci\ven_10de&dev_1057&subsys_c0a6144d";"pci\ven_10de&dev_1057&subsys_c0af144d";"pci\ven_10de&dev_1057&subsys_c0b0144d";"pci\ven_10de&dev_107c";"pci\ven_10de&dev_107d";"pci\ven_10de&dev_1091";"pci\ven_10de&dev_1091&subsys_088710de";"pci\ven_10de&dev_1091&subsys_088e10de";"pci\ven_10de&dev_1091&subsys_089110de";"pci\ven_10de&dev_1094";"pci\ven_10de&dev_1094&subsys_088810de";"pci\ven_10de&dev_1096";"pci\ven_10de&dev_1096&subsys_091010de";"pci\ven_10de&dev_1096&subsys_091110de";"pci\ven_10de&dev_109a&subsys_02701558";"pci\ven_10de&dev_109a&subsys_04a41028";"pci\ven_10de&dev_109a&subsys_14a41028";"pci\ven_10de&dev_109a&subsys_1630103c";"pci\ven_10de&dev_109a&subsys_175410cf";"pci\ven_10de&dev_109a&subsys_51021558";"pci\ven_10de&dev_109a&subsys_51051558";"pci\ven_10de&dev_109a&subsys_71001558";"pci\ven_10de&dev_109a&subsys_71021558";"pci\ven_10de&dev_109a&subsys_72001558";"pci\ven_10de&dev_109b";"pci\ven_10de&dev_109b&subsys_091810de";"pci\ven_10de&dev_10d8";"pci\ven_10de&dev_1140&subsys_220017aa";"pci\ven_10de&dev_118f";"pci\ven_10de&dev_1194";"pci\ven_10de&dev_11b4";"pci\ven_10de&dev_11b6";"pci\ven_10de&dev_11b6&subsys_05cd1028";"pci\ven_10de&dev_11b6&subsys_10fc1462";"pci\ven_10de&dev_11b6&subsys_10fd1462";"pci\ven_10de&dev_11b6&subsys_15cd1028";"pci\ven_10de&dev_11b6&subsys_190a103c";"pci\ven_10de&dev_11b6&subsys_197a103c";"pci\ven_10de&dev_11b6&subsys_2255103c";"pci\ven_10de&dev_11b6&subsys_2256103c";"pci\ven_10de&dev_11b6&subsys_51061558";"pci\ven_10de&dev_11b6&subsys_52811558";"pci\ven_10de&dev_11b6&subsys_71041558";"pci\ven_10de&dev_11b6&subsys_74811558";"pci\ven_10de&dev_11b7";"pci\ven_10de&dev_11b7&subsys_05cd1028";"pci\ven_10de&dev_11b7&subsys_11001462";"pci\ven_10de&dev_11b7&subsys_15cd1028";"pci\ven_10de&dev_11b7&subsys_190a103c";"pci\ven_10de&dev_11b7&subsys_197a103c";"pci\ven_10de&dev_11b7&subsys_2255103c";"pci\ven_10de&dev_11b7&subsys_2256103c";"pci\ven_10de&dev_11b8&subsys_02701558";"pci\ven_10de&dev_11b8&subsys_03761558";"pci\ven_10de&dev_11b8&subsys_05cd1028";"pci\ven_10de&dev_11b8&subsys_15cd1028";"pci\ven_10de&dev_11b8&subsys_190a103c";"pci\ven_10de&dev_11b8&subsys_197a103c";"pci\ven_10de&dev_11b8&subsys_2255103c";"pci\ven_10de&dev_11b8&subsys_2256103c";"pci\ven_10de&dev_11ba";"pci\ven_10de&dev_11bc";"pci\ven_10de&dev_11bc&subsys_02701558";"pci\ven_10de&dev_11bc&subsys_03711558";"pci\ven_10de&dev_11bc&subsys_03761558";"pci\ven_10de&dev_11bc&subsys_053f1028";"pci\ven_10de&dev_11bc&subsys_153f1028";"pci\ven_10de&dev_11bc&subsys_176210cf";"pci\ven_10de&dev_11bc&subsys_176c103c";"pci\ven_10de&dev_11bd";"pci\ven_10de&dev_11bd&subsys_053f1028";"pci\ven_10de&dev_11bd&subsys_10db1462";"pci\ven_10de&dev_11bd&subsys_153f1028";"pci\ven_10de&dev_11bd&subsys_176110cf";"pci\ven_10de&dev_11bd&subsys_176c103c";"pci\ven_10de&dev_11be";"pci\ven_10de&dev_11be&subsys_053f1028";"pci\ven_10de&dev_11be&subsys_10db1462";"pci\ven_10de&dev_11be&subsys_10eb1462";"pci\ven_10de&dev_11be&subsys_153f1028";"pci\ven_10de&dev_11be&subsys_176010cf";"pci\ven_10de&dev_11be&subsys_176c103c";"pci\ven_10de&dev_11be&subsys_51051558";"pci\ven_10de&dev_11be&subsys_51061558";"pci\ven_10de&dev_11be&subsys_71021558";"pci\ven_10de&dev_11be&subsys_71041558";"pci\ven_10de&dev_11bf";"pci\ven_10de&dev_11fa";"pci\ven_10de&dev_11fc";"pci\ven_10de&dev_11fc&subsys_00011179";"pci\ven_10de&dev_11fc&subsys_05cc1028";"pci\ven_10de&dev_11fc&subsys_10fb1462";"pci\ven_10de&dev_11fc&subsys_111d1462";"pci\ven_10de&dev_11fc&subsys_111e1462";"pci\ven_10de&dev_11fc&subsys_15cc1028";"pci\ven_10de&dev_11fc&subsys_1708172f";"pci\ven_10de&dev_11fc&subsys_17ef10cf";"pci\ven_10de&dev_11fc&subsys_1909103c";"pci\ven_10de&dev_11fc&subsys_197b103c";"pci\ven_10de&dev_11fc&subsys_221017aa";"pci\ven_10de&dev_11fc&subsys_221117aa";"pci\ven_10de&dev_11fc&subsys_221a17aa";"pci\ven_10de&dev_11fc&subsys_221e17aa";"pci\ven_10de&dev_11fc&subsys_2253103c";"pci\ven_10de&dev_11fc&subsys_2254103c";"pci\ven_10de&dev_12b9";"pci\ven_10de&dev_12b9&subsys_1909103c";"pci\ven_10de&dev_12b9&subsys_190a103c";"pci\ven_10de&dev_12b9&subsys_197a103c";"pci\ven_10de&dev_12b9&subsys_197b103c";"pci\ven_10de&dev_12b9&subsys_2253103c";"pci\ven_10de&dev_12b9&subsys_2254103c";"pci\ven_10de&dev_12ba&subsys_17ed10cf";"pci\ven_10de&dev_13b3&subsys_05cd1028";"pci\ven_10de&dev_13b3&subsys_15cd1028";"pci\ven_10de&dev_13b3&subsys_2255103c";"pci\ven_10de&dev_13b3&subsys_2256103c";"pci\ven_10de&dev_13ba";"pci\ven_10de&dev_13bb"))) of set of (it as trimmed string as lowercase) whose(it != "") of substrings separated by "%00" of (it as string) of (values "HardwareID" of it; values "CompatibleIDs" of it) of keys whose(not exists (it as string) of values "Driver" of it) of keys of keys "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\PCI" of registry

This is to handle any of three cases -

  1. There is no driver installed at all
  2. The installed driver comes from a different provider (ie an Nvidia driver should be preferred over a Microsoft-provided default)
  3. The installed driver is of a lower version

So far it appears to work for me, I’m hoping to either find a way to make it more easily modified, or find out whether anyone has a better practice.

In particular I’d hope that since “OS Deployment and Bare Metal Imaging” must already be doing a lot of the device detection, we might get some insight from the people using those products.

I like your other reply using “intersections of”, I’ll need to see whether I can put that to work. It might introduce more overhead, as a single driver would match a single device multiple times.

1 Like

It might be better to handle the 3 separate cases with 3 separate relevance clauses that are OR’d together.

It might be better still to handle the 3 separate cases with 3 separate fixlets/tasks. This option is a tad annoying since the actionscript for all 3 is likely the same.