https://git.reactos.org/?p=reactos.git;a=commitdiff;h=40462c924e9dce2f00e73…
commit 40462c924e9dce2f00e73f93f4b91f6b757234e4
Author: Victor Perevertkin <victor.perevertkin(a)reactos.org>
AuthorDate: Thu Sep 24 23:41:01 2020 +0300
Commit: Victor Perevertkin <victor.perevertkin(a)reactos.org>
CommitDate: Mon Nov 2 22:07:15 2020 +0300
[KMDF] Add Kernel-Mode Driver Framework headers v1.17
Taken from Microsoft GitHub repo:
https://github.com/microsoft/Windows-Driver-Frameworks/commit/d9c6040fe9fa7…
Licensed under MIT
---
sdk/include/wdf/kmdf/1.17/wdf.h | 130 +
sdk/include/wdf/kmdf/1.17/wdfassert.h | 107 +
sdk/include/wdf/kmdf/1.17/wdfbugcodes.h | 145 +
sdk/include/wdf/kmdf/1.17/wdfchildlist.h | 858 +++++
sdk/include/wdf/kmdf/1.17/wdfcollection.h | 284 ++
sdk/include/wdf/kmdf/1.17/wdfcommonbuffer.h | 249 ++
sdk/include/wdf/kmdf/1.17/wdfcontrol.h | 168 +
sdk/include/wdf/kmdf/1.17/wdfcore.h | 176 +
sdk/include/wdf/kmdf/1.17/wdfdevice.h | 4496 +++++++++++++++++++++++++
sdk/include/wdf/kmdf/1.17/wdfdmaenabler.h | 509 +++
sdk/include/wdf/kmdf/1.17/wdfdmatransaction.h | 890 +++++
sdk/include/wdf/kmdf/1.17/wdfdpc.h | 243 ++
sdk/include/wdf/kmdf/1.17/wdfdriver.h | 460 +++
sdk/include/wdf/kmdf/1.17/wdffdo.h | 643 ++++
sdk/include/wdf/kmdf/1.17/wdffileobject.h | 166 +
sdk/include/wdf/kmdf/1.17/wdffuncenum.h | 473 +++
sdk/include/wdf/kmdf/1.17/wdfglobals.h | 85 +
sdk/include/wdf/kmdf/1.17/wdfhwaccess.h | 75 +
sdk/include/wdf/kmdf/1.17/wdfinstaller.h | 165 +
sdk/include/wdf/kmdf/1.17/wdfinterrupt.h | 810 +++++
sdk/include/wdf/kmdf/1.17/wdfio.h | 1177 +++++++
sdk/include/wdf/kmdf/1.17/wdfiotarget.h | 1351 ++++++++
sdk/include/wdf/kmdf/1.17/wdfmemory.h | 480 +++
sdk/include/wdf/kmdf/1.17/wdfminiport.h | 130 +
sdk/include/wdf/kmdf/1.17/wdfobject.h | 837 +++++
sdk/include/wdf/kmdf/1.17/wdfpdo.h | 799 +++++
sdk/include/wdf/kmdf/1.17/wdfpool.h | 61 +
sdk/include/wdf/kmdf/1.17/wdfqueryinterface.h | 215 ++
sdk/include/wdf/kmdf/1.17/wdfregistry.h | 737 ++++
sdk/include/wdf/kmdf/1.17/wdfrequest.h | 1768 ++++++++++
sdk/include/wdf/kmdf/1.17/wdfresource.h | 724 ++++
sdk/include/wdf/kmdf/1.17/wdfroletypes.h | 62 +
sdk/include/wdf/kmdf/1.17/wdfstatus.h | 254 ++
sdk/include/wdf/kmdf/1.17/wdfstring.h | 124 +
sdk/include/wdf/kmdf/1.17/wdfsync.h | 318 ++
sdk/include/wdf/kmdf/1.17/wdftimer.h | 264 ++
sdk/include/wdf/kmdf/1.17/wdftraceenums.h | 91 +
sdk/include/wdf/kmdf/1.17/wdftypes.h | 176 +
sdk/include/wdf/kmdf/1.17/wdfusb.h | 2592 ++++++++++++++
sdk/include/wdf/kmdf/1.17/wdfverifier.h | 138 +
sdk/include/wdf/kmdf/1.17/wdfwmi.h | 642 ++++
sdk/include/wdf/kmdf/1.17/wdfworkitem.h | 215 ++
42 files changed, 24287 insertions(+)
diff --git a/sdk/include/wdf/kmdf/1.17/wdf.h b/sdk/include/wdf/kmdf/1.17/wdf.h
new file mode 100644
index 00000000000..892aaa506ac
--- /dev/null
+++ b/sdk/include/wdf/kmdf/1.17/wdf.h
@@ -0,0 +1,130 @@
+/*++
+
+Copyright (c) Microsoft Corporation. All rights reserved.
+
+Module Name:
+
+ wdf.h
+
+Abstract:
+
+ Main header file for Windows Driver Frameworks
+
+Environment:
+
+ kernel mode only
+
+Revision History:
+
+--*/
+
+//
+// NOTE: This header is generated by stubwork. Please make any
+// modifications to the corresponding template files
+// (.x or .y) and use stubwork to regenerate the header
+//
+
+#ifndef _WDF_H_
+#define _WDF_H_
+
+#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
+
+
+
+#ifndef _Dispatch_type_
+#include <driverspecs.h>
+#endif
+
+
+
+
+
+//
+// Rename WdfFunctions to match version number. Build issues relating to
+// unresolved externals of WdfFunctions or WdfFunctions_XXXXX indicate
+// multiple WDF versions are being included. Ensure WDF version of all input
+// binaries match to resolve.
+//
+#define WdfFunctions WdfFunctions_01017
+
+typedef VOID (*WDFFUNC) (VOID);
+extern const WDFFUNC *WdfFunctions;
+extern WDFFUNC WdfDriverMiniportUnloadOverride;
+
+_Analysis_mode_(KMDF_INCLUDED)
+
+// Basic definitions
+#include "wdftypes.h"
+#include "wdfglobals.h"
+#include "wdffuncenum.h"
+#include "wdfstatus.h"
+#include "wdfassert.h"
+#include "wdfverifier.h"
+#include "wdfpool.h"
+
+// generic object
+#include "wdfobject.h"
+
+// Synchronization
+#include "wdfsync.h"
+
+#include "wdfcore.h"
+
+#include "wdfdriver.h"
+
+// Objects
+#include "WdfQueryInterface.h"
+#include "wdfmemory.h"
+#include "wdfchildlist.h"
+#include "wdffileobject.h"
+#include "wdfdevice.h"
+#include "wdfcollection.h"
+#include "wdfdpc.h"
+#include "wdftimer.h"
+#include "wdfworkitem.h"
+#include "wdfinterrupt.h"
+#include "wdfresource.h"
+
+// I/O
+#include "wdfrequest.h"
+#include "wdfiotarget.h"
+#include "wdfio.h"
+
+// particular device types
+#include "wdffdo.h"
+#include "wdfpdo.h"
+#include "wdfcontrol.h"
+
+#include "WdfWMI.h"
+
+#include "wdfstring.h"
+#include "wdfregistry.h"
+
+// Dma
+#include "wdfDmaEnabler.h"
+#include "wdfDmaTransaction.h"
+#include "wdfCommonBuffer.h"
+
+#include "wdfbugcodes.h"
+#include "wdfroletypes.h"
+#include "wdfhwaccess.h"
+
+
+
+
+WDF_EXTERN_C_END
+
+#endif // _WDF_H_
+
diff --git a/sdk/include/wdf/kmdf/1.17/wdfassert.h
b/sdk/include/wdf/kmdf/1.17/wdfassert.h
new file mode 100644
index 00000000000..a61dae07b52
--- /dev/null
+++ b/sdk/include/wdf/kmdf/1.17/wdfassert.h
@@ -0,0 +1,107 @@
+/*++
+
+Copyright (c) Microsoft Corporation. All rights reserved.
+
+_WdfVersionBuild_
+
+Module Name:
+
+ WdfAssert.h
+
+Abstract:
+
+ Contains prototypes for dealing with run time asserts
+
+Author:
+
+Environment:
+
+ kernel mode only
+
+Revision History:
+
+--*/
+
+//
+// NOTE: This header is generated by stubwork. Please make any
+// modifications to the corresponding template files
+// (.x or .y) and use stubwork to regenerate the header
+//
+
+#ifndef _WDFASSERT_H_
+#define _WDFASSERT_H_
+
+#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
+
+
+
+
+#if (NTDDI_VERSION >= NTDDI_WIN2K)
+
+//
+// Including here because RtlAssert is not declared in XP and Win2K headers for
+// free builds
+//
+NTSYSAPI
+VOID
+NTAPI
+RtlAssert(
+ _In_ PVOID FailedAssertion,
+ _In_ PVOID FileName,
+ _In_ ULONG LineNumber,
+ _In_opt_ PSTR Message
+ );
+
+
+
+//
+// WDFVERIFY is active both on checked and free build only if
+// the wdf verifier is tuned on
+//
+#define WDFVERIFY(exp) { \
+ if ((WdfDriverGlobals->DriverFlags & WdfVerifyOn) && !(exp)) { \
+ RtlAssert( #exp, __FILE__, __LINE__, NULL ); \
+ } \
+}
+
+#define VERIFY_IS_IRQL_PASSIVE_LEVEL() WDFVERIFY(KeGetCurrentIrql() == PASSIVE_LEVEL)
+
+//
+// Following macro is obsolete and it will be phased out in due course
+//
+#define IS_AT_PASSIVE() WDFVERIFY(KeGetCurrentIrql() == PASSIVE_LEVEL)
+
+//
+// Compile time active "assert". File will not compile if this assert is
FALSE.
+//
+// This compile time assert is designed to catch mismatch in the values of the
+// declared constants. So suppress the OACR warning #6326 generated about the
+// potential comparison of constants.
+//
+#define WDFCASSERT(c) { \
+ __pragma(warning(suppress: 6326)) \
+ switch(0) case (c): case 0: ; \
+ }
+
+
+
+
+
+#endif // (NTDDI_VERSION >= NTDDI_WIN2K)
+
+WDF_EXTERN_C_END
+
+#endif // _WDFASSERT_H_
+
diff --git a/sdk/include/wdf/kmdf/1.17/wdfbugcodes.h
b/sdk/include/wdf/kmdf/1.17/wdfbugcodes.h
new file mode 100644
index 00000000000..245edcc4379
--- /dev/null
+++ b/sdk/include/wdf/kmdf/1.17/wdfbugcodes.h
@@ -0,0 +1,145 @@
+/*++
+
+Copyright (c) Microsoft Corporation. All rights reserved.
+
+_WdfVersionBuild_
+
+Module Name:
+
+ wdfbugcodes.h
+
+Abstract:
+
+ Lists bugcheck subcode values for the WDF_VIOLATION bugcheck code
+
+Environment:
+
+ kernel mode only
+
+Revision History:
+
+--*/
+
+//
+// NOTE: This header is generated by stubwork. Please make any
+// modifications to the corresponding template files
+// (.x or .y) and use stubwork to regenerate the header
+//
+
+#ifndef _WDFBUGCODES_H_
+#define _WDFBUGCODES_H_
+
+#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
+
+
+
+#if (NTDDI_VERSION >= NTDDI_WIN2K)
+
+//
+// These values are used in Parameter 1 in the bugcheck data
+//
+// NOTE: Do not change these codes, only add to the end.
+// The OCA analysis and debugger tools will look at
+// these codes to perform fault analysis.
+//
+typedef enum _WDF_BUGCHECK_CODES {
+ WDF_POWER_ROUTINE_TIMED_OUT = 0x1,
+ WDF_RECURSIVE_LOCK = 0x2,
+ WDF_VERIFIER_FATAL_ERROR = 0x3,
+ WDF_REQUIRED_PARAMETER_IS_NULL = 0x4,
+ WDF_INVALID_HANDLE = 0x5,
+ WDF_REQUEST_FATAL_ERROR = 0x6,
+ WDF_OBJECT_ERROR = 0x7,
+ WDF_DMA_FATAL_ERROR = 0x8,
+ WDF_INVALID_INTERRUPT = 0x9,
+ WDF_QUEUE_FATAL_ERROR = 0xA,
+ WDF_INVALID_LOCK_OPERATION = 0xB,
+ WDF_PNP_FATAL_ERROR = 0xC,
+ WDF_POWER_MULTIPLE_PPO = 0xD,
+ WDF_VERIFIER_IRQL_MISMATCH = 0xE,
+ WDF_VERIFIER_CRITICAL_REGION_MISMATCH = 0xF,
+} WDF_BUGCHECK_CODES;
+
+typedef enum _WDF_REQUEST_FATAL_ERROR_CODES {
+ WDF_REQUEST_FATAL_ERROR_NO_MORE_STACK_LOCATIONS = 0x1,
+ WDF_REQUEST_FATAL_ERROR_NULL_IRP = 0x2,
+ WDF_REQUEST_FATAL_ERROR_REQUEST_ALREADY_SENT = 0x3,
+ WDF_REQUEST_FATAL_ERROR_INFORMATION_LENGTH_MISMATCH = 0x4,
+ WDF_REQUEST_FATAL_ERROR_REQUEST_NOT_IN_QUEUE = 05,
+} WDF_REQUEST_FATAL_ERROR_CODES;
+
+
+
+typedef struct _WDF_POWER_ROUTINE_TIMED_OUT_DATA {
+ //
+ // Current power state associated with the timed out device
+ //
+ WDF_DEVICE_POWER_STATE PowerState;
+
+ //
+ // Current power policy state associated with the timed out device
+ //
+ WDF_DEVICE_POWER_POLICY_STATE PowerPolicyState;
+
+ //
+ // The device object for the timed out device
+ //
+ PDEVICE_OBJECT DeviceObject;
+
+ //
+ // The handle for the timed out device
+ //
+ WDFDEVICE Device;
+
+ //
+ // The thread which is stuck
+ //
+ PKTHREAD TimedOutThread;
+
+} WDF_POWER_ROUTINE_TIMED_OUT_DATA;
+
+typedef struct _WDF_REQUEST_FATAL_ERROR_INFORMATION_LENGTH_MISMATCH_DATA {
+ WDFREQUEST Request;
+
+ PIRP Irp;
+
+ ULONG OutputBufferLength;
+
+ ULONG_PTR Information;
+
+ UCHAR MajorFunction;
+
+} WDF_REQUEST_FATAL_ERROR_INFORMATION_LENGTH_MISMATCH_DATA,
+ *PWDF_REQUEST_FATAL_ERROR_INFORMATION_LENGTH_MISMATCH_DATA;
+
+typedef struct _WDF_QUEUE_FATAL_ERROR_DATA {
+ WDFQUEUE Queue;
+
+ WDFREQUEST Request;
+
+ NTSTATUS Status;
+
+} WDF_QUEUE_FATAL_ERROR_DATA, *PWDF_QUEUE_FATAL_ERROR_DATA;
+
+
+
+
+#endif // (NTDDI_VERSION >= NTDDI_WIN2K)
+
+
+WDF_EXTERN_C_END
+
+#endif // _WDFBUGCODES_H_
+
diff --git a/sdk/include/wdf/kmdf/1.17/wdfchildlist.h
b/sdk/include/wdf/kmdf/1.17/wdfchildlist.h
new file mode 100644
index 00000000000..14f96550b2c
--- /dev/null
+++ b/sdk/include/wdf/kmdf/1.17/wdfchildlist.h
@@ -0,0 +1,858 @@
+/*++
+
+Copyright (c) Microsoft Corporation. All rights reserved.
+
+_WdfVersionBuild_
+
+Module Name:
+
+ WdfChildList.hpp
+
+Abstract:
+
+ This module defines the set of APIs to manipulate a WDFCHILDLIST handle. A
+ WDFCHILDLIST handle maintains a list of descriptions representing
+ dynamically enumerated child devices.
+
+Environment:
+
+ kernel mode only
+
+Revision History:
+
+--*/
+
+//
+// NOTE: This header is generated by stubwork. Please make any
+// modifications to the corresponding template files
+// (.x or .y) and use stubwork to regenerate the header
+//
+
+#ifndef _WDFCHILDLIST_H_
+#define _WDFCHILDLIST_H_
+
+#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
+
+
+
+#if (NTDDI_VERSION >= NTDDI_WIN2K)
+
+typedef enum _WDF_CHILD_LIST_RETRIEVE_DEVICE_STATUS {
+ WdfChildListRetrieveDeviceUndefined = 0,
+ WdfChildListRetrieveDeviceSuccess,
+ WdfChildListRetrieveDeviceNotYetCreated,
+ WdfChildListRetrieveDeviceNoSuchDevice,
+} WDF_CHILD_LIST_RETRIEVE_DEVICE_STATUS, *PWDF_CHILD_LIST_RETRIEVE_DEVICE_STATUS;
+
+typedef enum _WDF_RETRIEVE_CHILD_FLAGS {
+ WdfRetrieveUnspecified = 0x0000,
+ WdfRetrievePresentChildren = 0x0001,
+ WdfRetrieveMissingChildren = 0x0002,
+ WdfRetrievePendingChildren = 0x0004,
+ WdfRetrieveAddedChildren = (WdfRetrievePresentChildren |
WdfRetrievePendingChildren),
+ WdfRetrieveAllChildren = (WdfRetrievePresentChildren | WdfRetrievePendingChildren |
WdfRetrieveMissingChildren),
+} WDF_RETRIEVE_CHILD_FLAGS;
+
+
+
+typedef struct _WDF_CHILD_IDENTIFICATION_DESCRIPTION_HEADER {
+ //
+ // Size in bytes of the entire description, including this header.
+ //
+ // Same value as WDF_CHILD_LIST_CONFIG::IdentificationDescriptionSize
+ // Used as a sanity check.
+ //
+ ULONG IdentificationDescriptionSize;
+} WDF_CHILD_IDENTIFICATION_DESCRIPTION_HEADER,
+ *PWDF_CHILD_IDENTIFICATION_DESCRIPTION_HEADER;
+
+VOID
+FORCEINLINE
+WDF_CHILD_IDENTIFICATION_DESCRIPTION_HEADER_INIT(
+ _Out_ PWDF_CHILD_IDENTIFICATION_DESCRIPTION_HEADER Header,
+ _In_ ULONG IdentificationDescriptionSize
+ )
+{
+ RtlZeroMemory(Header, IdentificationDescriptionSize);
+ Header->IdentificationDescriptionSize = IdentificationDescriptionSize;
+}
+
+typedef struct _WDF_CHILD_ADDRESS_DESCRIPTION_HEADER {
+ //
+ // Size in bytes of the entire description, including this header.
+ //
+ // Same value as WDF_CHILD_LIST_CONFIG::AddressDescriptionSize
+ // Used as a sanity check.
+ //
+ ULONG AddressDescriptionSize;
+} WDF_CHILD_ADDRESS_DESCRIPTION_HEADER,
+ *PWDF_CHILD_ADDRESS_DESCRIPTION_HEADER;
+
+VOID
+FORCEINLINE
+WDF_CHILD_ADDRESS_DESCRIPTION_HEADER_INIT(
+ _Out_ PWDF_CHILD_ADDRESS_DESCRIPTION_HEADER Header,
+ _In_ ULONG AddressDescriptionSize
+ )
+{
+ RtlZeroMemory(Header, AddressDescriptionSize);
+ Header->AddressDescriptionSize = AddressDescriptionSize;
+}
+
+typedef
+_Function_class_(EVT_WDF_CHILD_LIST_CREATE_DEVICE)
+_IRQL_requires_same_
+_IRQL_requires_max_(PASSIVE_LEVEL)
+NTSTATUS
+EVT_WDF_CHILD_LIST_CREATE_DEVICE(
+ _In_
+ WDFCHILDLIST ChildList,
+ _In_
+ PWDF_CHILD_IDENTIFICATION_DESCRIPTION_HEADER IdentificationDescription,
+ _In_
+ PWDFDEVICE_INIT ChildInit
+ );
+
+typedef EVT_WDF_CHILD_LIST_CREATE_DEVICE *PFN_WDF_CHILD_LIST_CREATE_DEVICE;
+
+typedef
+_Function_class_(EVT_WDF_CHILD_LIST_SCAN_FOR_CHILDREN)
+_IRQL_requires_same_
+_IRQL_requires_max_(PASSIVE_LEVEL)
+VOID
+EVT_WDF_CHILD_LIST_SCAN_FOR_CHILDREN(
+ _In_
+ WDFCHILDLIST ChildList
+ );
+
+typedef EVT_WDF_CHILD_LIST_SCAN_FOR_CHILDREN *PFN_WDF_CHILD_LIST_SCAN_FOR_CHILDREN;
+
+typedef
+_Function_class_(EVT_WDF_CHILD_LIST_IDENTIFICATION_DESCRIPTION_COPY)
+_IRQL_requires_same_
+_IRQL_requires_max_(DISPATCH_LEVEL)
+VOID
+EVT_WDF_CHILD_LIST_IDENTIFICATION_DESCRIPTION_COPY(
+ _In_
+ WDFCHILDLIST ChildList,
+ _In_
+ PWDF_CHILD_IDENTIFICATION_DESCRIPTION_HEADER SourceIdentificationDescription,
+ _Out_
+ PWDF_CHILD_IDENTIFICATION_DESCRIPTION_HEADER DestinationIdentificationDescription
+ );
+
+typedef EVT_WDF_CHILD_LIST_IDENTIFICATION_DESCRIPTION_COPY
*PFN_WDF_CHILD_LIST_IDENTIFICATION_DESCRIPTION_COPY;
+
+typedef
+_Function_class_(EVT_WDF_CHILD_LIST_IDENTIFICATION_DESCRIPTION_DUPLICATE)
+_IRQL_requires_same_
+_IRQL_requires_max_(DISPATCH_LEVEL)
+NTSTATUS
+EVT_WDF_CHILD_LIST_IDENTIFICATION_DESCRIPTION_DUPLICATE(
+ _In_
+ WDFCHILDLIST ChildList,
+ _In_
+ PWDF_CHILD_IDENTIFICATION_DESCRIPTION_HEADER SourceIdentificationDescription,
+ _Out_
+ PWDF_CHILD_IDENTIFICATION_DESCRIPTION_HEADER DestinationIdentificationDescription
+ );
+
+typedef EVT_WDF_CHILD_LIST_IDENTIFICATION_DESCRIPTION_DUPLICATE
*PFN_WDF_CHILD_LIST_IDENTIFICATION_DESCRIPTION_DUPLICATE;
+
+typedef
+_Function_class_(EVT_WDF_CHILD_LIST_IDENTIFICATION_DESCRIPTION_COMPARE)
+_IRQL_requires_same_
+_IRQL_requires_max_(DISPATCH_LEVEL)
+BOOLEAN
+EVT_WDF_CHILD_LIST_IDENTIFICATION_DESCRIPTION_COMPARE(
+ _In_
+ WDFCHILDLIST ChildList,
+ _In_
+ PWDF_CHILD_IDENTIFICATION_DESCRIPTION_HEADER FirstIdentificationDescription,
+ _In_
+ PWDF_CHILD_IDENTIFICATION_DESCRIPTION_HEADER SecondIdentificationDescription
+ );
+
+typedef EVT_WDF_CHILD_LIST_IDENTIFICATION_DESCRIPTION_COMPARE
*PFN_WDF_CHILD_LIST_IDENTIFICATION_DESCRIPTION_COMPARE;
+
+typedef
+_Function_class_(EVT_WDF_CHILD_LIST_IDENTIFICATION_DESCRIPTION_CLEANUP)
+_IRQL_requires_same_
+_IRQL_requires_max_(DISPATCH_LEVEL)
+VOID
+EVT_WDF_CHILD_LIST_IDENTIFICATION_DESCRIPTION_CLEANUP(
+ _In_
+ WDFCHILDLIST ChildList,
+ _Inout_
+ PWDF_CHILD_IDENTIFICATION_DESCRIPTION_HEADER IdentificationDescription
+ );
+
+typedef EVT_WDF_CHILD_LIST_IDENTIFICATION_DESCRIPTION_CLEANUP
*PFN_WDF_CHILD_LIST_IDENTIFICATION_DESCRIPTION_CLEANUP;
+
+typedef
+_Function_class_(EVT_WDF_CHILD_LIST_ADDRESS_DESCRIPTION_COPY)
+_IRQL_requires_same_
+_IRQL_requires_max_(DISPATCH_LEVEL)
+VOID
+EVT_WDF_CHILD_LIST_ADDRESS_DESCRIPTION_COPY(
+ _In_
+ WDFCHILDLIST ChildList,
+ _In_
+ PWDF_CHILD_ADDRESS_DESCRIPTION_HEADER SourceAddressDescription,
+ _Out_
+ PWDF_CHILD_ADDRESS_DESCRIPTION_HEADER DestinationAddressDescription
+ );
+
+typedef EVT_WDF_CHILD_LIST_ADDRESS_DESCRIPTION_COPY
*PFN_WDF_CHILD_LIST_ADDRESS_DESCRIPTION_COPY;
+
+typedef
+_Function_class_(EVT_WDF_CHILD_LIST_ADDRESS_DESCRIPTION_DUPLICATE)
+_IRQL_requires_same_
+_IRQL_requires_max_(DISPATCH_LEVEL)
+NTSTATUS
+EVT_WDF_CHILD_LIST_ADDRESS_DESCRIPTION_DUPLICATE(
+ _In_
+ WDFCHILDLIST ChildList,
+ _In_
+ PWDF_CHILD_ADDRESS_DESCRIPTION_HEADER SourceAddressDescription,
+ _Out_
+ PWDF_CHILD_ADDRESS_DESCRIPTION_HEADER DestinationAddressDescription
+ );
+
+typedef EVT_WDF_CHILD_LIST_ADDRESS_DESCRIPTION_DUPLICATE
*PFN_WDF_CHILD_LIST_ADDRESS_DESCRIPTION_DUPLICATE;
+
+typedef
+_Function_class_(EVT_WDF_CHILD_LIST_ADDRESS_DESCRIPTION_CLEANUP)
+_IRQL_requires_same_
+_IRQL_requires_max_(DISPATCH_LEVEL)
+VOID
+EVT_WDF_CHILD_LIST_ADDRESS_DESCRIPTION_CLEANUP(
+ _In_
+ WDFCHILDLIST ChildList,
+ _Inout_
+ PWDF_CHILD_ADDRESS_DESCRIPTION_HEADER AddressDescription
+ );
+
+typedef EVT_WDF_CHILD_LIST_ADDRESS_DESCRIPTION_CLEANUP
*PFN_WDF_CHILD_LIST_ADDRESS_DESCRIPTION_CLEANUP;
+
+typedef
+_Function_class_(EVT_WDF_CHILD_LIST_DEVICE_REENUMERATED)
+_IRQL_requires_same_
+_IRQL_requires_max_(DISPATCH_LEVEL)
+BOOLEAN
+EVT_WDF_CHILD_LIST_DEVICE_REENUMERATED(
+ _In_
+ WDFCHILDLIST ChildList,
+ _In_
+ WDFDEVICE OldDevice,
+ _In_
+ PWDF_CHILD_ADDRESS_DESCRIPTION_HEADER OldAddressDescription,
+ _Out_
+ PWDF_CHILD_ADDRESS_DESCRIPTION_HEADER NewAddressDescription
+ );
+
+typedef EVT_WDF_CHILD_LIST_DEVICE_REENUMERATED *PFN_WDF_CHILD_LIST_DEVICE_REENUMERATED;
+
+typedef struct _WDF_CHILD_RETRIEVE_INFO {
+ //
+ // Size of the structure in bytes
+ //
+ ULONG Size;
+
+ //
+ // Must be a valid pointer when passed in, copied into upon success
+ //
+ PWDF_CHILD_IDENTIFICATION_DESCRIPTION_HEADER IdentificationDescription;
+
+ //
+ // Optional pointer when passed in, copied into upon success
+ //
+ PWDF_CHILD_ADDRESS_DESCRIPTION_HEADER AddressDescription;
+
+ //
+ // Status of the returned device
+ //
+ WDF_CHILD_LIST_RETRIEVE_DEVICE_STATUS Status;
+
+ //
+ // If provided, will be used for searching through the list of devices
+ // instead of the default list ID compare function
+ //
+ PFN_WDF_CHILD_LIST_IDENTIFICATION_DESCRIPTION_COMPARE
EvtChildListIdentificationDescriptionCompare;
+
+} WDF_CHILD_RETRIEVE_INFO, *PWDF_CHILD_RETRIEVE_INFO;
+
+VOID
+FORCEINLINE
+WDF_CHILD_RETRIEVE_INFO_INIT(
+ _Out_ PWDF_CHILD_RETRIEVE_INFO Info,
+ _In_ PWDF_CHILD_IDENTIFICATION_DESCRIPTION_HEADER IdentificationDescription
+ )
+{
+ RtlZeroMemory(Info, sizeof(WDF_CHILD_RETRIEVE_INFO));
+
+ Info->Size = sizeof(WDF_CHILD_RETRIEVE_INFO);
+ Info->IdentificationDescription = IdentificationDescription;
+}
+
+typedef struct _WDF_CHILD_LIST_CONFIG {
+ //
+ // Size of this structure in bytes
+ //
+ ULONG Size;
+
+ //
+ // The size in bytes of an identificaiton description to be used with the
+ // created WDFCHILDLIST handle
+ //
+ ULONG IdentificationDescriptionSize;
+
+ //
+ // Optional size in bytes of an address description to be used with the
+ // created WDFCHILDLIST handle.
+ //
+ ULONG AddressDescriptionSize;
+
+ //
+ // Required callback to be invoked when a description on the device list
+ // needs to be converted into a real WDFDEVICE handle.
+ //
+ PFN_WDF_CHILD_LIST_CREATE_DEVICE EvtChildListCreateDevice;
+
+ //
+ // Optional callback to be invoked when the device list needs to be
+ // rescanned. This function will be called after the device has entered D0
+ // and been fully initialized but before I/O has started.
+ //
+ PFN_WDF_CHILD_LIST_SCAN_FOR_CHILDREN EvtChildListScanForChildren;
+
+ //
+ // Optional callback to be invoked when an identification description needs
+ // to be copied from one location to another.
+ //
+ // If left NULL, RtlCopyMemory will be used to copy the description.
+ //
+ PFN_WDF_CHILD_LIST_IDENTIFICATION_DESCRIPTION_COPY
EvtChildListIdentificationDescriptionCopy;
+
+ //
+ // Optional callback to be invoked when an identification description needs
+ // to be duplicated. As opposed to EvtChildListIdentificationDescriptionCopy,
+ // EvtChildListIdentificationDescriptionDuplicate can fail.
+ //
+ PFN_WDF_CHILD_LIST_IDENTIFICATION_DESCRIPTION_DUPLICATE
EvtChildListIdentificationDescriptionDuplicate;
+
+ //
+ // Optional callback to be invoked when an identification description needs
+ // to be cleaned up. This function should *NOT* free the description passed
+ // to it, just free any associated resources.
+ //
+ PFN_WDF_CHILD_LIST_IDENTIFICATION_DESCRIPTION_CLEANUP
EvtChildListIdentificationDescriptionCleanup;
+
+ //
+ // Optional callback to be invoked when an identification description needs
+ // to be compared with another identificaiton description.
+ //
+ // If left NULL, RtlCompareMemory will be used to compare the two
+ // descriptions.
+ //
+ PFN_WDF_CHILD_LIST_IDENTIFICATION_DESCRIPTION_COMPARE
EvtChildListIdentificationDescriptionCompare;
+
+ //
+ // Optional callback to be invoked when an address description needs
+ // to be copied from one location to another.
+ //
+ // If left NULL, RtlCopyMemory will be used to copy the description.
+ //
+ PFN_WDF_CHILD_LIST_ADDRESS_DESCRIPTION_COPY EvtChildListAddressDescriptionCopy;
+
+ //
+ // Optional callback to be invoked when an address description needs to be
+ // duplicated. As opposed to EvtChildListAddressDescriptionCopy,
+ // EvtChildListAddressDescriptionDuplicate can fail.
+ //
+ PFN_WDF_CHILD_LIST_ADDRESS_DESCRIPTION_DUPLICATE
EvtChildListAddressDescriptionDuplicate;
+
+ //
+ // Optional callback to be invoked when an address description needs to be
+ // cleaned up. This function should *NOT* free the description passed to
+ // it, just free any associated resources.
+ //
+ PFN_WDF_CHILD_LIST_ADDRESS_DESCRIPTION_CLEANUP
EvtChildListAddressDescriptionCleanup;
+
+ //
+ // If provided, will be called when the child's stack requests that the
+ // child be reenumerated. Returning TRUE allows for the reenumeration to
+ // proceed. FALSE will no reenumerate the stack.
+ //
+ PFN_WDF_CHILD_LIST_DEVICE_REENUMERATED EvtChildListDeviceReenumerated;
+
+} WDF_CHILD_LIST_CONFIG, *PWDF_CHILD_LIST_CONFIG;
+
+VOID
+FORCEINLINE
+WDF_CHILD_LIST_CONFIG_INIT(
+ _Out_ PWDF_CHILD_LIST_CONFIG Config,
+ _In_ ULONG IdentificationDescriptionSize,
+ _In_ PFN_WDF_CHILD_LIST_CREATE_DEVICE EvtChildListCreateDevice
+ )
+{
+ RtlZeroMemory(Config, sizeof(WDF_CHILD_LIST_CONFIG));
+
+ Config->Size = sizeof(WDF_CHILD_LIST_CONFIG);
+ Config->IdentificationDescriptionSize = IdentificationDescriptionSize;
+ Config->EvtChildListCreateDevice = EvtChildListCreateDevice;
+}
+
+typedef struct _WDF_CHILD_LIST_ITERATOR {
+ //
+ // Size of this structure in bytes
+ //
+ ULONG Size;
+
+ //
+ // What type of devices to return, see WDF_RETRIEVE_CHILD_FLAGS for
+ // flag values
+ //
+ //
+ ULONG Flags;
+
+ //
+ // For internal use, treat this field as opaque
+ //
+ PVOID Reserved[4];
+
+} WDF_CHILD_LIST_ITERATOR, *PWDF_CHILD_LIST_ITERATOR;
+
+VOID
+FORCEINLINE
+WDF_CHILD_LIST_ITERATOR_INIT(
+ _Out_ PWDF_CHILD_LIST_ITERATOR Iterator,
+ _In_ ULONG Flags
+ )
+{
+ RtlZeroMemory(Iterator, sizeof(WDF_CHILD_LIST_ITERATOR));
+
+ Iterator->Size = sizeof(WDF_CHILD_LIST_ITERATOR);
+ Iterator->Flags = Flags;
+}
+
+
+//
+// WDF Function: WdfChildListCreate
+//
+typedef
+_Must_inspect_result_
+_IRQL_requires_max_(PASSIVE_LEVEL)
+WDFAPI
+NTSTATUS
+(*PFN_WDFCHILDLISTCREATE)(
+ _In_
+ PWDF_DRIVER_GLOBALS DriverGlobals,
+ _In_
+ WDFDEVICE Device,
+ _In_
+ PWDF_CHILD_LIST_CONFIG Config,
+ _In_opt_
+ PWDF_OBJECT_ATTRIBUTES ChildListAttributes,
+ _Out_
+ WDFCHILDLIST* ChildList
+ );
+
+_Must_inspect_result_
+_IRQL_requires_max_(PASSIVE_LEVEL)
+NTSTATUS
+FORCEINLINE
+WdfChildListCreate(
+ _In_
+ WDFDEVICE Device,
+ _In_
+ PWDF_CHILD_LIST_CONFIG Config,
+ _In_opt_
+ PWDF_OBJECT_ATTRIBUTES ChildListAttributes,
+ _Out_
+ WDFCHILDLIST* ChildList
+ )
+{
+ return ((PFN_WDFCHILDLISTCREATE)
WdfFunctions[WdfChildListCreateTableIndex])(WdfDriverGlobals, Device, Config,
ChildListAttributes, ChildList);
+}
+
+//
+// WDF Function: WdfChildListGetDevice
+//
+typedef
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFAPI
+WDFDEVICE
+(*PFN_WDFCHILDLISTGETDEVICE)(
+ _In_
+ PWDF_DRIVER_GLOBALS DriverGlobals,
+ _In_
+ WDFCHILDLIST ChildList
+ );
+
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFDEVICE
+FORCEINLINE
+WdfChildListGetDevice(
+ _In_
+ WDFCHILDLIST ChildList
+ )
+{
+ return ((PFN_WDFCHILDLISTGETDEVICE)
WdfFunctions[WdfChildListGetDeviceTableIndex])(WdfDriverGlobals, ChildList);
+}
+
+//
+// WDF Function: WdfChildListRetrievePdo
+//
+typedef
+_Must_inspect_result_
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFAPI
+WDFDEVICE
+(*PFN_WDFCHILDLISTRETRIEVEPDO)(
+ _In_
+ PWDF_DRIVER_GLOBALS DriverGlobals,
+ _In_
+ WDFCHILDLIST ChildList,
+ _Inout_
+ PWDF_CHILD_RETRIEVE_INFO RetrieveInfo
+ );
+
+_Must_inspect_result_
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFDEVICE
+FORCEINLINE
+WdfChildListRetrievePdo(
+ _In_
+ WDFCHILDLIST ChildList,
+ _Inout_
+ PWDF_CHILD_RETRIEVE_INFO RetrieveInfo
+ )
+{
+ return ((PFN_WDFCHILDLISTRETRIEVEPDO)
WdfFunctions[WdfChildListRetrievePdoTableIndex])(WdfDriverGlobals, ChildList,
RetrieveInfo);
+}
+
+//
+// WDF Function: WdfChildListRetrieveAddressDescription
+//
+typedef
+_Must_inspect_result_
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFAPI
+NTSTATUS
+(*PFN_WDFCHILDLISTRETRIEVEADDRESSDESCRIPTION)(
+ _In_
+ PWDF_DRIVER_GLOBALS DriverGlobals,
+ _In_
+ WDFCHILDLIST ChildList,
+ _In_
+ PWDF_CHILD_IDENTIFICATION_DESCRIPTION_HEADER IdentificationDescription,
+ _Inout_
+ PWDF_CHILD_ADDRESS_DESCRIPTION_HEADER AddressDescription
+ );
+
+_Must_inspect_result_
+_IRQL_requires_max_(DISPATCH_LEVEL)
+NTSTATUS
+FORCEINLINE
+WdfChildListRetrieveAddressDescription(
+ _In_
+ WDFCHILDLIST ChildList,
+ _In_
+ PWDF_CHILD_IDENTIFICATION_DESCRIPTION_HEADER IdentificationDescription,
+ _Inout_
+ PWDF_CHILD_ADDRESS_DESCRIPTION_HEADER AddressDescription
+ )
+{
+ return ((PFN_WDFCHILDLISTRETRIEVEADDRESSDESCRIPTION)
WdfFunctions[WdfChildListRetrieveAddressDescriptionTableIndex])(WdfDriverGlobals,
ChildList, IdentificationDescription, AddressDescription);
+}
+
+//
+// WDF Function: WdfChildListBeginScan
+//
+typedef
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFAPI
+VOID
+(*PFN_WDFCHILDLISTBEGINSCAN)(
+ _In_
+ PWDF_DRIVER_GLOBALS DriverGlobals,
+ _In_
+ WDFCHILDLIST ChildList
+ );
+
+_IRQL_requires_max_(DISPATCH_LEVEL)
+VOID
+FORCEINLINE
+WdfChildListBeginScan(
+ _In_
+ WDFCHILDLIST ChildList
+ )
+{
+ ((PFN_WDFCHILDLISTBEGINSCAN)
WdfFunctions[WdfChildListBeginScanTableIndex])(WdfDriverGlobals, ChildList);
+}
+
+//
+// WDF Function: WdfChildListEndScan
+//
+typedef
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFAPI
+VOID
+(*PFN_WDFCHILDLISTENDSCAN)(
+ _In_
+ PWDF_DRIVER_GLOBALS DriverGlobals,
+ _In_
+ WDFCHILDLIST ChildList
+ );
+
+_IRQL_requires_max_(DISPATCH_LEVEL)
+VOID
+FORCEINLINE
+WdfChildListEndScan(
+ _In_
+ WDFCHILDLIST ChildList
+ )
+{
+ ((PFN_WDFCHILDLISTENDSCAN)
WdfFunctions[WdfChildListEndScanTableIndex])(WdfDriverGlobals, ChildList);
+}
+
+//
+// WDF Function: WdfChildListBeginIteration
+//
+typedef
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFAPI
+VOID
+(*PFN_WDFCHILDLISTBEGINITERATION)(
+ _In_
+ PWDF_DRIVER_GLOBALS DriverGlobals,
+ _In_
+ WDFCHILDLIST ChildList,
+ _In_
+ PWDF_CHILD_LIST_ITERATOR Iterator
+ );
+
+_IRQL_requires_max_(DISPATCH_LEVEL)
+VOID
+FORCEINLINE
+WdfChildListBeginIteration(
+ _In_
+ WDFCHILDLIST ChildList,
+ _In_
+ PWDF_CHILD_LIST_ITERATOR Iterator
+ )
+{
+ ((PFN_WDFCHILDLISTBEGINITERATION)
WdfFunctions[WdfChildListBeginIterationTableIndex])(WdfDriverGlobals, ChildList,
Iterator);
+}
+
+//
+// WDF Function: WdfChildListRetrieveNextDevice
+//
+typedef
+_Must_inspect_result_
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFAPI
+NTSTATUS
+(*PFN_WDFCHILDLISTRETRIEVENEXTDEVICE)(
+ _In_
+ PWDF_DRIVER_GLOBALS DriverGlobals,
+ _In_
+ WDFCHILDLIST ChildList,
+ _In_
+ PWDF_CHILD_LIST_ITERATOR Iterator,
+ _Out_
+ WDFDEVICE* Device,
+ _Inout_opt_
+ PWDF_CHILD_RETRIEVE_INFO Info
+ );
+
+_Must_inspect_result_
+_IRQL_requires_max_(DISPATCH_LEVEL)
+NTSTATUS
+FORCEINLINE
+WdfChildListRetrieveNextDevice(
+ _In_
+ WDFCHILDLIST ChildList,
+ _In_
+ PWDF_CHILD_LIST_ITERATOR Iterator,
+ _Out_
+ WDFDEVICE* Device,
+ _Inout_opt_
+ PWDF_CHILD_RETRIEVE_INFO Info
+ )
+{
+ return ((PFN_WDFCHILDLISTRETRIEVENEXTDEVICE)
WdfFunctions[WdfChildListRetrieveNextDeviceTableIndex])(WdfDriverGlobals, ChildList,
Iterator, Device, Info);
+}
+
+//
+// WDF Function: WdfChildListEndIteration
+//
+typedef
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFAPI
+VOID
+(*PFN_WDFCHILDLISTENDITERATION)(
+ _In_
+ PWDF_DRIVER_GLOBALS DriverGlobals,
+ _In_
+ WDFCHILDLIST ChildList,
+ _In_
+ PWDF_CHILD_LIST_ITERATOR Iterator
+ );
+
+_IRQL_requires_max_(DISPATCH_LEVEL)
+VOID
+FORCEINLINE
+WdfChildListEndIteration(
+ _In_
+ WDFCHILDLIST ChildList,
+ _In_
+ PWDF_CHILD_LIST_ITERATOR Iterator
+ )
+{
+ ((PFN_WDFCHILDLISTENDITERATION)
WdfFunctions[WdfChildListEndIterationTableIndex])(WdfDriverGlobals, ChildList, Iterator);
+}
+
+//
+// WDF Function: WdfChildListAddOrUpdateChildDescriptionAsPresent
+//
+typedef
+_Must_inspect_result_
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFAPI
+NTSTATUS
+(*PFN_WDFCHILDLISTADDORUPDATECHILDDESCRIPTIONASPRESENT)(
+ _In_
+ PWDF_DRIVER_GLOBALS DriverGlobals,
+ _In_
+ WDFCHILDLIST ChildList,
+ _In_
+ PWDF_CHILD_IDENTIFICATION_DESCRIPTION_HEADER IdentificationDescription,
+ _In_opt_
+ PWDF_CHILD_ADDRESS_DESCRIPTION_HEADER AddressDescription
+ );
+
+_Must_inspect_result_
+_IRQL_requires_max_(DISPATCH_LEVEL)
+NTSTATUS
+FORCEINLINE
+WdfChildListAddOrUpdateChildDescriptionAsPresent(
+ _In_
+ WDFCHILDLIST ChildList,
+ _In_
+ PWDF_CHILD_IDENTIFICATION_DESCRIPTION_HEADER IdentificationDescription,
+ _In_opt_
+ PWDF_CHILD_ADDRESS_DESCRIPTION_HEADER AddressDescription
+ )
+{
+ return ((PFN_WDFCHILDLISTADDORUPDATECHILDDESCRIPTIONASPRESENT)
WdfFunctions[WdfChildListAddOrUpdateChildDescriptionAsPresentTableIndex])(WdfDriverGlobals,
ChildList, IdentificationDescription, AddressDescription);
+}
+
+//
+// WDF Function: WdfChildListUpdateChildDescriptionAsMissing
+//
+typedef
+_Must_inspect_result_
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFAPI
+NTSTATUS
+(*PFN_WDFCHILDLISTUPDATECHILDDESCRIPTIONASMISSING)(
+ _In_
+ PWDF_DRIVER_GLOBALS DriverGlobals,
+ _In_
+ WDFCHILDLIST ChildList,
+ _In_
+ PWDF_CHILD_IDENTIFICATION_DESCRIPTION_HEADER IdentificationDescription
+ );
+
+_Must_inspect_result_
+_IRQL_requires_max_(DISPATCH_LEVEL)
+NTSTATUS
+FORCEINLINE
+WdfChildListUpdateChildDescriptionAsMissing(
+ _In_
+ WDFCHILDLIST ChildList,
+ _In_
+ PWDF_CHILD_IDENTIFICATION_DESCRIPTION_HEADER IdentificationDescription
+ )
+{
+ return ((PFN_WDFCHILDLISTUPDATECHILDDESCRIPTIONASMISSING)
WdfFunctions[WdfChildListUpdateChildDescriptionAsMissingTableIndex])(WdfDriverGlobals,
ChildList, IdentificationDescription);
+}
+
+//
+// WDF Function: WdfChildListUpdateAllChildDescriptionsAsPresent
+//
+typedef
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFAPI
+VOID
+(*PFN_WDFCHILDLISTUPDATEALLCHILDDESCRIPTIONSASPRESENT)(
+ _In_
+ PWDF_DRIVER_GLOBALS DriverGlobals,
+ _In_
+ WDFCHILDLIST ChildList
+ );
+
+_IRQL_requires_max_(DISPATCH_LEVEL)
+VOID
+FORCEINLINE
+WdfChildListUpdateAllChildDescriptionsAsPresent(
+ _In_
+ WDFCHILDLIST ChildList
+ )
+{
+ ((PFN_WDFCHILDLISTUPDATEALLCHILDDESCRIPTIONSASPRESENT)
WdfFunctions[WdfChildListUpdateAllChildDescriptionsAsPresentTableIndex])(WdfDriverGlobals,
ChildList);
+}
+
+//
+// WDF Function: WdfChildListRequestChildEject
+//
+typedef
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFAPI
+BOOLEAN
+(*PFN_WDFCHILDLISTREQUESTCHILDEJECT)(
+ _In_
+ PWDF_DRIVER_GLOBALS DriverGlobals,
+ _In_
+ WDFCHILDLIST ChildList,
+ _In_
+ PWDF_CHILD_IDENTIFICATION_DESCRIPTION_HEADER IdentificationDescription
+ );
+
+_IRQL_requires_max_(DISPATCH_LEVEL)
+BOOLEAN
+FORCEINLINE
+WdfChildListRequestChildEject(
+ _In_
+ WDFCHILDLIST ChildList,
+ _In_
+ PWDF_CHILD_IDENTIFICATION_DESCRIPTION_HEADER IdentificationDescription
+ )
+{
+ return ((PFN_WDFCHILDLISTREQUESTCHILDEJECT)
WdfFunctions[WdfChildListRequestChildEjectTableIndex])(WdfDriverGlobals, ChildList,
IdentificationDescription);
+}
+
+
+
+#endif // (NTDDI_VERSION >= NTDDI_WIN2K)
+
+
+
+WDF_EXTERN_C_END
+
+#endif // _WDFCHILDLIST_H_
+
diff --git a/sdk/include/wdf/kmdf/1.17/wdfcollection.h
b/sdk/include/wdf/kmdf/1.17/wdfcollection.h
new file mode 100644
index 00000000000..c28ecab6c15
--- /dev/null
+++ b/sdk/include/wdf/kmdf/1.17/wdfcollection.h
@@ -0,0 +1,284 @@
+/*++
+
+Copyright (c) Microsoft Corporation. All rights reserved.
+
+_WdfVersionBuild_
+
+Module Name:
+
+ WdfCollection.h
+
+Abstract:
+
+ This is the interface to the collection object
+
+Environment:
+
+ kernel mode only
+
+Revision History:
+
+--*/
+
+//
+// NOTE: This header is generated by stubwork. Please make any
+// modifications to the corresponding template files
+// (.x or .y) and use stubwork to regenerate the header
+//
+
+#ifndef _WDFCOLLECTION_H_
+#define _WDFCOLLECTION_H_
+
+#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
+
+
+
+#if (NTDDI_VERSION >= NTDDI_WIN2K)
+
+
+
+//
+// WDF Function: WdfCollectionCreate
+//
+typedef
+_Must_inspect_result_
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFAPI
+NTSTATUS
+(*PFN_WDFCOLLECTIONCREATE)(
+ _In_
+ PWDF_DRIVER_GLOBALS DriverGlobals,
+ _In_opt_
+ PWDF_OBJECT_ATTRIBUTES CollectionAttributes,
+ _Out_
+ WDFCOLLECTION* Collection
+ );
+
+_Must_inspect_result_
+_IRQL_requires_max_(DISPATCH_LEVEL)
+NTSTATUS
+FORCEINLINE
+WdfCollectionCreate(
+ _In_opt_
+ PWDF_OBJECT_ATTRIBUTES CollectionAttributes,
+ _Out_
+ WDFCOLLECTION* Collection
+ )
+{
+ return ((PFN_WDFCOLLECTIONCREATE)
WdfFunctions[WdfCollectionCreateTableIndex])(WdfDriverGlobals, CollectionAttributes,
Collection);
+}
+
+//
+// WDF Function: WdfCollectionGetCount
+//
+typedef
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFAPI
+ULONG
+(*PFN_WDFCOLLECTIONGETCOUNT)(
+ _In_
+ PWDF_DRIVER_GLOBALS DriverGlobals,
+ _In_
+ WDFCOLLECTION Collection
+ );
+
+_IRQL_requires_max_(DISPATCH_LEVEL)
+ULONG
+FORCEINLINE
+WdfCollectionGetCount(
+ _In_
+ WDFCOLLECTION Collection
+ )
+{
+ return ((PFN_WDFCOLLECTIONGETCOUNT)
WdfFunctions[WdfCollectionGetCountTableIndex])(WdfDriverGlobals, Collection);
+}
+
+//
+// WDF Function: WdfCollectionAdd
+//
+typedef
+_Must_inspect_result_
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFAPI
+NTSTATUS
+(*PFN_WDFCOLLECTIONADD)(
+ _In_
+ PWDF_DRIVER_GLOBALS DriverGlobals,
+ _In_
+ WDFCOLLECTION Collection,
+ _In_
+ WDFOBJECT Object
+ );
+
+_Must_inspect_result_
+_IRQL_requires_max_(DISPATCH_LEVEL)
+NTSTATUS
+FORCEINLINE
+WdfCollectionAdd(
+ _In_
+ WDFCOLLECTION Collection,
+ _In_
+ WDFOBJECT Object
+ )
+{
+ return ((PFN_WDFCOLLECTIONADD)
WdfFunctions[WdfCollectionAddTableIndex])(WdfDriverGlobals, Collection, Object);
+}
+
+//
+// WDF Function: WdfCollectionRemove
+//
+typedef
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFAPI
+VOID
+(*PFN_WDFCOLLECTIONREMOVE)(
+ _In_
+ PWDF_DRIVER_GLOBALS DriverGlobals,
+ _In_
+ WDFCOLLECTION Collection,
+ _In_
+ WDFOBJECT Item
+ );
+
+_IRQL_requires_max_(DISPATCH_LEVEL)
+VOID
+FORCEINLINE
+WdfCollectionRemove(
+ _In_
+ WDFCOLLECTION Collection,
+ _In_
+ WDFOBJECT Item
+ )
+{
+ ((PFN_WDFCOLLECTIONREMOVE)
WdfFunctions[WdfCollectionRemoveTableIndex])(WdfDriverGlobals, Collection, Item);
+}
+
+//
+// WDF Function: WdfCollectionRemoveItem
+//
+typedef
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFAPI
+VOID
+(*PFN_WDFCOLLECTIONREMOVEITEM)(
+ _In_
+ PWDF_DRIVER_GLOBALS DriverGlobals,
+ _In_
+ WDFCOLLECTION Collection,
+ _In_
+ ULONG Index
+ );
+
+_IRQL_requires_max_(DISPATCH_LEVEL)
+VOID
+FORCEINLINE
+WdfCollectionRemoveItem(
+ _In_
+ WDFCOLLECTION Collection,
+ _In_
+ ULONG Index
+ )
+{
+ ((PFN_WDFCOLLECTIONREMOVEITEM)
WdfFunctions[WdfCollectionRemoveItemTableIndex])(WdfDriverGlobals, Collection, Index);
+}
+
+//
+// WDF Function: WdfCollectionGetItem
+//
+typedef
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFAPI
+WDFOBJECT
+(*PFN_WDFCOLLECTIONGETITEM)(
+ _In_
+ PWDF_DRIVER_GLOBALS DriverGlobals,
+ _In_
+ WDFCOLLECTION Collection,
+ _In_
+ ULONG Index
+ );
+
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFOBJECT
+FORCEINLINE
+WdfCollectionGetItem(
+ _In_
+ WDFCOLLECTION Collection,
+ _In_
+ ULONG Index
+ )
+{
+ return ((PFN_WDFCOLLECTIONGETITEM)
WdfFunctions[WdfCollectionGetItemTableIndex])(WdfDriverGlobals, Collection, Index);
+}
+
+//
+// WDF Function: WdfCollectionGetFirstItem
+//
+typedef
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFAPI
+WDFOBJECT
+(*PFN_WDFCOLLECTIONGETFIRSTITEM)(
+ _In_
+ PWDF_DRIVER_GLOBALS DriverGlobals,
+ _In_
+ WDFCOLLECTION Collection
+ );
+
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFOBJECT
+FORCEINLINE
+WdfCollectionGetFirstItem(
+ _In_
+ WDFCOLLECTION Collection
+ )
+{
+ return ((PFN_WDFCOLLECTIONGETFIRSTITEM)
WdfFunctions[WdfCollectionGetFirstItemTableIndex])(WdfDriverGlobals, Collection);
+}
+
+//
+// WDF Function: WdfCollectionGetLastItem
+//
+typedef
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFAPI
+WDFOBJECT
+(*PFN_WDFCOLLECTIONGETLASTITEM)(
+ _In_
+ PWDF_DRIVER_GLOBALS DriverGlobals,
+ _In_
+ WDFCOLLECTION Collection
+ );
+
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFOBJECT
+FORCEINLINE
+WdfCollectionGetLastItem(
+ _In_
+ WDFCOLLECTION Collection
+ )
+{
+ return ((PFN_WDFCOLLECTIONGETLASTITEM)
WdfFunctions[WdfCollectionGetLastItemTableIndex])(WdfDriverGlobals, Collection);
+}
+
+
+
+#endif // (NTDDI_VERSION >= NTDDI_WIN2K)
+
+
+WDF_EXTERN_C_END
+
+#endif // _WDFCOLLECTION_H_
+
diff --git a/sdk/include/wdf/kmdf/1.17/wdfcommonbuffer.h
b/sdk/include/wdf/kmdf/1.17/wdfcommonbuffer.h
new file mode 100644
index 00000000000..018a83241ab
--- /dev/null
+++ b/sdk/include/wdf/kmdf/1.17/wdfcommonbuffer.h
@@ -0,0 +1,249 @@
+/*++
+
+Copyright (c) Microsoft Corporation. All rights reserved.
+
+_WdfVersionBuild_
+
+Module Name:
+
+ WdfCommonBuffer.h
+
+Abstract:
+
+ WDF CommonBuffer support
+
+Environment:
+
+ Kernel mode only.
+
+Notes:
+
+Revision History:
+
+--*/
+
+//
+// NOTE: This header is generated by stubwork. Please make any
+// modifications to the corresponding template files
+// (.x or .y) and use stubwork to regenerate the header
+//
+
+#ifndef _WDFCOMMONBUFFER_H_
+#define _WDFCOMMONBUFFER_H_
+
+#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
+
+
+
+#if (NTDDI_VERSION >= NTDDI_WIN2K)
+
+
+
+typedef struct _WDF_COMMON_BUFFER_CONFIG {
+ //
+ // Size of this structure in bytes
+ //
+ ULONG Size;
+
+ //
+ // Alignment requirement of the buffer address
+ //
+ ULONG AlignmentRequirement;
+
+} WDF_COMMON_BUFFER_CONFIG, *PWDF_COMMON_BUFFER_CONFIG;
+
+VOID
+FORCEINLINE
+WDF_COMMON_BUFFER_CONFIG_INIT(
+ _Out_ PWDF_COMMON_BUFFER_CONFIG Config,
+ _In_ ULONG AlignmentRequirement
+ )
+{
+ RtlZeroMemory(Config, sizeof(WDF_COMMON_BUFFER_CONFIG));
+
+ Config->Size = sizeof(WDF_COMMON_BUFFER_CONFIG);
+ Config->AlignmentRequirement = AlignmentRequirement;
+}
+
+//
+// WDF Function: WdfCommonBufferCreate
+//
+typedef
+_Must_inspect_result_
+_IRQL_requires_max_(PASSIVE_LEVEL)
+WDFAPI
+NTSTATUS
+(*PFN_WDFCOMMONBUFFERCREATE)(
+ _In_
+ PWDF_DRIVER_GLOBALS DriverGlobals,
+ _In_
+ WDFDMAENABLER DmaEnabler,
+ _In_
+ _When_(Length == 0, __drv_reportError(Length cannot be zero))
+ size_t Length,
+ _In_opt_
+ PWDF_OBJECT_ATTRIBUTES Attributes,
+ _Out_
+ WDFCOMMONBUFFER* CommonBuffer
+ );
+
+_Must_inspect_result_
+_IRQL_requires_max_(PASSIVE_LEVEL)
+NTSTATUS
+FORCEINLINE
+WdfCommonBufferCreate(
+ _In_
+ WDFDMAENABLER DmaEnabler,
+ _In_
+ _When_(Length == 0, __drv_reportError(Length cannot be zero))
+ size_t Length,
+ _In_opt_
+ PWDF_OBJECT_ATTRIBUTES Attributes,
+ _Out_
+ WDFCOMMONBUFFER* CommonBuffer
+ )
+{
+ return ((PFN_WDFCOMMONBUFFERCREATE)
WdfFunctions[WdfCommonBufferCreateTableIndex])(WdfDriverGlobals, DmaEnabler, Length,
Attributes, CommonBuffer);
+}
+
+//
+// WDF Function: WdfCommonBufferCreateWithConfig
+//
+typedef
+_Must_inspect_result_
+_IRQL_requires_max_(PASSIVE_LEVEL)
+WDFAPI
+NTSTATUS
+(*PFN_WDFCOMMONBUFFERCREATEWITHCONFIG)(
+ _In_
+ PWDF_DRIVER_GLOBALS DriverGlobals,
+ _In_
+ WDFDMAENABLER DmaEnabler,
+ _In_
+ _When_(Length == 0, __drv_reportError(Length cannot be zero))
+ size_t Length,
+ _In_
+ PWDF_COMMON_BUFFER_CONFIG Config,
+ _In_opt_
+ PWDF_OBJECT_ATTRIBUTES Attributes,
+ _Out_
+ WDFCOMMONBUFFER* CommonBuffer
+ );
+
+_Must_inspect_result_
+_IRQL_requires_max_(PASSIVE_LEVEL)
+NTSTATUS
+FORCEINLINE
+WdfCommonBufferCreateWithConfig(
+ _In_
+ WDFDMAENABLER DmaEnabler,
+ _In_
+ _When_(Length == 0, __drv_reportError(Length cannot be zero))
+ size_t Length,
+ _In_
+ PWDF_COMMON_BUFFER_CONFIG Config,
+ _In_opt_
+ PWDF_OBJECT_ATTRIBUTES Attributes,
+ _Out_
+ WDFCOMMONBUFFER* CommonBuffer
+ )
+{
+ return ((PFN_WDFCOMMONBUFFERCREATEWITHCONFIG)
WdfFunctions[WdfCommonBufferCreateWithConfigTableIndex])(WdfDriverGlobals, DmaEnabler,
Length, Config, Attributes, CommonBuffer);
+}
+
+//
+// WDF Function: WdfCommonBufferGetAlignedVirtualAddress
+//
+typedef
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFAPI
+PVOID
+(*PFN_WDFCOMMONBUFFERGETALIGNEDVIRTUALADDRESS)(
+ _In_
+ PWDF_DRIVER_GLOBALS DriverGlobals,
+ _In_
+ WDFCOMMONBUFFER CommonBuffer
+ );
+
+_IRQL_requires_max_(DISPATCH_LEVEL)
+PVOID
+FORCEINLINE
+WdfCommonBufferGetAlignedVirtualAddress(
+ _In_
+ WDFCOMMONBUFFER CommonBuffer
+ )
+{
+ return ((PFN_WDFCOMMONBUFFERGETALIGNEDVIRTUALADDRESS)
WdfFunctions[WdfCommonBufferGetAlignedVirtualAddressTableIndex])(WdfDriverGlobals,
CommonBuffer);
+}
+
+//
+// WDF Function: WdfCommonBufferGetAlignedLogicalAddress
+//
+typedef
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFAPI
+PHYSICAL_ADDRESS
+(*PFN_WDFCOMMONBUFFERGETALIGNEDLOGICALADDRESS)(
+ _In_
+ PWDF_DRIVER_GLOBALS DriverGlobals,
+ _In_
+ WDFCOMMONBUFFER CommonBuffer
+ );
+
+_IRQL_requires_max_(DISPATCH_LEVEL)
+PHYSICAL_ADDRESS
+FORCEINLINE
+WdfCommonBufferGetAlignedLogicalAddress(
+ _In_
+ WDFCOMMONBUFFER CommonBuffer
+ )
+{
+ return ((PFN_WDFCOMMONBUFFERGETALIGNEDLOGICALADDRESS)
WdfFunctions[WdfCommonBufferGetAlignedLogicalAddressTableIndex])(WdfDriverGlobals,
CommonBuffer);
+}
+
+//
+// WDF Function: WdfCommonBufferGetLength
+//
+typedef
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFAPI
+size_t
+(*PFN_WDFCOMMONBUFFERGETLENGTH)(
+ _In_
+ PWDF_DRIVER_GLOBALS DriverGlobals,
+ _In_
+ WDFCOMMONBUFFER CommonBuffer
+ );
+
+_IRQL_requires_max_(DISPATCH_LEVEL)
+size_t
+FORCEINLINE
+WdfCommonBufferGetLength(
+ _In_
+ WDFCOMMONBUFFER CommonBuffer
+ )
+{
+ return ((PFN_WDFCOMMONBUFFERGETLENGTH)
WdfFunctions[WdfCommonBufferGetLengthTableIndex])(WdfDriverGlobals, CommonBuffer);
+}
+
+
+
+#endif // (NTDDI_VERSION >= NTDDI_WIN2K)
+
+
+WDF_EXTERN_C_END
+
+#endif // _WDFCOMMONBUFFER_H_
+
diff --git a/sdk/include/wdf/kmdf/1.17/wdfcontrol.h
b/sdk/include/wdf/kmdf/1.17/wdfcontrol.h
new file mode 100644
index 00000000000..f94a3aadba7
--- /dev/null
+++ b/sdk/include/wdf/kmdf/1.17/wdfcontrol.h
@@ -0,0 +1,168 @@
+/*++
+
+Copyright (c) Microsoft Corporation. All rights reserved.
+
+_WdfVersionBuild_
+
+Module Name:
+
+ wdfcontrol.h
+
+Abstract:
+
+ Defines functions for controller and creating a "controller" NT4 style
+ WDFDEVICE handle.
+
+Environment:
+
+ kernel mode only
+
+Revision History:
+
+--*/
+
+//
+// NOTE: This header is generated by stubwork. Please make any
+// modifications to the corresponding template files
+// (.x or .y) and use stubwork to regenerate the header
+//
+
+#ifndef _WDFCONTROL_H_
+#define _WDFCONTROL_H_
+
+#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
+
+
+
+#if (NTDDI_VERSION >= NTDDI_WIN2K)
+
+typedef
+_Function_class_(EVT_WDF_DEVICE_SHUTDOWN_NOTIFICATION)
+_IRQL_requires_same_
+_IRQL_requires_max_(PASSIVE_LEVEL)
+VOID
+EVT_WDF_DEVICE_SHUTDOWN_NOTIFICATION(
+ _In_
+ WDFDEVICE Device
+ );
+
+typedef EVT_WDF_DEVICE_SHUTDOWN_NOTIFICATION *PFN_WDF_DEVICE_SHUTDOWN_NOTIFICATION;
+
+typedef enum _WDF_DEVICE_SHUTDOWN_FLAGS {
+ WdfDeviceShutdown = 0x01,
+ WdfDeviceLastChanceShutdown = 0x02,
+} WDF_DEVICE_SHUTDOWN_FLAGS;
+
+
+
+//
+// WDF Function: WdfControlDeviceInitAllocate
+//
+typedef
+_Must_inspect_result_
+_IRQL_requires_max_(PASSIVE_LEVEL)
+WDFAPI
+PWDFDEVICE_INIT
+(*PFN_WDFCONTROLDEVICEINITALLOCATE)(
+ _In_
+ PWDF_DRIVER_GLOBALS DriverGlobals,
+ _In_
+ WDFDRIVER Driver,
+ _In_
+ CONST UNICODE_STRING* SDDLString
+ );
+
+_Must_inspect_result_
+_IRQL_requires_max_(PASSIVE_LEVEL)
+PWDFDEVICE_INIT
+FORCEINLINE
+WdfControlDeviceInitAllocate(
+ _In_
+ WDFDRIVER Driver,
+ _In_
+ CONST UNICODE_STRING* SDDLString
+ )
+{
+ return ((PFN_WDFCONTROLDEVICEINITALLOCATE)
WdfFunctions[WdfControlDeviceInitAllocateTableIndex])(WdfDriverGlobals, Driver,
SDDLString);
+}
+
+//
+// WDF Function: WdfControlDeviceInitSetShutdownNotification
+//
+typedef
+_IRQL_requires_max_(PASSIVE_LEVEL)
+WDFAPI
+VOID
+(*PFN_WDFCONTROLDEVICEINITSETSHUTDOWNNOTIFICATION)(
+ _In_
+ PWDF_DRIVER_GLOBALS DriverGlobals,
+ _In_
+ PWDFDEVICE_INIT DeviceInit,
+ _In_
+ PFN_WDF_DEVICE_SHUTDOWN_NOTIFICATION Notification,
+ _In_
+ UCHAR Flags
+ );
+
+_IRQL_requires_max_(PASSIVE_LEVEL)
+VOID
+FORCEINLINE
+WdfControlDeviceInitSetShutdownNotification(
+ _In_
+ PWDFDEVICE_INIT DeviceInit,
+ _In_
+ PFN_WDF_DEVICE_SHUTDOWN_NOTIFICATION Notification,
+ _In_
+ UCHAR Flags
+ )
+{
+ ((PFN_WDFCONTROLDEVICEINITSETSHUTDOWNNOTIFICATION)
WdfFunctions[WdfControlDeviceInitSetShutdownNotificationTableIndex])(WdfDriverGlobals,
DeviceInit, Notification, Flags);
+}
+
+//
+// WDF Function: WdfControlFinishInitializing
+//
+typedef
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFAPI
+VOID
+(*PFN_WDFCONTROLFINISHINITIALIZING)(
+ _In_
+ PWDF_DRIVER_GLOBALS DriverGlobals,
+ _In_
+ WDFDEVICE Device
+ );
+
+_IRQL_requires_max_(DISPATCH_LEVEL)
+VOID
+FORCEINLINE
+WdfControlFinishInitializing(
+ _In_
+ WDFDEVICE Device
+ )
+{
+ ((PFN_WDFCONTROLFINISHINITIALIZING)
WdfFunctions[WdfControlFinishInitializingTableIndex])(WdfDriverGlobals, Device);
+}
+
+
+
+#endif // (NTDDI_VERSION >= NTDDI_WIN2K)
+
+
+
+WDF_EXTERN_C_END
+
+#endif // _WDFCONTROL_H_
+
diff --git a/sdk/include/wdf/kmdf/1.17/wdfcore.h b/sdk/include/wdf/kmdf/1.17/wdfcore.h
new file mode 100644
index 00000000000..ff28279f609
--- /dev/null
+++ b/sdk/include/wdf/kmdf/1.17/wdfcore.h
@@ -0,0 +1,176 @@
+/*++
+
+Copyright (c) Microsoft Corporation. All rights reserved.
+
+_WdfVersionBuild_
+
+Module Name:
+
+ wdfcore.h
+
+Abstract:
+
+ This is the main driver framework.
+
+Environment:
+
+ kernel mode only
+
+Revision History:
+
+--*/
+
+//
+// NOTE: This header is generated by stubwork. Please make any
+// modifications to the corresponding template files
+// (.x or .y) and use stubwork to regenerate the header
+//
+
+#ifndef _WDFCORE_H_
+#define _WDFCORE_H_
+
+#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
+
+
+
+#if (NTDDI_VERSION >= NTDDI_WIN2K)
+
+
+
+//
+// Time conversion related macros
+//
+// to to to
+// us ms sec
+#define WDF_TIMEOUT_TO_SEC ((LONGLONG) 1 * 10 * 1000 * 1000)
+#define WDF_TIMEOUT_TO_MS ((LONGLONG) 1 * 10 * 1000)
+#define WDF_TIMEOUT_TO_US ((LONGLONG) 1 * 10)
+LONGLONG
+FORCEINLINE
+WDF_REL_TIMEOUT_IN_SEC(
+ _In_ ULONGLONG Time
+ )
+{
+ return Time * -1 * WDF_TIMEOUT_TO_SEC;
+}
+
+LONGLONG
+FORCEINLINE
+WDF_ABS_TIMEOUT_IN_SEC(
+ _In_ ULONGLONG Time
+ )
+{
+ return Time * 1 * WDF_TIMEOUT_TO_SEC;
+}
+
+LONGLONG
+FORCEINLINE
+WDF_REL_TIMEOUT_IN_MS(
+ _In_ ULONGLONG Time
+ )
+{
+ return Time * -1 * WDF_TIMEOUT_TO_MS;
+}
+
+LONGLONG
+FORCEINLINE
+WDF_ABS_TIMEOUT_IN_MS(
+ _In_ ULONGLONG Time
+ )
+{
+ return Time * 1 * WDF_TIMEOUT_TO_MS;
+}
+
+LONGLONG
+FORCEINLINE
+WDF_REL_TIMEOUT_IN_US(
+ _In_ ULONGLONG Time
+ )
+{
+ return Time * -1 * WDF_TIMEOUT_TO_US;
+}
+
+LONGLONG
+FORCEINLINE
+WDF_ABS_TIMEOUT_IN_US(
+ _In_ ULONGLONG Time
+ )
+{
+ return Time * 1 * WDF_TIMEOUT_TO_US;
+}
+
+//
+// Rounding functions
+//
+size_t
+FORCEINLINE
+WDF_ALIGN_SIZE_DOWN(
+ _In_ size_t Length,
+ _In_ size_t AlignTo
+ )
+{
+ return Length & ~(AlignTo - 1);
+}
+
+size_t
+FORCEINLINE
+WDF_ALIGN_SIZE_UP(
+ _In_ size_t Length,
+ _In_ size_t AlignTo
+ )
+{
+ return WDF_ALIGN_SIZE_DOWN(Length + AlignTo - 1, AlignTo);
+}
+
+
+//
+// Pointer math
+//
+#define WDF_PTR_ADD_OFFSET_TYPE(_ptr, _offset, _type) \
+ ((_type) (((PUCHAR) (_ptr)) + (_offset)))
+
+#define WDF_PTR_ADD_OFFSET(_ptr, _offset) \
+ WDF_PTR_ADD_OFFSET_TYPE(_ptr, _offset, PVOID)
+
+#define WDF_PTR_GET_OFFSET(_base, _addr) \
+ (size_t) (((PUCHAR) _addr) - ((PUCHAR) _base))
+
+#if (OSVER(NTDDI_VERSION) == NTDDI_WIN2K)
+//
+// These definitions are necessary for building under a Win2K Environment.
+//
+#ifndef DECLARE_UNICODE_STRING_SIZE
+#define DECLARE_UNICODE_STRING_SIZE(_var, _size) \
+WCHAR _var ## _buffer[_size]; \
+UNICODE_STRING _var = { 0, _size * sizeof(WCHAR) , _var ## _buffer }
+#endif
+
+#undef DECLARE_CONST_UNICODE_STRING
+#define DECLARE_CONST_UNICODE_STRING(_variablename, _string) \
+const WCHAR _variablename ## _buffer[] = _string; \
+__pragma(warning(suppress:4204)) __pragma(warning(suppress:4221)) \
+const UNICODE_STRING _variablename = { sizeof(_string) - sizeof(WCHAR), sizeof(_string),
(PWSTR) _variablename ## _buffer }
+
+#endif // (OSVER(NTDDI_VERSION) == NTDDI_WIN2K)
+
+
+
+#endif // (NTDDI_VERSION >= NTDDI_WIN2K)
+
+
+WDF_EXTERN_C_END
+
+#endif // _WDFCORE_H_
+
diff --git a/sdk/include/wdf/kmdf/1.17/wdfdevice.h
b/sdk/include/wdf/kmdf/1.17/wdfdevice.h
new file mode 100644
index 00000000000..370612414f7
--- /dev/null
+++ b/sdk/include/wdf/kmdf/1.17/wdfdevice.h
@@ -0,0 +1,4496 @@
+/*++
+
+Copyright (c) Microsoft Corporation. All rights reserved.
+
+_WdfVersionBuild_
+
+Module Name:
+
+ wdfdevice.h
+
+Abstract:
+
+
+Environment:
+
+ kernel mode only
+
+Revision History:
+
+--*/
+
+//
+// NOTE: This header is generated by stubwork. Please make any
+// modifications to the corresponding template files
+// (.x or .y) and use stubwork to regenerate the header
+//
+
+#ifndef _WDFDEVICE_H_
+#define _WDFDEVICE_H_
+
+#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
+
+
+
+
+#include <devpropdef.h>
+
+
+#if (NTDDI_VERSION >= NTDDI_WIN2K)
+
+
+// begin_wpp enum
+typedef enum _WDF_DEVICE_STATE_FLAGS {
+ WdfDevStateNP = 0x8000,
+} WDF_DEVICE_STATE_FLAGS;
+
+// end_wpp
+
+// begin_wpp enum
+typedef enum _WDF_DEVICE_PNP_STATE {
+ WdfDevStatePnpInvalid = 0x00,
+ WdfDevStatePnpObjectCreated = 0x100,
+ WdfDevStatePnpCheckForDevicePresence = 0x101,
+ WdfDevStatePnpEjectFailed = 0x102,
+ WdfDevStatePnpEjectHardware = 0x103,
+ WdfDevStatePnpEjectedWaitingForRemove = 0x104,
+ WdfDevStatePnpInit = 0x105,
+ WdfDevStatePnpInitStarting = 0x106,
+ WdfDevStatePnpInitSurpriseRemoved = 0x107,
+ WdfDevStatePnpHardwareAvailable = 0x108,
+ WdfDevStatePnpEnableInterfaces = 0x109,
+ WdfDevStatePnpHardwareAvailablePowerPolicyFailed = 0x10A,
+ WdfDevStatePnpQueryRemoveAskDriver = 0x10B,
+ WdfDevStatePnpQueryRemovePending = 0x10C,
+ WdfDevStatePnpQueryRemoveStaticCheck = 0x10D,
+ WdfDevStatePnpQueriedRemoving = 0x10E,
+ WdfDevStatePnpQueryStopAskDriver = 0x10F,
+ WdfDevStatePnpQueryStopPending = 0x110,
+ WdfDevStatePnpQueryStopStaticCheck = 0x111,
+ WdfDevStatePnpQueryCanceled = 0x112,
+ WdfDevStatePnpRemoved = 0x113,
+ WdfDevStatePnpPdoRemoved = 0x114,
+ WdfDevStatePnpRemovedPdoWait = 0x115,
+ WdfDevStatePnpRemovedPdoSurpriseRemoved = 0x116,
+ WdfDevStatePnpRemovingDisableInterfaces = 0x117,
+ WdfDevStatePnpRestarting = 0x118,
+ WdfDevStatePnpStarted = 0x119,
+ WdfDevStatePnpStartedCancelStop = 0x11A,
+ WdfDevStatePnpStartedCancelRemove = 0x11B,
+ WdfDevStatePnpStartedRemoving = 0x11C,
+ WdfDevStatePnpStartingFromStopped = 0x11D,
+ WdfDevStatePnpStopped = 0x11E,
+ WdfDevStatePnpStoppedWaitForStartCompletion = 0x11F,
+ WdfDevStatePnpStartedStopping = 0x120,
+ WdfDevStatePnpSurpriseRemove = 0x121,
+ WdfDevStatePnpInitQueryRemove = 0x122,
+ WdfDevStatePnpInitQueryRemoveCanceled = 0x123,
+ WdfDevStatePnpFdoRemoved = 0x124,
+ WdfDevStatePnpRemovedWaitForChildren = 0x125,
+ WdfDevStatePnpQueriedSurpriseRemove = 0x126,
+ WdfDevStatePnpSurpriseRemoveIoStarted = 0x127,
+ WdfDevStatePnpFailedPowerDown = 0x128,
+ WdfDevStatePnpFailedIoStarting = 0x129,
+ WdfDevStatePnpFailedOwnHardware = 0x12A,
+ WdfDevStatePnpFailed = 0x12B,
+ WdfDevStatePnpFailedSurpriseRemoved = 0x12C,
+ WdfDevStatePnpFailedStarted = 0x12D,
+ WdfDevStatePnpFailedWaitForRemove = 0x12E,
+ WdfDevStatePnpFailedInit = 0x12F,
+ WdfDevStatePnpPdoInitFailed = 0x130,
+ WdfDevStatePnpRestart = 0x131,
+ WdfDevStatePnpRestartReleaseHardware = 0x132,
+ WdfDevStatePnpRestartHardwareAvailable = 0x133,
+ WdfDevStatePnpPdoRestart = 0x134,
+ WdfDevStatePnpFinal = 0x135,
+ WdfDevStatePnpRemovedChildrenRemoved = 0x136,
+ WdfDevStatePnpQueryRemoveEnsureDeviceAwake = 0x137,
+ WdfDevStatePnpQueryStopEnsureDeviceAwake = 0x138,
+ WdfDevStatePnpFailedPowerPolicyRemoved = 0x139,
+ WdfDevStatePnpNull = 0x13A,
+} WDF_DEVICE_PNP_STATE, *PWDF_DEVICE_PNP_STATE;
+
+// end_wpp
+
+// begin_wpp enum
+typedef enum _WDF_DEVICE_POWER_STATE {
+ WdfDevStatePowerInvalid = 0x00,
+ WdfDevStatePowerObjectCreated = 0x300,
+ WdfDevStatePowerCheckDeviceType = 0x301,
+ WdfDevStatePowerCheckDeviceTypeNP = 0x302 | WdfDevStateNP,
+ WdfDevStatePowerCheckParentState = 0x303,
+ WdfDevStatePowerCheckParentStateNP = 0x304 | WdfDevStateNP,
+ WdfDevStatePowerEnablingWakeAtBus = 0x305,
+ WdfDevStatePowerEnablingWakeAtBusNP = 0x306 | WdfDevStateNP,
+ WdfDevStatePowerD0 = 0x307,
+ WdfDevStatePowerD0NP = 0x308 | WdfDevStateNP,
+ WdfDevStatePowerD0BusWakeOwner = 0x309,
+ WdfDevStatePowerD0BusWakeOwnerNP = 0x30A | WdfDevStateNP,
+ WdfDevStatePowerD0ArmedForWake = 0x30B,
+ WdfDevStatePowerD0ArmedForWakeNP = 0x30C | WdfDevStateNP,
+ WdfDevStatePowerD0DisarmingWakeAtBus = 0x30D,
+ WdfDevStatePowerD0DisarmingWakeAtBusNP = 0x30E | WdfDevStateNP,
+ WdfDevStatePowerD0Starting = 0x30F,
+ WdfDevStatePowerD0StartingConnectInterrupt = 0x310,
+ WdfDevStatePowerD0StartingDmaEnable = 0x311,
+ WdfDevStatePowerD0StartingStartSelfManagedIo = 0x312,
+ WdfDevStatePowerDecideD0State = 0x313,
+ WdfDevStatePowerGotoD3Stopped = 0x314,
+ WdfDevStatePowerStopped = 0x315,
+ WdfDevStatePowerStartingCheckDeviceType = 0x316,
+ WdfDevStatePowerStartingChild = 0x317,
+ WdfDevStatePowerDxDisablingWakeAtBus = 0x318,
+ WdfDevStatePowerDxDisablingWakeAtBusNP = 0x319 | WdfDevStateNP,
+ WdfDevStatePowerGotoDx = 0x31A,
+ WdfDevStatePowerGotoDxNP = 0x31B | WdfDevStateNP,
+ WdfDevStatePowerGotoDxIoStopped = 0x31C,
+ WdfDevStatePowerGotoDxIoStoppedNP = 0x31D | WdfDevStateNP,
+ WdfDevStatePowerGotoDxNPFailed = 0x31E | WdfDevStateNP,
+ WdfDevStatePowerDx = 0x31F,
+ WdfDevStatePowerDxNP = 0x320 | WdfDevStateNP,
+ WdfDevStatePowerGotoDxArmedForWake = 0x321,
+ WdfDevStatePowerGotoDxArmedForWakeNP = 0x322 | WdfDevStateNP,
+ WdfDevStatePowerGotoDxIoStoppedArmedForWake = 0x323,
+ WdfDevStatePowerGotoDxIoStoppedArmedForWakeNP = 0x324 | WdfDevStateNP,
+ WdfDevStatePowerDxArmedForWake = 0x325,
+ WdfDevStatePowerDxArmedForWakeNP = 0x326 | WdfDevStateNP,
+ WdfDevStatePowerCheckParentStateArmedForWake = 0x327,
+ WdfDevStatePowerCheckParentStateArmedForWakeNP = 0x328 | WdfDevStateNP,
+ WdfDevStatePowerWaitForParentArmedForWake = 0x329,
+ WdfDevStatePowerWaitForParentArmedForWakeNP = 0x32A | WdfDevStateNP,
+ WdfDevStatePowerStartSelfManagedIo = 0x32B,
+ WdfDevStatePowerStartSelfManagedIoNP = 0x32C | WdfDevStateNP,
+ WdfDevStatePowerStartSelfManagedIoFailed = 0x32D,
+ WdfDevStatePowerStartSelfManagedIoFailedNP = 0x32E | WdfDevStateNP,
+ WdfDevStatePowerWaitForParent = 0x32F,
+ WdfDevStatePowerWaitForParentNP = 0x330 | WdfDevStateNP,
+ WdfDevStatePowerWakePending = 0x331,
+ WdfDevStatePowerWakePendingNP = 0x332 | WdfDevStateNP,
+ WdfDevStatePowerWaking = 0x333,
+ WdfDevStatePowerWakingNP = 0x334 | WdfDevStateNP,
+ WdfDevStatePowerWakingConnectInterrupt = 0x335,
+ WdfDevStatePowerWakingConnectInterruptNP = 0x336 | WdfDevStateNP,
+ WdfDevStatePowerWakingConnectInterruptFailed = 0x337,
+ WdfDevStatePowerWakingConnectInterruptFailedNP = 0x338 | WdfDevStateNP,
+ WdfDevStatePowerWakingDmaEnable = 0x339,
+ WdfDevStatePowerWakingDmaEnableNP = 0x33A | WdfDevStateNP,
+ WdfDevStatePowerWakingDmaEnableFailed = 0x33B,
+ WdfDevStatePowerWakingDmaEnableFailedNP = 0x33C | WdfDevStateNP,
+ WdfDevStatePowerReportPowerUpFailedDerefParent = 0x33D,
+ WdfDevStatePowerReportPowerUpFailed = 0x33E,
+ WdfDevStatePowerPowerFailedPowerDown = 0x33F,
+ WdfDevStatePowerReportPowerDownFailed = 0x340,
+ WdfDevStatePowerInitialConnectInterruptFailed = 0x341,
+ WdfDevStatePowerInitialDmaEnableFailed = 0x342,
+ WdfDevStatePowerInitialSelfManagedIoFailed = 0x343,
+ WdfDevStatePowerInitialPowerUpFailedDerefParent = 0x344,
+ WdfDevStatePowerInitialPowerUpFailed = 0x345,
+ WdfDevStatePowerDxStoppedDisarmWake = 0x346,
+ WdfDevStatePowerDxStoppedDisarmWakeNP = 0x347 | WdfDevStateNP,
+ WdfDevStatePowerGotoDxStoppedDisableInterruptNP = 0x348 | WdfDevStateNP,
+ WdfDevStatePowerGotoDxStopped = 0x349,
+ WdfDevStatePowerDxStopped = 0x34A,
+ WdfDevStatePowerGotoStopped = 0x34B,
+ WdfDevStatePowerStoppedCompleteDx = 0x34C,
+ WdfDevStatePowerDxStoppedDecideDxState = 0x34D,
+ WdfDevStatePowerDxStoppedArmForWake = 0x34E,
+ WdfDevStatePowerDxStoppedArmForWakeNP = 0x34F | WdfDevStateNP,
+ WdfDevStatePowerFinalPowerDownFailed = 0x350,
+ WdfDevStatePowerFinal = 0x351,
+ WdfDevStatePowerGotoImplicitD3DisarmWakeAtBus = 0x352,
+ WdfDevStatePowerUpFailed = 0x353,
+ WdfDevStatePowerUpFailedDerefParent = 0x354,
+ WdfDevStatePowerGotoDxFailed = 0x355,
+ WdfDevStatePowerGotoDxStoppedDisableInterrupt = 0x356,
+ WdfDevStatePowerUpFailedNP = 0x357 | WdfDevStateNP,
+ WdfDevStatePowerUpFailedDerefParentNP = 0x358 | WdfDevStateNP,
+ WdfDevStatePowerNotifyingD0ExitToWakeInterrupts = 0x359,
+ WdfDevStatePowerNotifyingD0EntryToWakeInterrupts = 0x35A,
+ WdfDevStatePowerNotifyingD0ExitToWakeInterruptsNP = 0x35B | WdfDevStateNP,
+ WdfDevStatePowerNotifyingD0EntryToWakeInterruptsNP = 0x35C | WdfDevStateNP,
+ WdfDevStatePowerNull = 0x35D,
+} WDF_DEVICE_POWER_STATE, *PWDF_DEVICE_POWER_STATE;
+
+// end_wpp
+
+
+// begin_wpp enum
+typedef enum _WDF_DEVICE_POWER_POLICY_STATE {
+ WdfDevStatePwrPolInvalid = 0x00,
+ WdfDevStatePwrPolObjectCreated = 0x500,
+ WdfDevStatePwrPolStarting = 0x501,
+ WdfDevStatePwrPolStartingSucceeded = 0x502,
+ WdfDevStatePwrPolStartingFailed = 0x503,
+ WdfDevStatePwrPolStartingDecideS0Wake = 0x504,
+ WdfDevStatePwrPolStartedIdleCapable = 0x505,
+ WdfDevStatePwrPolTimerExpiredNoWake = 0x506,
+ WdfDevStatePwrPolTimerExpiredNoWakeCompletePowerDown = 0x507,
+ WdfDevStatePwrPolWaitingUnarmed = 0x508,
+ WdfDevStatePwrPolWaitingUnarmedQueryIdle = 0x509,
+ WdfDevStatePwrPolS0NoWakePowerUp = 0x50A,
+ WdfDevStatePwrPolS0NoWakeCompletePowerUp = 0x50B,
+ WdfDevStatePwrPolSystemSleepFromDeviceWaitingUnarmed = 0x50C,
+ WdfDevStatePwrPolSystemSleepNeedWake = 0x50D,
+ WdfDevStatePwrPolSystemSleepNeedWakeCompletePowerUp = 0x50E,
+ WdfDevStatePwrPolSystemSleepPowerRequestFailed = 0x50F,
+ WdfDevStatePwrPolCheckPowerPageable = 0x510,
+ WdfDevStatePwrPolSleepingWakeWakeArrived = 0x511,
+ WdfDevStatePwrPolSleepingWakeRevertArmWake = 0x512,
+ WdfDevStatePwrPolSystemAsleepWakeArmed = 0x513,
+ WdfDevStatePwrPolSystemWakeDeviceWakeEnabled = 0x514,
+ WdfDevStatePwrPolSystemWakeDeviceWakeEnabledWakeCanceled = 0x515,
+ WdfDevStatePwrPolSystemWakeDeviceWakeDisarm = 0x516,
+ WdfDevStatePwrPolSystemWakeDeviceWakeTriggered = 0x517,
+ WdfDevStatePwrPolSystemWakeDeviceWakeTriggeredS0 = 0x518,
+ WdfDevStatePwrPolSystemWakeDeviceWokeDisarm = 0x519,
+ WdfDevStatePwrPolSleepingWakeWakeArrivedNP = 0x51A | WdfDevStateNP,
+ WdfDevStatePwrPolSleepingWakeRevertArmWakeNP = 0x51B | WdfDevStateNP,
+ WdfDevStatePwrPolSleepingWakePowerDownFailed = 0x51C,
+ WdfDevStatePwrPolSleepingWakePowerDownFailedWakeCanceled = 0x51D,
+ WdfDevStatePwrPolSystemAsleepWakeArmedNP = 0x51E | WdfDevStateNP,
+ WdfDevStatePwrPolSystemWakeDeviceWakeEnabledNP = 0x51F | WdfDevStateNP,
+ WdfDevStatePwrPolSystemWakeDeviceWakeEnabledWakeCanceledNP = 0x520 | WdfDevStateNP,
+ WdfDevStatePwrPolSystemWakeDeviceWakeDisarmNP = 0x521 | WdfDevStateNP,
+ WdfDevStatePwrPolSystemWakeDeviceWakeTriggeredNP = 0x522 | WdfDevStateNP,
+ WdfDevStatePwrPolSystemWakeDeviceWakeTriggeredS0NP = 0x523 | WdfDevStateNP,
+ WdfDevStatePwrPolSystemWakeDeviceWokeDisarmNP = 0x524 | WdfDevStateNP,
+ WdfDevStatePwrPolSystemWakeDeviceWakeCompletePowerUp = 0x525,
+ WdfDevStatePwrPolSleeping = 0x526,
+ WdfDevStatePwrPolSleepingNoWakePowerDown = 0x527,
+ WdfDevStatePwrPolSleepingNoWakeCompletePowerDown = 0x528,
+ WdfDevStatePwrPolSleepingNoWakeDxRequestFailed = 0x529,
+ WdfDevStatePwrPolSleepingWakePowerDown = 0x52A,
+ WdfDevStatePwrPolSleepingSendWake = 0x52B,
+ WdfDevStatePwrPolSystemAsleepNoWake = 0x52C,
+ WdfDevStatePwrPolSystemWakeDeviceWakeDisabled = 0x52D,
+ WdfDevStatePwrPolSystemWakeDeviceToD0 = 0x52E,
+ WdfDevStatePwrPolSystemWakeDeviceToD0CompletePowerUp = 0x52F,
+ WdfDevStatePwrPolSystemWakeQueryIdle = 0x530,
+ WdfDevStatePwrPolStartedWakeCapable = 0x531,
+ WdfDevStatePwrPolTimerExpiredDecideUsbSS = 0x532,
+ WdfDevStatePwrPolTimerExpiredWakeCapablePowerDown = 0x533,
+ WdfDevStatePwrPolTimerExpiredWakeCapableSendWake = 0x534,
+ WdfDevStatePwrPolTimerExpiredWakeCapableUsbSS = 0x535,
+ WdfDevStatePwrPolTimerExpiredWakeCapableWakeArrived = 0x536,
+ WdfDevStatePwrPolTimerExpiredWakeCapableCancelWake = 0x537,
+ WdfDevStatePwrPolTimerExpiredWakeCapableWakeCanceled = 0x538,
+ WdfDevStatePwrPolTimerExpiredWakeCapableCleanup = 0x539,
+ WdfDevStatePwrPolTimerExpiredWakeCapableDxAllocFailed = 0x53A,
+ WdfDevStatePwrPolTimerExpiredWakeCompletedPowerDown = 0x53B,
+ WdfDevStatePwrPolTimerExpiredWakeCompletedPowerUp = 0x53C,
+ WdfDevStatePwrPolWaitingArmedUsbSS = 0x53D,
+ WdfDevStatePwrPolWaitingArmed = 0x53E,
+ WdfDevStatePwrPolWaitingArmedQueryIdle = 0x53F,
+ WdfDevStatePwrPolIoPresentArmed = 0x540,
+ WdfDevStatePwrPolIoPresentArmedWakeCanceled = 0x541,
+ WdfDevStatePwrPolS0WakeDisarm = 0x542,
+ WdfDevStatePwrPolS0WakeCompletePowerUp = 0x543,
+ WdfDevStatePwrPolTimerExpiredWakeSucceeded = 0x544,
+ WdfDevStatePwrPolTimerExpiredWakeCompletedDisarm = 0x545,
+ WdfDevStatePwrPolTimerExpiredWakeCapableWakeSucceeded = 0x546,
+ WdfDevStatePwrPolTimerExpiredWakeCapableWakeFailed = 0x547,
+ WdfDevStatePwrPolWakeFailedUsbSS = 0x548,
+ WdfDevStatePwrPolTimerExpiredWakeCapablePowerDownFailedCancelWake = 0x549,
+ WdfDevStatePwrPolTimerExpiredWakeCapablePowerDownFailedWakeCanceled = 0x54A,
+ WdfDevStatePwrPolTimerExpiredWakeCapablePowerDownFailedUsbSS = 0x54B,
+ WdfDevStatePwrPolCancelingWakeForSystemSleep = 0x54C,
+ WdfDevStatePwrPolCancelingWakeForSystemSleepWakeCanceled = 0x54D,
+ WdfDevStatePwrPolDisarmingWakeForSystemSleepCompletePowerUp = 0x54E,
+ WdfDevStatePwrPolPowerUpForSystemSleepFailed = 0x54F,
+ WdfDevStatePwrPolWokeFromS0UsbSS = 0x550,
+ WdfDevStatePwrPolWokeFromS0 = 0x551,
+ WdfDevStatePwrPolWokeFromS0NotifyDriver = 0x552,
+ WdfDevStatePwrPolStoppingResetDevice = 0x553,
+ WdfDevStatePwrPolStoppingResetDeviceCompletePowerUp = 0x554,
+ WdfDevStatePwrPolStoppingResetDeviceFailed = 0x555,
+ WdfDevStatePwrPolStoppingD0 = 0x556,
+ WdfDevStatePwrPolStoppingD0Failed = 0x557,
+ WdfDevStatePwrPolStoppingDisarmWake = 0x558,
+ WdfDevStatePwrPolStoppingDisarmWakeCancelWake = 0x559,
+ WdfDevStatePwrPolStoppingDisarmWakeWakeCanceled = 0x55A,
+ WdfDevStatePwrPolStopping = 0x55B,
+ WdfDevStatePwrPolStoppingFailed = 0x55C,
+ WdfDevStatePwrPolStoppingSendStatus = 0x55D,
+ WdfDevStatePwrPolStoppingCancelTimer = 0x55E,
+ WdfDevStatePwrPolStoppingWaitForIdleTimeout = 0x55F,
+ WdfDevStatePwrPolStoppingCancelUsbSS = 0x560,
+ WdfDevStatePwrPolStoppingWaitForUsbSSCompletion = 0x561,
+ WdfDevStatePwrPolStoppingCancelWake = 0x562,
+ WdfDevStatePwrPolStopped = 0x563,
+ WdfDevStatePwrPolCancelUsbSS = 0x564,
+ WdfDevStatePwrPolStarted = 0x565,
+ WdfDevStatePwrPolStartedCancelTimer = 0x566,
+ WdfDevStatePwrPolStartedWaitForIdleTimeout = 0x567,
+ WdfDevStatePwrPolStartedWakeCapableCancelTimerForSleep = 0x568,
+ WdfDevStatePwrPolStartedWakeCapableWaitForIdleTimeout = 0x569,
+ WdfDevStatePwrPolStartedWakeCapableSleepingUsbSS = 0x56A,
+ WdfDevStatePwrPolStartedIdleCapableCancelTimerForSleep = 0x56B,
+ WdfDevStatePwrPolStartedIdleCapableWaitForIdleTimeout = 0x56C,
+ WdfDevStatePwrPolDeviceD0PowerRequestFailed = 0x56D,
+ WdfDevStatePwrPolDevicePowerRequestFailed = 0x56E,
+ WdfDevStatePwrPolGotoDx = 0x56F,
+ WdfDevStatePwrPolGotoDxInDx = 0x570,
+ WdfDevStatePwrPolDx = 0x571,
+ WdfDevStatePwrPolGotoD0 = 0x572,
+ WdfDevStatePwrPolGotoD0InD0 = 0x573,
+ WdfDevStatePwrPolFinal = 0x574,
+ WdfDevStatePwrPolSleepingPowerDownNotProcessed = 0x575,
+ WdfDevStatePwrPolTimerExpiredWakeCapablePowerDownNotProcessed = 0x576,
+ WdfDevStatePwrPolTimerExpiredNoWakePowerDownNotProcessed = 0x577,
+ WdfDevStatePwrPolTimerExpiredNoWakePoweredDownDisableIdleTimer = 0x578,
+ WdfDevStatePwrPolStoppingWaitingForImplicitPowerDown = 0x579,
+ WdfDevStatePwrPolStoppingPoweringUp = 0x57A,
+ WdfDevStatePwrPolStoppingPoweringDown = 0x57B,
+ WdfDevStatePwrPolPowerUpForSystemSleepNotSeen = 0x57C,
+ WdfDevStatePwrPolWaitingArmedStoppingCancelUsbSS = 0x57D,
+ WdfDevStatePwrPolWaitingArmedWakeFailedCancelUsbSS = 0x57E,
+ WdfDevStatePwrPolWaitingArmedIoPresentCancelUsbSS = 0x57F,
+ WdfDevStatePwrPolWaitingArmedWakeSucceededCancelUsbSS = 0x580,
+ WdfDevStatePwrPolCancelingUsbSSForSystemSleep = 0x581,
+ WdfDevStatePwrPolStoppingD0CancelUsbSS = 0x582,
+ WdfDevStatePwrPolStartingPoweredUp = 0x583,
+ WdfDevStatePwrPolIdleCapableDeviceIdle = 0x584,
+ WdfDevStatePwrPolDeviceIdleReturnToActive = 0x585,
+ WdfDevStatePwrPolDeviceIdleSleeping = 0x586,
+ WdfDevStatePwrPolDeviceIdleStopping = 0x587,
+ WdfDevStatePwrPolTimerExpiredNoWakeUndoPowerDown = 0x588,
+ WdfDevStatePwrPolWakeCapableDeviceIdle = 0x589,
+ WdfDevStatePwrPolWakeCapableUsbSSCompleted = 0x58A,
+ WdfDevStatePwrPolTimerExpiredWakeCapableUndoPowerDown = 0x58B,
+ WdfDevStatePwrPolTimerExpiredWakeCompletedHardwareStarted = 0x58C,
+ WdfDevStatePwrPolStoppedRemoving = 0x58D,
+ WdfDevStatePwrPolRemoved = 0x58E,
+ WdfDevStatePwrPolRestarting = 0x58F,
+ WdfDevStatePwrPolRestartingFailed = 0x590,
+ WdfDevStatePwrPolStartingPoweredUpFailed = 0x591,
+ WdfDevStatePwrPolTimerExpiredNoWakeReturnToActive = 0x592,
+ WdfDevStatePwrPolWaitingArmedWakeInterruptFired = 0x593,
+ WdfDevStatePwrPolSystemWakeDeviceWakeInterruptFired = 0x594,
+ WdfDevStatePwrPolSystemWakeDeviceWakeInterruptFiredNP = 0x595 | WdfDevStateNP,
+ WdfDevStatePwrPolTimerExpiredWakeCapableWakeInterruptArrived = 0x596,
+ WdfDevStatePwrPolTimerExpiredWakeCapablePowerDownFailedWakeInterruptArrived = 0x597,
+ WdfDevStatePwrPolWaitingArmedWakeInterruptFiredDuringPowerDown = 0x598,
+ WdfDevStatePwrPolNull = 0x599,
+} WDF_DEVICE_POWER_POLICY_STATE, *PWDF_DEVICE_POWER_POLICY_STATE;
+
+// end_wpp
+
+typedef enum _WDF_STATE_NOTIFICATION_TYPE {
+ StateNotificationInvalid = 0x0000,
+ StateNotificationEnterState = 0x0001,
+ StateNotificationPostProcessState = 0x0002,
+ StateNotificationLeaveState = 0x0004,
+ StateNotificationAllStates = StateNotificationEnterState |
StateNotificationPostProcessState | StateNotificationLeaveState,
+} WDF_STATE_NOTIFICATION_TYPE;
+
+typedef enum _WDF_POWER_POLICY_S0_IDLE_CAPABILITIES {
+ IdleCapsInvalid = 0,
+ IdleCannotWakeFromS0,
+ IdleCanWakeFromS0,
+ IdleUsbSelectiveSuspend,
+} WDF_POWER_POLICY_S0_IDLE_CAPABILITIES;
+
+typedef enum _WDF_POWER_POLICY_S0_IDLE_USER_CONTROL {
+ IdleUserControlInvalid = 0,
+ IdleDoNotAllowUserControl,
+ IdleAllowUserControl,
+} WDF_POWER_POLICY_S0_IDLE_USER_CONTROL;
+
+typedef enum _WDF_POWER_POLICY_IDLE_TIMEOUT_CONSTANTS {
+ IdleTimeoutDefaultConstant = 0,
+} WDF_POWER_POLICY_IDLE_TIMEOUT_CONSTANTS;
+
+typedef enum _WDF_POWER_POLICY_SX_WAKE_USER_CONTROL {
+ WakeUserControlInvalid = 0,
+ WakeDoNotAllowUserControl,
+ WakeAllowUserControl,
+} WDF_POWER_POLICY_SX_WAKE_USER_CONTROL;
+
+typedef enum _WDF_POWER_DEVICE_STATE {
+ WdfPowerDeviceInvalid = 0,
+ WdfPowerDeviceD0,
+ WdfPowerDeviceD1,
+ WdfPowerDeviceD2,
+ WdfPowerDeviceD3,
+ WdfPowerDeviceD3Final,
+ WdfPowerDevicePrepareForHibernation,
+ WdfPowerDeviceMaximum,
+} WDF_POWER_DEVICE_STATE, *PWDF_POWER_DEVICE_STATE;
+
+
+
+typedef enum _WDF_DISPATCH_IRP_TO_IO_QUEUE_FLAGS {
+ WDF_DISPATCH_IRP_TO_IO_QUEUE_NO_FLAGS = 0x00000000,
+ WDF_DISPATCH_IRP_TO_IO_QUEUE_INVOKE_INCALLERCTX_CALLBACK = 0x00000001,
+ WDF_DISPATCH_IRP_TO_IO_QUEUE_PREPROCESSED_IRP = 0x00000002,
+} WDF_DISPATCH_IRP_TO_IO_QUEUE_FLAGS;
+
+typedef enum _WDF_SPECIAL_FILE_TYPE {
+ WdfSpecialFileUndefined = 0,
+ WdfSpecialFilePaging = 1,
+ WdfSpecialFileHibernation,
+ WdfSpecialFileDump,
+ WdfSpecialFileBoot,
+ WdfSpecialFileMax,
+} WDF_SPECIAL_FILE_TYPE, *PWDF_SPECIAL_FILE_TYPE;
+
+typedef enum _WDF_DEVICE_IO_TYPE {
+ WdfDeviceIoUndefined = 0,
+ WdfDeviceIoNeither,
+ WdfDeviceIoBuffered,
+ WdfDeviceIoDirect,
+ WdfDeviceIoBufferedOrDirect = 4,
+ WdfDeviceIoMaximum,
+} WDF_DEVICE_IO_TYPE, *PWDF_DEVICE_IO_TYPE;
+
+typedef enum _WDF_FILEOBJECT_CLASS {
+ WdfFileObjectInvalid = 0,
+ WdfFileObjectNotRequired = 1,
+ WdfFileObjectWdfCanUseFsContext = 2,
+ WdfFileObjectWdfCanUseFsContext2 = 3,
+ WdfFileObjectWdfCannotUseFsContexts = 4,
+ WdfFileObjectCanBeOptional = 0x80000000,
+} WDF_FILEOBJECT_CLASS, *PWDF_FILEOBJECT_CLASS;
+
+typedef enum _WDF_DEVICE_FAILED_ACTION {
+ WdfDeviceFailedUndefined = 0,
+ WdfDeviceFailedAttemptRestart,
+ WdfDeviceFailedNoRestart,
+} WDF_DEVICE_FAILED_ACTION;
+
+typedef enum _WDF_RELEASE_HARDWARE_ORDER_ON_FAILURE {
+ WdfReleaseHardwareOrderOnFailureInvalid = 0,
+ WdfReleaseHardwareOrderOnFailureEarly,
+ WdfReleaseHardwareOrderOnFailureAfterDescendants,
+} WDF_RELEASE_HARDWARE_ORDER_ON_FAILURE, *PWDF_RELEASE_HARDWARE_ORDER_ON_FAILURE;
+
+
+
+//
+// If you do not want the auto inclusion of wdmsec.h, define
+// WDF_DEVICE_NO_WDMSEC_H before including this file (or wdf.h)
+//
+#ifndef WDF_DEVICE_NO_WDMSEC_H
+#include <wdmsec.h>
+#endif // WDF_DEVICE_NO_WDMSEC_H
+
+
+#define WDF_S0_IDLE_ENABLED_VALUE_NAME L"IdleInWorkingState"
+#define WDF_SX_WAKE_ENABLED_VALUE_NAME L"WakeFromSleepState"
+#define WDF_S0_IDLE_DEFAULT_VALUE_NAME L"WdfDefaultIdleInWorkingState"
+#define WDF_SX_WAKE_DEFAULT_VALUE_NAME L"WdfDefaultWakeFromSleepState"
+//
+// Declare empty definitions so that they may be referenced by
+// routines before they are defined.
+//
+typedef enum _WDF_REQUEST_TYPE WDF_REQUEST_TYPE;
+
+
+typedef
+_Function_class_(EVT_WDF_DEVICE_FILE_CREATE)
+_IRQL_requires_same_
+_IRQL_requires_max_(PASSIVE_LEVEL)
+VOID
+EVT_WDF_DEVICE_FILE_CREATE(
+ _In_
+ WDFDEVICE Device,
+ _In_
+ WDFREQUEST Request,
+ _In_
+ WDFFILEOBJECT FileObject
+ );
+
+typedef EVT_WDF_DEVICE_FILE_CREATE *PFN_WDF_DEVICE_FILE_CREATE;
+
+typedef
+_Function_class_(EVT_WDF_FILE_CLOSE)
+_IRQL_requires_same_
+_IRQL_requires_max_(PASSIVE_LEVEL)
+VOID
+EVT_WDF_FILE_CLOSE(
+ _In_
+ WDFFILEOBJECT FileObject
+ );
+
+typedef EVT_WDF_FILE_CLOSE *PFN_WDF_FILE_CLOSE;
+
+typedef
+_Function_class_(EVT_WDF_FILE_CLEANUP)
+_IRQL_requires_same_
+_IRQL_requires_max_(PASSIVE_LEVEL)
+VOID
+EVT_WDF_FILE_CLEANUP(
+ _In_
+ WDFFILEOBJECT FileObject
+ );
+
+typedef EVT_WDF_FILE_CLEANUP *PFN_WDF_FILE_CLEANUP;
+
+typedef struct _WDF_FILEOBJECT_CONFIG {
+ //
+ // Size of this structure in bytes
+ //
+ ULONG Size;
+
+ //
+ // Event callback for create requests
+ //
+ PFN_WDF_DEVICE_FILE_CREATE EvtDeviceFileCreate;
+
+ //
+ // Event callback for close requests
+ //
+ PFN_WDF_FILE_CLOSE EvtFileClose;
+
+ //
+ // Event callback for cleanup requests
+ //
+ PFN_WDF_FILE_CLEANUP EvtFileCleanup;
+
+ //
+ // If WdfTrue, create/cleanup/close file object related requests will be
+ // sent down the stack.
+ //
+ // If WdfFalse, create/cleanup/close will be completed at this location in
+ // the device stack.
+ //
+ // If WdfDefault, behavior depends on device type
+ // FDO, PDO, Control: use the WdfFalse behavior
+ // Filter: use the WdfTrue behavior
+ //
+ WDF_TRI_STATE AutoForwardCleanupClose;
+
+ //
+ // Specify whether framework should create WDFFILEOBJECT and also
+ // whether it can FsContexts fields in the WDM fileobject to store
+ // WDFFILEOBJECT so that it can avoid table look up and improve perf.
+ //
+ WDF_FILEOBJECT_CLASS FileObjectClass;
+
+} WDF_FILEOBJECT_CONFIG, *PWDF_FILEOBJECT_CONFIG;
+
+VOID
+FORCEINLINE
+WDF_FILEOBJECT_CONFIG_INIT(
+ _Out_ PWDF_FILEOBJECT_CONFIG FileEventCallbacks,
+ _In_opt_ PFN_WDF_DEVICE_FILE_CREATE EvtDeviceFileCreate,
+ _In_opt_ PFN_WDF_FILE_CLOSE EvtFileClose,
+ _In_opt_ PFN_WDF_FILE_CLEANUP EvtFileCleanup
+ )
+{
+ FileEventCallbacks->Size = sizeof(WDF_FILEOBJECT_CONFIG);
+
+ FileEventCallbacks->EvtDeviceFileCreate = EvtDeviceFileCreate;
+ FileEventCallbacks->EvtFileClose = EvtFileClose;
+ FileEventCallbacks->EvtFileCleanup = EvtFileCleanup;
+
+ FileEventCallbacks->FileObjectClass = WdfFileObjectWdfCannotUseFsContexts;
+ FileEventCallbacks->AutoForwardCleanupClose = WdfUseDefault;
+}
+
+typedef struct _WDF_DEVICE_PNP_NOTIFICATION_DATA {
+ //
+ // Type of data
+ //
+ WDF_STATE_NOTIFICATION_TYPE Type;
+
+ union {
+ struct {
+ //
+ // The current state that is about to be exited
+ //
+ WDF_DEVICE_PNP_STATE CurrentState;
+
+ //
+ // The new state that is about to be entered
+ //
+ WDF_DEVICE_PNP_STATE NewState;
+ } EnterState;
+
+ struct {
+ //
+ // The current state
+ //
+ WDF_DEVICE_PNP_STATE CurrentState;
+ } PostProcessState;
+
+
+ struct {
+ //
+ // The current state that is about to be exitted
+ //
+ WDF_DEVICE_PNP_STATE CurrentState;
+
+ //
+ // The state that is about to be entered
+ //
+ WDF_DEVICE_PNP_STATE NewState;
+ } LeaveState;
+ } Data;
+} WDF_DEVICE_PNP_NOTIFICATION_DATA;
+
+typedef const WDF_DEVICE_PNP_NOTIFICATION_DATA* PCWDF_DEVICE_PNP_NOTIFICATION_DATA;
+
+typedef struct _WDF_DEVICE_POWER_NOTIFICATION_DATA {
+ //
+ // Type of data
+ //
+ WDF_STATE_NOTIFICATION_TYPE Type;
+
+ union {
+ struct {
+ //
+ // The current state that is about to be exitted
+ //
+ WDF_DEVICE_POWER_STATE CurrentState;
+
+ //
+ // The new state that is about to be entered
+ //
+ WDF_DEVICE_POWER_STATE NewState;
+ } EnterState;
+
+ struct {
+ //
+ // The current state
+ //
+ WDF_DEVICE_POWER_STATE CurrentState;
+ } PostProcessState;
+
+
+ struct {
+ //
+ // The current state that is about to be exitted
+ //
+ WDF_DEVICE_POWER_STATE CurrentState;
+
+ //
+ // The state that is about to be entered
+ //
+ WDF_DEVICE_POWER_STATE NewState;
+ } LeaveState;
+ } Data;
+} WDF_DEVICE_POWER_NOTIFICATION_DATA;
+
+typedef const WDF_DEVICE_POWER_NOTIFICATION_DATA* PCWDF_DEVICE_POWER_NOTIFICATION_DATA;
+
+typedef struct _WDF_DEVICE_POWER_POLICY_NOTIFICATION_DATA {
+ //
+ // Type of data
+ //
+ WDF_STATE_NOTIFICATION_TYPE Type;
+
+ union {
+ struct {
+ //
+ // The current state that is about to be exitted
+ //
+ WDF_DEVICE_POWER_POLICY_STATE CurrentState;
+
+ //
+ // The new state that is about to be entered
+ //
+ WDF_DEVICE_POWER_POLICY_STATE NewState;
+ } EnterState;
+
+ struct {
+ //
+ // The current state
+ //
+ WDF_DEVICE_POWER_POLICY_STATE CurrentState;
+ } PostProcessState;
+
+
+ struct {
+ //
+ // The current state that is about to be exitted
+ //
+ WDF_DEVICE_POWER_POLICY_STATE CurrentState;
+
+ //
+ // The state that is about to be entered
+ //
+ WDF_DEVICE_POWER_POLICY_STATE NewState;
+ } LeaveState;
+ } Data;
+} WDF_DEVICE_POWER_POLICY_NOTIFICATION_DATA;
+
+typedef const WDF_DEVICE_POWER_POLICY_NOTIFICATION_DATA*
PCWDF_DEVICE_POWER_POLICY_NOTIFICATION_DATA;
+
+typedef
+_Function_class_(EVT_WDF_DEVICE_PNP_STATE_CHANGE_NOTIFICATION)
+_IRQL_requires_same_
+_IRQL_requires_max_(PASSIVE_LEVEL)
+VOID
+EVT_WDF_DEVICE_PNP_STATE_CHANGE_NOTIFICATION(
+ _In_
+ WDFDEVICE Device,
+ _In_
+ PCWDF_DEVICE_PNP_NOTIFICATION_DATA NotificationData
+ );
+
+typedef EVT_WDF_DEVICE_PNP_STATE_CHANGE_NOTIFICATION
*PFN_WDF_DEVICE_PNP_STATE_CHANGE_NOTIFICATION;
+
+typedef
+_Function_class_(EVT_WDF_DEVICE_POWER_STATE_CHANGE_NOTIFICATION)
+_IRQL_requires_same_
+_IRQL_requires_max_(PASSIVE_LEVEL)
+VOID
+EVT_WDF_DEVICE_POWER_STATE_CHANGE_NOTIFICATION(
+ _In_
+ WDFDEVICE Device,
+ _In_
+ PCWDF_DEVICE_POWER_NOTIFICATION_DATA NotificationData
+ );
+
+typedef EVT_WDF_DEVICE_POWER_STATE_CHANGE_NOTIFICATION
*PFN_WDF_DEVICE_POWER_STATE_CHANGE_NOTIFICATION;
+
+typedef
+_Function_class_(EVT_WDF_DEVICE_POWER_POLICY_STATE_CHANGE_NOTIFICATION)
+_IRQL_requires_same_
+_IRQL_requires_max_(PASSIVE_LEVEL)
+VOID
+EVT_WDF_DEVICE_POWER_POLICY_STATE_CHANGE_NOTIFICATION(
+ _In_
+ WDFDEVICE Device,
+ _In_
+ PCWDF_DEVICE_POWER_POLICY_NOTIFICATION_DATA NotificationData
+ );
+
+typedef EVT_WDF_DEVICE_POWER_POLICY_STATE_CHANGE_NOTIFICATION
*PFN_WDF_DEVICE_POWER_POLICY_STATE_CHANGE_NOTIFICATION;
+
+#define IdleTimeoutDefaultValue ((ULONG) IdleTimeoutDefaultConstant)
+
+typedef
+_Function_class_(EVT_WDF_DEVICE_D0_ENTRY)
+_IRQL_requires_same_
+_IRQL_requires_max_(PASSIVE_LEVEL)
+NTSTATUS
+EVT_WDF_DEVICE_D0_ENTRY(
+ _In_
+ WDFDEVICE Device,
+ _In_
+ WDF_POWER_DEVICE_STATE PreviousState
+ );
+
+typedef EVT_WDF_DEVICE_D0_ENTRY *PFN_WDF_DEVICE_D0_ENTRY;
+
+typedef
+_Function_class_(EVT_WDF_DEVICE_D0_ENTRY_POST_INTERRUPTS_ENABLED)
+_IRQL_requires_same_
+_IRQL_requires_max_(PASSIVE_LEVEL)
+NTSTATUS
+EVT_WDF_DEVICE_D0_ENTRY_POST_INTERRUPTS_ENABLED(
+ _In_
+ WDFDEVICE Device,
+ _In_
+ WDF_POWER_DEVICE_STATE PreviousState
+ );
+
+typedef EVT_WDF_DEVICE_D0_ENTRY_POST_INTERRUPTS_ENABLED
*PFN_WDF_DEVICE_D0_ENTRY_POST_INTERRUPTS_ENABLED;
+
+typedef
+_Function_class_(EVT_WDF_DEVICE_D0_EXIT)
+_IRQL_requires_same_
+_IRQL_requires_max_(PASSIVE_LEVEL)
+NTSTATUS
+EVT_WDF_DEVICE_D0_EXIT(
+ _In_
+ WDFDEVICE Device,
+ _In_
+ WDF_POWER_DEVICE_STATE TargetState
+ );
+
+typedef EVT_WDF_DEVICE_D0_EXIT *PFN_WDF_DEVICE_D0_EXIT;
+
+typedef
+_Function_class_(EVT_WDF_DEVICE_D0_EXIT_PRE_INTERRUPTS_DISABLED)
+_IRQL_requires_same_
+_IRQL_requires_max_(PASSIVE_LEVEL)
+NTSTATUS
+EVT_WDF_DEVICE_D0_EXIT_PRE_INTERRUPTS_DISABLED(
+ _In_
+ WDFDEVICE Device,
+ _In_
+ WDF_POWER_DEVICE_STATE TargetState
+ );
+
+typedef EVT_WDF_DEVICE_D0_EXIT_PRE_INTERRUPTS_DISABLED
*PFN_WDF_DEVICE_D0_EXIT_PRE_INTERRUPTS_DISABLED;
+
+typedef
+_Function_class_(EVT_WDF_DEVICE_PREPARE_HARDWARE)
+_IRQL_requires_same_
+_IRQL_requires_max_(PASSIVE_LEVEL)
+NTSTATUS
+EVT_WDF_DEVICE_PREPARE_HARDWARE(
+ _In_
+ WDFDEVICE Device,
+ _In_
+ WDFCMRESLIST ResourcesRaw,
+ _In_
+ WDFCMRESLIST ResourcesTranslated
+ );
+
+typedef EVT_WDF_DEVICE_PREPARE_HARDWARE *PFN_WDF_DEVICE_PREPARE_HARDWARE;
+
+typedef
+_Function_class_(EVT_WDF_DEVICE_RELEASE_HARDWARE)
+_IRQL_requires_same_
+_IRQL_requires_max_(PASSIVE_LEVEL)
+NTSTATUS
+EVT_WDF_DEVICE_RELEASE_HARDWARE(
+ _In_
+ WDFDEVICE Device,
+ _In_
+ WDFCMRESLIST ResourcesTranslated
+ );
+
+typedef EVT_WDF_DEVICE_RELEASE_HARDWARE *PFN_WDF_DEVICE_RELEASE_HARDWARE;
+
+typedef
+_Function_class_(EVT_WDF_DEVICE_SELF_MANAGED_IO_CLEANUP)
+_IRQL_requires_same_
+_IRQL_requires_max_(PASSIVE_LEVEL)
+VOID
+EVT_WDF_DEVICE_SELF_MANAGED_IO_CLEANUP(
+ _In_
+ WDFDEVICE Device
+ );
+
+typedef EVT_WDF_DEVICE_SELF_MANAGED_IO_CLEANUP *PFN_WDF_DEVICE_SELF_MANAGED_IO_CLEANUP;
+
+typedef
+_Function_class_(EVT_WDF_DEVICE_SELF_MANAGED_IO_FLUSH)
+_IRQL_requires_same_
+_IRQL_requires_max_(PASSIVE_LEVEL)
+VOID
+EVT_WDF_DEVICE_SELF_MANAGED_IO_FLUSH(
+ _In_
+ WDFDEVICE Device
+ );
+
+typedef EVT_WDF_DEVICE_SELF_MANAGED_IO_FLUSH *PFN_WDF_DEVICE_SELF_MANAGED_IO_FLUSH;
+
+typedef
+_Function_class_(EVT_WDF_DEVICE_SELF_MANAGED_IO_INIT)
+_IRQL_requires_same_
+_IRQL_requires_max_(PASSIVE_LEVEL)
+NTSTATUS
+EVT_WDF_DEVICE_SELF_MANAGED_IO_INIT(
+ _In_
+ WDFDEVICE Device
+ );
+
+typedef EVT_WDF_DEVICE_SELF_MANAGED_IO_INIT *PFN_WDF_DEVICE_SELF_MANAGED_IO_INIT;
+
+typedef
+_Function_class_(EVT_WDF_DEVICE_SELF_MANAGED_IO_SUSPEND)
+_IRQL_requires_same_
+_IRQL_requires_max_(PASSIVE_LEVEL)
+NTSTATUS
+EVT_WDF_DEVICE_SELF_MANAGED_IO_SUSPEND(
+ _In_
+ WDFDEVICE Device
+ );
+
+typedef EVT_WDF_DEVICE_SELF_MANAGED_IO_SUSPEND *PFN_WDF_DEVICE_SELF_MANAGED_IO_SUSPEND;
+
+typedef
+_Function_class_(EVT_WDF_DEVICE_SELF_MANAGED_IO_RESTART)
+_IRQL_requires_same_
+_IRQL_requires_max_(PASSIVE_LEVEL)
+NTSTATUS
+EVT_WDF_DEVICE_SELF_MANAGED_IO_RESTART(
+ _In_
+ WDFDEVICE Device
+ );
+
+typedef EVT_WDF_DEVICE_SELF_MANAGED_IO_RESTART *PFN_WDF_DEVICE_SELF_MANAGED_IO_RESTART;
+
+typedef
+_Function_class_(EVT_WDF_DEVICE_QUERY_STOP)
+_IRQL_requires_same_
+_IRQL_requires_max_(PASSIVE_LEVEL)
+NTSTATUS
+EVT_WDF_DEVICE_QUERY_STOP(
+ _In_
+ WDFDEVICE Device
+ );
+
+typedef EVT_WDF_DEVICE_QUERY_STOP *PFN_WDF_DEVICE_QUERY_STOP;
+
+typedef
+_Function_class_(EVT_WDF_DEVICE_QUERY_REMOVE)
+_IRQL_requires_same_
+_IRQL_requires_max_(PASSIVE_LEVEL)
+NTSTATUS
+EVT_WDF_DEVICE_QUERY_REMOVE(
+ _In_
+ WDFDEVICE Device
+ );
+
+typedef EVT_WDF_DEVICE_QUERY_REMOVE *PFN_WDF_DEVICE_QUERY_REMOVE;
+
+typedef
+_Function_class_(EVT_WDF_DEVICE_SURPRISE_REMOVAL)
+_IRQL_requires_same_
+_IRQL_requires_max_(PASSIVE_LEVEL)
+VOID
+EVT_WDF_DEVICE_SURPRISE_REMOVAL(
+ _In_
+ WDFDEVICE Device
+ );
+
+typedef EVT_WDF_DEVICE_SURPRISE_REMOVAL *PFN_WDF_DEVICE_SURPRISE_REMOVAL;
+
+typedef
+_Function_class_(EVT_WDF_DEVICE_USAGE_NOTIFICATION)
+_IRQL_requires_same_
+_IRQL_requires_max_(PASSIVE_LEVEL)
+VOID
+EVT_WDF_DEVICE_USAGE_NOTIFICATION(
+ _In_
+ WDFDEVICE Device,
+ _In_
+ WDF_SPECIAL_FILE_TYPE NotificationType,
+ _In_
+ BOOLEAN IsInNotificationPath
+ );
+
+typedef EVT_WDF_DEVICE_USAGE_NOTIFICATION *PFN_WDF_DEVICE_USAGE_NOTIFICATION;
+
+typedef
+_Function_class_(EVT_WDF_DEVICE_USAGE_NOTIFICATION_EX)
+_IRQL_requires_same_
+_IRQL_requires_max_(PASSIVE_LEVEL)
+NTSTATUS
+EVT_WDF_DEVICE_USAGE_NOTIFICATION_EX(
+ _In_
+ WDFDEVICE Device,
+ _In_
+ WDF_SPECIAL_FILE_TYPE NotificationType,
+ _In_
+ BOOLEAN IsInNotificationPath
+ );
+
+typedef EVT_WDF_DEVICE_USAGE_NOTIFICATION_EX *PFN_WDF_DEVICE_USAGE_NOTIFICATION_EX;
+
+typedef
+_Function_class_(EVT_WDF_DEVICE_RELATIONS_QUERY)
+_IRQL_requires_same_
+_IRQL_requires_max_(PASSIVE_LEVEL)
+VOID
+EVT_WDF_DEVICE_RELATIONS_QUERY(
+ _In_
+ WDFDEVICE Device,
+ _In_
+ DEVICE_RELATION_TYPE RelationType
+ );
+
+typedef EVT_WDF_DEVICE_RELATIONS_QUERY *PFN_WDF_DEVICE_RELATIONS_QUERY;
+
+typedef
+_Function_class_(EVT_WDF_DEVICE_ARM_WAKE_FROM_S0)
+_IRQL_requires_same_
+_IRQL_requires_max_(PASSIVE_LEVEL)
+NTSTATUS
+EVT_WDF_DEVICE_ARM_WAKE_FROM_S0(
+ _In_
+ WDFDEVICE Device
+ );
+
+typedef EVT_WDF_DEVICE_ARM_WAKE_FROM_S0 *PFN_WDF_DEVICE_ARM_WAKE_FROM_S0;
+
+typedef
+_Function_class_(EVT_WDF_DEVICE_ARM_WAKE_FROM_SX)
+_IRQL_requires_same_
+_IRQL_requires_max_(PASSIVE_LEVEL)
+NTSTATUS
+EVT_WDF_DEVICE_ARM_WAKE_FROM_SX(
+ _In_
+ WDFDEVICE Device
+ );
+
+typedef EVT_WDF_DEVICE_ARM_WAKE_FROM_SX *PFN_WDF_DEVICE_ARM_WAKE_FROM_SX;
+
+typedef
+_Function_class_(EVT_WDF_DEVICE_ARM_WAKE_FROM_SX_WITH_REASON)
+_IRQL_requires_same_
+_IRQL_requires_max_(PASSIVE_LEVEL)
+NTSTATUS
+EVT_WDF_DEVICE_ARM_WAKE_FROM_SX_WITH_REASON(
+ _In_
+ WDFDEVICE Device,
+ _In_
+ BOOLEAN DeviceWakeEnabled,
+ _In_
+ BOOLEAN ChildrenArmedForWake
+ );
+
+typedef EVT_WDF_DEVICE_ARM_WAKE_FROM_SX_WITH_REASON
*PFN_WDF_DEVICE_ARM_WAKE_FROM_SX_WITH_REASON;
+
+typedef
+_Function_class_(EVT_WDF_DEVICE_DISARM_WAKE_FROM_S0)
+_IRQL_requires_same_
+_IRQL_requires_max_(PASSIVE_LEVEL)
+VOID
+EVT_WDF_DEVICE_DISARM_WAKE_FROM_S0(
+ _In_
+ WDFDEVICE Device
+ );
+
+typedef EVT_WDF_DEVICE_DISARM_WAKE_FROM_S0 *PFN_WDF_DEVICE_DISARM_WAKE_FROM_S0;
+
+typedef
+_Function_class_(EVT_WDF_DEVICE_DISARM_WAKE_FROM_SX)
+_IRQL_requires_same_
+_IRQL_requires_max_(PASSIVE_LEVEL)
+VOID
+EVT_WDF_DEVICE_DISARM_WAKE_FROM_SX(
+ _In_
+ WDFDEVICE Device
+ );
+
+typedef EVT_WDF_DEVICE_DISARM_WAKE_FROM_SX *PFN_WDF_DEVICE_DISARM_WAKE_FROM_SX;
+
+typedef
+_Function_class_(EVT_WDF_DEVICE_WAKE_FROM_S0_TRIGGERED)
+_IRQL_requires_same_
+_IRQL_requires_max_(PASSIVE_LEVEL)
+VOID
+EVT_WDF_DEVICE_WAKE_FROM_S0_TRIGGERED(
+ _In_
+ WDFDEVICE Device
+ );
+
+typedef EVT_WDF_DEVICE_WAKE_FROM_S0_TRIGGERED *PFN_WDF_DEVICE_WAKE_FROM_S0_TRIGGERED;
+
+typedef
+_Function_class_(EVT_WDF_DEVICE_WAKE_FROM_SX_TRIGGERED)
+_IRQL_requires_same_
+_IRQL_requires_max_(PASSIVE_LEVEL)
+VOID
+EVT_WDF_DEVICE_WAKE_FROM_SX_TRIGGERED(
+ _In_
+ WDFDEVICE Device
+ );
+
+typedef EVT_WDF_DEVICE_WAKE_FROM_SX_TRIGGERED *PFN_WDF_DEVICE_WAKE_FROM_SX_TRIGGERED;
+
+typedef struct _WDF_PNPPOWER_EVENT_CALLBACKS {
+ //
+ // Size of this structure in bytes
+ //
+ ULONG Size;
+
+ PFN_WDF_DEVICE_D0_ENTRY EvtDeviceD0Entry;
+ PFN_WDF_DEVICE_D0_ENTRY_POST_INTERRUPTS_ENABLED
EvtDeviceD0EntryPostInterruptsEnabled;
+ PFN_WDF_DEVICE_D0_EXIT EvtDeviceD0Exit;
+ PFN_WDF_DEVICE_D0_EXIT_PRE_INTERRUPTS_DISABLED EvtDeviceD0ExitPreInterruptsDisabled;
+ PFN_WDF_DEVICE_PREPARE_HARDWARE EvtDevicePrepareHardware;
+ PFN_WDF_DEVICE_RELEASE_HARDWARE EvtDeviceReleaseHardware;
+ PFN_WDF_DEVICE_SELF_MANAGED_IO_CLEANUP EvtDeviceSelfManagedIoCleanup;
+ PFN_WDF_DEVICE_SELF_MANAGED_IO_FLUSH EvtDeviceSelfManagedIoFlush;
+ PFN_WDF_DEVICE_SELF_MANAGED_IO_INIT EvtDeviceSelfManagedIoInit;
+ PFN_WDF_DEVICE_SELF_MANAGED_IO_SUSPEND EvtDeviceSelfManagedIoSuspend;
+ PFN_WDF_DEVICE_SELF_MANAGED_IO_RESTART EvtDeviceSelfManagedIoRestart;
+ PFN_WDF_DEVICE_SURPRISE_REMOVAL EvtDeviceSurpriseRemoval;
+ PFN_WDF_DEVICE_QUERY_REMOVE EvtDeviceQueryRemove;
+ PFN_WDF_DEVICE_QUERY_STOP EvtDeviceQueryStop;
+ PFN_WDF_DEVICE_USAGE_NOTIFICATION EvtDeviceUsageNotification;
+ PFN_WDF_DEVICE_RELATIONS_QUERY EvtDeviceRelationsQuery;
+ PFN_WDF_DEVICE_USAGE_NOTIFICATION_EX EvtDeviceUsageNotificationEx;
+} WDF_PNPPOWER_EVENT_CALLBACKS, *PWDF_PNPPOWER_EVENT_CALLBACKS;
+
+typedef struct _WDF_POWER_POLICY_EVENT_CALLBACKS {
+ //
+ // Size of this structure in bytes
+ //
+ ULONG Size;
+
+ PFN_WDF_DEVICE_ARM_WAKE_FROM_S0 EvtDeviceArmWakeFromS0;
+ PFN_WDF_DEVICE_DISARM_WAKE_FROM_S0 EvtDeviceDisarmWakeFromS0;
+ PFN_WDF_DEVICE_WAKE_FROM_S0_TRIGGERED EvtDeviceWakeFromS0Triggered;
+
+ PFN_WDF_DEVICE_ARM_WAKE_FROM_SX EvtDeviceArmWakeFromSx;
+ PFN_WDF_DEVICE_DISARM_WAKE_FROM_SX EvtDeviceDisarmWakeFromSx;
+ PFN_WDF_DEVICE_WAKE_FROM_SX_TRIGGERED EvtDeviceWakeFromSxTriggered;
+
+ PFN_WDF_DEVICE_ARM_WAKE_FROM_SX_WITH_REASON EvtDeviceArmWakeFromSxWithReason;
+
+} WDF_POWER_POLICY_EVENT_CALLBACKS, *PWDF_POWER_POLICY_EVENT_CALLBACKS;
+
+VOID
+FORCEINLINE
+WDF_POWER_POLICY_EVENT_CALLBACKS_INIT(
+ _Out_ PWDF_POWER_POLICY_EVENT_CALLBACKS Callbacks
+ )
+{
+ RtlZeroMemory(Callbacks, sizeof(WDF_POWER_POLICY_EVENT_CALLBACKS));
+
+ Callbacks->Size = sizeof(WDF_POWER_POLICY_EVENT_CALLBACKS);
+}
+
+VOID
+FORCEINLINE
+WDF_PNPPOWER_EVENT_CALLBACKS_INIT(
+ _Out_ PWDF_PNPPOWER_EVENT_CALLBACKS Callbacks
+ )
+{
+ RtlZeroMemory(Callbacks, sizeof(WDF_PNPPOWER_EVENT_CALLBACKS));
+ Callbacks->Size = sizeof(WDF_PNPPOWER_EVENT_CALLBACKS);
+}
+
+
+ULONG
+FORCEINLINE
+WdfDevStateNormalize(
+ _In_ ULONG State
+ )
+{
+ return State & ~WdfDevStateNP;
+}
+
+
+BOOLEAN
+FORCEINLINE
+WdfDevStateIsNP(
+ _In_ ULONG State
+ )
+{
+ return (State & WdfDevStateNP) ? TRUE : FALSE;
+}
+
+typedef enum _WDF_POWER_POLICY_IDLE_TIMEOUT_TYPE {
+ DriverManagedIdleTimeout = 0,
+ SystemManagedIdleTimeout = 1,
+ SystemManagedIdleTimeoutWithHint = 2
+} WDF_POWER_POLICY_IDLE_TIMEOUT_TYPE, *PWDF_POWER_POLICY_IDLE_TIMEOUT_TYPE;
+
+typedef struct _WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS {
+ //
+ // Size of this structure in bytes
+ //
+ ULONG Size;
+
+ //
+ // Indicates whether the device can wake itself up while the machine is in
+ // S0.
+ //
+ WDF_POWER_POLICY_S0_IDLE_CAPABILITIES IdleCaps;
+
+ //
+ // The low power state in which the device will be placed when it is idled
+ // out while the machine is in S0.
+ //
+ DEVICE_POWER_STATE DxState;
+
+ //
+ // Amount of time the device must be idle before idling out. Timeout is in
+ // milliseconds.
+ //
+ ULONG IdleTimeout;
+
+ //
+ // Inidcates whether a user can control the idle policy of the device.
+ // By default, a user is allowed to change the policy.
+ //
+ WDF_POWER_POLICY_S0_IDLE_USER_CONTROL UserControlOfIdleSettings;
+
+ //
+ // If WdfTrue, idling out while the machine is in S0 will be enabled.
+ //
+ // If WdfFalse, idling out will be disabled.
+ //
+ // If WdfUseDefault, the idling out will be enabled. If
+ // UserControlOfIdleSettings is set to IdleAllowUserControl, the user's
+ // settings will override the default.
+ //
+ WDF_TRI_STATE Enabled;
+
+ //
+ // This field is applicable only when IdleCaps == IdleCannotWakeFromS0
+ // If WdfTrue,device is powered up on System Wake even if device is idle
+ // If WdfFalse, device is not powered up on system wake if it is idle
+ // If WdfUseDefault, the behavior is same as WdfFalse
+ //
+ WDF_TRI_STATE PowerUpIdleDeviceOnSystemWake;
+
+ //
+ // This field determines how the IdleTimeout field is used.
+ //
+ // If the value is DriverManagedIdleTimeout, then the idle timeout value
+ // is determined by the IdleTimeout field of this structure.
+ //
+ // If the value is SystemManagedIdleTimeout, then the timeout value is
+ // determined by the power framework (PoFx) on operating systems where
+ // the PoFx is available (i.e. Windows 8 and later). The IdleTimeout field
+ // is ignored on these operating systems. On operating systems where the
+ // PoFx is not available, the behavior is same as DriverManagedIdleTimeout.
+ //
+ // If the value is SystemManagedIdleTimeoutWithHint, then the timeout value
+ // is determined by the power framework (PoFx) on operating systems where
+ // the PoFx is available (i.e. Windows 8 and later). In addition, the value
+ // specified in the IdleTimeout field is provided as a hint to the PoFx in
+ // determining when the device should be allowed to enter a low-power state.
+ // Since it is only a hint, the actual duration after which the PoFx allows
+ // the device to enter a low-power state might be greater than or less than
+ // the IdleTimeout value. On operating systems where the PoFx is not
+ // available, the behavior is same as DriverManagedIdleTimeout.
+ //
+ WDF_POWER_POLICY_IDLE_TIMEOUT_TYPE IdleTimeoutType;
+
+ //
+ // This field forces the device to avoid idling in the D3cold power state.
+ // WDF will ensure, with help from the bus drivers, that the device will
+ // idle in a D-state that can successfully generate a wake signal, if
+ // necessary. If the client specifies that DxState == PowerDeviceD3, this
+ // setting allows the client to distinguish betwen D3hot and D3cold. If
+ // the client sets DxState == PowerDeviceMaximum, then WDF will pick the
+ // deepest idle state identified by the bus driver. If that deepest state
+ // is D3cold, this field allows the client to override that and choose
+ // D3hot.
+ //
+ // If WdfTrue, device will not use D3cold in S0.
+ // If WdfFalse, device will use D3cold in S0 if the ACPI firmware indicates
+ // that the device can enter that state, if DxState above does not
+ // specify some other D-state and, if the device is armed for
+ // wake, that it can generate its wake signal from D3cold.
+ // If WdfUseDefault, this setting will be derived from the driver's INF,
+ // specifically the presence or absence of the following two lines in
+ // the DDInstall.HW section:
+ // Include=machine.inf
+ // Needs=PciD3ColdSupported
+ //
+ WDF_TRI_STATE ExcludeD3Cold;
+
+} WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS, *PWDF_DEVICE_POWER_POLICY_IDLE_SETTINGS;
+
+VOID
+FORCEINLINE
+WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS_INIT(
+ _Out_ PWDF_DEVICE_POWER_POLICY_IDLE_SETTINGS Settings,
+ _In_ WDF_POWER_POLICY_S0_IDLE_CAPABILITIES IdleCaps
+ )
+{
+ RtlZeroMemory(Settings, sizeof(WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS));
+
+ Settings->Size = sizeof(WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS);
+
+ Settings->IdleTimeout = IdleTimeoutDefaultValue;
+ Settings->UserControlOfIdleSettings = IdleAllowUserControl;
+ Settings->Enabled = WdfUseDefault;
+ Settings->PowerUpIdleDeviceOnSystemWake = WdfUseDefault;
+ Settings->IdleTimeoutType = DriverManagedIdleTimeout;
+ Settings->ExcludeD3Cold = WdfUseDefault;
+
+ Settings->IdleCaps = IdleCaps;
+
+ switch (IdleCaps) {
+ case IdleUsbSelectiveSuspend:
+ case IdleCanWakeFromS0:
+ Settings->DxState = PowerDeviceMaximum;
+ break;
+
+ case IdleCannotWakeFromS0:
+ Settings->DxState = PowerDeviceD3;
+ break;
+ }
+}
+
+typedef struct _WDF_DEVICE_POWER_POLICY_WAKE_SETTINGS {
+ //
+ // Size of this structure in bytes
+ //
+ ULONG Size;
+
+ //
+ // The low power state in which the device will be placed when it is armed
+ // for wake from Sx.
+ //
+ DEVICE_POWER_STATE DxState;
+
+ //
+ // Inidcates whether a user can control the idle policy of the device.
+ // By default, a user is allowed to change the policy.
+ //
+ WDF_POWER_POLICY_SX_WAKE_USER_CONTROL UserControlOfWakeSettings;
+
+ //
+ // If WdfTrue, arming the device for wake while the machine is in Sx is
+ // enabled.
+ //
+ // If WdfFalse, arming the device for wake while the machine is in Sx is
+ // disabled.
+ //
+ // If WdfUseDefault, arming will be enabled. If UserControlOfWakeSettings
+ // is set to WakeAllowUserControl, the user's settings will override the
+ // default.
+ //
+ WDF_TRI_STATE Enabled;
+
+ //
+ // If set to TRUE, arming the parent device can depend on whether there
+ // is atleast one child device armed for wake.
+ //
+ // If set to FALSE, arming of the parent device will be independent of
+ // whether any of the child devices are armed for wake.
+ //
+ BOOLEAN ArmForWakeIfChildrenAreArmedForWake;
+
+ //
+ // Indicates that whenever the parent device completes the wake irp
+ // successfully, the status needs to be also propagated to the child
+ // devices. This helps in tracking which devices were responsible for
+ // waking the system.
+ //
+ BOOLEAN IndicateChildWakeOnParentWake;
+
+} WDF_DEVICE_POWER_POLICY_WAKE_SETTINGS, *PWDF_DEVICE_POWER_POLICY_WAKE_SETTINGS;
+
+VOID
+FORCEINLINE
+WDF_DEVICE_POWER_POLICY_WAKE_SETTINGS_INIT(
+ _Out_ PWDF_DEVICE_POWER_POLICY_WAKE_SETTINGS Settings
+ )
+{
+ RtlZeroMemory(Settings, sizeof(WDF_DEVICE_POWER_POLICY_WAKE_SETTINGS));
+
+ Settings->Size = sizeof(WDF_DEVICE_POWER_POLICY_WAKE_SETTINGS);
+
+ Settings->Enabled = WdfUseDefault;
+ Settings->DxState = PowerDeviceMaximum;
+ Settings->UserControlOfWakeSettings = WakeAllowUserControl;
+}
+
+typedef struct _WDF_DEVICE_STATE {
+ //
+ // Size of this structure in bytes
+ //
+ ULONG Size;
+
+ //
+ // If set to WdfTrue, the device will be disabled
+ //
+ WDF_TRI_STATE Disabled;
+
+ //
+ // If set to WdfTrue, the device will not be displayed in device manager.
+ // Once hidden, the device cannot be unhidden.
+ //
+ WDF_TRI_STATE DontDisplayInUI;
+
+ //
+ // If set to WdfTrue, the device is reporting itself as failed. If set
+ // in conjuction with ResourcesChanged to WdfTrue, the device will receive
+ // a PnP stop and then a new PnP start device.
+ //
+ WDF_TRI_STATE Failed;
+
+ //
+ // If set to WdfTrue, the device cannot be subsequently disabled.
+ //
+ WDF_TRI_STATE NotDisableable;
+
+
+ //
+ // If set to WdfTrue, the device stack will be torn down.
+ //
+ WDF_TRI_STATE Removed;
+
+ //
+ // If set to WdfTrue, the device will be sent another PnP start. If the
+ // Failed field is set to WdfTrue as well, a PnP stop will be sent before
+ // the start.
+ //
+ WDF_TRI_STATE ResourcesChanged;
+
+} WDF_DEVICE_STATE, *PWDF_DEVICE_STATE;
+
+VOID
+FORCEINLINE
+WDF_DEVICE_STATE_INIT(
+ _Out_ PWDF_DEVICE_STATE PnpDeviceState
+ )
+{
+ RtlZeroMemory(PnpDeviceState, sizeof(WDF_DEVICE_STATE));
+
+ PnpDeviceState->Size = sizeof(WDF_DEVICE_STATE);
+
+ //
+ // Initializes all of the fields to the WdfUseDefault enum value
+ //
+ PnpDeviceState->Disabled = WdfUseDefault;
+ PnpDeviceState->DontDisplayInUI = WdfUseDefault;
+ PnpDeviceState->Failed = WdfUseDefault;
+ PnpDeviceState->NotDisableable = WdfUseDefault;
+ PnpDeviceState->Removed = WdfUseDefault;
+ PnpDeviceState->ResourcesChanged = WdfUseDefault;
+}
+
+typedef struct _WDF_DEVICE_PNP_CAPABILITIES {
+ //
+ // Size of the structure in bytes
+ //
+ ULONG Size;
+
+ //
+ // NOTE: To mark a PDO as raw, call WdfPdoInitAssignRawDevice
+ //
+
+ WDF_TRI_STATE LockSupported;
+ WDF_TRI_STATE EjectSupported;
+ WDF_TRI_STATE Removable;
+ WDF_TRI_STATE DockDevice;
+ WDF_TRI_STATE UniqueID;
+ WDF_TRI_STATE SilentInstall;
+ WDF_TRI_STATE SurpriseRemovalOK;
+ WDF_TRI_STATE HardwareDisabled;
+ WDF_TRI_STATE NoDisplayInUI;
+
+ //
+ // Default values of -1 indicate not to set this value
+ //
+ ULONG Address;
+ ULONG UINumber;
+
+} WDF_DEVICE_PNP_CAPABILITIES, *PWDF_DEVICE_PNP_CAPABILITIES;
+
+VOID
+FORCEINLINE
+WDF_DEVICE_PNP_CAPABILITIES_INIT(
+ _Out_ PWDF_DEVICE_PNP_CAPABILITIES Caps
+ )
+{
+ RtlZeroMemory(Caps, sizeof(WDF_DEVICE_PNP_CAPABILITIES));
+
+ Caps->Size = sizeof(WDF_DEVICE_PNP_CAPABILITIES);
+
+ Caps->LockSupported = WdfUseDefault;
+ Caps->EjectSupported = WdfUseDefault;
+ Caps->Removable = WdfUseDefault;
+ Caps->DockDevice = WdfUseDefault;
+ Caps->UniqueID = WdfUseDefault;
+ Caps->SilentInstall = WdfUseDefault;
+ Caps->SurpriseRemovalOK = WdfUseDefault;
+ Caps->HardwareDisabled = WdfUseDefault;
+ Caps->NoDisplayInUI = WdfUseDefault;
+
+ Caps->Address = (ULONG) -1;
+ Caps->UINumber = (ULONG) -1;
+}
+
+typedef struct _WDF_DEVICE_POWER_CAPABILITIES {
+ //
+ // Size of the structure in bytes
+ //
+ ULONG Size;
+
+ WDF_TRI_STATE DeviceD1;
+ WDF_TRI_STATE DeviceD2;
+
+ WDF_TRI_STATE WakeFromD0;
+ WDF_TRI_STATE WakeFromD1;
+ WDF_TRI_STATE WakeFromD2;
+ WDF_TRI_STATE WakeFromD3;
+
+ //
+ // Default value PowerDeviceMaximum indicates not to set this value
+ //
+ DEVICE_POWER_STATE DeviceState[PowerSystemMaximum];
+
+ //
+ // Default value PowerDeviceMaximum, PowerSystemMaximum indicates not to
+ // set this value.
+ //
+ DEVICE_POWER_STATE DeviceWake;
+ SYSTEM_POWER_STATE SystemWake;
+
+ //
+ // Default values of -1 indicate not to set this value
+ //
+ ULONG D1Latency;
+ ULONG D2Latency;
+ ULONG D3Latency;
+
+ //
+ // Ideal Dx state for the device to be put into when the machine moves into
+ // Sx and the device is not armed for wake. By default, the default will be
+ // placed into D3. If IdealDxStateForSx is lighter then
+ // DeviceState[Sx], then DeviceState[Sx] will be used as the Dx state.
+ //
+ DEVICE_POWER_STATE IdealDxStateForSx;
+
+} WDF_DEVICE_POWER_CAPABILITIES, *PWDF_DEVICE_POWER_CAPABILITIES;
+
+VOID
+FORCEINLINE
+WDF_DEVICE_POWER_CAPABILITIES_INIT(
+ _Out_ PWDF_DEVICE_POWER_CAPABILITIES Caps
+ )
+{
+ ULONG i;
+
+ RtlZeroMemory(Caps, sizeof(WDF_DEVICE_POWER_CAPABILITIES));
+
+ Caps->Size = sizeof(WDF_DEVICE_POWER_CAPABILITIES);
+
+ Caps->DeviceD1 = WdfUseDefault;
+ Caps->DeviceD2 = WdfUseDefault;
+
+ Caps->WakeFromD0 = WdfUseDefault;
+ Caps->WakeFromD1 = WdfUseDefault;
+ Caps->WakeFromD2 = WdfUseDefault;
+ Caps->WakeFromD3 = WdfUseDefault;
+
+ for (i = 0; i < sizeof(Caps->DeviceState)/sizeof(Caps->DeviceState[1]); i++)
{
+ Caps->DeviceState[i] = PowerDeviceMaximum;
+ }
+
+ Caps->DeviceWake = PowerDeviceMaximum;
+ Caps->SystemWake = PowerSystemMaximum;
+
+ Caps->D1Latency = (ULONG) -1;
+ Caps->D2Latency = (ULONG) -1;
+ Caps->D3Latency = (ULONG) -1;
+
+ Caps->IdealDxStateForSx = PowerDeviceMaximum;
+}
+
+typedef enum _WDF_REMOVE_LOCK_OPTIONS_FLAGS {
+ WDF_REMOVE_LOCK_OPTION_ACQUIRE_FOR_IO = 0x00000001
+} WDF_REMOVE_LOCK_OPTIONS_FLAGS;
+
+typedef struct _WDF_REMOVE_LOCK_OPTIONS {
+ //
+ // Size of the structure in bytes
+ //
+ ULONG Size;
+
+ //
+ // Bit field combination of values from the WDF_REMOVE_LOCK_OPTIONS_FLAGS
+ // enumeration
+ //
+ ULONG Flags;
+} WDF_REMOVE_LOCK_OPTIONS, *PWDF_REMOVE_LOCK_OPTIONS;
+
+
+//
+// Default remove lock options initialization macro
+//
+VOID
+FORCEINLINE
+WDF_REMOVE_LOCK_OPTIONS_INIT(
+ _Out_ PWDF_REMOVE_LOCK_OPTIONS RemoveLockOptions,
+ _In_ ULONG Flags
+ )
+{
+ RtlZeroMemory(RemoveLockOptions, sizeof(WDF_REMOVE_LOCK_OPTIONS));
+
+ RemoveLockOptions->Size = sizeof(WDF_REMOVE_LOCK_OPTIONS);
+ RemoveLockOptions->Flags = Flags;
+}
+
+typedef
+_Function_class_(EVT_WDFDEVICE_WDM_IRP_PREPROCESS)
+_IRQL_requires_same_
+_IRQL_requires_max_(DISPATCH_LEVEL)
+NTSTATUS
+EVT_WDFDEVICE_WDM_IRP_PREPROCESS(
+ _In_
+ WDFDEVICE Device,
+ _Inout_
+ PIRP Irp
+ );
+
+typedef EVT_WDFDEVICE_WDM_IRP_PREPROCESS *PFN_WDFDEVICE_WDM_IRP_PREPROCESS;
+
+typedef
+_Function_class_(EVT_WDFDEVICE_WDM_IRP_DISPATCH)
+_IRQL_requires_same_
+_IRQL_requires_max_(DISPATCH_LEVEL)
+NTSTATUS
+EVT_WDFDEVICE_WDM_IRP_DISPATCH(
+ _In_
+ WDFDEVICE Device,
+ _In_
+ UCHAR MajorFunction,
+ _In_
+ UCHAR MinorFunction,
+ _In_
+ ULONG Code,
+ _In_
+ WDFCONTEXT DriverContext,
+ _Inout_
+ PIRP Irp,
+ _In_
+ WDFCONTEXT DispatchContext
+ );
+
+typedef EVT_WDFDEVICE_WDM_IRP_DISPATCH *PFN_WDFDEVICE_WDM_IRP_DISPATCH;
+
+//
+// This is called to pre-process a request using METHOD_NEITHER
+//
+typedef
+_Function_class_(EVT_WDF_IO_IN_CALLER_CONTEXT)
+_IRQL_requires_same_
+_IRQL_requires_max_(DISPATCH_LEVEL)
+VOID
+EVT_WDF_IO_IN_CALLER_CONTEXT(
+ _In_
+ WDFDEVICE Device,
+ _In_
+ WDFREQUEST Request
+ );
+
+typedef EVT_WDF_IO_IN_CALLER_CONTEXT *PFN_WDF_IO_IN_CALLER_CONTEXT;
+
+typedef
+_Function_class_(EVT_WDFDEVICE_WDM_POST_PO_FX_REGISTER_DEVICE)
+_IRQL_requires_same_
+_IRQL_requires_max_(PASSIVE_LEVEL)
+NTSTATUS
+EVT_WDFDEVICE_WDM_POST_PO_FX_REGISTER_DEVICE(
+ _In_
+ WDFDEVICE Device,
+ _In_
+ POHANDLE PoHandle
+ );
+
+typedef EVT_WDFDEVICE_WDM_POST_PO_FX_REGISTER_DEVICE
*PFN_WDFDEVICE_WDM_POST_PO_FX_REGISTER_DEVICE;
+
+typedef
+_Function_class_(EVT_WDFDEVICE_WDM_PRE_PO_FX_UNREGISTER_DEVICE)
+_IRQL_requires_same_
+_IRQL_requires_max_(PASSIVE_LEVEL)
+VOID
+EVT_WDFDEVICE_WDM_PRE_PO_FX_UNREGISTER_DEVICE(
+ _In_
+ WDFDEVICE Device,
+ _In_
+ POHANDLE PoHandle
+ );
+
+typedef EVT_WDFDEVICE_WDM_PRE_PO_FX_UNREGISTER_DEVICE
*PFN_WDFDEVICE_WDM_PRE_PO_FX_UNREGISTER_DEVICE;
+
+typedef struct _WDF_POWER_FRAMEWORK_SETTINGS {
+ //
+ // Size of the structure, in bytes.
+ //
+ ULONG Size;
+
+ //
+ // Client driver's callback function that is invoked after KMDF has
+ // registered with the power framework. This field can be NULL if the
+ // client driver does not wish to specify this callback.
+ //
+ PFN_WDFDEVICE_WDM_POST_PO_FX_REGISTER_DEVICE EvtDeviceWdmPostPoFxRegisterDevice;
+
+ //
+ // Client driver's callback function that is invoked before KMDF
+ // unregisters with the power framework. This field can be NULL if the
+ // client driver does not wish to specify this callback.
+ //
+ PFN_WDFDEVICE_WDM_PRE_PO_FX_UNREGISTER_DEVICE EvtDeviceWdmPrePoFxUnregisterDevice;
+
+ //
+ // Pointer to a PO_FX_COMPONENT structure that describes the only component
+ // in the single-component device. This field can be NULL if the client
+ // driver wants KMDF to use the default specification for this component
+ // (i.e. support for F0 only).
+ //
+ PPO_FX_COMPONENT Component;
+
+ //
+ // Client driver's PO_FX_COMPONENT_ACTIVE_CONDITION_CALLBACK callback
+ // function. This field can be NULL if the client driver does not wish to
+ // specify this callback.
+ //
+ PPO_FX_COMPONENT_ACTIVE_CONDITION_CALLBACK ComponentActiveConditionCallback;
+
+ //
+ // Client driver's PO_FX_COMPONENT_IDLE_CONDITION_CALLBACK callback
+ // function. This field can be NULL if the client driver does not wish to
+ // specify this callback.
+ //
+ PPO_FX_COMPONENT_IDLE_CONDITION_CALLBACK ComponentIdleConditionCallback;
+
+ //
+ // Client driver's PO_FX_COMPONENT_IDLE_STATE_CALLBACK callback function.
+ // This field can be NULL if the client driver does not wish to specify
+ // this callback.
+ //
+ PPO_FX_COMPONENT_IDLE_STATE_CALLBACK ComponentIdleStateCallback;
+
+ //
+ // Client driver's PO_FX_POWER_CONTROL_CALLBACK callback function. This
+ // field can be NULL if the client driver does not wish to specify this
+ // callback.
+ //
+ PPO_FX_POWER_CONTROL_CALLBACK PowerControlCallback;
+
+ //
+ // Context value that is passed in to the ComponentIdleStateCallback and
+ // PowerControlCallback callback functions.
+ //
+ PVOID PoFxDeviceContext;
+} WDF_POWER_FRAMEWORK_SETTINGS, *PWDF_POWER_FRAMEWORK_SETTINGS;
+
+VOID
+FORCEINLINE
+WDF_POWER_FRAMEWORK_SETTINGS_INIT(
+ _Out_ PWDF_POWER_FRAMEWORK_SETTINGS PowerFrameworkSettings
+ )
+{
+ RtlZeroMemory(PowerFrameworkSettings,
+ sizeof(WDF_POWER_FRAMEWORK_SETTINGS));
+ PowerFrameworkSettings->Size = sizeof(WDF_POWER_FRAMEWORK_SETTINGS);
+}
+
+
+typedef struct _WDF_IO_TYPE_CONFIG {
+ //
+ // Size of this structure in bytes
+ //
+ ULONG Size;
+
+ //
+ // <KMDF_DOC/>
+ // Identifies the method that the driver will use to access data buffers
+ // that it receives for read and write requests.
+ //
+ // <UMDF_DOC/>
+ // Identifies the method that the driver will "prefer" to use to access
data
+ // buffers that it receives for read and write requests. Note that UMDF
+ // driver provides just a preference, and not a guarantee.Therefore,
+ // even if a driver specified direct access method, UMDF might use the
+ // buffered access method for one or more of the device's requests to
+ // improve performance. For example, UMDF uses buffered access for small
+ // buffers, if it can copy the data to the driver's buffer faster than it
+ // can map the buffers for direct access.
+ //
+ WDF_DEVICE_IO_TYPE ReadWriteIoType;
+
+ //
+ // <UMDF_ONLY/>
+ // Identifies the method that the driver will "prefer" to use to access
data
+ // buffers that it receives for IOCTL requests. Note that UMDF
+ // driver provides just a preference, and not a guarantee. Therefore,
+ // even if a driver specified direct access method, UMDF might use the
+ // buffered access method for one or more of the device's requests to
+ // improve performance. For example, UMDF uses buffered access for small
+ // buffers, if it can copy the data to the driver's buffer faster than it
+ // can map the buffers for direct access.
+ //
+ WDF_DEVICE_IO_TYPE DeviceControlIoType;
+
+ //
+ // <UMDF_ONLY/>
+ // Optional, Provides the smallest buffer size (in bytes) for which
+ // UMDF will use direct access for the buffers. For example, set
+ // DirectTransferThreshold to "12288" to indicate that UMDF should use
buffered
+ // access for all buffers that are smaller than 12 kilobytes, and direct
+ // access for buffers equal to or greater than that. Typically, you
+ // do not need to provide this value because UMDF uses a value that provides
+ // the best performance. Note that there are other requirements that must be
+ // met in order to get direct access of buffers. See Docs for details.
+ //
+ ULONG DirectTransferThreshold;
+
+} WDF_IO_TYPE_CONFIG, *PWDF_IO_TYPE_CONFIG;
+
+VOID
+FORCEINLINE
+WDF_IO_TYPE_CONFIG_INIT(
+ _Out_ PWDF_IO_TYPE_CONFIG IoTypeConfig
+ )
+{
+ RtlZeroMemory(IoTypeConfig, sizeof(WDF_IO_TYPE_CONFIG));
+ IoTypeConfig->Size = sizeof(WDF_IO_TYPE_CONFIG);
+ IoTypeConfig->ReadWriteIoType = WdfDeviceIoBuffered;
+ IoTypeConfig->DeviceControlIoType = WdfDeviceIoBuffered;
+}
+
+
+
+
+
+typedef struct _WDF_DEVICE_PROPERTY_DATA {
+ //
+ // Size of this structure
+ //
+ _In_ ULONG Size;
+
+ //
+ // A pointer to a DEVPROPKEY structure that specifies the device
+ // property key.
+ //
+ _In_ const DEVPROPKEY * PropertyKey;
+
+ //
+ // A locale identifier. Set this parameter either to a language-specific
+ // LCID value or to LOCALE_NEUTRAL. The LOCALE_NEUTRAL LCID specifies
+ // that the property is language-neutral (that is, not specific to any
+ // language). Do not set this parameter to LOCALE_SYSTEM_DEFAULT or
+ // LOCALE_USER_DEFAULT. For more information about language-specific
+ // LCID values, see LCID Structure.
+ //
+ _In_ LCID Lcid;
+
+ //
+ // Set this parameter to PLUGPLAY_PROPERTY_PERSISTENT if the property
+ // value set by this routine should persist across computer restarts.
+ // Otherwise, set Flags to zero. Ignored for Query DDIs.
+ //
+ _In_ ULONG Flags;
+
+} WDF_DEVICE_PROPERTY_DATA, *PWDF_DEVICE_PROPERTY_DATA;
+
+FORCEINLINE
+VOID
+WDF_DEVICE_PROPERTY_DATA_INIT (
+ _Out_ PWDF_DEVICE_PROPERTY_DATA PropertyData,
+ _In_ const DEVPROPKEY* PropertyKey
+ )
+{
+ RtlZeroMemory(PropertyData, sizeof(* PropertyData));
+
+ PropertyData->Size = sizeof(*PropertyData);
+ PropertyData->PropertyKey = PropertyKey;
+}
+
+//
+// VOID
+// WdfDeviceStopIdle(
+// _In_ WDFDEVICE Device,
+// _In_ BOOLEAN WaitForD0
+// );
+//
+// VOID
+// WdfDeviceStopIdleWithTag(
+// _In_ WDFDEVICE Device,
+// _In_ BOOLEAN WaitForD0,
+// _In_ PVOID Tag
+// );
+//
+// VOID
+// WdfDeviceResumeIdle(
+// _In_ WDFDEVICE Device
+// );
+//
+// VOID
+// WdfDeviceResumeIdleWithTag(
+// _In_ WDFDEVICE Device
+// _In_ PVOID Tag
+// );
+//
+#define WdfDeviceStopIdle(Device, WaitForD0) \
+ WdfDeviceStopIdleWithTag(Device, WaitForD0, NULL)
+
+#define WdfDeviceStopIdleWithTag(Device, WaitForD0, Tag) \
+ WdfDeviceStopIdleActual(Device, WaitForD0, Tag, __LINE__, __FILE__)
+
+#define WdfDeviceResumeIdle(Device) \
+ WdfDeviceResumeIdleWithTag(Device, NULL)
+
+#define WdfDeviceResumeIdleWithTag(Device, Tag) \
+ WdfDeviceResumeIdleActual(Device, Tag, __LINE__, __FILE__)
+
+
+
+//
+// WDF Function: WdfDeviceGetDeviceState
+//
+typedef
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFAPI
+VOID
+(*PFN_WDFDEVICEGETDEVICESTATE)(
+ _In_
+ PWDF_DRIVER_GLOBALS DriverGlobals,
+ _In_
+ WDFDEVICE Device,
+ _Out_
+ PWDF_DEVICE_STATE DeviceState
+ );
+
+_IRQL_requires_max_(DISPATCH_LEVEL)
+VOID
+FORCEINLINE
+WdfDeviceGetDeviceState(
+ _In_
+ WDFDEVICE Device,
+ _Out_
+ PWDF_DEVICE_STATE DeviceState
+ )
+{
+ ((PFN_WDFDEVICEGETDEVICESTATE)
WdfFunctions[WdfDeviceGetDeviceStateTableIndex])(WdfDriverGlobals, Device, DeviceState);
+}
+
+//
+// WDF Function: WdfDeviceSetDeviceState
+//
+typedef
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFAPI
+VOID
+(*PFN_WDFDEVICESETDEVICESTATE)(
+ _In_
+ PWDF_DRIVER_GLOBALS DriverGlobals,
+ _In_
+ WDFDEVICE Device,
+ _In_
+ PWDF_DEVICE_STATE DeviceState
+ );
+
+_IRQL_requires_max_(DISPATCH_LEVEL)
+VOID
+FORCEINLINE
+WdfDeviceSetDeviceState(
+ _In_
+ WDFDEVICE Device,
+ _In_
+ PWDF_DEVICE_STATE DeviceState
+ )
+{
+ ((PFN_WDFDEVICESETDEVICESTATE)
WdfFunctions[WdfDeviceSetDeviceStateTableIndex])(WdfDriverGlobals, Device, DeviceState);
+}
+
+//
+// WDF Function: WdfWdmDeviceGetWdfDeviceHandle
+//
+typedef
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFAPI
+WDFDEVICE
+(*PFN_WDFWDMDEVICEGETWDFDEVICEHANDLE)(
+ _In_
+ PWDF_DRIVER_GLOBALS DriverGlobals,
+ _In_
+ PDEVICE_OBJECT DeviceObject
+ );
+
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFDEVICE
+FORCEINLINE
+WdfWdmDeviceGetWdfDeviceHandle(
+ _In_
+ PDEVICE_OBJECT DeviceObject
+ )
+{
+ return ((PFN_WDFWDMDEVICEGETWDFDEVICEHANDLE)
WdfFunctions[WdfWdmDeviceGetWdfDeviceHandleTableIndex])(WdfDriverGlobals, DeviceObject);
+}
+
+//
+// WDF Function: WdfDeviceWdmGetDeviceObject
+//
+typedef
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFAPI
+PDEVICE_OBJECT
+(*PFN_WDFDEVICEWDMGETDEVICEOBJECT)(
+ _In_
+ PWDF_DRIVER_GLOBALS DriverGlobals,
+ _In_
+ WDFDEVICE Device
+ );
+
+_IRQL_requires_max_(DISPATCH_LEVEL)
+PDEVICE_OBJECT
+FORCEINLINE
+WdfDeviceWdmGetDeviceObject(
+ _In_
+ WDFDEVICE Device
+ )
+{
+ return ((PFN_WDFDEVICEWDMGETDEVICEOBJECT)
WdfFunctions[WdfDeviceWdmGetDeviceObjectTableIndex])(WdfDriverGlobals, Device);
+}
+
+//
+// WDF Function: WdfDeviceWdmGetAttachedDevice
+//
+typedef
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFAPI
+PDEVICE_OBJECT
+(*PFN_WDFDEVICEWDMGETATTACHEDDEVICE)(
+ _In_
+ PWDF_DRIVER_GLOBALS DriverGlobals,
+ _In_
+ WDFDEVICE Device
+ );
+
+_IRQL_requires_max_(DISPATCH_LEVEL)
+PDEVICE_OBJECT
+FORCEINLINE
+WdfDeviceWdmGetAttachedDevice(
+ _In_
+ WDFDEVICE Device
+ )
+{
+ return ((PFN_WDFDEVICEWDMGETATTACHEDDEVICE)
WdfFunctions[WdfDeviceWdmGetAttachedDeviceTableIndex])(WdfDriverGlobals, Device);
+}
+
+//
+// WDF Function: WdfDeviceWdmGetPhysicalDevice
+//
+typedef
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFAPI
+PDEVICE_OBJECT
+(*PFN_WDFDEVICEWDMGETPHYSICALDEVICE)(
+ _In_
+ PWDF_DRIVER_GLOBALS DriverGlobals,
+ _In_
+ WDFDEVICE Device
+ );
+
+_IRQL_requires_max_(DISPATCH_LEVEL)
+PDEVICE_OBJECT
+FORCEINLINE
+WdfDeviceWdmGetPhysicalDevice(
+ _In_
+ WDFDEVICE Device
+ )
+{
+ return ((PFN_WDFDEVICEWDMGETPHYSICALDEVICE)
WdfFunctions[WdfDeviceWdmGetPhysicalDeviceTableIndex])(WdfDriverGlobals, Device);
+}
+
+//
+// WDF Function: WdfDeviceWdmDispatchPreprocessedIrp
+//
+typedef
+_Must_inspect_result_
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFAPI
+NTSTATUS
+(*PFN_WDFDEVICEWDMDISPATCHPREPROCESSEDIRP)(
+ _In_
+ PWDF_DRIVER_GLOBALS DriverGlobals,
+ _In_
+ WDFDEVICE Device,
+ _In_
+ PIRP Irp
+ );
+
+_Must_inspect_result_
+_IRQL_requires_max_(DISPATCH_LEVEL)
+NTSTATUS
+FORCEINLINE
+WdfDeviceWdmDispatchPreprocessedIrp(
+ _In_
+ WDFDEVICE Device,
+ _In_
+ PIRP Irp
+ )
+{
+ return ((PFN_WDFDEVICEWDMDISPATCHPREPROCESSEDIRP)
WdfFunctions[WdfDeviceWdmDispatchPreprocessedIrpTableIndex])(WdfDriverGlobals, Device,
Irp);
+}
+
+//
+// WDF Function: WdfDeviceWdmDispatchIrp
+//
+typedef
+_Must_inspect_result_
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFAPI
+NTSTATUS
+(*PFN_WDFDEVICEWDMDISPATCHIRP)(
+ _In_
+ PWDF_DRIVER_GLOBALS DriverGlobals,
+ _In_
+ WDFDEVICE Device,
+ _In_
+ PIRP Irp,
+ _In_
+ WDFCONTEXT DispatchContext
+ );
+
+_Must_inspect_result_
+_IRQL_requires_max_(DISPATCH_LEVEL)
+NTSTATUS
+FORCEINLINE
+WdfDeviceWdmDispatchIrp(
+ _In_
+ WDFDEVICE Device,
+ _In_
+ PIRP Irp,
+ _In_
+ WDFCONTEXT DispatchContext
+ )
+{
+ return ((PFN_WDFDEVICEWDMDISPATCHIRP)
WdfFunctions[WdfDeviceWdmDispatchIrpTableIndex])(WdfDriverGlobals, Device, Irp,
DispatchContext);
+}
+
+//
+// WDF Function: WdfDeviceWdmDispatchIrpToIoQueue
+//
+typedef
+_Must_inspect_result_
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFAPI
+NTSTATUS
+(*PFN_WDFDEVICEWDMDISPATCHIRPTOIOQUEUE)(
+ _In_
+ PWDF_DRIVER_GLOBALS DriverGlobals,
+ _In_
+ WDFDEVICE Device,
+ _In_
+ PIRP Irp,
+ _In_
+ WDFQUEUE Queue,
+ _In_
+ ULONG Flags
+ );
+
+_Must_inspect_result_
+_IRQL_requires_max_(DISPATCH_LEVEL)
+NTSTATUS
+FORCEINLINE
+WdfDeviceWdmDispatchIrpToIoQueue(
+ _In_
+ WDFDEVICE Device,
+ _In_
+ PIRP Irp,
+ _In_
+ WDFQUEUE Queue,
+ _In_
+ ULONG Flags
+ )
+{
+ return ((PFN_WDFDEVICEWDMDISPATCHIRPTOIOQUEUE)
WdfFunctions[WdfDeviceWdmDispatchIrpToIoQueueTableIndex])(WdfDriverGlobals, Device, Irp,
Queue, Flags);
+}
+
+//
+// WDF Function: WdfDeviceAddDependentUsageDeviceObject
+//
+typedef
+_Must_inspect_result_
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFAPI
+NTSTATUS
+(*PFN_WDFDEVICEADDDEPENDENTUSAGEDEVICEOBJECT)(
+ _In_
+ PWDF_DRIVER_GLOBALS DriverGlobals,
+ _In_
+ WDFDEVICE Device,
+ _In_
+ PDEVICE_OBJECT DependentDevice
+ );
+
+_Must_inspect_result_
+_IRQL_requires_max_(DISPATCH_LEVEL)
+NTSTATUS
+FORCEINLINE
+WdfDeviceAddDependentUsageDeviceObject(
+ _In_
+ WDFDEVICE Device,
+ _In_
+ PDEVICE_OBJECT DependentDevice
+ )
+{
+ return ((PFN_WDFDEVICEADDDEPENDENTUSAGEDEVICEOBJECT)
WdfFunctions[WdfDeviceAddDependentUsageDeviceObjectTableIndex])(WdfDriverGlobals, Device,
DependentDevice);
+}
+
+//
+// WDF Function: WdfDeviceRemoveDependentUsageDeviceObject
+//
+typedef
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFAPI
+VOID
+(*PFN_WDFDEVICEREMOVEDEPENDENTUSAGEDEVICEOBJECT)(
+ _In_
+ PWDF_DRIVER_GLOBALS DriverGlobals,
+ _In_
+ WDFDEVICE Device,
+ _In_
+ PDEVICE_OBJECT DependentDevice
+ );
+
+_IRQL_requires_max_(DISPATCH_LEVEL)
+VOID
+FORCEINLINE
+WdfDeviceRemoveDependentUsageDeviceObject(
+ _In_
+ WDFDEVICE Device,
+ _In_
+ PDEVICE_OBJECT DependentDevice
+ )
+{
+ ((PFN_WDFDEVICEREMOVEDEPENDENTUSAGEDEVICEOBJECT)
WdfFunctions[WdfDeviceRemoveDependentUsageDeviceObjectTableIndex])(WdfDriverGlobals,
Device, DependentDevice);
+}
+
+//
+// WDF Function: WdfDeviceAddRemovalRelationsPhysicalDevice
+//
+typedef
+_Must_inspect_result_
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFAPI
+NTSTATUS
+(*PFN_WDFDEVICEADDREMOVALRELATIONSPHYSICALDEVICE)(
+ _In_
+ PWDF_DRIVER_GLOBALS DriverGlobals,
+ _In_
+ WDFDEVICE Device,
+ _In_
+ PDEVICE_OBJECT PhysicalDevice
+ );
+
+_Must_inspect_result_
+_IRQL_requires_max_(DISPATCH_LEVEL)
+NTSTATUS
+FORCEINLINE
+WdfDeviceAddRemovalRelationsPhysicalDevice(
+ _In_
+ WDFDEVICE Device,
+ _In_
+ PDEVICE_OBJECT PhysicalDevice
+ )
+{
+ return ((PFN_WDFDEVICEADDREMOVALRELATIONSPHYSICALDEVICE)
WdfFunctions[WdfDeviceAddRemovalRelationsPhysicalDeviceTableIndex])(WdfDriverGlobals,
Device, PhysicalDevice);
+}
+
+//
+// WDF Function: WdfDeviceRemoveRemovalRelationsPhysicalDevice
+//
+typedef
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFAPI
+VOID
+(*PFN_WDFDEVICEREMOVEREMOVALRELATIONSPHYSICALDEVICE)(
+ _In_
+ PWDF_DRIVER_GLOBALS DriverGlobals,
+ _In_
+ WDFDEVICE Device,
+ _In_
+ PDEVICE_OBJECT PhysicalDevice
+ );
+
+_IRQL_requires_max_(DISPATCH_LEVEL)
+VOID
+FORCEINLINE
+WdfDeviceRemoveRemovalRelationsPhysicalDevice(
+ _In_
+ WDFDEVICE Device,
+ _In_
+ PDEVICE_OBJECT PhysicalDevice
+ )
+{
+ ((PFN_WDFDEVICEREMOVEREMOVALRELATIONSPHYSICALDEVICE)
WdfFunctions[WdfDeviceRemoveRemovalRelationsPhysicalDeviceTableIndex])(WdfDriverGlobals,
Device, PhysicalDevice);
+}
+
+//
+// WDF Function: WdfDeviceClearRemovalRelationsDevices
+//
+typedef
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFAPI
+VOID
+(*PFN_WDFDEVICECLEARREMOVALRELATIONSDEVICES)(
+ _In_
+ PWDF_DRIVER_GLOBALS DriverGlobals,
+ _In_
+ WDFDEVICE Device
+ );
+
+_IRQL_requires_max_(DISPATCH_LEVEL)
+VOID
+FORCEINLINE
+WdfDeviceClearRemovalRelationsDevices(
+ _In_
+ WDFDEVICE Device
+ )
+{
+ ((PFN_WDFDEVICECLEARREMOVALRELATIONSDEVICES)
WdfFunctions[WdfDeviceClearRemovalRelationsDevicesTableIndex])(WdfDriverGlobals, Device);
+}
+
+//
+// WDF Function: WdfDeviceGetDriver
+//
+typedef
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFAPI
+WDFDRIVER
+(*PFN_WDFDEVICEGETDRIVER)(
+ _In_
+ PWDF_DRIVER_GLOBALS DriverGlobals,
+ _In_
+ WDFDEVICE Device
+ );
+
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFDRIVER
+FORCEINLINE
+WdfDeviceGetDriver(
+ _In_
+ WDFDEVICE Device
+ )
+{
+ return ((PFN_WDFDEVICEGETDRIVER)
WdfFunctions[WdfDeviceGetDriverTableIndex])(WdfDriverGlobals, Device);
+}
+
+//
+// WDF Function: WdfDeviceRetrieveDeviceName
+//
+typedef
+_Must_inspect_result_
+_IRQL_requires_max_(PASSIVE_LEVEL)
+WDFAPI
+NTSTATUS
+(*PFN_WDFDEVICERETRIEVEDEVICENAME)(
+ _In_
+ PWDF_DRIVER_GLOBALS DriverGlobals,
+ _In_
+ WDFDEVICE Device,
+ _In_
+ WDFSTRING String
+ );
+
+_Must_inspect_result_
+_IRQL_requires_max_(PASSIVE_LEVEL)
+NTSTATUS
+FORCEINLINE
+WdfDeviceRetrieveDeviceName(
+ _In_
+ WDFDEVICE Device,
+ _In_
+ WDFSTRING String
+ )
+{
+ return ((PFN_WDFDEVICERETRIEVEDEVICENAME)
WdfFunctions[WdfDeviceRetrieveDeviceNameTableIndex])(WdfDriverGlobals, Device, String);
+}
+
+//
+// WDF Function: WdfDeviceAssignMofResourceName
+//
+typedef
+_Must_inspect_result_
+_IRQL_requires_max_(PASSIVE_LEVEL)
+WDFAPI
+NTSTATUS
+(*PFN_WDFDEVICEASSIGNMOFRESOURCENAME)(
+ _In_
+ PWDF_DRIVER_GLOBALS DriverGlobals,
+ _In_
+ WDFDEVICE Device,
+ _In_
+ PCUNICODE_STRING MofResourceName
+ );
+
+_Must_inspect_result_
+_IRQL_requires_max_(PASSIVE_LEVEL)
+NTSTATUS
+FORCEINLINE
+WdfDeviceAssignMofResourceName(
+ _In_
+ WDFDEVICE Device,
+ _In_
+ PCUNICODE_STRING MofResourceName
+ )
+{
+ return ((PFN_WDFDEVICEASSIGNMOFRESOURCENAME)
WdfFunctions[WdfDeviceAssignMofResourceNameTableIndex])(WdfDriverGlobals, Device,
MofResourceName);
+}
+
+//
+// WDF Function: WdfDeviceGetIoTarget
+//
+typedef
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFAPI
+WDFIOTARGET
+(*PFN_WDFDEVICEGETIOTARGET)(
+ _In_
+ PWDF_DRIVER_GLOBALS DriverGlobals,
+ _In_
+ WDFDEVICE Device
+ );
+
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFIOTARGET
+FORCEINLINE
+WdfDeviceGetIoTarget(
+ _In_
+ WDFDEVICE Device
+ )
+{
+ return ((PFN_WDFDEVICEGETIOTARGET)
WdfFunctions[WdfDeviceGetIoTargetTableIndex])(WdfDriverGlobals, Device);
+}
+
+//
+// WDF Function: WdfDeviceGetDevicePnpState
+//
+typedef
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFAPI
+WDF_DEVICE_PNP_STATE
+(*PFN_WDFDEVICEGETDEVICEPNPSTATE)(
+ _In_
+ PWDF_DRIVER_GLOBALS DriverGlobals,
+ _In_
+ WDFDEVICE Device
+ );
+
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDF_DEVICE_PNP_STATE
+FORCEINLINE
+WdfDeviceGetDevicePnpState(
+ _In_
+ WDFDEVICE Device
+ )
+{
+ return ((PFN_WDFDEVICEGETDEVICEPNPSTATE)
WdfFunctions[WdfDeviceGetDevicePnpStateTableIndex])(WdfDriverGlobals, Device);
+}
+
+//
+// WDF Function: WdfDeviceGetDevicePowerState
+//
+typedef
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFAPI
+WDF_DEVICE_POWER_STATE
+(*PFN_WDFDEVICEGETDEVICEPOWERSTATE)(
+ _In_
+ PWDF_DRIVER_GLOBALS DriverGlobals,
+ _In_
+ WDFDEVICE Device
+ );
+
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDF_DEVICE_POWER_STATE
+FORCEINLINE
+WdfDeviceGetDevicePowerState(
+ _In_
+ WDFDEVICE Device
+ )
+{
+ return ((PFN_WDFDEVICEGETDEVICEPOWERSTATE)
WdfFunctions[WdfDeviceGetDevicePowerStateTableIndex])(WdfDriverGlobals, Device);
+}
+
+//
+// WDF Function: WdfDeviceGetDevicePowerPolicyState
+//
+typedef
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFAPI
+WDF_DEVICE_POWER_POLICY_STATE
+(*PFN_WDFDEVICEGETDEVICEPOWERPOLICYSTATE)(
+ _In_
+ PWDF_DRIVER_GLOBALS DriverGlobals,
+ _In_
+ WDFDEVICE Device
+ );
+
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDF_DEVICE_POWER_POLICY_STATE
+FORCEINLINE
+WdfDeviceGetDevicePowerPolicyState(
+ _In_
+ WDFDEVICE Device
+ )
+{
+ return ((PFN_WDFDEVICEGETDEVICEPOWERPOLICYSTATE)
WdfFunctions[WdfDeviceGetDevicePowerPolicyStateTableIndex])(WdfDriverGlobals, Device);
+}
+
+//
+// WDF Function: WdfDeviceAssignS0IdleSettings
+//
+typedef
+_Must_inspect_result_
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFAPI
+NTSTATUS
+(*PFN_WDFDEVICEASSIGNS0IDLESETTINGS)(
+ _In_
+ PWDF_DRIVER_GLOBALS DriverGlobals,
+ _In_
+ WDFDEVICE Device,
+ _In_
+ PWDF_DEVICE_POWER_POLICY_IDLE_SETTINGS Settings
+ );
+
+_Must_inspect_result_
+_IRQL_requires_max_(DISPATCH_LEVEL)
+NTSTATUS
+FORCEINLINE
+WdfDeviceAssignS0IdleSettings(
+ _In_
+ WDFDEVICE Device,
+ _In_
+ PWDF_DEVICE_POWER_POLICY_IDLE_SETTINGS Settings
+ )
+{
+ return ((PFN_WDFDEVICEASSIGNS0IDLESETTINGS)
WdfFunctions[WdfDeviceAssignS0IdleSettingsTableIndex])(WdfDriverGlobals, Device,
Settings);
+}
+
+//
+// WDF Function: WdfDeviceAssignSxWakeSettings
+//
+typedef
+_Must_inspect_result_
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFAPI
+NTSTATUS
+(*PFN_WDFDEVICEASSIGNSXWAKESETTINGS)(
+ _In_
+ PWDF_DRIVER_GLOBALS DriverGlobals,
+ _In_
+ WDFDEVICE Device,
+ _In_
+ PWDF_DEVICE_POWER_POLICY_WAKE_SETTINGS Settings
+ );
+
+_Must_inspect_result_
+_IRQL_requires_max_(DISPATCH_LEVEL)
+NTSTATUS
+FORCEINLINE
+WdfDeviceAssignSxWakeSettings(
+ _In_
+ WDFDEVICE Device,
+ _In_
+ PWDF_DEVICE_POWER_POLICY_WAKE_SETTINGS Settings
+ )
+{
+ return ((PFN_WDFDEVICEASSIGNSXWAKESETTINGS)
WdfFunctions[WdfDeviceAssignSxWakeSettingsTableIndex])(WdfDriverGlobals, Device,
Settings);
+}
+
+//
+// WDF Function: WdfDeviceOpenRegistryKey
+//
+typedef
+_Must_inspect_result_
+_IRQL_requires_max_(PASSIVE_LEVEL)
+WDFAPI
+NTSTATUS
+(*PFN_WDFDEVICEOPENREGISTRYKEY)(
+ _In_
+ PWDF_DRIVER_GLOBALS DriverGlobals,
+ _In_
+ WDFDEVICE Device,
+ _In_
+ ULONG DeviceInstanceKeyType,
+ _In_
+ ACCESS_MASK DesiredAccess,
+ _In_opt_
+ PWDF_OBJECT_ATTRIBUTES KeyAttributes,
+ _Out_
+ WDFKEY* Key
+ );
+
+_Must_inspect_result_
+_IRQL_requires_max_(PASSIVE_LEVEL)
+NTSTATUS
+FORCEINLINE
+WdfDeviceOpenRegistryKey(
+ _In_
+ WDFDEVICE Device,
+ _In_
+ ULONG DeviceInstanceKeyType,
+ _In_
+ ACCESS_MASK DesiredAccess,
+ _In_opt_
+ PWDF_OBJECT_ATTRIBUTES KeyAttributes,
+ _Out_
+ WDFKEY* Key
+ )
+{
+ return ((PFN_WDFDEVICEOPENREGISTRYKEY)
WdfFunctions[WdfDeviceOpenRegistryKeyTableIndex])(WdfDriverGlobals, Device,
DeviceInstanceKeyType, DesiredAccess, KeyAttributes, Key);
+}
+
+//
+// WDF Function: WdfDeviceOpenDevicemapKey
+//
+typedef
+_Must_inspect_result_
+_IRQL_requires_max_(PASSIVE_LEVEL)
+WDFAPI
+NTSTATUS
+(*PFN_WDFDEVICEOPENDEVICEMAPKEY)(
+ _In_
+ PWDF_DRIVER_GLOBALS DriverGlobals,
+ _In_
+ WDFDEVICE Device,
+ _In_
+ PCUNICODE_STRING KeyName,
+ _In_
+ ACCESS_MASK DesiredAccess,
+ _In_opt_
+ PWDF_OBJECT_ATTRIBUTES KeyAttributes,
+ _Out_
+ WDFKEY* Key
+ );
+
+_Must_inspect_result_
+_IRQL_requires_max_(PASSIVE_LEVEL)
+NTSTATUS
+FORCEINLINE
+WdfDeviceOpenDevicemapKey(
+ _In_
+ WDFDEVICE Device,
+ _In_
+ PCUNICODE_STRING KeyName,
+ _In_
+ ACCESS_MASK DesiredAccess,
+ _In_opt_
+ PWDF_OBJECT_ATTRIBUTES KeyAttributes,
+ _Out_
+ WDFKEY* Key
+ )
+{
+ return ((PFN_WDFDEVICEOPENDEVICEMAPKEY)
WdfFunctions[WdfDeviceOpenDevicemapKeyTableIndex])(WdfDriverGlobals, Device, KeyName,
DesiredAccess, KeyAttributes, Key);
+}
+
+//
+// WDF Function: WdfDeviceSetSpecialFileSupport
+//
+typedef
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFAPI
+VOID
+(*PFN_WDFDEVICESETSPECIALFILESUPPORT)(
+ _In_
+ PWDF_DRIVER_GLOBALS DriverGlobals,
+ _In_
+ WDFDEVICE Device,
+ _In_
+ WDF_SPECIAL_FILE_TYPE FileType,
+ _In_
+ BOOLEAN FileTypeIsSupported
+ );
+
+_IRQL_requires_max_(DISPATCH_LEVEL)
+VOID
+FORCEINLINE
+WdfDeviceSetSpecialFileSupport(
+ _In_
+ WDFDEVICE Device,
+ _In_
+ WDF_SPECIAL_FILE_TYPE FileType,
+ _In_
+ BOOLEAN FileTypeIsSupported
+ )
+{
+ ((PFN_WDFDEVICESETSPECIALFILESUPPORT)
WdfFunctions[WdfDeviceSetSpecialFileSupportTableIndex])(WdfDriverGlobals, Device,
FileType, FileTypeIsSupported);
+}
+
+//
+// WDF Function: WdfDeviceSetCharacteristics
+//
+typedef
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFAPI
+VOID
+(*PFN_WDFDEVICESETCHARACTERISTICS)(
+ _In_
+ PWDF_DRIVER_GLOBALS DriverGlobals,
+ _In_
+ WDFDEVICE Device,
+ _In_
+ ULONG DeviceCharacteristics
+ );
+
+_IRQL_requires_max_(DISPATCH_LEVEL)
+VOID
+FORCEINLINE
+WdfDeviceSetCharacteristics(
+ _In_
+ WDFDEVICE Device,
+ _In_
+ ULONG DeviceCharacteristics
+ )
+{
+ ((PFN_WDFDEVICESETCHARACTERISTICS)
WdfFunctions[WdfDeviceSetCharacteristicsTableIndex])(WdfDriverGlobals, Device,
DeviceCharacteristics);
+}
+
+//
+// WDF Function: WdfDeviceGetCharacteristics
+//
+typedef
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFAPI
+ULONG
+(*PFN_WDFDEVICEGETCHARACTERISTICS)(
+ _In_
+ PWDF_DRIVER_GLOBALS DriverGlobals,
+ _In_
+ WDFDEVICE Device
+ );
+
+_IRQL_requires_max_(DISPATCH_LEVEL)
+ULONG
+FORCEINLINE
+WdfDeviceGetCharacteristics(
+ _In_
+ WDFDEVICE Device
+ )
+{
+ return ((PFN_WDFDEVICEGETCHARACTERISTICS)
WdfFunctions[WdfDeviceGetCharacteristicsTableIndex])(WdfDriverGlobals, Device);
+}
+
+//
+// WDF Function: WdfDeviceGetAlignmentRequirement
+//
+typedef
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFAPI
+ULONG
+(*PFN_WDFDEVICEGETALIGNMENTREQUIREMENT)(
+ _In_
+ PWDF_DRIVER_GLOBALS DriverGlobals,
+ _In_
+ WDFDEVICE Device
+ );
+
+_IRQL_requires_max_(DISPATCH_LEVEL)
+ULONG
+FORCEINLINE
+WdfDeviceGetAlignmentRequirement(
+ _In_
+ WDFDEVICE Device
+ )
+{
+ return ((PFN_WDFDEVICEGETALIGNMENTREQUIREMENT)
WdfFunctions[WdfDeviceGetAlignmentRequirementTableIndex])(WdfDriverGlobals, Device);
+}
+
+//
+// WDF Function: WdfDeviceSetAlignmentRequirement
+//
+typedef
+_IRQL_requires_max_(DISPATCH_LEVEL)
... 19595 lines suppressed ...