windows wdf 驱动开发总结(1)--usb驱动
2010-10-07 09:49
597 查看
(一)EZ-USB-Fx2
USB驱动相关
(1)WDF_IO_QUEUE_CONFIG_INIT_DEFAULT_QUEUE
功能:初始化驱动的WDF_IO_QUEUE_CONFIG结构
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
WdfIoQueueCreatecreates 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.
VOIDWdfRequestComplete(
[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请求)
VOIDWdfRequestCompleteWithInformation(
[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 .
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
);[/code]
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
WdfIoQueueCreatecreates 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.
VOIDWdfRequestComplete(
[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请求)
VOIDWdfRequestCompleteWithInformation(
[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 驱动开发总结(2)--usb驱动
- windows wdf 驱动开发总结(3)-usb驱动
- windows wdf 驱动开发总结(9)--网络驱动开发(NDIS)
- windows wdf 驱动开发总结(4)--usb驱动
- windows wdf 驱动开发总结(8)--网络驱动开发(NDIS)
- 开发wince下的usb音频设备驱动总结
- Linux USB 驱动开发(五)—— USB驱动程序开发过程简单总结
- Linux USB 驱动开发(五)—— USB驱动程序开发过程简单总结
- windows wdf 驱动开发总结(5)--PCI 驱动
- 开发wince下的usb音频设备驱动总结
- Windows USB功能驱动开发总结
- Windows USB功能驱动开发总结
- Linux USB 驱动开发(五)—— USB驱动程序开发过程简单总结
- Linux USB 驱动开发(五)—— USB驱动程序开发过程简单总结
- windows WDF 驱动开发总结(6)----PCI驱动开发
- 开发wince下的usb音频设备驱动总结
- windows WDF驱动开发总结(7)--网络驱动开发(NDIS)
- windows xp 驱动开发(十八) USB驱动程序开发用到的工具总结
- 开发wince下的usb音频设备驱动总结
- Linux USB 驱动开发(二)—— USB 驱动几个重要数据结构