A simple little driver #include #include DRIVER_INITIALIZE DriverEntry; EVT_WDF_DRIVER_DEVICE_ADD OnDeviceAdd; NTSTATUS DriverEntry(PDRIVER_OBJECT DriverObject, PUNICODE_STRING RegistryPath) { WDF_DRIVER_CONFIG config; WDF_DRIVER_CONFIG_INIT(&config, OnDeviceAdd); return WdfDriverCreate(DriverObject, RegistryPath, WDF_NO_OBJECT_ATTRIBUTES, &config, WDF_NO_HANDLE); } NTSTATUS OnDeviceAdd(WDFDRIVER Driver, PWDFDEVICE_INIT DeviceInit) { return.

Download Report

Transcript A simple little driver #include #include DRIVER_INITIALIZE DriverEntry; EVT_WDF_DRIVER_DEVICE_ADD OnDeviceAdd; NTSTATUS DriverEntry(PDRIVER_OBJECT DriverObject, PUNICODE_STRING RegistryPath) { WDF_DRIVER_CONFIG config; WDF_DRIVER_CONFIG_INIT(&config, OnDeviceAdd); return WdfDriverCreate(DriverObject, RegistryPath, WDF_NO_OBJECT_ATTRIBUTES, &config, WDF_NO_HANDLE); } NTSTATUS OnDeviceAdd(WDFDRIVER Driver, PWDFDEVICE_INIT DeviceInit) { return.

A simple little driver
#include <wdk.h>
#include <wdf.h>
DRIVER_INITIALIZE DriverEntry;
EVT_WDF_DRIVER_DEVICE_ADD OnDeviceAdd;
NTSTATUS DriverEntry(PDRIVER_OBJECT DriverObject,
PUNICODE_STRING RegistryPath) {
WDF_DRIVER_CONFIG config;
WDF_DRIVER_CONFIG_INIT(&config, OnDeviceAdd);
return WdfDriverCreate(DriverObject,
RegistryPath,
WDF_NO_OBJECT_ATTRIBUTES,
&config,
WDF_NO_HANDLE);
}
NTSTATUS OnDeviceAdd(WDFDRIVER Driver,
PWDFDEVICE_INIT DeviceInit) {
return WdfDeviceCreate(&DeviceInit,
WDF_NO_OBJECT_ATTRIBUTES,
WDF_NO_HANDLE);
}
#include <wdk.h>
#include <wdf.h>
DRIVER_INITIALIZE DriverEntry;
EVT_WDF_DRIVER_DEVICE_ADD OnDeviceAdd;
NTSTATUS DriverEntry(PDRIVER_OBJECT DriverObject,
PUNICODE_STRING RegistryPath) {
WDF_DRIVER_CONFIG config;
WDF_DRIVER_CONFIG_INIT(&config, OnDeviceAdd);
return WdfDriverCreate(DriverObject,
RegistryPath,
WDF_NO_OBJECT_ATTRIBUTES,
&config,
WDF_NO_HANDLE);
}
NTSTATUS OnDeviceAdd(WDFDRIVER Driver,
PWDFDEVICE_INIT DeviceInit) {
return WdfDeviceCreate(&DeviceInit,
WDF_NO_OBJECT_ATTRIBUTES,
WDF_NO_HANDLE);
}
#include <wdk.h>
#include <wdf.h>
DRIVER_INITIALIZE DriverEntry;
EVT_WDF_DRIVER_DEVICE_ADD OnDeviceAdd;
NTSTATUS DriverEntry(PDRIVER_OBJECT DriverObject,
PUNICODE_STRING RegistryPath) {
WDF_DRIVER_CONFIG config;
WDF_DRIVER_CONFIG_INIT(&config, OnDeviceAdd);
return WdfDriverCreate(DriverObject,
RegistryPath,
WDF_NO_OBJECT_ATTRIBUTES,
&config,
WDF_NO_HANDLE);
}
NTSTATUS OnDeviceAdd(WDFDRIVER Driver,
PWDFDEVICE_INIT DeviceInit) {
return WdfDeviceCreate(&DeviceInit,
WDF_NO_OBJECT_ATTRIBUTES,
WDF_NO_HANDLE);
}
#include <wdk.h>
#include <wdf.h>
DRIVER_INITIALIZE DriverEntry;
EVT_WDF_DRIVER_DEVICE_ADD OnDeviceAdd;
NTSTATUS DriverEntry(PDRIVER_OBJECT DriverObject,
PUNICODE_STRING RegistryPath) {
WDF_DRIVER_CONFIG config;
WDF_DRIVER_CONFIG_INIT(&config, OnDeviceAdd);
return WdfDriverCreate(DriverObject,
RegistryPath,
WDF_NO_OBJECT_ATTRIBUTES,
&config,
WDF_NO_HANDLE);
}
NTSTATUS OnDeviceAdd(WDFDRIVER Driver,
PWDFDEVICE_INIT DeviceInit) {
return WdfDeviceCreate(&DeviceInit,
WDF_NO_OBJECT_ATTRIBUTES,
WDF_NO_HANDLE);
}
#include <wdk.h>
#include <wdf.h>
DRIVER_INITIALIZE DriverEntry;
EVT_WDF_DRIVER_DEVICE_ADD OnDeviceAdd;
NTSTATUS DriverEntry(PDRIVER_OBJECT DriverObject,
PUNICODE_STRING RegistryPath) {
WDF_DRIVER_CONFIG config;
WDF_DRIVER_CONFIG_INIT(&config, OnDeviceAdd);
return WdfDriverCreate(DriverObject,
RegistryPath,
WDF_NO_OBJECT_ATTRIBUTES,
&config,
WDF_NO_HANDLE);
}
NTSTATUS OnDeviceAdd(WDFDRIVER Driver,
PWDFDEVICE_INIT DeviceInit) {
return WdfDeviceCreate(&DeviceInit,
WDF_NO_OBJECT_ATTRIBUTES,
WDF_NO_HANDLE);
}
#include <wdk.h>
#include <wdf.h>
DRIVER_INITIALIZE DriverEntry;
EVT_WDF_DRIVER_DEVICE_ADD OnDeviceAdd;
NTSTATUS DriverEntry(PDRIVER_OBJECT DriverObject,
PUNICODE_STRING RegistryPath) {
WDF_DRIVER_CONFIG config;
WDF_DRIVER_CONFIG_INIT(&config, OnDeviceAdd);
return WdfDriverCreate(DriverObject,
RegistryPath,
WDF_NO_OBJECT_ATTRIBUTES,
&config,
WDF_NO_HANDLE);
}
NTSTATUS OnDeviceAdd(WDFDRIVER Driver,
PWDFDEVICE_INIT DeviceInit) {
return WdfDeviceCreate(&DeviceInit,
WDF_NO_OBJECT_ATTRIBUTES,
WDF_NO_HANDLE);
}
#include <wdk.h>
#include <wdf.h>
DRIVER_INITIALIZE DriverEntry;
EVT_WDF_DRIVER_DEVICE_ADD OnDeviceAdd;
NTSTATUS DriverEntry(PDRIVER_OBJECT DriverObject,
PUNICODE_STRING RegistryPath) {
WDF_DRIVER_CONFIG config;
WDF_DRIVER_CONFIG_INIT(&config, OnDeviceAdd);
return WdfDriverCreate(DriverObject,
RegistryPath,
WDF_NO_OBJECT_ATTRIBUTES,
&config,
WDF_NO_HANDLE);
}
NTSTATUS OnDeviceAdd(WDFDRIVER Driver,
PWDFDEVICE_INIT DeviceInit) {
return WdfDeviceCreate(&DeviceInit,
WDF_NO_OBJECT_ATTRIBUTES,
WDF_NO_HANDLE);
}
Storing Driver Specific
Data
struct DeviceContext {
MYDEVICE_STATE CurrentState;
...
};
WDF_DECLARE_CONTEXT_TYPE_WITH_NAME(DeviceContext,
GetDeviceContext);
NTSTATUS OnDeviceAdd(...) {
WDFDEVICE device;
DeviceContext* context;
WDF_OBJECT_ATTRIBUTES attributes;
WDF_OBJECT_ATTRIBUTES_INIT_CONTEXT_TYPE(&attributes,
DeviceContext);
attributes.EvtDestroyCallback = OnDeviceDestroy;
WdfDeviceCreate(&DeviceInit, &attributes, &device);
if (failure) {return status;}
deviceContext = GetDeviceContext(device);
deviceContext->CurrentState = MyDeviceStateUninitialized;
...
}
NTSTATUS OnDeviceAdd(...) {
WdfUsbTargetCreate(device,
WDF_NO_OBJECT_ATTRIBUTES,
&deviceContext->UsbIoTarget);
if (failure) return status;
WDF_OBJECT_ATTRIBUTES attributes;
WDF_OBJECT_ATTRIBUTES_INIT_CONTEXT_TYPE(&attributes,
RequestContext);
attributes.ParentObject = deviceContext->UsbIoTarget;
WdfRequestCreate(&attributes,
deviceContext->UsbIoTarget,
&deviceContext->UsbRequest);
if (failure) return status;
InitializeRequestContext(deviceContext->UsbRequest);
if (failure) return status;
...
}
Handling I/O
NTSTATUS OnDeviceAdd(…, PWDFDEVICE_INIT DeviceInit) {
...
// After creating the device…
WDF_IO_QUEUE_CONFIG queueConfig;
WDF_IO_QUEUE_CONFIG_INIT_DEFAULT_QUEUE(
&queueConfig,
WdfIoQueueDispatchSequential
);
queueConfig.EvtIoDeviceControl = OnDeviceControl;
WdfIoQueueCreate(device,
&queueConfig,
WDF_NO_OBJECT_ATTRIBUTES,
WDF_NO_OBJECT);
…
}
VOID OnDeviceControl(WDFQUEUE Queue, WDFREQUEST Request,
size_t InputCb, size_t OutputCb,
ULONG IoControlCode) {
if (IoControlCode != IOCTL_MYDRIVER_DO_SOMETHING) {
goto error;
}
WdfRequestRetrieveInputBuffer(Request,
sizeof(DO_SOMETHING_INPUT),
&input,
NULL);
if (failure) goto error;
// Validate input structure
if (failure) goto error;
// Start request running.
if (failure) goto error;
return;
Error:
WdfRequestComplete(Request, status);
return;
Power Management
NTSTATUS OnDeviceAdd(...) {
…
WDF_PNPPOWER_EVENT_CALLBACKS powerCb;
WDF_PNPPOWER_EVENT_CALLBACKS_INIT(&powerCb);
powerCb.EvtDeviceD0Entry = OnD0Entry;
powerCb.EvtDeviceD0Exit = OnD0Exit;
WdfDeviceInitSetPnpPowerEventCallbacks(DeviceInit,
&powerCb);
// create the device ...
WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS idleSettings;
WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS_INIT(
&idleSettings,
IdleUsbSelectiveSuspend
);
idleSettings.IdleTimeout = 500; // milliseconds
WdfDeviceAssignS0IdleSettings(device, &idleSettings);
if (failure) return status;
}
Summary
Developing Drivers with Windows Driver Foundation
Kernel-Mode Driver Framework Design Guide
User-Mode Driver Framework Design Guide
Choosing a driver model
What’s New in Windows Driver Frameworks for Windows 8
[email protected]
Mine
WDF
http://forums.dev.windows.com
http://bldw.in/SessionFeedback