windows wdf 驱动开发总结(1)--usb驱动

2024-01-13 02:08

本文主要是介绍windows wdf 驱动开发总结(1)--usb驱动,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

()EZ-USB-Fx2 USB驱动相关

(1)WDF_IO_QUEUE_CONFIG_INIT_DEFAULT_QUEUE

功能:初始化驱动的WDF_IO_QUEUE_CONFIG结构

VOID WDF_IO_QUEUE_CONFIG_INIT_DEFAULT_QUEUE(
  __out  PWDF_IO_QUEUE_CONFIG Config,
  __in   WDF_IO_QUEUE_DISPATCH_TYPE DispatchType
);

Parameters

Config [out]

A pointer to the driver's WDF_IO_QUEUE_CONFIG structure.

DispatchType [in]

A WDF_IO_QUEUE_DISPATCH_TYPE enumerator that identifies the request dispatching type for the queue.

typedef enum _WDF_IO_QUEUE_DISPATCH_TYPE {

  WdfIoQueueDispatchInvalid      = 0,

  WdfIoQueueDispatchSequential   = 1,

  WdfIoQueueDispatchParallel     = 2,

  WdfIoQueueDispatchManual       = 3,

  WdfIoQueueDispatchMax          = 4

} WDF_IO_QUEUE_DISPATCH_TYPE;

 

typedef struct _WDF_IO_QUEUE_CONFIG {

  ULONG                                          Size;

  WDF_IO_QUEUE_DISPATCH_TYPE                   DispatchType;

  WDF_TRI_STATE                                 PowerManaged;

  BOOLEAN                                        AllowZeroLengthRequests;

  BOOLEAN                                        DefaultQueue;

  PFN_WDF_IO_QUEUE_IO_DEFAULT                 EvtIoDefault;

  PFN_WDF_IO_QUEUE_IO_READ                    EvtIoRead;

  PFN_WDF_IO_QUEUE_IO_WRITE                   EvtIoWrite;

  PFN_WDF_IO_QUEUE_IO_DEVICE_CONTROL         EvtIoDeviceControl;

  PFN_WDF_IO_QUEUE_IO_INTERNAL_DEVICE_CONTROL EvtIoInternalDeviceControl;

  PFN_WDF_IO_QUEUE_IO_STOP                    EvtIoStop;

  PFN_WDF_IO_QUEUE_IO_RESUME                  EvtIoResume;

  PFN_WDF_IO_QUEUE_IO_CANCELED_ON_QUEUE     EvtIoCanceledOnQueue;

  union {

    struct {

      ULONG NumberOfPresentedRequests;

    } Parallel;

  } Settings;

} WDF_IO_QUEUE_CONFIG, *PWDF_IO_QUEUE_CONFIG;

 

(2) WdfDeviceCreate

函数功能:建立一个设备对象框架(creates a framework device object)

NTSTATUS WdfDeviceCreate(

  [in, out]       PWDFDEVICE_INIT *DeviceInit,

  [in, optional]  PWDF_OBJECT_ATTRIBUTES DeviceAttributes,

  [out]           WDFDEVICE *Device

);

 

参数:

DeviceInit [in, out]

The address of a pointer to a WDFDEVICE_INIT structure. If WdfDeviceCreate encounters no errors, it sets the pointer to NULL.

DeviceAttributes [in, optional]

A pointer to a caller-allocated WDF_OBJECT_ATTRIBUTES structure that contains attributes for the new object. (The structure's ParentObject member must be NULL.) This parameter is optional and can be WDF_NO_OBJECT_ATTRIBUTES.

Device [out]

A pointer to a location that receives a handle to the new framework device object.

 

 

(3) WdfDriverCreate

函数功能:为了调用驱动,建立驱动对象

NTSTATUS WdfDriverCreate(

  [in]             PDRIVER_OBJECT DriverObject,

  [in]             PCUNICODE_STRING RegistryPath,

  [in, optional]   PWDF_OBJECT_ATTRIBUTES DriverAttributes,

  [in]             PWDF_DRIVER_CONFIG DriverConfig,

  [out, optional]  WDFDRIVER *Driver

);

DriverObject [in]

A pointer to a DRIVER_OBJECT structure that represents a Windows Driver Model (WDM) driver object. The driver receives this pointer as input to its DriverEntry routine.

RegistryPath [in]

A pointer to a UNICODE_STRING structure that contains the registry path string that the driver received as input to its DriverEntry routine.

DriverAttributes [in, optional]

A pointer to a caller-allocated WDF_OBJECT_ATTRIBUTES structure. (The structure's ParentObject member must be NULL.) This parameter is optional and can be WDF_NO_OBJECT_ATTRIBUTES.

DriverConfig [in]

A pointer to a caller-allocated WDF_DRIVER_CONFIG structure.

Driver [out, optional]

A pointer to a location that receives a handle to the new framework driver object. This parameter is optional and can be WDF_NO_HANDLE.

 

typedef struct _WDF_OBJECT_ATTRIBUTES {

  ULONG                          Size;

  PFN_WDF_OBJECT_CONTEXT_CLEANUP EvtCleanupCallback;

  PFN_WDF_OBJECT_CONTEXT_DESTROY EvtDestroyCallback;

  WDF_EXECUTION_LEVEL            ExecutionLevel;

  WDF_SYNCHRONIZATION_SCOPE      SynchronizationScope;

  WDFOBJECT                      ParentObject;

  size_t                         ContextSizeOverride;

  PCWDF_OBJECT_CONTEXT_TYPE_INFO ContextTypeInfo;

} WDF_OBJECT_ATTRIBUTES, *PWDF_OBJECT_ATTRIBUTES;

 

(4) WdfIoQueueCreate

函数功能:creates and configures an I/O queue for a specified device

NTSTATUS WdfIoQueueCreate(

  [in]             WDFDEVICE Device,

  [in]             PWDF_IO_QUEUE_CONFIG Config,

  [in, optional]   PWDF_OBJECT_ATTRIBUTES QueueAttributes,

  [out, optional]  WDFQUEUE *Queue

);

 

Device [in]

A handle to the framework device object that the queue will be associated with.

Config [in]

A pointer to a caller-allocated WDF_IO_QUEUE_CONFIG structure.

QueueAttributes [in, optional]

A pointer to a caller-allocated WDF_OBJECT_ATTRIBUTES structure that specifies object attributes for the new object. This parameter is optional and can be WDF_NO_OBJECT_ATTRIBUTES.

Queue [out, optional]

A pointer to a location that receives a handle to a framework queue object.

 

评论:

Each call to WdfIoQueueCreate creates an I/O queue for a device. Your driver can create multiple I/O queues for each device.

The Config and QueueAttributes parameters specify the queue's configuration and object attributes.

 

(5) WdfDeviceCreateDeviceInterface

函数功能:创建设备接口creates a device interface for a specified device.

NTSTATUS WdfDeviceCreateDeviceInterface(

  [in]            WDFDEVICE Device,

  [in]            const GUID *InterfaceClassGUID,

  [in, optional]  PCUNICODE_STRING ReferenceString

);

参数:

Device [in]

A handle to a framework device object.

InterfaceClassGUID [in]

A pointer to a GUID that identifies the device interface class.

ReferenceString [in, optional]

A pointer to a UNICODE_STRING structure that describes a reference string for the device interface. This parameter is optional and can be NULL. For more information, see the following Remarks section.

Copy Code  调用例子

NTSTATUS  status;

 

status = WdfDeviceCreateDeviceInterface(

                                        Device,

                                        (LPGUID) &GUID_DEVINTERFACE_COMPORT,

                                        NULL

                                        );

 

(6) WdfRequestComplete

函数功能:completes a specified I/O request and supplies a completion status.

VOID WdfRequestComplete(

  [in]  WDFREQUEST Request,

  [in]  NTSTATUS Status

);

 

 

(7) WdfRequestRetrieveInputBuffer

函数功能:retrieves an I/O request's input buffer. 获取输入缓冲区的地址

NTSTATUS WdfRequestRetrieveInputBuffer(

  [in]             WDFREQUEST Request,

  [in]             size_t MinimumRequiredSize,

  [out]            PVOID *Buffer,

  [out, optional]  size_t *Length

);

Request [in]

A handle to a framework request object.

MinimumRequiredSize [in]

The minimum buffer size, in bytes, that the driver needs to process the I/O request.

Buffer [out]

A pointer to a location that receives the buffer's address.

Length [out, optional]

A pointer to a location that receives the buffer's size, in bytes. This parameter is optional and can be NULL.

 

(8) WdfRequestRetrieveOutputBuffer

函数功能:获取输出缓冲区的地址

NTSTATUS WdfRequestRetrieveInputBuffer(

  [in]             WDFREQUEST Request,

  [in]             size_t MinimumRequiredSize,

  [out]            PVOID *Buffer,

  [out, optional]  size_t *Length

);

 

 

(9) WdfRequestCompleteWithInformation

函数功能:stores completion information and then completes a specified I/O request with a supplied completion status.(完成Io请求)

VOID WdfRequestCompleteWithInformation(

  [in]  WDFREQUEST Request,

  [in]  NTSTATUS Status,

  [in]  ULONG_PTR Information

);

 

queuesample(队列例子)

(10)GetDeviceContext

     //获取设备对象环境变量结构地址指针

pDeviceContext = GetDeviceContext(device);

   deviceContext = GetDeviceContext(WdfIoQueueGetDevice(Queue));

 

(11) WdfIoQueueRetrieveNextRequest

函数功能: 从非缺省手工队列中取出I/O请求,做相应处理

NTSTATUS
  
WdfIoQueueRetrieveNextRequest(
    IN WDFQUEUE  Queue,
    OUT WDFREQUEST*  
OutRequest
    );

Queue

A handle to a framework queue object.

OutRequest

A pointer to a location that receives a handle to a framework request object. If the queue is empty or the last request has been retrieved, this parameter receives NULL.

 

(12) WdfTimerStop

函数功能:关闭定时器

BOOLEAN
  
WdfTimerStop(
    IN WDFTIMER  Timer,
    IN BOOLEAN  
Wait
    );

Timer

A handle to a framework timer object that was obtained by calling WdfTimerCreate.

Wait

A Boolean value that, if TRUE, specifies that the framework does not return until all queued calls to the driver's deferred procedure calls (DPCs), including the driver's EvtTimerFunc callback functions, have executed.

 

WdfTimerStop returns TRUE if the timer object was in the system's timer queue. Otherwise, this method returns FALSE.

 

(13) WdfRequestForwardToIoQueue

函数功能:requeues an I/O request to one of the calling driver's I/O queues.

NTSTATUS WdfRequestForwardToIoQueue(

  [in]  WDFREQUEST Request,

  [in]  WDFQUEUE DestinationQueue

);

 

Request [in]

A handle to a framework request object.

DestinationQueue [in]

A handle to a framework queue object.

The driver must own the I/O request and must have obtained the request from one of its I/O queues.

The source and destination queues cannot be the same. In other words, the driver cannot call WdfRequestForwardToIoQueue to return a request to the queue that it came from. To requeue a request to the same queue, use WdfRequestRequeue .

这篇关于windows wdf 驱动开发总结(1)--usb驱动的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/599899

相关文章

JavaSE正则表达式用法总结大全

《JavaSE正则表达式用法总结大全》正则表达式就是由一些特定的字符组成,代表的是一个规则,:本文主要介绍JavaSE正则表达式用法的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录常用的正则表达式匹配符正则表China编程达式常用的类Pattern类Matcher类PatternSynta

SpringBoot开发中十大常见陷阱深度解析与避坑指南

《SpringBoot开发中十大常见陷阱深度解析与避坑指南》在SpringBoot的开发过程中,即使是经验丰富的开发者也难免会遇到各种棘手的问题,本文将针对SpringBoot开发中十大常见的“坑... 目录引言一、配置总出错?是不是同时用了.properties和.yml?二、换个位置配置就失效?搞清楚加

Python中对FFmpeg封装开发库FFmpy详解

《Python中对FFmpeg封装开发库FFmpy详解》:本文主要介绍Python中对FFmpeg封装开发库FFmpy,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录一、FFmpy简介与安装1.1 FFmpy概述1.2 安装方法二、FFmpy核心类与方法2.1 FF

基于Python开发Windows屏幕控制工具

《基于Python开发Windows屏幕控制工具》在数字化办公时代,屏幕管理已成为提升工作效率和保护眼睛健康的重要环节,本文将分享一个基于Python和PySide6开发的Windows屏幕控制工具,... 目录概述功能亮点界面展示实现步骤详解1. 环境准备2. 亮度控制模块3. 息屏功能实现4. 息屏时间

在Windows上使用qemu安装ubuntu24.04服务器的详细指南

《在Windows上使用qemu安装ubuntu24.04服务器的详细指南》本文介绍了在Windows上使用QEMU安装Ubuntu24.04的全流程:安装QEMU、准备ISO镜像、创建虚拟磁盘、配置... 目录1. 安装QEMU环境2. 准备Ubuntu 24.04镜像3. 启动QEMU安装Ubuntu4

Windows下C++使用SQLitede的操作过程

《Windows下C++使用SQLitede的操作过程》本文介绍了Windows下C++使用SQLite的安装配置、CppSQLite库封装优势、核心功能(如数据库连接、事务管理)、跨平台支持及性能优... 目录Windows下C++使用SQLite1、安装2、代码示例CppSQLite:C++轻松操作SQ

Python实例题之pygame开发打飞机游戏实例代码

《Python实例题之pygame开发打飞机游戏实例代码》对于python的学习者,能够写出一个飞机大战的程序代码,是不是感觉到非常的开心,:本文主要介绍Python实例题之pygame开发打飞机... 目录题目pygame-aircraft-game使用 Pygame 开发的打飞机游戏脚本代码解释初始化部

基于Python实现一个Windows Tree命令工具

《基于Python实现一个WindowsTree命令工具》今天想要在Windows平台的CMD命令终端窗口中使用像Linux下的tree命令,打印一下目录结构层级树,然而还真有tree命令,但是发现... 目录引言实现代码使用说明可用选项示例用法功能特点添加到环境变量方法一:创建批处理文件并添加到PATH1

使用Python开发一个现代化屏幕取色器

《使用Python开发一个现代化屏幕取色器》在UI设计、网页开发等场景中,颜色拾取是高频需求,:本文主要介绍如何使用Python开发一个现代化屏幕取色器,有需要的小伙伴可以参考一下... 目录一、项目概述二、核心功能解析2.1 实时颜色追踪2.2 智能颜色显示三、效果展示四、实现步骤详解4.1 环境配置4.

SQL中JOIN操作的条件使用总结与实践

《SQL中JOIN操作的条件使用总结与实践》在SQL查询中,JOIN操作是多表关联的核心工具,本文将从原理,场景和最佳实践三个方面总结JOIN条件的使用规则,希望可以帮助开发者精准控制查询逻辑... 目录一、ON与WHERE的本质区别二、场景化条件使用规则三、最佳实践建议1.优先使用ON条件2.WHERE用