首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何在C#中获取驱动程序的日期和版本?

在C#中获取驱动程序的日期和版本,可以使用Windows API函数。以下是一个示例代码:

代码语言:csharp
复制
using System;
using System.Runtime.InteropServices;

public class DriverInfo
{
    [DllImport("setupapi.dll", CharSet = CharSet.Auto)]
    public static extern IntPtr SetupDiGetClassDevs(
        ref Guid ClassGuid,
        [MarshalAs(UnmanagedType.LPTStr)] string Enumerator,
        IntPtr hwndParent,
        uint Flags);

    [DllImport("setupapi.dll", CharSet = CharSet.Auto)]
    public static extern bool SetupDiEnumDeviceInfo(
        IntPtr DeviceInfoSet,
        uint MemberIndex,
        ref SP_DEVINFO_DATA DeviceInterfaceData);

    [DllImport("setupapi.dll", CharSet = CharSet.Auto, SetLastError = true)]
    public static extern bool SetupDiGetDeviceRegistryProperty(
        IntPtr DeviceInfoSet,
        ref SP_DEVINFO_DATA DeviceInfoData,
        uint Property,
        out uint PropertyRegDataType,
        IntPtr PropertyBuffer,
        uint PropertyBufferSize,
        out uint RequiredSize);

    [DllImport("setupapi.dll", CharSet = CharSet.Auto)]
    public static extern bool SetupDiDestroyDeviceInfoList(
        IntPtr DeviceInfoSet);

    [StructLayout(LayoutKind.Sequential)]
    public struct SP_DEVINFO_DATA
    {
        public uint cbSize;
        public Guid ClassGuid;
        public uint DevInst;
        public IntPtr Reserved;
    }

    public static void Main()
    {
        Guid guid = new Guid();
        IntPtr deviceInfoSet = SetupDiGetClassDevs(ref guid, null, IntPtr.Zero, 4);
        SP_DEVINFO_DATA deviceInfoData = new SP_DEVINFO_DATA();
        deviceInfoData.cbSize = (uint)Marshal.SizeOf(deviceInfoData);
        uint memberIndex = 0;

        while (SetupDiEnumDeviceInfo(deviceInfoSet, memberIndex, ref deviceInfoData))
        {
            memberIndex += 1;
            uint property = 2; // SPDRP_DRIVERVERSION
            uint propertyRegDataType;
            uint requiredSize;
            SetupDiGetDeviceRegistryProperty(deviceInfoSet, ref deviceInfoData, property, out propertyRegDataType, IntPtr.Zero, 0, out requiredSize);

            IntPtr propertyBuffer = Marshal.AllocHGlobal((int)requiredSize);
            SetupDiGetDeviceRegistryProperty(deviceInfoSet, ref deviceInfoData, property, out propertyRegDataType, propertyBuffer, requiredSize, out requiredSize);

            string driverVersion = Marshal.PtrToStringAuto(propertyBuffer);
            Marshal.FreeHGlobal(propertyBuffer);

            Console.WriteLine("Driver version: " + driverVersion);
        }

        SetupDiDestroyDeviceInfoList(deviceInfoSet);
    }
}

这个示例代码将枚举所有设备,并获取它们的驱动程序版本。请注意,这个示例代码可能需要管理员权限才能运行。

在这个示例中,我们使用了以下Windows API函数:

  • SetupDiGetClassDevs:获取设备信息集
  • SetupDiEnumDeviceInfo:枚举设备信息集中的设备
  • SetupDiGetDeviceRegistryProperty:获取设备注册表属性
  • SetupDiDestroyDeviceInfoList:销毁设备信息集

这些API函数可以帮助我们获取驱动程序的日期和版本。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

何在代码获取Java应用当前版本号?

最近需要在项目中获取项目的版本号,最笨方法莫过于硬编码一个版本号,当然我也是这么干。不过闲下来时候突发奇想Spring Boot项目中pom.xml定义版本号能不能通过API获得呢?...从配置文件读取 Maven在构建项目时可以通过资源插件将构建属性即pom.xml属性注入到指定资源文件,具体操作为: ... 恰好spring-boot-starter-parent已经设置了这种方式。...Spring Boot提供 Spring Boot其实已经内置了获取项目构建信息自动配置ProjectInfoAutoConfiguration,它包含一个条件BeanBuildProperties:...spring-boot-version", "time" : { "epochSecond" : 1620664643, "nano" : 591000000 } } 总结 今天介绍了几种从通过API获取项目构建版本信息方法

3.1K20

何在代码获取Java应用当前版本号?

最近需要在项目中获取项目的版本号,最笨方法莫过于硬编码一个版本号,当然我也是这么干。不过闲下来时候突发奇想Spring Boot项目中pom.xml定义版本号能不能通过API获得呢?...从配置文件读取 Maven在构建项目时可以通过资源插件将构建属性即pom.xml属性注入到指定资源文件,具体操作为: ... 恰好spring-boot-starter-parent已经设置了这种方式。...Spring Boot提供 Spring Boot其实已经内置了获取项目构建信息自动配置ProjectInfoAutoConfiguration,它包含一个条件BeanBuildProperties:...spring-boot-version", "time" : { "epochSecond" : 1620664643, "nano" : 591000000 } } 总结 今天介绍了几种从通过API获取项目构建版本信息方法

5.6K20

何在onCreate获取View高度宽度

何在onCreate获取View高度宽度 在开发过程中经常需要获取到View宽和高,可以通过View.getWidth()View.getHeight()来得到宽高。...然而新手们经常在onCreate方法中直接调用上面两个方法得到值是0! 这是为什么呢? 因为View绘制是通过两个遍历来完成,一个measure过程,一个layout过程。...只有经过“测量”“布局”之后,View才能正确地完成绘制。而这一切是发生在onCreate方法之后。...所以在onCreate中直接使用View.getWidth()View.getHeight()是无法得到正确。 那应该怎么onCreate获取View宽高呢?...开发者可以通过View.post()方法来获取到View宽高,该方法传递一个Runnable参数,然后将其添加到消息队列,最后在UI线程执行。

5.3K20

浏览器通过webgl获取渲染器供应商版本信息

对于开发者来说,了解用户使用浏览器供应商版本信息至关重要,因为不同浏览器可能会有不同渲染器,这可能会对网页显示功能产生影响。而在浏览器,WebGL是一种用于在网页上呈现3D图形技术。...如果我们想要获取浏览器WebGL渲染器供应商版本信息,可以使用WebGLRenderingContextgetExtension方法来获取WEBGL_debug_renderer_info扩展。...获取WebGL渲染器供应商版本信息我们需要获取WebGLRenderingContext实例。...在WEBGL_debug_renderer_info扩展,有两个常量可以用于获取供应商渲染器信息,分别是UNMASKED_VENDOR_WEBGLUNMASKED_RENDERER_WEBGL。...Renderer: ANGLE (Apple, Apple M2 Pro, OpenGL 4.1)// 用完别忘了删除节点 canvas.remove()通过以上步骤,我们可以在浏览器中使用WebGL获取渲染器供应商版本信息

17610

使用 Microsoft.Net.Compilers 在旧版本 Visual Studio 201320152017 开启新 C# 7.x C# 8 语法

版本 C# 特性需要新版本 Visual Studio 支持。不过,如果你不介意修改项目的话,你也能在低版本 Visual Studio 获得高版本 C# 语言支持了。...各个 C# 版本主要特性、发布日期发布方式(C# 1.0 - 7.3) - 吕毅 引入 Microsoft.Net.Compilers 不过,伴随着 .NET Core 生态崛起 NuGet 逐渐广泛使用...这是一个 .NET 编译器包,无论你系统安装是什么版本 C# 编译器,使用此包都可以强制项目使用某个特定版本 C# 编译器。...第三步:编辑项目使用最新版本 C# 语言 就像普通项目启用最新版 C# 语言一样,在你项目的 csproj PropertyGroup 添加以下属性: 1 Latest...开始使用最新版本 C# 特性 你已经可以使用最新版本 C# 了,而不用关心你本机安装是哪个版本 —— 即便你是 Visual Studio 2013/2015。

25820

在.NET Core中使用MongoDB明细教程(1):驱动基础及文档插入

在本系列教程,我们将使用C#驱动程序. 准备工作 在开始之前,我们需要打开VisualStudio并创建一个新项目。我将在本教程中使用一个控制台项目。为了演示我们需要安装对应NuGet包。...MongoDB.Driver.Core:--它本身就是一个驱动程序,具有驱动程序核心组件(如何连接到mongod实例,连接池),用于从.net到MongoDB通信,并且它依赖于MongoDB.Bson...这包包含了所有基本BSON类型其他一些用于使用BSON方法。 在这个包,我们有表示BSON类型类,以及如何在.NET类型BsonValue之间映射。...document3["remark"] = "C#是世界上最好语言"; document3["publishyear"] = 2020; 创建/插入文档 文档存储在集合,在查看了创建和获取集合之后...假设我们图书馆又来了三本新书,我们可以使用这个方法同时插入所有的内容,并且它们将被插入到一个批(假设您使用是MongoDB2.6或更高版本)。

2.8K30

2020年度总结了这 50 道 MySQL 高频面试题!

12、列字符串类型可以是什么? 字符串类型是: SET BLOB ENUM CHAR TEXT VARCHAR 13、如何获取当前Mysql版本?...SELECT VERSION();用于获取当前Mysql版本。 14、Mysql中使用什么存储引擎? 存储引擎称为表类型,数据使用各种技术存储在文件。...以下是Mysql可用驱动程序: PHP驱动程序 JDBC驱动程序 ODBC驱动程序 CWRAPPER PYTHON驱动程序 PERL驱动程序 RUBY驱动程序 CAP11PHP驱动程序 Ado.net5...29、如何在UnixMysql时间戳之间进行转换?...36、我们如何在mysql运行批处理模式? 以下命令用于在批处理模式下运行: mysql; mysql mysql.out 37、MyISAM表格将在哪里存储,并且还提供其存储格式?

4K20

.NET周刊【12月第1期 2023-12-06】

使用时,先加载 HTML 到 HtmlDocument 对象,再通过 XPath 获取 DOM 节点,可进行节点修改,改属性或内容。还能将 DOM 对象转换回 HTML 文本。...介绍了两种 JSON 序列化库:内置 System.Text.Json 功能强大 Newtonsoft.Json。文章指出,可以全局配置 Json 属性名称序列化方式日期格式,以满足前端需求。...C#简化工作之实现网页爬虫获取数据 https://www.cnblogs.com/mingupupu/p/17860491.html 本文介绍了使用 C#编写网页爬虫来获取网站上气象信息。...p=1975 C# 2023 年降临节日历第 2 天文章。如何在 C# 代码格式设置设置大括号之前之后开口。...如何在桌面应用程序包含最小 ASP.NET Core 服务器。

19110

何在MySQL获取某个字段为最大值倒数第二条整条数据?

在MySQL,我们经常需要操作数据库数据。有时我们需要获取倒数第二个记录。这个需求看似简单,但是如果不知道正确SQL查询语句,可能会浪费很多时间。...在本篇文章,我们将探讨如何使用MySQL查询获取倒数第二个记录。 一、查询倒数第二个记录 MySQL中有多种方式来查询倒数第二个记录,下面我们将介绍三种使用最广泛方法。...1.3、嵌套查询 第三种方法是使用嵌套查询,分别查询最后一条记录倒数第二条记录,并将结果合并在一起。...SELECT * FROM commodity ORDER BY price ASC LIMIT 1; 结论 在MySQL获取倒数第二条记录有多种方法。...使用排名,子查询嵌套查询三者之一,可以轻松实现这个功能。使用哪种方法将取决于你具体需求和表大小。在实际应用,应该根据实际情况选择最合适方法以达到最佳性能。

43710

PrintNightmare

验证如果当前安装打印机驱动程序驱动程序版本为 0x00000004,则当前安装打印机驱动程序没有更新驱动程序日期,或者如果驱动程序日期相同,则当前安装打印机驱动程序没有更新制造商 -提供驱动程序版本号...验证如果当前安装打印机驱动程序驱动程序版本为 0x00000004,则打印服务器上没有打印机共享并且也使用当前安装打印机驱动程序。...CVE-2021-34527 分析 原文中是说通过绕过 RpcAddPrinterDriver 身份验证。那么可以在打印服务器安装恶意驱动程序来达到LPE RCE。...然后具体看一下复制文件过程 需要使用驱动程序升级备份功能, 旧版本将备份到 C:\Windows\System32\spool\drivers\x64\3\old\1\ 文件夹。...否则: 报错 Error: code: 0x5 - rpc_s_access_denied 说明smb还不能匿名访问 这里使用C#版本EXP来进行演示利用 在DC对应文件夹,我们可以看到

1.1K10

何在Chrome浏览器运行Selenium?

测试系统是一项艰巨任务,您需要一个可以在此过程为您提供帮助工具。Selenium就是这样一种工具,主要用于网站测试。在本文中,我将告诉您如何在Chrome浏览器运行Selenium。...什么是Chrome驱动程序? Chrome驱动程序安装 如何在Chrome浏览器运行Selenium? 什么是Selenium?...在测试功能回归测试用例时,它具有很高灵活性。Selenium测试脚本可以用Java , Python ,C#等不同编程语言编写 。...现在你已经知道什么是Chrome驱动程序,让我们进一步了解一下如何在系统上配置chrome驱动程序。...Chrome驱动程序安装 现在,让我们深入研究本文最后一部分,并了解如何在Chrome浏览器运行Selenium脚本。 如何在Chrome浏览器运行Selenium?

45630

linux efi shell,EFI Shell 命令说明「建议收藏」

cpuconfig 取消配置(或重新配置)处理器处理器核心。 date 显示当前日期或设置系统 (nPartition) 日期。...以 GMT(格林威治标准时间)设置显示 EFI 时间。 variable 保存(或恢复)特定 EFI 变量。 ver显示版本信息。...设备、驱动程序句柄命令— EFI Shell用于管理设备、驱动程序句柄命令。 baud 查看串行端口 com 设置。 connect 将驱动程序绑定到设备。...goto 仅限脚本:跳至脚本标签位置。 if 仅限脚本:IF THEN 结构。 input 获取用户输入并放到 EFI 变量。...)(本实例都是使用Net客户端,使用C#编写) 在第二个教程,我们学习了如何使用工作队列在多个工作实例之间分配耗时任务

9.1K10

跟AI学C#编程-008:switch条件语句

问:在C#,switch条件语句如何应用,举例说明 AI回答1 在C#,switch语句用于基于不同条件执行不同代码块。它允许您根据变量值选择不同执行路径。...AI回答2 在C#,switch条件语句用于基于不同条件执行不同代码块。它允许您根据变量值来执行不同代码路径。...以下是switch条件语句示例应用: 假设我们有一个简单菜单驱动程序,根据用户输入数字来显示不同消息: int userChoice; Console.WriteLine("请选择一个选项:")...显示日期"); Console.WriteLine("3....; break; // 退出switch语句 } 在这个例子,我们首先获取用户输入数字并将其存储在变量userChoice

8310

【软件测试】自动化测试selenium(一)

它提供了一组API,允许开发人员使用多种编程语言(Java、C#、Python等)来控制浏览器行为,模拟用户与网页交互。...通过Selenium,开发人员可以自动化执行各种操作,点击按钮、填写表单、提交请求、获取网页元素等。它还支持模拟不同浏览器,并提供了丰富功能灵活性,以支持各种测试需求。...测试代码通过Web驱动程序ChromeDriver、GeckoDriver等)与所选浏览器建立通信。 Web驱动程序将命令发送给浏览器,并接收来自浏览器响应。...浏览器执行接收到命令,例如导航至指定URL、查找操作页面上元素等。 浏览器将执行结果返回给Web驱动程序。 Web驱动程序将结果传递给测试代码,以便进行进一步处理验证。 4....Selenium+Java环境搭建 下载Google浏览器 谷歌浏览器下载官网 2. 查看Chrome浏览器对应版本号. 复制版本号.

72310

Mysql常见知识点【新】

其中并发调度使用是MVVC(多版本并发控制),通过保存修改版本信息来支持并发一致性读回滚等特性。 9、在MySQLENUM用法是什么?   ...12、列字符串类型可以是什么?   字符串类型是: ·SET ·BLOB ·ENUM ·CHAR ·TEXT ·VARCHAR   13、如何获取当前MySQL版本?   ...SELECT VERSION();用于获取当前MySQL版本。 14、MySQL中使用什么存储引擎?   存储引擎称为表类型,数据使用各种技术存储在文件。   ...以下是MySQL可用驱动程序: ·PHP驱动程序 ·JDBC驱动程序 ·ODBC驱动程序 ·CWRAPPER ·PYTHON驱动程序 ·PERL驱动程序 ·RUBY驱动程序 ·CAP11PHP...36、我们如何在mysql运行批处理模式?

2.2K30

去 BAT 面试,总结了这 55 道 MySQL 面试题!

12、列字符串类型可以是什么? 字符串类型是: SET BLOB ENUM CHAR TEXT VARCHAR 13、如何获取当前Mysql版本?...SELECT VERSION();用于获取当前Mysql版本。 14、Mysql中使用什么存储引擎? 存储引擎称为表类型,数据使用各种技术存储在文件。...以下是Mysql可用驱动程序: PHP驱动程序 JDBC驱动程序 ODBC驱动程序 CWRAPPER PYTHON驱动程序 PERL驱动程序 RUBY驱动程序 CAP11PHP驱动程序 Ado.net5...29、如何在UnixMysql时间戳之间进行转换?...36、我们如何在mysql运行批处理模式? 以下命令用于在批处理模式下运行: mysql; mysql mysql.out 37、MyISAM表格将在哪里存储,并且还提供其存储格式?

17.7K20

dotnet 从入门到放弃 500 篇文章合集

C# 判断系统版本 C# 动态加载卸载 DLL C# 复制列表 C# 如何写 DEBUG 输出 C#何在项目引用x86 x64非托管代码 C# 已知点向量,求距离C# 强转会不会抛出异常...C# 很少人知道科技 C# 快速释放内存大数组 C# 搜索算法 C# 获得设备usb信息 C# 转换类型字符串 C# 遍历枚举 C# 金额转中文大写 C#将dll打包到程序 c-70 c-设计模式...git subtree pull 错误 Working tree has modifications git 上传当前分支 git 使用 VisualStudio 比较分支更改 git 修改commit日期为之前日期...Sublime Text 安装中文、英文字体 sublime Text 正则替换 SublimeText 粘贴图片保存到本地 UWP 分享用那个图标 UWP WPF 对比 UWP 开发,需要知道...给博客添加rss订阅 自动机 解决 vs 出现Error MC3000 给定编码字符无效 解决 VS 跳转定义 Resharper 重复 解决 Win10 UWP 无法使用 ss 连接 让 AE

10.4K20
领券