Windows 驅動開發 - 5

來源:互聯網
上載者:User

標籤:

    上篇《Windows 驅動開發 - 4》我們已經完成了硬體準備。但是我們還沒有具體的資料操作,例如接收讀寫操作。

    在WDF中進行此類操作前需要進行裝置的IO控制,已保持資料的完整性。

    我們知道進行WDF開發主要是跟隨IRPs的“腳步”。

I/O Request Delivery Mechanism

I/O request type

UMDF delivery mechanism

KMDF delivery mechanism

Read

Queue

Queue

Write

Queue

Queue

Device I/O control

Queue

Queue

Internal device I/O control

Queue

Queue

Create

Queue

Queue or callback

Close

Callback

Callback

Cleanup

Callback

Callback

    從表中可以看到在進行DEVICE I/O control的時候,WDF是使用了Queue(隊列)的機制。

    所以,我們要在增加裝置時提供隊列支援。

  WDF_OBJECT_ATTRIBUTES_INIT_CONTEXT_TYPE(&ioQueueConfig,                                    WdfIoQueueDispatchParallel);    ioQueueConfig.EvtIoDeviceControl = EvtIoDeviceControl;    status = WdfIoQueueCreate(device,                         &ioQueueConfig,                         WDF_NO_OBJECT_ATTRIBUTES,                         WDF_NO_HANDLE);
(1)初始化隊列配置

        WDF_IO_QUEUE_CONFIG_INIT_DEFAULT_QUEUE

VOID WDF_IO_QUEUE_CONFIG_INIT_DEFAULT_QUEUE(  _Out_ PWDF_IO_QUEUE_CONFIG       Config,  _In_  WDF_IO_QUEUE_DISPATCH_TYPE DispatchType);

(2)設定回調事件

        設定WDF_IO_QUEUE_CONFIG結構中的成員變數值。

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;  WDFDRIVER                                   Driver;} WDF_IO_QUEUE_CONFIG, *PWDF_IO_QUEUE_CONFIG;

(3)建立隊列
        WdfIoQueueCreate

NTSTATUS WdfIoQueueCreate(  [in]            WDFDEVICE              Device,  [in]            PWDF_IO_QUEUE_CONFIG   Config,  [in, optional]  PWDF_OBJECT_ATTRIBUTES QueueAttributes,  [out, optional] WDFQUEUE               *Queue);


Windows 驅動開發 - 5

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.