/*++ Copyright (c) Microsoft Corporation. All rights reserved. Module Name: Wdfdriver.h Environment: user mode NOTE: This header is generated by stubwork. To modify contents, add or remove or tags in the corresponding .x and .y template files. --*/ #pragma once #ifndef WDF_EXTERN_C #ifdef __cplusplus #define WDF_EXTERN_C extern "C" #define WDF_EXTERN_C_START extern "C" { #define WDF_EXTERN_C_END } #else #define WDF_EXTERN_C #define WDF_EXTERN_C_START #define WDF_EXTERN_C_END #endif #endif WDF_EXTERN_C_START typedef enum _WDF_DRIVER_INIT_FLAGS { WdfDriverInitNonPnpDriver = 0x00000001, // If set, no Add Device routine is assigned. WdfDriverInitNoDispatchOverride = 0x00000002, // Useful for miniports. WdfVerifyOn = 0x00000004, // Controls whether WDFVERIFY macros are live. WdfVerifierOn = 0x00000008, // Top level verififer flag. WdfDriverInitCompanion = 0x00000010, // If set, Add Companion needs to be assigned } WDF_DRIVER_INIT_FLAGS; #define WDF_TRACE_ID ('TRAC') // // Callbacks for FxDriver // typedef _Function_class_(EVT_WDF_DRIVER_DEVICE_ADD) _IRQL_requires_same_ _IRQL_requires_max_(PASSIVE_LEVEL) NTSTATUS NTAPI EVT_WDF_DRIVER_DEVICE_ADD( _In_ WDFDRIVER Driver, _Inout_ PWDFDEVICE_INIT DeviceInit ); typedef EVT_WDF_DRIVER_DEVICE_ADD *PFN_WDF_DRIVER_DEVICE_ADD; typedef _Function_class_(EVT_WDF_DRIVER_UNLOAD) _IRQL_requires_same_ _IRQL_requires_max_(PASSIVE_LEVEL) VOID NTAPI EVT_WDF_DRIVER_UNLOAD( _In_ WDFDRIVER Driver ); typedef EVT_WDF_DRIVER_UNLOAD *PFN_WDF_DRIVER_UNLOAD; // // Used by WPP Tracing (modeled after WPP's WppTraceCallback (in km-init.tpl)) // typedef _Function_class_(EVT_WDF_TRACE_CALLBACK) _IRQL_requires_same_ _IRQL_requires_max_(PASSIVE_LEVEL) NTSTATUS NTAPI EVT_WDF_TRACE_CALLBACK( _In_ UCHAR minorFunction, _In_opt_ PVOID dataPath, _In_ ULONG bufferLength, _Inout_updates_bytes_(bufferLength) PVOID buffer, _In_ PVOID context, _Out_ PULONG size ); typedef EVT_WDF_TRACE_CALLBACK *PFN_WDF_TRACE_CALLBACK; typedef struct _WDF_DRIVER_CONFIG { // // Size of this structure in bytes // ULONG Size; // // Event callbacks // PFN_WDF_DRIVER_DEVICE_ADD EvtDriverDeviceAdd; PFN_WDF_DRIVER_UNLOAD EvtDriverUnload; // // Combination of WDF_DRIVER_INIT_FLAGS values // ULONG DriverInitFlags; // // Pool tag to use for all allocations made by the framework on behalf of // the client driver. // ULONG DriverPoolTag; } WDF_DRIVER_CONFIG, *PWDF_DRIVER_CONFIG; VOID FORCEINLINE WDF_DRIVER_CONFIG_INIT( _Out_ PWDF_DRIVER_CONFIG Config, _In_opt_ PFN_WDF_DRIVER_DEVICE_ADD EvtDriverDeviceAdd ) { RtlZeroMemory(Config, sizeof(WDF_DRIVER_CONFIG)); Config->Size = WDF_STRUCTURE_SIZE(WDF_DRIVER_CONFIG); Config->EvtDriverDeviceAdd = EvtDriverDeviceAdd; } typedef struct _WDF_DRIVER_VERSION_AVAILABLE_PARAMS { // // Size of the structure in bytes // ULONG Size; // // Major Version requested // ULONG MajorVersion; // // Minor Version requested // ULONG MinorVersion; } WDF_DRIVER_VERSION_AVAILABLE_PARAMS, *PWDF_DRIVER_VERSION_AVAILABLE_PARAMS; VOID FORCEINLINE WDF_DRIVER_VERSION_AVAILABLE_PARAMS_INIT( _Out_ PWDF_DRIVER_VERSION_AVAILABLE_PARAMS Params, _In_ ULONG MajorVersion, _In_ ULONG MinorVersion ) { RtlZeroMemory(Params, sizeof(WDF_DRIVER_VERSION_AVAILABLE_PARAMS)); Params->Size = WDF_STRUCTURE_SIZE(WDF_DRIVER_VERSION_AVAILABLE_PARAMS); Params->MajorVersion = MajorVersion; Params->MinorVersion = MinorVersion; } WDFDRIVER FORCEINLINE WdfGetDriver( VOID ) { return WdfDriverGlobals->Driver; } VOID FORCEINLINE WDF_DRIVER_CONFIG_COMPANION_INIT( _Out_ PWDF_DRIVER_CONFIG Config, _In_opt_ PFN_WDF_DRIVER_DEVICE_ADD EvtDriverDeviceAdd ) { WDF_DRIVER_CONFIG_INIT(Config, EvtDriverDeviceAdd); Config->DriverInitFlags |= WdfDriverInitCompanion; } // // WDF Function: WdfDriverCreate // typedef _Must_inspect_result_ _IRQL_requires_max_(PASSIVE_LEVEL) WDFAPI NTSTATUS (NTAPI *PFN_WDFDRIVERCREATE)( _In_ PWDF_DRIVER_GLOBALS DriverGlobals, _In_ PDRIVER_OBJECT DriverObject, _In_ PCUNICODE_STRING RegistryPath, _In_opt_ PWDF_OBJECT_ATTRIBUTES DriverAttributes, _In_ PWDF_DRIVER_CONFIG DriverConfig, _Out_opt_ WDFDRIVER* Driver ); _Must_inspect_result_ _IRQL_requires_max_(PASSIVE_LEVEL) FORCEINLINE NTSTATUS WdfDriverCreate( _In_ PDRIVER_OBJECT DriverObject, _In_ PCUNICODE_STRING RegistryPath, _In_opt_ PWDF_OBJECT_ATTRIBUTES DriverAttributes, _In_ PWDF_DRIVER_CONFIG DriverConfig, _Out_opt_ WDFDRIVER* Driver ) { return ((PFN_WDFDRIVERCREATE) WdfFunctions[WdfDriverCreateTableIndex])(WdfDriverGlobals, DriverObject, RegistryPath, DriverAttributes, DriverConfig, Driver); } // // WDF Function: WdfDriverGetRegistryPath // typedef _IRQL_requires_max_(PASSIVE_LEVEL) WDFAPI PWSTR (NTAPI *PFN_WDFDRIVERGETREGISTRYPATH)( _In_ PWDF_DRIVER_GLOBALS DriverGlobals, _In_ WDFDRIVER Driver ); _IRQL_requires_max_(PASSIVE_LEVEL) FORCEINLINE PWSTR WdfDriverGetRegistryPath( _In_ WDFDRIVER Driver ) { return ((PFN_WDFDRIVERGETREGISTRYPATH) WdfFunctions[WdfDriverGetRegistryPathTableIndex])(WdfDriverGlobals, Driver); } // // WDF Function: WdfDriverOpenParametersRegistryKey // typedef _Must_inspect_result_ _IRQL_requires_max_(PASSIVE_LEVEL) WDFAPI NTSTATUS (NTAPI *PFN_WDFDRIVEROPENPARAMETERSREGISTRYKEY)( _In_ PWDF_DRIVER_GLOBALS DriverGlobals, _In_ WDFDRIVER Driver, _In_ ACCESS_MASK DesiredAccess, _In_opt_ PWDF_OBJECT_ATTRIBUTES KeyAttributes, _Out_ WDFKEY* Key ); _Must_inspect_result_ _IRQL_requires_max_(PASSIVE_LEVEL) FORCEINLINE NTSTATUS WdfDriverOpenParametersRegistryKey( _In_ WDFDRIVER Driver, _In_ ACCESS_MASK DesiredAccess, _In_opt_ PWDF_OBJECT_ATTRIBUTES KeyAttributes, _Out_ WDFKEY* Key ) { return ((PFN_WDFDRIVEROPENPARAMETERSREGISTRYKEY) WdfFunctions[WdfDriverOpenParametersRegistryKeyTableIndex])(WdfDriverGlobals, Driver, DesiredAccess, KeyAttributes, Key); } // // WDF Function: WdfDriverRetrieveVersionString // typedef _Must_inspect_result_ _IRQL_requires_max_(PASSIVE_LEVEL) WDFAPI NTSTATUS (NTAPI *PFN_WDFDRIVERRETRIEVEVERSIONSTRING)( _In_ PWDF_DRIVER_GLOBALS DriverGlobals, _In_ WDFDRIVER Driver, _In_ WDFSTRING String ); _Must_inspect_result_ _IRQL_requires_max_(PASSIVE_LEVEL) FORCEINLINE NTSTATUS WdfDriverRetrieveVersionString( _In_ WDFDRIVER Driver, _In_ WDFSTRING String ) { return ((PFN_WDFDRIVERRETRIEVEVERSIONSTRING) WdfFunctions[WdfDriverRetrieveVersionStringTableIndex])(WdfDriverGlobals, Driver, String); } // // WDF Function: WdfDriverIsVersionAvailable // typedef _Must_inspect_result_ _IRQL_requires_max_(PASSIVE_LEVEL) WDFAPI BOOLEAN (NTAPI *PFN_WDFDRIVERISVERSIONAVAILABLE)( _In_ PWDF_DRIVER_GLOBALS DriverGlobals, _In_ WDFDRIVER Driver, _In_ PWDF_DRIVER_VERSION_AVAILABLE_PARAMS VersionAvailableParams ); _Must_inspect_result_ _IRQL_requires_max_(PASSIVE_LEVEL) FORCEINLINE BOOLEAN WdfDriverIsVersionAvailable( _In_ WDFDRIVER Driver, _In_ PWDF_DRIVER_VERSION_AVAILABLE_PARAMS VersionAvailableParams ) { return ((PFN_WDFDRIVERISVERSIONAVAILABLE) WdfFunctions[WdfDriverIsVersionAvailableTableIndex])(WdfDriverGlobals, Driver, VersionAvailableParams); } // // WDF Function: WdfDriverErrorReportApiMissing // typedef _Must_inspect_result_ _IRQL_requires_max_(DISPATCH_LEVEL + 1) WDFAPI NTSTATUS (NTAPI *PFN_WDFDRIVERERRORREPORTAPIMISSING)( _In_ PWDF_DRIVER_GLOBALS DriverGlobals, _In_ WDFDRIVER Driver, _In_opt_ PCWSTR FrameworkExtensionName, _In_ ULONG ApiIndex, _In_ BOOLEAN DoesApiReturnNtstatus ); _Must_inspect_result_ _IRQL_requires_max_(DISPATCH_LEVEL + 1) FORCEINLINE NTSTATUS WdfDriverErrorReportApiMissing( _In_ WDFDRIVER Driver, _In_opt_ PCWSTR FrameworkExtensionName, _In_ ULONG ApiIndex, _In_ BOOLEAN DoesApiReturnNtstatus ) { return ((PFN_WDFDRIVERERRORREPORTAPIMISSING) WdfFunctions[WdfDriverErrorReportApiMissingTableIndex])(WdfDriverGlobals, Driver, FrameworkExtensionName, ApiIndex, DoesApiReturnNtstatus); } // // WDF Function: WdfDriverOpenPersistentStateRegistryKey // typedef _Must_inspect_result_ _IRQL_requires_max_(PASSIVE_LEVEL) WDFAPI NTSTATUS (NTAPI *PFN_WDFDRIVEROPENPERSISTENTSTATEREGISTRYKEY)( _In_ PWDF_DRIVER_GLOBALS DriverGlobals, _In_ WDFDRIVER Driver, _In_ ACCESS_MASK DesiredAccess, _In_opt_ PWDF_OBJECT_ATTRIBUTES KeyAttributes, _Out_ WDFKEY* Key ); _Must_inspect_result_ _IRQL_requires_max_(PASSIVE_LEVEL) FORCEINLINE NTSTATUS WdfDriverOpenPersistentStateRegistryKey( _In_ WDFDRIVER Driver, _In_ ACCESS_MASK DesiredAccess, _In_opt_ PWDF_OBJECT_ATTRIBUTES KeyAttributes, _Out_ WDFKEY* Key ) { return ((PFN_WDFDRIVEROPENPERSISTENTSTATEREGISTRYKEY) WdfFunctions[WdfDriverOpenPersistentStateRegistryKeyTableIndex])(WdfDriverGlobals, Driver, DesiredAccess, KeyAttributes, Key); } // // WDF Function: WdfDriverRetrieveDriverDataDirectoryString // typedef _IRQL_requires_max_(PASSIVE_LEVEL) WDFAPI NTSTATUS (NTAPI *PFN_WDFDRIVERRETRIEVEDRIVERDATADIRECTORYSTRING)( _In_ PWDF_DRIVER_GLOBALS DriverGlobals, _In_ WDFDRIVER Driver, _In_ WDFSTRING String ); _IRQL_requires_max_(PASSIVE_LEVEL) FORCEINLINE NTSTATUS WdfDriverRetrieveDriverDataDirectoryString( _In_ WDFDRIVER Driver, _In_ WDFSTRING String ) { #if defined(WDF_EVERYTHING_ALWAYS_AVAILABLE) return ((PFN_WDFDRIVERRETRIEVEDRIVERDATADIRECTORYSTRING) WdfFunctions[WdfDriverRetrieveDriverDataDirectoryStringTableIndex])(WdfDriverGlobals, Driver, String); #else if (WDF_IS_FUNCTION_AVAILABLE(WdfDriverRetrieveDriverDataDirectoryString)) { return ((PFN_WDFDRIVERRETRIEVEDRIVERDATADIRECTORYSTRING) WdfFunctions[WdfDriverRetrieveDriverDataDirectoryStringTableIndex])(WdfDriverGlobals, Driver, String); } else { return ((PFN_WDFDRIVERERRORREPORTAPIMISSING) WdfFunctions[WdfDriverErrorReportApiMissingTableIndex])(WdfDriverGlobals, WdfGetDriver(), NULL, WdfDriverRetrieveDriverDataDirectoryStringTableIndex, TRUE); } #endif } WDF_EXTERN_C_END