EvtDeviceEject function
[Applies to KMDF only]
A driver's EvtDeviceEject event callback function handles operations that are necessary to eject a device from its docking station.
Syntax
EVT_WDF_DEVICE_EJECT EvtDeviceEject; NTSTATUS EvtDeviceEject( _In_ WDFDEVICE Device ) { ... }
Parameters
- Device [in]
-
A handle to a framework device object.
Return value
If the operation succeeds, the driver must return STATUS_SUCCESS. Otherwise it must return an NTSTATUS value that NT_SUCCESS evaluates as FALSE. Do not return STATUS_NOT_SUPPORTED.
For more information about return values, see Reporting Device Failures.
Remarks
Framework-based bus drivers can provide an EvtDeviceEject callback function. A bus driver must provide an EvtDeviceEject callback function if the driver must perform operations that physically eject one of its enumerated child devices from the device's docking station. To register this callback function, the bus driver must call WdfPdoInitSetEventCallbacks.
Before calling the EvtDeviceEject callback function, the framework calls the driver's EvtDeviceD0Exit and EvtDeviceReleaseHardware callback functions.
If a driver's EvtDeviceEject callback function returns STATUS_SUCCESS, the framework updates the driver's child list to indicate that the ejected device is no longer available. Therefore the driver does not have to call WdfPdoMarkMissing or WdfChildListUpdateChildDescriptionAsMissing.
For more information about device ejection, see Supporting Ejectable Devices.
Examples
To define an EvtDeviceEject callback function, you must first provide a function declaration that identifies the type of callback function you’re defining. Windows provides a set of callback function types for drivers. Declaring a function using the callback function types helps Code Analysis for Drivers, Static Driver Verifier (SDV), and other verification tools find errors, and it’s a requirement for writing drivers for the Windows operating system.
For example, to define an EvtDeviceEject callback function that is named MyDeviceEject, use the EVT_WDF_DEVICE_EJECT type as shown in this code example:
EVT_WDF_DEVICE_EJECT MyDeviceEject;
Then, implement your callback function as follows:
_Use_decl_annotations_ NTSTATUS MyDeviceEject ( WDFDEVICE Device ) {...}
The EVT_WDF_DEVICE_EJECT function type is defined in the Wdfpdo.h header file. To more accurately identify errors when you run the code analysis tools, be sure to add the _Use_decl_annotations_ annotation to your function definition. The _Use_decl_annotations_ annotation ensures that the annotations that are applied to the EVT_WDF_DEVICE_EJECT function type in the header file are used. For more information about the requirements for function declarations, see Declaring Functions by Using Function Role Types for KMDF Drivers. For information about _Use_decl_annotations_, see Annotating Function Behavior.
Requirements
Minimum KMDF version | 1.0 |
---|---|
Header |
|
IRQL | PASSIVE_LEVEL |
See also