zoukankan      html  css  js  c++  java
  • .net 深入系统编程(三)

    转载自:http://www.codeproject.com/KB/system/divingsysprog3.aspx

    /Files/kk1230/.net Diving into System Programming/SDManExe.zip

    /Files/kk1230/.net Diving into System Programming/SDManSource.zip

    Introduction

    In this last part, you will see a Windows Forms application. This application can enumerate device classes, enumerate devices from device classes and show information about device resources. You can download source code for Borland C# Builder and Visual Studio C#.

    Device resources

    Every device can use some hardware resources for its work. There are four standard types of resources:

    • Memory Resource
    • I/O Port Resource
    • DMA Resource
    • Interrupt Resource

    The type of resources used depends on the device. For example, serial port uses I/O Port Resource and Interrupt Resource. Display (Video adapter), as a rule, uses I/O Port Resource, Interrupt Resource and Memory Resource. Device Manager can show information about resources for every device from configuration.

    DevMan3

    So how to get information about resources.

    • Get class Guid using device class name (SetupDiClassGuidsFromNameA function)
    • Get device info set for device class (SetupDiGetClassDevsA function)
    • Get device info data for every device (SetupDiGetClassDevsA function, second parameter for this function is sequential device index in the device class, so call this function in circle with device index = 0, 1, etc.).
    • Get information about current configuration (CM_Get_First_Log_Conf function)
    • Get resource descriptor from current configuration (CM_Get_Next_Res_Des function, do this and follow steps for every resource till they exist)
    • Get information about size of resource data (CM_Get_Res_Des_Data_Size function)
    • Get resource data (CM_Get_Res_Des_Data function)
    • Marshal resource data in suitable structures (class Marshal, methods PtrToStructure; structure IntPtr, method ToInt32 and vice versa to IntPtr)

    You can find details in the source code for the application that you see on the next picture:

    WFApp

    Configuration and Device Manager

    Configuration Manager includes functions from cfgmgr32.dll and Device Management functions include most functions from setupapi.dll. Using these functions, you can recreate system Device Manager (if you really need it) and a lot other things. You can use it for Windows 98/Me/NT4/2000/XP with unmanaged code as well as managed. You can't use this way for early Windows versions. In Windows 95, Configuration Manager is not a DLL but a VXD driver. And I don't know about using it for Windows Server 2003.

    What about WMI

    WMI is really a very useful and suitable thing. It was developed for such tasks that I examine in these articles also. But WMI is native beginning from Windows 2000. If you want to use WMI for Windows 98/NT4, you need to install WMI Core. Here there is a problem, at least I had a problem. WMI Core is localized but there is no WMI Core for Russian Windows98, for example. Beside this, WMI is not magus, WMI also uses Win32 API to access device configuration.

    Registry, Registry and Registry again

    Really, Windows Registry is a Central Windows database for all system information. So even if we use cfgmgr32.dll or/and setupapi.dll, anyway in most cases we work with Registry data. It means if you know where to find configuration data in Registry and how to collect and marshal them, you can access data via Win32 Registry API. Of course, you can find even computer name using this API directly but I suppose that GetComputerName Win32 API function is more suitable.

    Summary

    As you see, some ways exist to get information about device configuration. I examined only one of these. And it is the end of my story about "child language" C#, P/Invoke and device configuration.

    References

    Information about Configuration and Device Managers are on Microsoft Library site.

    License

    This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

  • 相关阅读:
    git 常用操作命令行
    Mysql 命令行...
    bootstrap
    10.11 android输入系统_补充知识_activity_window_decor_view关系
    10.10 android输入系统_APP获得并处理输入事件流程
    10.9 android输入系统_APP跟输入系统建立联系和Dispatcher线程_分发dispatch
    10.8 android输入系统_实战_使用GlobalKey一键启动程序
    10.7 android输入系统_Dispatcher线程情景分析_Reader线程传递事件和dispatch前处理
    10.6 android输入系统_Dispatcher线程_总体框架
    10.5 android输入系统_Reader线程_使用EventHub读取事件和核心类及配置文件_实验_分析
  • 原文地址:https://www.cnblogs.com/kk1230/p/1610762.html
Copyright © 2011-2022 走看看