VB.NET 获取驱动信息

VB.NET 获取驱动信息,第1张

概述在.NET框架中本身就提供了一套API接口,包含在System.Service Process中你可能会有疑惑,驱动与系统服务是不一样的 对的它们 的确不一样、这样说吧、驱动是跟随系统最先启动的程序,当然这 个前提必须建立在你的驱动安装在%WINDIR%\[32/64]\Drivers中, 然后是系统组件包括系统服务两个部分、.NET可以开发系统服务但 不可以开发驱动这是因为,在驱动随系统映射时、

在.NET框架中本身就提供了一套API接口,包含在System.Service

Process中你可能会有疑惑,驱动与系统服务是不一样的 对的它们

的确不一样、这样说吧、驱动是跟随系统最先启动的程序,当然这

个前提必须建立在你的驱动安%WINDIR%\[32/64]\Drivers中,

然后是系统组件包括系统服务两个部分、.NET可以开发系统服务但

不可以开发驱动这是因为,在驱动随系统映射时、CLR组件还没有

被系统映射、当然驱动与服务两个本身相当类似,我们需要调用它

提供的服务于命令基本方式都差不到那里去、至于.NET框架上

ServiceController类提供的ExecuteCommand当然它不止是调用

服务命令且可以使用驱动命令、它包含一个命令参数且必须在128

~256之间,而且不存在返回值、着实有些令人摸不到头脑、当然通

是通过DeviceIoControl调用命令、在本文中通过EnumDeviceDri

vers、GetDeviceDriverBasename获取到被映射的驱动程序、通过

这两个函数可以更快更节省资源的获取到我们想要的信息 如果需要

获取到复杂信息 那可以通过ServiceController.GetDevices()获取

当然这或许会是个好办法


外部函数注解:

// 枚举驱动设备映像

Declare Sub EnumDeviceDrivers lib "psAPI.dll" (ByVal lpImageBase As IntPtr(),// 欲获取驱动映像地址缓冲区

ByVal cbSize As Integer,// 欲获取驱动映像地址缓冲区长度
ByRef lpcbNeeded As Integer) // 欲获取驱动映像地址缓冲区尺寸

// 取驱动设备基类名

Declare Sub GetDeviceDriverBasename lib "psAPI.dll" Alias "GetDeviceDriverBasenameA" (

ByVal ImageBase As IntPtr,// 欲获取信息的驱动映像地址

ByVal lpBasename As String,// 欲获取驱动信息的字符缓冲区
ByVal nSize As Integer) // 欲获取驱动信息的字符缓冲区尺寸

// 取驱动设备文件名

Declare Sub GetDeviceDriverfilename lib "psAPI.dll" Alias "GetDeviceDriverfilenameA" (

ByVal ImageBase As IntPtr,// 欲获取信息的驱动映像地址
ByVal lpBasename As String,// 欲获取驱动信息的字符缓冲区
ByVal nSize As Integer)// 欲获取驱动信息的字符缓冲区尺寸

示例代码:

imports System.Runtime.InteropServicesModule MainModule    Declare Sub EnumDeviceDrivers lib "psAPI.dll" (ByVal lpImageBase As IntPtr(),ByVal cbSize As Integer,ByRef lpcbNeeded As Integer)    Declare Sub GetDeviceDriverBasename lib "psAPI.dll" Alias "GetDeviceDriverBasenameA" (ByVal ImageBase As IntPtr,ByVal lpBasename As String,ByVal nSize As Integer)    Declare Sub GetDeviceDriverfilename lib "psAPI.dll" Alias "GetDeviceDriverfilenameA" (ByVal ImageBase As IntPtr,ByVal nSize As Integer)    Sub Main()        Dim cbSize = vbNull,cbNeeded As Integer        Dim pbaseAddr As IntPtr() = nothing        Do            cbSize = cbSize * 2            ReDim pbaseAddr(cbSize)            EnumDeviceDrivers(pbaseAddr,cbSize,cbNeeded)        Loop While cbNeeded > cbSize        cbSize = (cbNeeded / IntPtr.Size) - 1        For i = 0 To cbSize Step 1            Dim strBasename As String = Space(8096)            GetDeviceDriverBasename(pbaseAddr(i),strBasename,8096)            Console.Writeline(strBasename.TrimEnd() & pbaseAddr(i).ToString("X"))        Next        Console.ReadKey(False)    End SubEnd Module
总结

以上是内存溢出为你收集整理的VB.NET 获取驱动信息全部内容,希望文章能够帮你解决VB.NET 获取驱动信息所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1267864.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-08
下一篇 2022-06-08

发表评论

登录后才能评论

评论列表(0条)

保存