码迷,mamicode.com
首页 > Windows程序 > 详细

Windows 驱动开发 - 4

时间:2015-05-26 12:38:33      阅读:259      评论:0      收藏:0      [点我收藏+]

标签:

    上篇《Windows 驱动开发 - 3》我们使用了PnP,现在还差WMI。

    WMI:Windows Management Interface

    WMI 提供预装的类架构,允许使用脚本语言(VBS)、C#、VB .NET 或 C++ 编写的脚本或应用程序监视和配置计算机中的应用程序、系统或网络组件以及硬件。

一、WMI

    虽然WDF帮你完成很多工作,但是你还必须自己触发事件和实例化回调函数。
    在WDM中使用 wmilib.sys 静态注册很容易,但难以动态注册。
    但是在WDF中这些很容易实现。

    1. IRP_MJ_SYSTEM_CONTROL

        WDF完全掌控IRP_MJ_SYSTEM_CONTROL。

        IRP_MJ_SYSTEM_CONTROL:系统内部产生的控制信息,类似于内核调用DeviceControl函数

        注意:使用DeviceControl系统最低要求为xp。

BOOL WINAPI DeviceIoControl(
  _In_        HANDLE       hDevice,
  _In_        DWORD        dwIoControlCode,
  _In_opt_    LPVOID       lpInBuffer,
  _In_        DWORD        nInBufferSize,
  _Out_opt_   LPVOID       lpOutBuffer,
  _In_        DWORD        nOutBufferSize,
  _Out_opt_   LPDWORD      lpBytesReturned,
  _Inout_opt_ LPOVERLAPPED lpOverlapped
);

    2. 模式

     (1) 实例化已用设备

     (2) 当需要的时候触发事件

     (3) 统计报告

     (4) 更新状态

     (5) 注销后删除设备 (正常或意外删除)


    3. ETW / 跟踪

        支持内核模式 ETW / 跟踪

二、WDF和WMI

     wdf使用WdfDeviceCreateDeviceInterface为WMI提供接口。

NTSTATUS WdfDeviceCreateDeviceInterface(
  [in]                 WDFDEVICE        Device,
  [in]           const GUID             *InterfaceClassGUID,
  [in, optional]       PCUNICODE_STRING ReferenceString
);

    其中GUID,请参见“Using GUIDs in Drivers

    GUID声明(需要使用头文件initguid.h):

DEFINE_GUID(GUID_DEVINTERFACE_OSRUSBFX2, // Generated using guidgen.exe
   0x573e8c73, 0xcb4, 0x4471, 0xa1, 0xbf, 0xfa, 0xb2, 0x6c, 0x31, 0xd3, 0x84);
// {573E8C73-0CB4-4471-A1BF-FAB26C31D384}


Windows 驱动开发 - 4

标签:

原文地址:http://blog.csdn.net/xiaobin_hlj80/article/details/46005163

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!