.NET - 深入系统编程 - 第 3 部分






4.84/5 (25投票s)
使用 C# 进行设备配置(第 3 部分)。 设备资源 - IRQ、DMA 等。
引言
在最后一部分中,您将看到一个 Windows Forms 应用程序。此应用程序可以枚举设备类、从设备类枚举设备,并显示有关设备资源的信息。您可以下载 Borland C# Builder 和 Visual Studio C# 的源代码。
设备资源
每个设备都可以使用一些硬件资源来工作。有四种标准类型的资源
- 内存资源
- I/O 端口资源
- DMA 资源
- 中断资源
使用的资源类型取决于设备。例如,串行端口使用 I/O 端口资源和中断资源。显示器(视频适配器)通常使用 I/O 端口资源、中断资源和内存资源。设备管理器可以显示有关每个设备的资源配置信息。
那么如何获取有关资源的信息呢?
- 使用设备类名称获取
Guid
类(SetupDiClassGuidsFromNameA
函数) - 获取设备类的设备信息集(
SetupDiGetClassDevsA
函数) - 获取每个设备的设备信息数据(
SetupDiGetClassDevsA
函数,此函数的第二个参数是设备类中的顺序设备索引,因此在循环中调用此函数,设备索引 = 0、1 等)。 - 获取有关当前配置的信息(
CM_Get_First_Log_Conf
函数) - 从当前配置中获取资源描述符(
CM_Get_Next_Res_Des
函数,执行此操作并按照每个资源存在的步骤操作) - 获取有关资源数据大小的信息(
CM_Get_Res_Des_Data_Size
函数) - 获取资源数据(
CM_Get_Res_Des_Data
函数) - 将资源数据封送到合适的结构中(
Marshal
类,方法PtrToStructure
;结构IntPtr
,方法ToInt32
,反之亦然到IntPtr
)
您可以在下一张图片中看到的应用程序的源代码中找到详细信息
配置和设备管理器
配置管理器包括来自 cfgmgr32.dll 的函数,设备管理函数包括来自 setupapi.dll 的大多数函数。使用这些函数,您可以重新创建系统设备管理器(如果您真的需要它)和很多其他事情。您可以使用它来处理 Windows 98/Me/NT4/2000/XP 和非托管代码以及托管代码。您不能以这种方式用于早期的 Windows 版本。在 Windows 95 中,配置管理器不是 DLL,而是一个 VXD 驱动程序。而且我不知道如何在 Windows Server 2003 中使用它。
关于 WMI
WMI 确实是一个非常有用的东西,也适用于我在这些文章中研究的任务。但 WMI 从 Windows 2000 开始就是本地的。如果您想在 Windows 98/NT4 中使用 WMI,您需要安装 WMI Core。这里有一个问题,至少我有一个问题。WMI Core 是本地化的,但例如没有针对俄语 Windows98 的 WMI Core。除此之外,WMI 并非魔术,WMI 也会使用 Win32 API 访问设备配置。
注册表,注册表,还是注册表
实际上,Windows 注册表是所有系统信息的中央 Windows 数据库。因此,即使我们使用 cfgmgr32.dll 或/和 setupapi.dll,在大多数情况下,我们仍然使用注册表数据。这意味着如果您知道在哪里可以在注册表中找到配置数据以及如何收集和封送它们,您就可以通过 Win32 注册表 API 访问数据。当然,您甚至可以使用此 API 直接查找计算机名称,但我认为 GetComputerName
Win32 API 函数更合适。
摘要
如您所见,存在一些获取有关设备配置信息的方法。我只检查了其中一种。这是我关于“子语言”C#、P/Invoke 和设备配置的故事的结尾。
参考文献
有关配置和设备管理器的信息,请访问 Microsoft 库网站。