1 /*++ 2 3 Copyright (c) Microsoft Corporation. All rights reserved. 4 5 _WdfVersionBuild_ 6 7 Module Name: 8 9 wdfdevice.h 10 11 Abstract: 12 13 14 Environment: 15 16 kernel mode only 17 18 Revision History: 19 20 --*/ 21 22 // 23 // NOTE: This header is generated by stubwork. Please make any 24 // modifications to the corresponding template files 25 // (.x or .y) and use stubwork to regenerate the header 26 // 27 28 #ifndef _WDFDEVICE_H_ 29 #define _WDFDEVICE_H_ 30 31 #ifndef WDF_EXTERN_C 32 #ifdef __cplusplus 33 #define WDF_EXTERN_C extern "C" 34 #define WDF_EXTERN_C_START extern "C" { 35 #define WDF_EXTERN_C_END } 36 #else 37 #define WDF_EXTERN_C 38 #define WDF_EXTERN_C_START 39 #define WDF_EXTERN_C_END 40 #endif 41 #endif 42 43 WDF_EXTERN_C_START 44 45 46 47 48 #include <devpropdef.h> 49 50 51 #if (NTDDI_VERSION >= NTDDI_WIN2K) 52 53 54 // begin_wpp enum 55 typedef enum _WDF_DEVICE_STATE_FLAGS { 56 WdfDevStateNP = 0x8000, 57 } WDF_DEVICE_STATE_FLAGS; 58 59 // end_wpp 60 61 // begin_wpp enum 62 typedef enum _WDF_DEVICE_PNP_STATE { 63 WdfDevStatePnpInvalid = 0x00, 64 WdfDevStatePnpObjectCreated = 0x100, 65 WdfDevStatePnpCheckForDevicePresence = 0x101, 66 WdfDevStatePnpEjectFailed = 0x102, 67 WdfDevStatePnpEjectHardware = 0x103, 68 WdfDevStatePnpEjectedWaitingForRemove = 0x104, 69 WdfDevStatePnpInit = 0x105, 70 WdfDevStatePnpInitStarting = 0x106, 71 WdfDevStatePnpInitSurpriseRemoved = 0x107, 72 WdfDevStatePnpHardwareAvailable = 0x108, 73 WdfDevStatePnpEnableInterfaces = 0x109, 74 WdfDevStatePnpHardwareAvailablePowerPolicyFailed = 0x10A, 75 WdfDevStatePnpQueryRemoveAskDriver = 0x10B, 76 WdfDevStatePnpQueryRemovePending = 0x10C, 77 WdfDevStatePnpQueryRemoveStaticCheck = 0x10D, 78 WdfDevStatePnpQueriedRemoving = 0x10E, 79 WdfDevStatePnpQueryStopAskDriver = 0x10F, 80 WdfDevStatePnpQueryStopPending = 0x110, 81 WdfDevStatePnpQueryStopStaticCheck = 0x111, 82 WdfDevStatePnpQueryCanceled = 0x112, 83 WdfDevStatePnpRemoved = 0x113, 84 WdfDevStatePnpPdoRemoved = 0x114, 85 WdfDevStatePnpRemovedPdoWait = 0x115, 86 WdfDevStatePnpRemovedPdoSurpriseRemoved = 0x116, 87 WdfDevStatePnpRemovingDisableInterfaces = 0x117, 88 WdfDevStatePnpRestarting = 0x118, 89 WdfDevStatePnpStarted = 0x119, 90 WdfDevStatePnpStartedCancelStop = 0x11A, 91 WdfDevStatePnpStartedCancelRemove = 0x11B, 92 WdfDevStatePnpStartedRemoving = 0x11C, 93 WdfDevStatePnpStartingFromStopped = 0x11D, 94 WdfDevStatePnpStopped = 0x11E, 95 WdfDevStatePnpStoppedWaitForStartCompletion = 0x11F, 96 WdfDevStatePnpStartedStopping = 0x120, 97 WdfDevStatePnpSurpriseRemove = 0x121, 98 WdfDevStatePnpInitQueryRemove = 0x122, 99 WdfDevStatePnpInitQueryRemoveCanceled = 0x123, 100 WdfDevStatePnpFdoRemoved = 0x124, 101 WdfDevStatePnpRemovedWaitForChildren = 0x125, 102 WdfDevStatePnpQueriedSurpriseRemove = 0x126, 103 WdfDevStatePnpSurpriseRemoveIoStarted = 0x127, 104 WdfDevStatePnpFailedPowerDown = 0x128, 105 WdfDevStatePnpFailedIoStarting = 0x129, 106 WdfDevStatePnpFailedOwnHardware = 0x12A, 107 WdfDevStatePnpFailed = 0x12B, 108 WdfDevStatePnpFailedSurpriseRemoved = 0x12C, 109 WdfDevStatePnpFailedStarted = 0x12D, 110 WdfDevStatePnpFailedWaitForRemove = 0x12E, 111 WdfDevStatePnpFailedInit = 0x12F, 112 WdfDevStatePnpPdoInitFailed = 0x130, 113 WdfDevStatePnpRestart = 0x131, 114 WdfDevStatePnpRestartReleaseHardware = 0x132, 115 WdfDevStatePnpRestartHardwareAvailable = 0x133, 116 WdfDevStatePnpPdoRestart = 0x134, 117 WdfDevStatePnpFinal = 0x135, 118 WdfDevStatePnpRemovedChildrenRemoved = 0x136, 119 WdfDevStatePnpQueryRemoveEnsureDeviceAwake = 0x137, 120 WdfDevStatePnpQueryStopEnsureDeviceAwake = 0x138, 121 WdfDevStatePnpFailedPowerPolicyRemoved = 0x139, 122 WdfDevStatePnpNull = 0x13A, 123 } WDF_DEVICE_PNP_STATE, *PWDF_DEVICE_PNP_STATE; 124 125 // end_wpp 126 127 // begin_wpp enum 128 typedef enum _WDF_DEVICE_POWER_STATE { 129 WdfDevStatePowerInvalid = 0x00, 130 WdfDevStatePowerObjectCreated = 0x300, 131 WdfDevStatePowerCheckDeviceType = 0x301, 132 WdfDevStatePowerCheckDeviceTypeNP = 0x302 | WdfDevStateNP, 133 WdfDevStatePowerCheckParentState = 0x303, 134 WdfDevStatePowerCheckParentStateNP = 0x304 | WdfDevStateNP, 135 WdfDevStatePowerEnablingWakeAtBus = 0x305, 136 WdfDevStatePowerEnablingWakeAtBusNP = 0x306 | WdfDevStateNP, 137 WdfDevStatePowerD0 = 0x307, 138 WdfDevStatePowerD0NP = 0x308 | WdfDevStateNP, 139 WdfDevStatePowerD0BusWakeOwner = 0x309, 140 WdfDevStatePowerD0BusWakeOwnerNP = 0x30A | WdfDevStateNP, 141 WdfDevStatePowerD0ArmedForWake = 0x30B, 142 WdfDevStatePowerD0ArmedForWakeNP = 0x30C | WdfDevStateNP, 143 WdfDevStatePowerD0DisarmingWakeAtBus = 0x30D, 144 WdfDevStatePowerD0DisarmingWakeAtBusNP = 0x30E | WdfDevStateNP, 145 WdfDevStatePowerD0Starting = 0x30F, 146 WdfDevStatePowerD0StartingConnectInterrupt = 0x310, 147 WdfDevStatePowerD0StartingDmaEnable = 0x311, 148 WdfDevStatePowerD0StartingStartSelfManagedIo = 0x312, 149 WdfDevStatePowerDecideD0State = 0x313, 150 WdfDevStatePowerGotoD3Stopped = 0x314, 151 WdfDevStatePowerStopped = 0x315, 152 WdfDevStatePowerStartingCheckDeviceType = 0x316, 153 WdfDevStatePowerStartingChild = 0x317, 154 WdfDevStatePowerDxDisablingWakeAtBus = 0x318, 155 WdfDevStatePowerDxDisablingWakeAtBusNP = 0x319 | WdfDevStateNP, 156 WdfDevStatePowerGotoDx = 0x31A, 157 WdfDevStatePowerGotoDxNP = 0x31B | WdfDevStateNP, 158 WdfDevStatePowerGotoDxIoStopped = 0x31C, 159 WdfDevStatePowerGotoDxIoStoppedNP = 0x31D | WdfDevStateNP, 160 WdfDevStatePowerGotoDxNPFailed = 0x31E | WdfDevStateNP, 161 WdfDevStatePowerDx = 0x31F, 162 WdfDevStatePowerDxNP = 0x320 | WdfDevStateNP, 163 WdfDevStatePowerGotoDxArmedForWake = 0x321, 164 WdfDevStatePowerGotoDxArmedForWakeNP = 0x322 | WdfDevStateNP, 165 WdfDevStatePowerGotoDxIoStoppedArmedForWake = 0x323, 166 WdfDevStatePowerGotoDxIoStoppedArmedForWakeNP = 0x324 | WdfDevStateNP, 167 WdfDevStatePowerDxArmedForWake = 0x325, 168 WdfDevStatePowerDxArmedForWakeNP = 0x326 | WdfDevStateNP, 169 WdfDevStatePowerCheckParentStateArmedForWake = 0x327, 170 WdfDevStatePowerCheckParentStateArmedForWakeNP = 0x328 | WdfDevStateNP, 171 WdfDevStatePowerWaitForParentArmedForWake = 0x329, 172 WdfDevStatePowerWaitForParentArmedForWakeNP = 0x32A | WdfDevStateNP, 173 WdfDevStatePowerStartSelfManagedIo = 0x32B, 174 WdfDevStatePowerStartSelfManagedIoNP = 0x32C | WdfDevStateNP, 175 WdfDevStatePowerStartSelfManagedIoFailed = 0x32D, 176 WdfDevStatePowerStartSelfManagedIoFailedNP = 0x32E | WdfDevStateNP, 177 WdfDevStatePowerWaitForParent = 0x32F, 178 WdfDevStatePowerWaitForParentNP = 0x330 | WdfDevStateNP, 179 WdfDevStatePowerWakePending = 0x331, 180 WdfDevStatePowerWakePendingNP = 0x332 | WdfDevStateNP, 181 WdfDevStatePowerWaking = 0x333, 182 WdfDevStatePowerWakingNP = 0x334 | WdfDevStateNP, 183 WdfDevStatePowerWakingConnectInterrupt = 0x335, 184 WdfDevStatePowerWakingConnectInterruptNP = 0x336 | WdfDevStateNP, 185 WdfDevStatePowerWakingConnectInterruptFailed = 0x337, 186 WdfDevStatePowerWakingConnectInterruptFailedNP = 0x338 | WdfDevStateNP, 187 WdfDevStatePowerWakingDmaEnable = 0x339, 188 WdfDevStatePowerWakingDmaEnableNP = 0x33A | WdfDevStateNP, 189 WdfDevStatePowerWakingDmaEnableFailed = 0x33B, 190 WdfDevStatePowerWakingDmaEnableFailedNP = 0x33C | WdfDevStateNP, 191 WdfDevStatePowerReportPowerUpFailedDerefParent = 0x33D, 192 WdfDevStatePowerReportPowerUpFailed = 0x33E, 193 WdfDevStatePowerPowerFailedPowerDown = 0x33F, 194 WdfDevStatePowerReportPowerDownFailed = 0x340, 195 WdfDevStatePowerInitialConnectInterruptFailed = 0x341, 196 WdfDevStatePowerInitialDmaEnableFailed = 0x342, 197 WdfDevStatePowerInitialSelfManagedIoFailed = 0x343, 198 WdfDevStatePowerInitialPowerUpFailedDerefParent = 0x344, 199 WdfDevStatePowerInitialPowerUpFailed = 0x345, 200 WdfDevStatePowerDxStoppedDisarmWake = 0x346, 201 WdfDevStatePowerDxStoppedDisarmWakeNP = 0x347 | WdfDevStateNP, 202 WdfDevStatePowerGotoDxStoppedDisableInterruptNP = 0x348 | WdfDevStateNP, 203 WdfDevStatePowerGotoDxStopped = 0x349, 204 WdfDevStatePowerDxStopped = 0x34A, 205 WdfDevStatePowerGotoStopped = 0x34B, 206 WdfDevStatePowerStoppedCompleteDx = 0x34C, 207 WdfDevStatePowerDxStoppedDecideDxState = 0x34D, 208 WdfDevStatePowerDxStoppedArmForWake = 0x34E, 209 WdfDevStatePowerDxStoppedArmForWakeNP = 0x34F | WdfDevStateNP, 210 WdfDevStatePowerFinalPowerDownFailed = 0x350, 211 WdfDevStatePowerFinal = 0x351, 212 WdfDevStatePowerGotoImplicitD3DisarmWakeAtBus = 0x352, 213 WdfDevStatePowerUpFailed = 0x353, 214 WdfDevStatePowerUpFailedDerefParent = 0x354, 215 WdfDevStatePowerGotoDxFailed = 0x355, 216 WdfDevStatePowerGotoDxStoppedDisableInterrupt = 0x356, 217 WdfDevStatePowerUpFailedNP = 0x357 | WdfDevStateNP, 218 WdfDevStatePowerUpFailedDerefParentNP = 0x358 | WdfDevStateNP, 219 WdfDevStatePowerNotifyingD0ExitToWakeInterrupts = 0x359, 220 WdfDevStatePowerNotifyingD0EntryToWakeInterrupts = 0x35A, 221 WdfDevStatePowerNotifyingD0ExitToWakeInterruptsNP = 0x35B | WdfDevStateNP, 222 WdfDevStatePowerNotifyingD0EntryToWakeInterruptsNP = 0x35C | WdfDevStateNP, 223 WdfDevStatePowerNull = 0x35D, 224 } WDF_DEVICE_POWER_STATE, *PWDF_DEVICE_POWER_STATE; 225 226 // end_wpp 227 228 229 // begin_wpp enum 230 typedef enum _WDF_DEVICE_POWER_POLICY_STATE { 231 WdfDevStatePwrPolInvalid = 0x00, 232 WdfDevStatePwrPolObjectCreated = 0x500, 233 WdfDevStatePwrPolStarting = 0x501, 234 WdfDevStatePwrPolStartingSucceeded = 0x502, 235 WdfDevStatePwrPolStartingFailed = 0x503, 236 WdfDevStatePwrPolStartingDecideS0Wake = 0x504, 237 WdfDevStatePwrPolStartedIdleCapable = 0x505, 238 WdfDevStatePwrPolTimerExpiredNoWake = 0x506, 239 WdfDevStatePwrPolTimerExpiredNoWakeCompletePowerDown = 0x507, 240 WdfDevStatePwrPolWaitingUnarmed = 0x508, 241 WdfDevStatePwrPolWaitingUnarmedQueryIdle = 0x509, 242 WdfDevStatePwrPolS0NoWakePowerUp = 0x50A, 243 WdfDevStatePwrPolS0NoWakeCompletePowerUp = 0x50B, 244 WdfDevStatePwrPolSystemSleepFromDeviceWaitingUnarmed = 0x50C, 245 WdfDevStatePwrPolSystemSleepNeedWake = 0x50D, 246 WdfDevStatePwrPolSystemSleepNeedWakeCompletePowerUp = 0x50E, 247 WdfDevStatePwrPolSystemSleepPowerRequestFailed = 0x50F, 248 WdfDevStatePwrPolCheckPowerPageable = 0x510, 249 WdfDevStatePwrPolSleepingWakeWakeArrived = 0x511, 250 WdfDevStatePwrPolSleepingWakeRevertArmWake = 0x512, 251 WdfDevStatePwrPolSystemAsleepWakeArmed = 0x513, 252 WdfDevStatePwrPolSystemWakeDeviceWakeEnabled = 0x514, 253 WdfDevStatePwrPolSystemWakeDeviceWakeEnabledWakeCanceled = 0x515, 254 WdfDevStatePwrPolSystemWakeDeviceWakeDisarm = 0x516, 255 WdfDevStatePwrPolSystemWakeDeviceWakeTriggered = 0x517, 256 WdfDevStatePwrPolSystemWakeDeviceWakeTriggeredS0 = 0x518, 257 WdfDevStatePwrPolSystemWakeDeviceWokeDisarm = 0x519, 258 WdfDevStatePwrPolSleepingWakeWakeArrivedNP = 0x51A | WdfDevStateNP, 259 WdfDevStatePwrPolSleepingWakeRevertArmWakeNP = 0x51B | WdfDevStateNP, 260 WdfDevStatePwrPolSleepingWakePowerDownFailed = 0x51C, 261 WdfDevStatePwrPolSleepingWakePowerDownFailedWakeCanceled = 0x51D, 262 WdfDevStatePwrPolSystemAsleepWakeArmedNP = 0x51E | WdfDevStateNP, 263 WdfDevStatePwrPolSystemWakeDeviceWakeEnabledNP = 0x51F | WdfDevStateNP, 264 WdfDevStatePwrPolSystemWakeDeviceWakeEnabledWakeCanceledNP = 0x520 | WdfDevStateNP, 265 WdfDevStatePwrPolSystemWakeDeviceWakeDisarmNP = 0x521 | WdfDevStateNP, 266 WdfDevStatePwrPolSystemWakeDeviceWakeTriggeredNP = 0x522 | WdfDevStateNP, 267 WdfDevStatePwrPolSystemWakeDeviceWakeTriggeredS0NP = 0x523 | WdfDevStateNP, 268 WdfDevStatePwrPolSystemWakeDeviceWokeDisarmNP = 0x524 | WdfDevStateNP, 269 WdfDevStatePwrPolSystemWakeDeviceWakeCompletePowerUp = 0x525, 270 WdfDevStatePwrPolSleeping = 0x526, 271 WdfDevStatePwrPolSleepingNoWakePowerDown = 0x527, 272 WdfDevStatePwrPolSleepingNoWakeCompletePowerDown = 0x528, 273 WdfDevStatePwrPolSleepingNoWakeDxRequestFailed = 0x529, 274 WdfDevStatePwrPolSleepingWakePowerDown = 0x52A, 275 WdfDevStatePwrPolSleepingSendWake = 0x52B, 276 WdfDevStatePwrPolSystemAsleepNoWake = 0x52C, 277 WdfDevStatePwrPolSystemWakeDeviceWakeDisabled = 0x52D, 278 WdfDevStatePwrPolSystemWakeDeviceToD0 = 0x52E, 279 WdfDevStatePwrPolSystemWakeDeviceToD0CompletePowerUp = 0x52F, 280 WdfDevStatePwrPolSystemWakeQueryIdle = 0x530, 281 WdfDevStatePwrPolStartedWakeCapable = 0x531, 282 WdfDevStatePwrPolTimerExpiredDecideUsbSS = 0x532, 283 WdfDevStatePwrPolTimerExpiredWakeCapablePowerDown = 0x533, 284 WdfDevStatePwrPolTimerExpiredWakeCapableSendWake = 0x534, 285 WdfDevStatePwrPolTimerExpiredWakeCapableUsbSS = 0x535, 286 WdfDevStatePwrPolTimerExpiredWakeCapableWakeArrived = 0x536, 287 WdfDevStatePwrPolTimerExpiredWakeCapableCancelWake = 0x537, 288 WdfDevStatePwrPolTimerExpiredWakeCapableWakeCanceled = 0x538, 289 WdfDevStatePwrPolTimerExpiredWakeCapableCleanup = 0x539, 290 WdfDevStatePwrPolTimerExpiredWakeCapableDxAllocFailed = 0x53A, 291 WdfDevStatePwrPolTimerExpiredWakeCompletedPowerDown = 0x53B, 292 WdfDevStatePwrPolTimerExpiredWakeCompletedPowerUp = 0x53C, 293 WdfDevStatePwrPolWaitingArmedUsbSS = 0x53D, 294 WdfDevStatePwrPolWaitingArmed = 0x53E, 295 WdfDevStatePwrPolWaitingArmedQueryIdle = 0x53F, 296 WdfDevStatePwrPolIoPresentArmed = 0x540, 297 WdfDevStatePwrPolIoPresentArmedWakeCanceled = 0x541, 298 WdfDevStatePwrPolS0WakeDisarm = 0x542, 299 WdfDevStatePwrPolS0WakeCompletePowerUp = 0x543, 300 WdfDevStatePwrPolTimerExpiredWakeSucceeded = 0x544, 301 WdfDevStatePwrPolTimerExpiredWakeCompletedDisarm = 0x545, 302 WdfDevStatePwrPolTimerExpiredWakeCapableWakeSucceeded = 0x546, 303 WdfDevStatePwrPolTimerExpiredWakeCapableWakeFailed = 0x547, 304 WdfDevStatePwrPolWakeFailedUsbSS = 0x548, 305 WdfDevStatePwrPolTimerExpiredWakeCapablePowerDownFailedCancelWake = 0x549, 306 WdfDevStatePwrPolTimerExpiredWakeCapablePowerDownFailedWakeCanceled = 0x54A, 307 WdfDevStatePwrPolTimerExpiredWakeCapablePowerDownFailedUsbSS = 0x54B, 308 WdfDevStatePwrPolCancelingWakeForSystemSleep = 0x54C, 309 WdfDevStatePwrPolCancelingWakeForSystemSleepWakeCanceled = 0x54D, 310 WdfDevStatePwrPolDisarmingWakeForSystemSleepCompletePowerUp = 0x54E, 311 WdfDevStatePwrPolPowerUpForSystemSleepFailed = 0x54F, 312 WdfDevStatePwrPolWokeFromS0UsbSS = 0x550, 313 WdfDevStatePwrPolWokeFromS0 = 0x551, 314 WdfDevStatePwrPolWokeFromS0NotifyDriver = 0x552, 315 WdfDevStatePwrPolStoppingResetDevice = 0x553, 316 WdfDevStatePwrPolStoppingResetDeviceCompletePowerUp = 0x554, 317 WdfDevStatePwrPolStoppingResetDeviceFailed = 0x555, 318 WdfDevStatePwrPolStoppingD0 = 0x556, 319 WdfDevStatePwrPolStoppingD0Failed = 0x557, 320 WdfDevStatePwrPolStoppingDisarmWake = 0x558, 321 WdfDevStatePwrPolStoppingDisarmWakeCancelWake = 0x559, 322 WdfDevStatePwrPolStoppingDisarmWakeWakeCanceled = 0x55A, 323 WdfDevStatePwrPolStopping = 0x55B, 324 WdfDevStatePwrPolStoppingFailed = 0x55C, 325 WdfDevStatePwrPolStoppingSendStatus = 0x55D, 326 WdfDevStatePwrPolStoppingCancelTimer = 0x55E, 327 WdfDevStatePwrPolStoppingWaitForIdleTimeout = 0x55F, 328 WdfDevStatePwrPolStoppingCancelUsbSS = 0x560, 329 WdfDevStatePwrPolStoppingWaitForUsbSSCompletion = 0x561, 330 WdfDevStatePwrPolStoppingCancelWake = 0x562, 331 WdfDevStatePwrPolStopped = 0x563, 332 WdfDevStatePwrPolCancelUsbSS = 0x564, 333 WdfDevStatePwrPolStarted = 0x565, 334 WdfDevStatePwrPolStartedCancelTimer = 0x566, 335 WdfDevStatePwrPolStartedWaitForIdleTimeout = 0x567, 336 WdfDevStatePwrPolStartedWakeCapableCancelTimerForSleep = 0x568, 337 WdfDevStatePwrPolStartedWakeCapableWaitForIdleTimeout = 0x569, 338 WdfDevStatePwrPolStartedWakeCapableSleepingUsbSS = 0x56A, 339 WdfDevStatePwrPolStartedIdleCapableCancelTimerForSleep = 0x56B, 340 WdfDevStatePwrPolStartedIdleCapableWaitForIdleTimeout = 0x56C, 341 WdfDevStatePwrPolDeviceD0PowerRequestFailed = 0x56D, 342 WdfDevStatePwrPolDevicePowerRequestFailed = 0x56E, 343 WdfDevStatePwrPolGotoDx = 0x56F, 344 WdfDevStatePwrPolGotoDxInDx = 0x570, 345 WdfDevStatePwrPolDx = 0x571, 346 WdfDevStatePwrPolGotoD0 = 0x572, 347 WdfDevStatePwrPolGotoD0InD0 = 0x573, 348 WdfDevStatePwrPolFinal = 0x574, 349 WdfDevStatePwrPolSleepingPowerDownNotProcessed = 0x575, 350 WdfDevStatePwrPolTimerExpiredWakeCapablePowerDownNotProcessed = 0x576, 351 WdfDevStatePwrPolTimerExpiredNoWakePowerDownNotProcessed = 0x577, 352 WdfDevStatePwrPolTimerExpiredNoWakePoweredDownDisableIdleTimer = 0x578, 353 WdfDevStatePwrPolStoppingWaitingForImplicitPowerDown = 0x579, 354 WdfDevStatePwrPolStoppingPoweringUp = 0x57A, 355 WdfDevStatePwrPolStoppingPoweringDown = 0x57B, 356 WdfDevStatePwrPolPowerUpForSystemSleepNotSeen = 0x57C, 357 WdfDevStatePwrPolWaitingArmedStoppingCancelUsbSS = 0x57D, 358 WdfDevStatePwrPolWaitingArmedWakeFailedCancelUsbSS = 0x57E, 359 WdfDevStatePwrPolWaitingArmedIoPresentCancelUsbSS = 0x57F, 360 WdfDevStatePwrPolWaitingArmedWakeSucceededCancelUsbSS = 0x580, 361 WdfDevStatePwrPolCancelingUsbSSForSystemSleep = 0x581, 362 WdfDevStatePwrPolStoppingD0CancelUsbSS = 0x582, 363 WdfDevStatePwrPolStartingPoweredUp = 0x583, 364 WdfDevStatePwrPolIdleCapableDeviceIdle = 0x584, 365 WdfDevStatePwrPolDeviceIdleReturnToActive = 0x585, 366 WdfDevStatePwrPolDeviceIdleSleeping = 0x586, 367 WdfDevStatePwrPolDeviceIdleStopping = 0x587, 368 WdfDevStatePwrPolTimerExpiredNoWakeUndoPowerDown = 0x588, 369 WdfDevStatePwrPolWakeCapableDeviceIdle = 0x589, 370 WdfDevStatePwrPolWakeCapableUsbSSCompleted = 0x58A, 371 WdfDevStatePwrPolTimerExpiredWakeCapableUndoPowerDown = 0x58B, 372 WdfDevStatePwrPolTimerExpiredWakeCompletedHardwareStarted = 0x58C, 373 WdfDevStatePwrPolStoppedRemoving = 0x58D, 374 WdfDevStatePwrPolRemoved = 0x58E, 375 WdfDevStatePwrPolRestarting = 0x58F, 376 WdfDevStatePwrPolRestartingFailed = 0x590, 377 WdfDevStatePwrPolStartingPoweredUpFailed = 0x591, 378 WdfDevStatePwrPolTimerExpiredNoWakeReturnToActive = 0x592, 379 WdfDevStatePwrPolWaitingArmedWakeInterruptFired = 0x593, 380 WdfDevStatePwrPolSystemWakeDeviceWakeInterruptFired = 0x594, 381 WdfDevStatePwrPolSystemWakeDeviceWakeInterruptFiredNP = 0x595 | WdfDevStateNP, 382 WdfDevStatePwrPolTimerExpiredWakeCapableWakeInterruptArrived = 0x596, 383 WdfDevStatePwrPolTimerExpiredWakeCapablePowerDownFailedWakeInterruptArrived = 0x597, 384 WdfDevStatePwrPolWaitingArmedWakeInterruptFiredDuringPowerDown = 0x598, 385 WdfDevStatePwrPolNull = 0x599, 386 } WDF_DEVICE_POWER_POLICY_STATE, *PWDF_DEVICE_POWER_POLICY_STATE; 387 388 // end_wpp 389 390 typedef enum _WDF_STATE_NOTIFICATION_TYPE { 391 StateNotificationInvalid = 0x0000, 392 StateNotificationEnterState = 0x0001, 393 StateNotificationPostProcessState = 0x0002, 394 StateNotificationLeaveState = 0x0004, 395 StateNotificationAllStates = StateNotificationEnterState | StateNotificationPostProcessState | StateNotificationLeaveState, 396 } WDF_STATE_NOTIFICATION_TYPE; 397 398 typedef enum _WDF_POWER_POLICY_S0_IDLE_CAPABILITIES { 399 IdleCapsInvalid = 0, 400 IdleCannotWakeFromS0, 401 IdleCanWakeFromS0, 402 IdleUsbSelectiveSuspend, 403 } WDF_POWER_POLICY_S0_IDLE_CAPABILITIES; 404 405 typedef enum _WDF_POWER_POLICY_S0_IDLE_USER_CONTROL { 406 IdleUserControlInvalid = 0, 407 IdleDoNotAllowUserControl, 408 IdleAllowUserControl, 409 } WDF_POWER_POLICY_S0_IDLE_USER_CONTROL; 410 411 typedef enum _WDF_POWER_POLICY_IDLE_TIMEOUT_CONSTANTS { 412 IdleTimeoutDefaultConstant = 0, 413 } WDF_POWER_POLICY_IDLE_TIMEOUT_CONSTANTS; 414 415 typedef enum _WDF_POWER_POLICY_SX_WAKE_USER_CONTROL { 416 WakeUserControlInvalid = 0, 417 WakeDoNotAllowUserControl, 418 WakeAllowUserControl, 419 } WDF_POWER_POLICY_SX_WAKE_USER_CONTROL; 420 421 typedef enum _WDF_POWER_DEVICE_STATE { 422 WdfPowerDeviceInvalid = 0, 423 WdfPowerDeviceD0, 424 WdfPowerDeviceD1, 425 WdfPowerDeviceD2, 426 WdfPowerDeviceD3, 427 WdfPowerDeviceD3Final, 428 WdfPowerDevicePrepareForHibernation, 429 WdfPowerDeviceMaximum, 430 } WDF_POWER_DEVICE_STATE, *PWDF_POWER_DEVICE_STATE; 431 432 433 434 typedef enum _WDF_DISPATCH_IRP_TO_IO_QUEUE_FLAGS { 435 WDF_DISPATCH_IRP_TO_IO_QUEUE_NO_FLAGS = 0x00000000, 436 WDF_DISPATCH_IRP_TO_IO_QUEUE_INVOKE_INCALLERCTX_CALLBACK = 0x00000001, 437 WDF_DISPATCH_IRP_TO_IO_QUEUE_PREPROCESSED_IRP = 0x00000002, 438 } WDF_DISPATCH_IRP_TO_IO_QUEUE_FLAGS; 439 440 typedef enum _WDF_SPECIAL_FILE_TYPE { 441 WdfSpecialFileUndefined = 0, 442 WdfSpecialFilePaging = 1, 443 WdfSpecialFileHibernation, 444 WdfSpecialFileDump, 445 WdfSpecialFileBoot, 446 WdfSpecialFileMax, 447 } WDF_SPECIAL_FILE_TYPE, *PWDF_SPECIAL_FILE_TYPE; 448 449 typedef enum _WDF_DEVICE_IO_TYPE { 450 WdfDeviceIoUndefined = 0, 451 WdfDeviceIoNeither, 452 WdfDeviceIoBuffered, 453 WdfDeviceIoDirect, 454 WdfDeviceIoBufferedOrDirect = 4, 455 WdfDeviceIoMaximum, 456 } WDF_DEVICE_IO_TYPE, *PWDF_DEVICE_IO_TYPE; 457 458 typedef enum _WDF_FILEOBJECT_CLASS { 459 WdfFileObjectInvalid = 0, 460 WdfFileObjectNotRequired = 1, 461 WdfFileObjectWdfCanUseFsContext = 2, 462 WdfFileObjectWdfCanUseFsContext2 = 3, 463 WdfFileObjectWdfCannotUseFsContexts = 4, 464 WdfFileObjectCanBeOptional = 0x80000000, 465 } WDF_FILEOBJECT_CLASS, *PWDF_FILEOBJECT_CLASS; 466 467 typedef enum _WDF_DEVICE_FAILED_ACTION { 468 WdfDeviceFailedUndefined = 0, 469 WdfDeviceFailedAttemptRestart, 470 WdfDeviceFailedNoRestart, 471 } WDF_DEVICE_FAILED_ACTION; 472 473 typedef enum _WDF_RELEASE_HARDWARE_ORDER_ON_FAILURE { 474 WdfReleaseHardwareOrderOnFailureInvalid = 0, 475 WdfReleaseHardwareOrderOnFailureEarly, 476 WdfReleaseHardwareOrderOnFailureAfterDescendants, 477 } WDF_RELEASE_HARDWARE_ORDER_ON_FAILURE, *PWDF_RELEASE_HARDWARE_ORDER_ON_FAILURE; 478 479 480 481 // 482 // If you do not want the auto inclusion of wdmsec.h, define 483 // WDF_DEVICE_NO_WDMSEC_H before including this file (or wdf.h) 484 // 485 #ifndef WDF_DEVICE_NO_WDMSEC_H 486 #include <wdmsec.h> 487 #endif // WDF_DEVICE_NO_WDMSEC_H 488 489 490 #define WDF_S0_IDLE_ENABLED_VALUE_NAME L"IdleInWorkingState" 491 #define WDF_SX_WAKE_ENABLED_VALUE_NAME L"WakeFromSleepState" 492 #define WDF_S0_IDLE_DEFAULT_VALUE_NAME L"WdfDefaultIdleInWorkingState" 493 #define WDF_SX_WAKE_DEFAULT_VALUE_NAME L"WdfDefaultWakeFromSleepState" 494 // 495 // Declare empty definitions so that they may be referenced by 496 // routines before they are defined. 497 // 498 499 // enum _WDF_REQUEST_TYPE; 500 // typedef enum _WDF_REQUEST_TYPE WDF_REQUEST_TYPE; 501 502 typedef enum _WDF_REQUEST_TYPE { // taken from wdfrequest.h 503 WdfRequestTypeCreate = 0x0, 504 WdfRequestTypeCreateNamedPipe = 0x1, 505 WdfRequestTypeClose = 0x2, 506 WdfRequestTypeRead = 0x3, 507 WdfRequestTypeWrite = 0x4, 508 WdfRequestTypeQueryInformation = 0x5, 509 WdfRequestTypeSetInformation = 0x6, 510 WdfRequestTypeQueryEA = 0x7, 511 WdfRequestTypeSetEA = 0x8, 512 WdfRequestTypeFlushBuffers = 0x9, 513 WdfRequestTypeQueryVolumeInformation = 0xa, 514 WdfRequestTypeSetVolumeInformation = 0xb, 515 WdfRequestTypeDirectoryControl = 0xc, 516 WdfRequestTypeFileSystemControl = 0xd, 517 WdfRequestTypeDeviceControl = 0xe, 518 WdfRequestTypeDeviceControlInternal = 0xf, 519 WdfRequestTypeShutdown = 0x10, 520 WdfRequestTypeLockControl = 0x11, 521 WdfRequestTypeCleanup = 0x12, 522 WdfRequestTypeCreateMailSlot = 0x13, 523 WdfRequestTypeQuerySecurity = 0x14, 524 WdfRequestTypeSetSecurity = 0x15, 525 WdfRequestTypePower = 0x16, 526 WdfRequestTypeSystemControl = 0x17, 527 WdfRequestTypeDeviceChange = 0x18, 528 WdfRequestTypeQueryQuota = 0x19, 529 WdfRequestTypeSetQuota = 0x1A, 530 WdfRequestTypePnp = 0x1B, 531 WdfRequestTypeOther =0x1C, 532 WdfRequestTypeUsb = 0x40, 533 WdfRequestTypeNoFormat = 0xFF, 534 WdfRequestTypeMax, 535 } WDF_REQUEST_TYPE; 536 537 typedef 538 _Function_class_(EVT_WDF_DEVICE_FILE_CREATE) 539 _IRQL_requires_same_ 540 _IRQL_requires_max_(PASSIVE_LEVEL) 541 VOID 542 STDCALL 543 EVT_WDF_DEVICE_FILE_CREATE( 544 _In_ 545 WDFDEVICE Device, 546 _In_ 547 WDFREQUEST Request, 548 _In_ 549 WDFFILEOBJECT FileObject 550 ); 551 552 typedef EVT_WDF_DEVICE_FILE_CREATE *PFN_WDF_DEVICE_FILE_CREATE; 553 554 typedef 555 _Function_class_(EVT_WDF_FILE_CLOSE) 556 _IRQL_requires_same_ 557 _IRQL_requires_max_(PASSIVE_LEVEL) 558 VOID 559 STDCALL 560 EVT_WDF_FILE_CLOSE( 561 _In_ 562 WDFFILEOBJECT FileObject 563 ); 564 565 typedef EVT_WDF_FILE_CLOSE *PFN_WDF_FILE_CLOSE; 566 567 typedef 568 _Function_class_(EVT_WDF_FILE_CLEANUP) 569 _IRQL_requires_same_ 570 _IRQL_requires_max_(PASSIVE_LEVEL) 571 VOID 572 STDCALL 573 EVT_WDF_FILE_CLEANUP( 574 _In_ 575 WDFFILEOBJECT FileObject 576 ); 577 578 typedef EVT_WDF_FILE_CLEANUP *PFN_WDF_FILE_CLEANUP; 579 580 typedef struct _WDF_FILEOBJECT_CONFIG { 581 // 582 // Size of this structure in bytes 583 // 584 ULONG Size; 585 586 // 587 // Event callback for create requests 588 // 589 PFN_WDF_DEVICE_FILE_CREATE EvtDeviceFileCreate; 590 591 // 592 // Event callback for close requests 593 // 594 PFN_WDF_FILE_CLOSE EvtFileClose; 595 596 // 597 // Event callback for cleanup requests 598 // 599 PFN_WDF_FILE_CLEANUP EvtFileCleanup; 600 601 // 602 // If WdfTrue, create/cleanup/close file object related requests will be 603 // sent down the stack. 604 // 605 // If WdfFalse, create/cleanup/close will be completed at this location in 606 // the device stack. 607 // 608 // If WdfDefault, behavior depends on device type 609 // FDO, PDO, Control: use the WdfFalse behavior 610 // Filter: use the WdfTrue behavior 611 // 612 WDF_TRI_STATE AutoForwardCleanupClose; 613 614 // 615 // Specify whether framework should create WDFFILEOBJECT and also 616 // whether it can FsContexts fields in the WDM fileobject to store 617 // WDFFILEOBJECT so that it can avoid table look up and improve perf. 618 // 619 WDF_FILEOBJECT_CLASS FileObjectClass; 620 621 } WDF_FILEOBJECT_CONFIG, *PWDF_FILEOBJECT_CONFIG; 622 623 FORCEINLINE 624 VOID 625 WDF_FILEOBJECT_CONFIG_INIT( 626 _Out_ PWDF_FILEOBJECT_CONFIG FileEventCallbacks, 627 _In_opt_ PFN_WDF_DEVICE_FILE_CREATE EvtDeviceFileCreate, 628 _In_opt_ PFN_WDF_FILE_CLOSE EvtFileClose, 629 _In_opt_ PFN_WDF_FILE_CLEANUP EvtFileCleanup 630 ) 631 { 632 FileEventCallbacks->Size = sizeof(WDF_FILEOBJECT_CONFIG); 633 634 FileEventCallbacks->EvtDeviceFileCreate = EvtDeviceFileCreate; 635 FileEventCallbacks->EvtFileClose = EvtFileClose; 636 FileEventCallbacks->EvtFileCleanup = EvtFileCleanup; 637 638 FileEventCallbacks->FileObjectClass = WdfFileObjectWdfCannotUseFsContexts; 639 FileEventCallbacks->AutoForwardCleanupClose = WdfUseDefault; 640 } 641 642 typedef struct _WDF_DEVICE_PNP_NOTIFICATION_DATA { 643 // 644 // Type of data 645 // 646 WDF_STATE_NOTIFICATION_TYPE Type; 647 648 union { 649 struct { 650 // 651 // The current state that is about to be exited 652 // 653 WDF_DEVICE_PNP_STATE CurrentState; 654 655 // 656 // The new state that is about to be entered 657 // 658 WDF_DEVICE_PNP_STATE NewState; 659 } EnterState; 660 661 struct { 662 // 663 // The current state 664 // 665 WDF_DEVICE_PNP_STATE CurrentState; 666 } PostProcessState; 667 668 669 struct { 670 // 671 // The current state that is about to be exitted 672 // 673 WDF_DEVICE_PNP_STATE CurrentState; 674 675 // 676 // The state that is about to be entered 677 // 678 WDF_DEVICE_PNP_STATE NewState; 679 } LeaveState; 680 } Data; 681 } WDF_DEVICE_PNP_NOTIFICATION_DATA; 682 683 typedef const WDF_DEVICE_PNP_NOTIFICATION_DATA* PCWDF_DEVICE_PNP_NOTIFICATION_DATA; 684 685 typedef struct _WDF_DEVICE_POWER_NOTIFICATION_DATA { 686 // 687 // Type of data 688 // 689 WDF_STATE_NOTIFICATION_TYPE Type; 690 691 union { 692 struct { 693 // 694 // The current state that is about to be exitted 695 // 696 WDF_DEVICE_POWER_STATE CurrentState; 697 698 // 699 // The new state that is about to be entered 700 // 701 WDF_DEVICE_POWER_STATE NewState; 702 } EnterState; 703 704 struct { 705 // 706 // The current state 707 // 708 WDF_DEVICE_POWER_STATE CurrentState; 709 } PostProcessState; 710 711 712 struct { 713 // 714 // The current state that is about to be exitted 715 // 716 WDF_DEVICE_POWER_STATE CurrentState; 717 718 // 719 // The state that is about to be entered 720 // 721 WDF_DEVICE_POWER_STATE NewState; 722 } LeaveState; 723 } Data; 724 } WDF_DEVICE_POWER_NOTIFICATION_DATA; 725 726 typedef const WDF_DEVICE_POWER_NOTIFICATION_DATA* PCWDF_DEVICE_POWER_NOTIFICATION_DATA; 727 728 typedef struct _WDF_DEVICE_POWER_POLICY_NOTIFICATION_DATA { 729 // 730 // Type of data 731 // 732 WDF_STATE_NOTIFICATION_TYPE Type; 733 734 union { 735 struct { 736 // 737 // The current state that is about to be exitted 738 // 739 WDF_DEVICE_POWER_POLICY_STATE CurrentState; 740 741 // 742 // The new state that is about to be entered 743 // 744 WDF_DEVICE_POWER_POLICY_STATE NewState; 745 } EnterState; 746 747 struct { 748 // 749 // The current state 750 // 751 WDF_DEVICE_POWER_POLICY_STATE CurrentState; 752 } PostProcessState; 753 754 755 struct { 756 // 757 // The current state that is about to be exitted 758 // 759 WDF_DEVICE_POWER_POLICY_STATE CurrentState; 760 761 // 762 // The state that is about to be entered 763 // 764 WDF_DEVICE_POWER_POLICY_STATE NewState; 765 } LeaveState; 766 } Data; 767 } WDF_DEVICE_POWER_POLICY_NOTIFICATION_DATA; 768 769 typedef const WDF_DEVICE_POWER_POLICY_NOTIFICATION_DATA* PCWDF_DEVICE_POWER_POLICY_NOTIFICATION_DATA; 770 771 typedef 772 _Function_class_(EVT_WDF_DEVICE_PNP_STATE_CHANGE_NOTIFICATION) 773 _IRQL_requires_same_ 774 _IRQL_requires_max_(PASSIVE_LEVEL) 775 VOID 776 STDCALL 777 EVT_WDF_DEVICE_PNP_STATE_CHANGE_NOTIFICATION( 778 _In_ 779 WDFDEVICE Device, 780 _In_ 781 PCWDF_DEVICE_PNP_NOTIFICATION_DATA NotificationData 782 ); 783 784 typedef EVT_WDF_DEVICE_PNP_STATE_CHANGE_NOTIFICATION *PFN_WDF_DEVICE_PNP_STATE_CHANGE_NOTIFICATION; 785 786 typedef 787 _Function_class_(EVT_WDF_DEVICE_POWER_STATE_CHANGE_NOTIFICATION) 788 _IRQL_requires_same_ 789 _IRQL_requires_max_(PASSIVE_LEVEL) 790 VOID 791 STDCALL 792 EVT_WDF_DEVICE_POWER_STATE_CHANGE_NOTIFICATION( 793 _In_ 794 WDFDEVICE Device, 795 _In_ 796 PCWDF_DEVICE_POWER_NOTIFICATION_DATA NotificationData 797 ); 798 799 typedef EVT_WDF_DEVICE_POWER_STATE_CHANGE_NOTIFICATION *PFN_WDF_DEVICE_POWER_STATE_CHANGE_NOTIFICATION; 800 801 typedef 802 _Function_class_(EVT_WDF_DEVICE_POWER_POLICY_STATE_CHANGE_NOTIFICATION) 803 _IRQL_requires_same_ 804 _IRQL_requires_max_(PASSIVE_LEVEL) 805 VOID 806 STDCALL 807 EVT_WDF_DEVICE_POWER_POLICY_STATE_CHANGE_NOTIFICATION( 808 _In_ 809 WDFDEVICE Device, 810 _In_ 811 PCWDF_DEVICE_POWER_POLICY_NOTIFICATION_DATA NotificationData 812 ); 813 814 typedef EVT_WDF_DEVICE_POWER_POLICY_STATE_CHANGE_NOTIFICATION *PFN_WDF_DEVICE_POWER_POLICY_STATE_CHANGE_NOTIFICATION; 815 816 #define IdleTimeoutDefaultValue ((ULONG) IdleTimeoutDefaultConstant) 817 818 typedef 819 _Function_class_(EVT_WDF_DEVICE_D0_ENTRY) 820 _IRQL_requires_same_ 821 _IRQL_requires_max_(PASSIVE_LEVEL) 822 NTSTATUS 823 STDCALL 824 EVT_WDF_DEVICE_D0_ENTRY( 825 _In_ 826 WDFDEVICE Device, 827 _In_ 828 WDF_POWER_DEVICE_STATE PreviousState 829 ); 830 831 typedef EVT_WDF_DEVICE_D0_ENTRY *PFN_WDF_DEVICE_D0_ENTRY; 832 833 typedef 834 _Function_class_(EVT_WDF_DEVICE_D0_ENTRY_POST_INTERRUPTS_ENABLED) 835 _IRQL_requires_same_ 836 _IRQL_requires_max_(PASSIVE_LEVEL) 837 NTSTATUS 838 STDCALL 839 EVT_WDF_DEVICE_D0_ENTRY_POST_INTERRUPTS_ENABLED( 840 _In_ 841 WDFDEVICE Device, 842 _In_ 843 WDF_POWER_DEVICE_STATE PreviousState 844 ); 845 846 typedef EVT_WDF_DEVICE_D0_ENTRY_POST_INTERRUPTS_ENABLED *PFN_WDF_DEVICE_D0_ENTRY_POST_INTERRUPTS_ENABLED; 847 848 typedef 849 _Function_class_(EVT_WDF_DEVICE_D0_EXIT) 850 _IRQL_requires_same_ 851 _IRQL_requires_max_(PASSIVE_LEVEL) 852 NTSTATUS 853 STDCALL 854 EVT_WDF_DEVICE_D0_EXIT( 855 _In_ 856 WDFDEVICE Device, 857 _In_ 858 WDF_POWER_DEVICE_STATE TargetState 859 ); 860 861 typedef EVT_WDF_DEVICE_D0_EXIT *PFN_WDF_DEVICE_D0_EXIT; 862 863 typedef 864 _Function_class_(EVT_WDF_DEVICE_D0_EXIT_PRE_INTERRUPTS_DISABLED) 865 _IRQL_requires_same_ 866 _IRQL_requires_max_(PASSIVE_LEVEL) 867 NTSTATUS 868 STDCALL 869 EVT_WDF_DEVICE_D0_EXIT_PRE_INTERRUPTS_DISABLED( 870 _In_ 871 WDFDEVICE Device, 872 _In_ 873 WDF_POWER_DEVICE_STATE TargetState 874 ); 875 876 typedef EVT_WDF_DEVICE_D0_EXIT_PRE_INTERRUPTS_DISABLED *PFN_WDF_DEVICE_D0_EXIT_PRE_INTERRUPTS_DISABLED; 877 878 typedef 879 _Function_class_(EVT_WDF_DEVICE_PREPARE_HARDWARE) 880 _IRQL_requires_same_ 881 _IRQL_requires_max_(PASSIVE_LEVEL) 882 NTSTATUS 883 STDCALL 884 EVT_WDF_DEVICE_PREPARE_HARDWARE( 885 _In_ 886 WDFDEVICE Device, 887 _In_ 888 WDFCMRESLIST ResourcesRaw, 889 _In_ 890 WDFCMRESLIST ResourcesTranslated 891 ); 892 893 typedef EVT_WDF_DEVICE_PREPARE_HARDWARE *PFN_WDF_DEVICE_PREPARE_HARDWARE; 894 895 typedef 896 _Function_class_(EVT_WDF_DEVICE_RELEASE_HARDWARE) 897 _IRQL_requires_same_ 898 _IRQL_requires_max_(PASSIVE_LEVEL) 899 NTSTATUS 900 STDCALL 901 EVT_WDF_DEVICE_RELEASE_HARDWARE( 902 _In_ 903 WDFDEVICE Device, 904 _In_ 905 WDFCMRESLIST ResourcesTranslated 906 ); 907 908 typedef EVT_WDF_DEVICE_RELEASE_HARDWARE *PFN_WDF_DEVICE_RELEASE_HARDWARE; 909 910 typedef 911 _Function_class_(EVT_WDF_DEVICE_SELF_MANAGED_IO_CLEANUP) 912 _IRQL_requires_same_ 913 _IRQL_requires_max_(PASSIVE_LEVEL) 914 VOID 915 STDCALL 916 EVT_WDF_DEVICE_SELF_MANAGED_IO_CLEANUP( 917 _In_ 918 WDFDEVICE Device 919 ); 920 921 typedef EVT_WDF_DEVICE_SELF_MANAGED_IO_CLEANUP *PFN_WDF_DEVICE_SELF_MANAGED_IO_CLEANUP; 922 923 typedef 924 _Function_class_(EVT_WDF_DEVICE_SELF_MANAGED_IO_FLUSH) 925 _IRQL_requires_same_ 926 _IRQL_requires_max_(PASSIVE_LEVEL) 927 VOID 928 STDCALL 929 EVT_WDF_DEVICE_SELF_MANAGED_IO_FLUSH( 930 _In_ 931 WDFDEVICE Device 932 ); 933 934 typedef EVT_WDF_DEVICE_SELF_MANAGED_IO_FLUSH *PFN_WDF_DEVICE_SELF_MANAGED_IO_FLUSH; 935 936 typedef 937 _Function_class_(EVT_WDF_DEVICE_SELF_MANAGED_IO_INIT) 938 _IRQL_requires_same_ 939 _IRQL_requires_max_(PASSIVE_LEVEL) 940 NTSTATUS 941 STDCALL 942 EVT_WDF_DEVICE_SELF_MANAGED_IO_INIT( 943 _In_ 944 WDFDEVICE Device 945 ); 946 947 typedef EVT_WDF_DEVICE_SELF_MANAGED_IO_INIT *PFN_WDF_DEVICE_SELF_MANAGED_IO_INIT; 948 949 typedef 950 _Function_class_(EVT_WDF_DEVICE_SELF_MANAGED_IO_SUSPEND) 951 _IRQL_requires_same_ 952 _IRQL_requires_max_(PASSIVE_LEVEL) 953 NTSTATUS 954 STDCALL 955 EVT_WDF_DEVICE_SELF_MANAGED_IO_SUSPEND( 956 _In_ 957 WDFDEVICE Device 958 ); 959 960 typedef EVT_WDF_DEVICE_SELF_MANAGED_IO_SUSPEND *PFN_WDF_DEVICE_SELF_MANAGED_IO_SUSPEND; 961 962 typedef 963 _Function_class_(EVT_WDF_DEVICE_SELF_MANAGED_IO_RESTART) 964 _IRQL_requires_same_ 965 _IRQL_requires_max_(PASSIVE_LEVEL) 966 NTSTATUS 967 STDCALL 968 EVT_WDF_DEVICE_SELF_MANAGED_IO_RESTART( 969 _In_ 970 WDFDEVICE Device 971 ); 972 973 typedef EVT_WDF_DEVICE_SELF_MANAGED_IO_RESTART *PFN_WDF_DEVICE_SELF_MANAGED_IO_RESTART; 974 975 typedef 976 _Function_class_(EVT_WDF_DEVICE_QUERY_STOP) 977 _IRQL_requires_same_ 978 _IRQL_requires_max_(PASSIVE_LEVEL) 979 NTSTATUS 980 STDCALL 981 EVT_WDF_DEVICE_QUERY_STOP( 982 _In_ 983 WDFDEVICE Device 984 ); 985 986 typedef EVT_WDF_DEVICE_QUERY_STOP *PFN_WDF_DEVICE_QUERY_STOP; 987 988 typedef 989 _Function_class_(EVT_WDF_DEVICE_QUERY_REMOVE) 990 _IRQL_requires_same_ 991 _IRQL_requires_max_(PASSIVE_LEVEL) 992 NTSTATUS 993 STDCALL 994 EVT_WDF_DEVICE_QUERY_REMOVE( 995 _In_ 996 WDFDEVICE Device 997 ); 998 999 typedef EVT_WDF_DEVICE_QUERY_REMOVE *PFN_WDF_DEVICE_QUERY_REMOVE; 1000 1001 typedef 1002 _Function_class_(EVT_WDF_DEVICE_SURPRISE_REMOVAL) 1003 _IRQL_requires_same_ 1004 _IRQL_requires_max_(PASSIVE_LEVEL) 1005 VOID 1006 STDCALL 1007 EVT_WDF_DEVICE_SURPRISE_REMOVAL( 1008 _In_ 1009 WDFDEVICE Device 1010 ); 1011 1012 typedef EVT_WDF_DEVICE_SURPRISE_REMOVAL *PFN_WDF_DEVICE_SURPRISE_REMOVAL; 1013 1014 typedef 1015 _Function_class_(EVT_WDF_DEVICE_USAGE_NOTIFICATION) 1016 _IRQL_requires_same_ 1017 _IRQL_requires_max_(PASSIVE_LEVEL) 1018 VOID 1019 STDCALL 1020 EVT_WDF_DEVICE_USAGE_NOTIFICATION( 1021 _In_ 1022 WDFDEVICE Device, 1023 _In_ 1024 WDF_SPECIAL_FILE_TYPE NotificationType, 1025 _In_ 1026 BOOLEAN IsInNotificationPath 1027 ); 1028 1029 typedef EVT_WDF_DEVICE_USAGE_NOTIFICATION *PFN_WDF_DEVICE_USAGE_NOTIFICATION; 1030 1031 typedef 1032 _Function_class_(EVT_WDF_DEVICE_USAGE_NOTIFICATION_EX) 1033 _IRQL_requires_same_ 1034 _IRQL_requires_max_(PASSIVE_LEVEL) 1035 NTSTATUS 1036 STDCALL 1037 EVT_WDF_DEVICE_USAGE_NOTIFICATION_EX( 1038 _In_ 1039 WDFDEVICE Device, 1040 _In_ 1041 WDF_SPECIAL_FILE_TYPE NotificationType, 1042 _In_ 1043 BOOLEAN IsInNotificationPath 1044 ); 1045 1046 typedef EVT_WDF_DEVICE_USAGE_NOTIFICATION_EX *PFN_WDF_DEVICE_USAGE_NOTIFICATION_EX; 1047 1048 typedef 1049 _Function_class_(EVT_WDF_DEVICE_RELATIONS_QUERY) 1050 _IRQL_requires_same_ 1051 _IRQL_requires_max_(PASSIVE_LEVEL) 1052 VOID 1053 STDCALL 1054 EVT_WDF_DEVICE_RELATIONS_QUERY( 1055 _In_ 1056 WDFDEVICE Device, 1057 _In_ 1058 DEVICE_RELATION_TYPE RelationType 1059 ); 1060 1061 typedef EVT_WDF_DEVICE_RELATIONS_QUERY *PFN_WDF_DEVICE_RELATIONS_QUERY; 1062 1063 typedef 1064 _Function_class_(EVT_WDF_DEVICE_ARM_WAKE_FROM_S0) 1065 _IRQL_requires_same_ 1066 _IRQL_requires_max_(PASSIVE_LEVEL) 1067 NTSTATUS 1068 STDCALL 1069 EVT_WDF_DEVICE_ARM_WAKE_FROM_S0( 1070 _In_ 1071 WDFDEVICE Device 1072 ); 1073 1074 typedef EVT_WDF_DEVICE_ARM_WAKE_FROM_S0 *PFN_WDF_DEVICE_ARM_WAKE_FROM_S0; 1075 1076 typedef 1077 _Function_class_(EVT_WDF_DEVICE_ARM_WAKE_FROM_SX) 1078 _IRQL_requires_same_ 1079 _IRQL_requires_max_(PASSIVE_LEVEL) 1080 NTSTATUS 1081 STDCALL 1082 EVT_WDF_DEVICE_ARM_WAKE_FROM_SX( 1083 _In_ 1084 WDFDEVICE Device 1085 ); 1086 1087 typedef EVT_WDF_DEVICE_ARM_WAKE_FROM_SX *PFN_WDF_DEVICE_ARM_WAKE_FROM_SX; 1088 1089 typedef 1090 _Function_class_(EVT_WDF_DEVICE_ARM_WAKE_FROM_SX_WITH_REASON) 1091 _IRQL_requires_same_ 1092 _IRQL_requires_max_(PASSIVE_LEVEL) 1093 NTSTATUS 1094 STDCALL 1095 EVT_WDF_DEVICE_ARM_WAKE_FROM_SX_WITH_REASON( 1096 _In_ 1097 WDFDEVICE Device, 1098 _In_ 1099 BOOLEAN DeviceWakeEnabled, 1100 _In_ 1101 BOOLEAN ChildrenArmedForWake 1102 ); 1103 1104 typedef EVT_WDF_DEVICE_ARM_WAKE_FROM_SX_WITH_REASON *PFN_WDF_DEVICE_ARM_WAKE_FROM_SX_WITH_REASON; 1105 1106 typedef 1107 _Function_class_(EVT_WDF_DEVICE_DISARM_WAKE_FROM_S0) 1108 _IRQL_requires_same_ 1109 _IRQL_requires_max_(PASSIVE_LEVEL) 1110 VOID 1111 STDCALL 1112 EVT_WDF_DEVICE_DISARM_WAKE_FROM_S0( 1113 _In_ 1114 WDFDEVICE Device 1115 ); 1116 1117 typedef EVT_WDF_DEVICE_DISARM_WAKE_FROM_S0 *PFN_WDF_DEVICE_DISARM_WAKE_FROM_S0; 1118 1119 typedef 1120 _Function_class_(EVT_WDF_DEVICE_DISARM_WAKE_FROM_SX) 1121 _IRQL_requires_same_ 1122 _IRQL_requires_max_(PASSIVE_LEVEL) 1123 VOID 1124 STDCALL 1125 EVT_WDF_DEVICE_DISARM_WAKE_FROM_SX( 1126 _In_ 1127 WDFDEVICE Device 1128 ); 1129 1130 typedef EVT_WDF_DEVICE_DISARM_WAKE_FROM_SX *PFN_WDF_DEVICE_DISARM_WAKE_FROM_SX; 1131 1132 typedef 1133 _Function_class_(EVT_WDF_DEVICE_WAKE_FROM_S0_TRIGGERED) 1134 _IRQL_requires_same_ 1135 _IRQL_requires_max_(PASSIVE_LEVEL) 1136 VOID 1137 STDCALL 1138 EVT_WDF_DEVICE_WAKE_FROM_S0_TRIGGERED( 1139 _In_ 1140 WDFDEVICE Device 1141 ); 1142 1143 typedef EVT_WDF_DEVICE_WAKE_FROM_S0_TRIGGERED *PFN_WDF_DEVICE_WAKE_FROM_S0_TRIGGERED; 1144 1145 typedef 1146 _Function_class_(EVT_WDF_DEVICE_WAKE_FROM_SX_TRIGGERED) 1147 _IRQL_requires_same_ 1148 _IRQL_requires_max_(PASSIVE_LEVEL) 1149 VOID 1150 STDCALL 1151 EVT_WDF_DEVICE_WAKE_FROM_SX_TRIGGERED( 1152 _In_ 1153 WDFDEVICE Device 1154 ); 1155 1156 typedef EVT_WDF_DEVICE_WAKE_FROM_SX_TRIGGERED *PFN_WDF_DEVICE_WAKE_FROM_SX_TRIGGERED; 1157 1158 typedef struct _WDF_PNPPOWER_EVENT_CALLBACKS { 1159 // 1160 // Size of this structure in bytes 1161 // 1162 ULONG Size; 1163 1164 PFN_WDF_DEVICE_D0_ENTRY EvtDeviceD0Entry; 1165 PFN_WDF_DEVICE_D0_ENTRY_POST_INTERRUPTS_ENABLED EvtDeviceD0EntryPostInterruptsEnabled; 1166 PFN_WDF_DEVICE_D0_EXIT EvtDeviceD0Exit; 1167 PFN_WDF_DEVICE_D0_EXIT_PRE_INTERRUPTS_DISABLED EvtDeviceD0ExitPreInterruptsDisabled; 1168 PFN_WDF_DEVICE_PREPARE_HARDWARE EvtDevicePrepareHardware; 1169 PFN_WDF_DEVICE_RELEASE_HARDWARE EvtDeviceReleaseHardware; 1170 PFN_WDF_DEVICE_SELF_MANAGED_IO_CLEANUP EvtDeviceSelfManagedIoCleanup; 1171 PFN_WDF_DEVICE_SELF_MANAGED_IO_FLUSH EvtDeviceSelfManagedIoFlush; 1172 PFN_WDF_DEVICE_SELF_MANAGED_IO_INIT EvtDeviceSelfManagedIoInit; 1173 PFN_WDF_DEVICE_SELF_MANAGED_IO_SUSPEND EvtDeviceSelfManagedIoSuspend; 1174 PFN_WDF_DEVICE_SELF_MANAGED_IO_RESTART EvtDeviceSelfManagedIoRestart; 1175 PFN_WDF_DEVICE_SURPRISE_REMOVAL EvtDeviceSurpriseRemoval; 1176 PFN_WDF_DEVICE_QUERY_REMOVE EvtDeviceQueryRemove; 1177 PFN_WDF_DEVICE_QUERY_STOP EvtDeviceQueryStop; 1178 PFN_WDF_DEVICE_USAGE_NOTIFICATION EvtDeviceUsageNotification; 1179 PFN_WDF_DEVICE_RELATIONS_QUERY EvtDeviceRelationsQuery; 1180 PFN_WDF_DEVICE_USAGE_NOTIFICATION_EX EvtDeviceUsageNotificationEx; 1181 } WDF_PNPPOWER_EVENT_CALLBACKS, *PWDF_PNPPOWER_EVENT_CALLBACKS; 1182 1183 typedef struct _WDF_POWER_POLICY_EVENT_CALLBACKS { 1184 // 1185 // Size of this structure in bytes 1186 // 1187 ULONG Size; 1188 1189 PFN_WDF_DEVICE_ARM_WAKE_FROM_S0 EvtDeviceArmWakeFromS0; 1190 PFN_WDF_DEVICE_DISARM_WAKE_FROM_S0 EvtDeviceDisarmWakeFromS0; 1191 PFN_WDF_DEVICE_WAKE_FROM_S0_TRIGGERED EvtDeviceWakeFromS0Triggered; 1192 1193 PFN_WDF_DEVICE_ARM_WAKE_FROM_SX EvtDeviceArmWakeFromSx; 1194 PFN_WDF_DEVICE_DISARM_WAKE_FROM_SX EvtDeviceDisarmWakeFromSx; 1195 PFN_WDF_DEVICE_WAKE_FROM_SX_TRIGGERED EvtDeviceWakeFromSxTriggered; 1196 1197 PFN_WDF_DEVICE_ARM_WAKE_FROM_SX_WITH_REASON EvtDeviceArmWakeFromSxWithReason; 1198 1199 } WDF_POWER_POLICY_EVENT_CALLBACKS, *PWDF_POWER_POLICY_EVENT_CALLBACKS; 1200 1201 FORCEINLINE 1202 VOID 1203 WDF_POWER_POLICY_EVENT_CALLBACKS_INIT( 1204 _Out_ PWDF_POWER_POLICY_EVENT_CALLBACKS Callbacks 1205 ) 1206 { 1207 RtlZeroMemory(Callbacks, sizeof(WDF_POWER_POLICY_EVENT_CALLBACKS)); 1208 1209 Callbacks->Size = sizeof(WDF_POWER_POLICY_EVENT_CALLBACKS); 1210 } 1211 1212 FORCEINLINE 1213 VOID 1214 WDF_PNPPOWER_EVENT_CALLBACKS_INIT( 1215 _Out_ PWDF_PNPPOWER_EVENT_CALLBACKS Callbacks 1216 ) 1217 { 1218 RtlZeroMemory(Callbacks, sizeof(WDF_PNPPOWER_EVENT_CALLBACKS)); 1219 Callbacks->Size = sizeof(WDF_PNPPOWER_EVENT_CALLBACKS); 1220 } 1221 1222 1223 FORCEINLINE 1224 ULONG 1225 WdfDevStateNormalize( 1226 _In_ ULONG State 1227 ) 1228 { 1229 return State & ~WdfDevStateNP; 1230 } 1231 1232 1233 FORCEINLINE 1234 BOOLEAN 1235 WdfDevStateIsNP( 1236 _In_ ULONG State 1237 ) 1238 { 1239 return (State & WdfDevStateNP) ? TRUE : FALSE; 1240 } 1241 1242 typedef enum _WDF_POWER_POLICY_IDLE_TIMEOUT_TYPE { 1243 DriverManagedIdleTimeout = 0, 1244 SystemManagedIdleTimeout = 1, 1245 SystemManagedIdleTimeoutWithHint = 2 1246 } WDF_POWER_POLICY_IDLE_TIMEOUT_TYPE, *PWDF_POWER_POLICY_IDLE_TIMEOUT_TYPE; 1247 1248 typedef struct _WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS { 1249 // 1250 // Size of this structure in bytes 1251 // 1252 ULONG Size; 1253 1254 // 1255 // Indicates whether the device can wake itself up while the machine is in 1256 // S0. 1257 // 1258 WDF_POWER_POLICY_S0_IDLE_CAPABILITIES IdleCaps; 1259 1260 // 1261 // The low power state in which the device will be placed when it is idled 1262 // out while the machine is in S0. 1263 // 1264 DEVICE_POWER_STATE DxState; 1265 1266 // 1267 // Amount of time the device must be idle before idling out. Timeout is in 1268 // milliseconds. 1269 // 1270 ULONG IdleTimeout; 1271 1272 // 1273 // Inidcates whether a user can control the idle policy of the device. 1274 // By default, a user is allowed to change the policy. 1275 // 1276 WDF_POWER_POLICY_S0_IDLE_USER_CONTROL UserControlOfIdleSettings; 1277 1278 // 1279 // If WdfTrue, idling out while the machine is in S0 will be enabled. 1280 // 1281 // If WdfFalse, idling out will be disabled. 1282 // 1283 // If WdfUseDefault, the idling out will be enabled. If 1284 // UserControlOfIdleSettings is set to IdleAllowUserControl, the user's 1285 // settings will override the default. 1286 // 1287 WDF_TRI_STATE Enabled; 1288 1289 // 1290 // This field is applicable only when IdleCaps == IdleCannotWakeFromS0 1291 // If WdfTrue,device is powered up on System Wake even if device is idle 1292 // If WdfFalse, device is not powered up on system wake if it is idle 1293 // If WdfUseDefault, the behavior is same as WdfFalse 1294 // 1295 WDF_TRI_STATE PowerUpIdleDeviceOnSystemWake; 1296 1297 // 1298 // This field determines how the IdleTimeout field is used. 1299 // 1300 // If the value is DriverManagedIdleTimeout, then the idle timeout value 1301 // is determined by the IdleTimeout field of this structure. 1302 // 1303 // If the value is SystemManagedIdleTimeout, then the timeout value is 1304 // determined by the power framework (PoFx) on operating systems where 1305 // the PoFx is available (i.e. Windows 8 and later). The IdleTimeout field 1306 // is ignored on these operating systems. On operating systems where the 1307 // PoFx is not available, the behavior is same as DriverManagedIdleTimeout. 1308 // 1309 // If the value is SystemManagedIdleTimeoutWithHint, then the timeout value 1310 // is determined by the power framework (PoFx) on operating systems where 1311 // the PoFx is available (i.e. Windows 8 and later). In addition, the value 1312 // specified in the IdleTimeout field is provided as a hint to the PoFx in 1313 // determining when the device should be allowed to enter a low-power state. 1314 // Since it is only a hint, the actual duration after which the PoFx allows 1315 // the device to enter a low-power state might be greater than or less than 1316 // the IdleTimeout value. On operating systems where the PoFx is not 1317 // available, the behavior is same as DriverManagedIdleTimeout. 1318 // 1319 WDF_POWER_POLICY_IDLE_TIMEOUT_TYPE IdleTimeoutType; 1320 1321 // 1322 // This field forces the device to avoid idling in the D3cold power state. 1323 // WDF will ensure, with help from the bus drivers, that the device will 1324 // idle in a D-state that can successfully generate a wake signal, if 1325 // necessary. If the client specifies that DxState == PowerDeviceD3, this 1326 // setting allows the client to distinguish betwen D3hot and D3cold. If 1327 // the client sets DxState == PowerDeviceMaximum, then WDF will pick the 1328 // deepest idle state identified by the bus driver. If that deepest state 1329 // is D3cold, this field allows the client to override that and choose 1330 // D3hot. 1331 // 1332 // If WdfTrue, device will not use D3cold in S0. 1333 // If WdfFalse, device will use D3cold in S0 if the ACPI firmware indicates 1334 // that the device can enter that state, if DxState above does not 1335 // specify some other D-state and, if the device is armed for 1336 // wake, that it can generate its wake signal from D3cold. 1337 // If WdfUseDefault, this setting will be derived from the driver's INF, 1338 // specifically the presence or absence of the following two lines in 1339 // the DDInstall.HW section: 1340 // Include=machine.inf 1341 // Needs=PciD3ColdSupported 1342 // 1343 WDF_TRI_STATE ExcludeD3Cold; 1344 1345 } WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS, *PWDF_DEVICE_POWER_POLICY_IDLE_SETTINGS; 1346 1347 FORCEINLINE 1348 VOID 1349 WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS_INIT( 1350 _Out_ PWDF_DEVICE_POWER_POLICY_IDLE_SETTINGS Settings, 1351 _In_ WDF_POWER_POLICY_S0_IDLE_CAPABILITIES IdleCaps 1352 ) 1353 { 1354 RtlZeroMemory(Settings, sizeof(WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS)); 1355 1356 Settings->Size = sizeof(WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS); 1357 1358 Settings->IdleTimeout = IdleTimeoutDefaultValue; 1359 Settings->UserControlOfIdleSettings = IdleAllowUserControl; 1360 Settings->Enabled = WdfUseDefault; 1361 Settings->PowerUpIdleDeviceOnSystemWake = WdfUseDefault; 1362 Settings->IdleTimeoutType = DriverManagedIdleTimeout; 1363 Settings->ExcludeD3Cold = WdfUseDefault; 1364 1365 Settings->IdleCaps = IdleCaps; 1366 1367 switch (IdleCaps) { 1368 case IdleUsbSelectiveSuspend: 1369 case IdleCanWakeFromS0: 1370 Settings->DxState = PowerDeviceMaximum; 1371 break; 1372 1373 case IdleCannotWakeFromS0: 1374 Settings->DxState = PowerDeviceD3; 1375 break; 1376 } 1377 } 1378 1379 typedef struct _WDF_DEVICE_POWER_POLICY_WAKE_SETTINGS { 1380 // 1381 // Size of this structure in bytes 1382 // 1383 ULONG Size; 1384 1385 // 1386 // The low power state in which the device will be placed when it is armed 1387 // for wake from Sx. 1388 // 1389 DEVICE_POWER_STATE DxState; 1390 1391 // 1392 // Inidcates whether a user can control the idle policy of the device. 1393 // By default, a user is allowed to change the policy. 1394 // 1395 WDF_POWER_POLICY_SX_WAKE_USER_CONTROL UserControlOfWakeSettings; 1396 1397 // 1398 // If WdfTrue, arming the device for wake while the machine is in Sx is 1399 // enabled. 1400 // 1401 // If WdfFalse, arming the device for wake while the machine is in Sx is 1402 // disabled. 1403 // 1404 // If WdfUseDefault, arming will be enabled. If UserControlOfWakeSettings 1405 // is set to WakeAllowUserControl, the user's settings will override the 1406 // default. 1407 // 1408 WDF_TRI_STATE Enabled; 1409 1410 // 1411 // If set to TRUE, arming the parent device can depend on whether there 1412 // is atleast one child device armed for wake. 1413 // 1414 // If set to FALSE, arming of the parent device will be independent of 1415 // whether any of the child devices are armed for wake. 1416 // 1417 BOOLEAN ArmForWakeIfChildrenAreArmedForWake; 1418 1419 // 1420 // Indicates that whenever the parent device completes the wake irp 1421 // successfully, the status needs to be also propagated to the child 1422 // devices. This helps in tracking which devices were responsible for 1423 // waking the system. 1424 // 1425 BOOLEAN IndicateChildWakeOnParentWake; 1426 1427 } WDF_DEVICE_POWER_POLICY_WAKE_SETTINGS, *PWDF_DEVICE_POWER_POLICY_WAKE_SETTINGS; 1428 1429 FORCEINLINE 1430 VOID 1431 WDF_DEVICE_POWER_POLICY_WAKE_SETTINGS_INIT( 1432 _Out_ PWDF_DEVICE_POWER_POLICY_WAKE_SETTINGS Settings 1433 ) 1434 { 1435 RtlZeroMemory(Settings, sizeof(WDF_DEVICE_POWER_POLICY_WAKE_SETTINGS)); 1436 1437 Settings->Size = sizeof(WDF_DEVICE_POWER_POLICY_WAKE_SETTINGS); 1438 1439 Settings->Enabled = WdfUseDefault; 1440 Settings->DxState = PowerDeviceMaximum; 1441 Settings->UserControlOfWakeSettings = WakeAllowUserControl; 1442 } 1443 1444 typedef struct _WDF_DEVICE_STATE { 1445 // 1446 // Size of this structure in bytes 1447 // 1448 ULONG Size; 1449 1450 // 1451 // If set to WdfTrue, the device will be disabled 1452 // 1453 WDF_TRI_STATE Disabled; 1454 1455 // 1456 // If set to WdfTrue, the device will not be displayed in device manager. 1457 // Once hidden, the device cannot be unhidden. 1458 // 1459 WDF_TRI_STATE DontDisplayInUI; 1460 1461 // 1462 // If set to WdfTrue, the device is reporting itself as failed. If set 1463 // in conjuction with ResourcesChanged to WdfTrue, the device will receive 1464 // a PnP stop and then a new PnP start device. 1465 // 1466 WDF_TRI_STATE Failed; 1467 1468 // 1469 // If set to WdfTrue, the device cannot be subsequently disabled. 1470 // 1471 WDF_TRI_STATE NotDisableable; 1472 1473 1474 // 1475 // If set to WdfTrue, the device stack will be torn down. 1476 // 1477 WDF_TRI_STATE Removed; 1478 1479 // 1480 // If set to WdfTrue, the device will be sent another PnP start. If the 1481 // Failed field is set to WdfTrue as well, a PnP stop will be sent before 1482 // the start. 1483 // 1484 WDF_TRI_STATE ResourcesChanged; 1485 1486 } WDF_DEVICE_STATE, *PWDF_DEVICE_STATE; 1487 1488 FORCEINLINE 1489 VOID 1490 WDF_DEVICE_STATE_INIT( 1491 _Out_ PWDF_DEVICE_STATE PnpDeviceState 1492 ) 1493 { 1494 RtlZeroMemory(PnpDeviceState, sizeof(WDF_DEVICE_STATE)); 1495 1496 PnpDeviceState->Size = sizeof(WDF_DEVICE_STATE); 1497 1498 // 1499 // Initializes all of the fields to the WdfUseDefault enum value 1500 // 1501 PnpDeviceState->Disabled = WdfUseDefault; 1502 PnpDeviceState->DontDisplayInUI = WdfUseDefault; 1503 PnpDeviceState->Failed = WdfUseDefault; 1504 PnpDeviceState->NotDisableable = WdfUseDefault; 1505 PnpDeviceState->Removed = WdfUseDefault; 1506 PnpDeviceState->ResourcesChanged = WdfUseDefault; 1507 } 1508 1509 typedef struct _WDF_DEVICE_PNP_CAPABILITIES { 1510 // 1511 // Size of the structure in bytes 1512 // 1513 ULONG Size; 1514 1515 // 1516 // NOTE: To mark a PDO as raw, call WdfPdoInitAssignRawDevice 1517 // 1518 1519 WDF_TRI_STATE LockSupported; 1520 WDF_TRI_STATE EjectSupported; 1521 WDF_TRI_STATE Removable; 1522 WDF_TRI_STATE DockDevice; 1523 WDF_TRI_STATE UniqueID; 1524 WDF_TRI_STATE SilentInstall; 1525 WDF_TRI_STATE SurpriseRemovalOK; 1526 WDF_TRI_STATE HardwareDisabled; 1527 WDF_TRI_STATE NoDisplayInUI; 1528 1529 // 1530 // Default values of -1 indicate not to set this value 1531 // 1532 ULONG Address; 1533 ULONG UINumber; 1534 1535 } WDF_DEVICE_PNP_CAPABILITIES, *PWDF_DEVICE_PNP_CAPABILITIES; 1536 1537 FORCEINLINE 1538 VOID 1539 WDF_DEVICE_PNP_CAPABILITIES_INIT( 1540 _Out_ PWDF_DEVICE_PNP_CAPABILITIES Caps 1541 ) 1542 { 1543 RtlZeroMemory(Caps, sizeof(WDF_DEVICE_PNP_CAPABILITIES)); 1544 1545 Caps->Size = sizeof(WDF_DEVICE_PNP_CAPABILITIES); 1546 1547 Caps->LockSupported = WdfUseDefault; 1548 Caps->EjectSupported = WdfUseDefault; 1549 Caps->Removable = WdfUseDefault; 1550 Caps->DockDevice = WdfUseDefault; 1551 Caps->UniqueID = WdfUseDefault; 1552 Caps->SilentInstall = WdfUseDefault; 1553 Caps->SurpriseRemovalOK = WdfUseDefault; 1554 Caps->HardwareDisabled = WdfUseDefault; 1555 Caps->NoDisplayInUI = WdfUseDefault; 1556 1557 Caps->Address = (ULONG) -1; 1558 Caps->UINumber = (ULONG) -1; 1559 } 1560 1561 typedef struct _WDF_DEVICE_POWER_CAPABILITIES { 1562 // 1563 // Size of the structure in bytes 1564 // 1565 ULONG Size; 1566 1567 WDF_TRI_STATE DeviceD1; 1568 WDF_TRI_STATE DeviceD2; 1569 1570 WDF_TRI_STATE WakeFromD0; 1571 WDF_TRI_STATE WakeFromD1; 1572 WDF_TRI_STATE WakeFromD2; 1573 WDF_TRI_STATE WakeFromD3; 1574 1575 // 1576 // Default value PowerDeviceMaximum indicates not to set this value 1577 // 1578 DEVICE_POWER_STATE DeviceState[PowerSystemMaximum]; 1579 1580 // 1581 // Default value PowerDeviceMaximum, PowerSystemMaximum indicates not to 1582 // set this value. 1583 // 1584 DEVICE_POWER_STATE DeviceWake; 1585 SYSTEM_POWER_STATE SystemWake; 1586 1587 // 1588 // Default values of -1 indicate not to set this value 1589 // 1590 ULONG D1Latency; 1591 ULONG D2Latency; 1592 ULONG D3Latency; 1593 1594 // 1595 // Ideal Dx state for the device to be put into when the machine moves into 1596 // Sx and the device is not armed for wake. By default, the default will be 1597 // placed into D3. If IdealDxStateForSx is lighter then 1598 // DeviceState[Sx], then DeviceState[Sx] will be used as the Dx state. 1599 // 1600 DEVICE_POWER_STATE IdealDxStateForSx; 1601 1602 } WDF_DEVICE_POWER_CAPABILITIES, *PWDF_DEVICE_POWER_CAPABILITIES; 1603 1604 FORCEINLINE 1605 VOID 1606 WDF_DEVICE_POWER_CAPABILITIES_INIT( 1607 _Out_ PWDF_DEVICE_POWER_CAPABILITIES Caps 1608 ) 1609 { 1610 ULONG i; 1611 1612 RtlZeroMemory(Caps, sizeof(WDF_DEVICE_POWER_CAPABILITIES)); 1613 1614 Caps->Size = sizeof(WDF_DEVICE_POWER_CAPABILITIES); 1615 1616 Caps->DeviceD1 = WdfUseDefault; 1617 Caps->DeviceD2 = WdfUseDefault; 1618 1619 Caps->WakeFromD0 = WdfUseDefault; 1620 Caps->WakeFromD1 = WdfUseDefault; 1621 Caps->WakeFromD2 = WdfUseDefault; 1622 Caps->WakeFromD3 = WdfUseDefault; 1623 1624 for (i = 0; i < sizeof(Caps->DeviceState)/sizeof(Caps->DeviceState[1]); i++) { 1625 Caps->DeviceState[i] = PowerDeviceMaximum; 1626 } 1627 1628 Caps->DeviceWake = PowerDeviceMaximum; 1629 Caps->SystemWake = PowerSystemMaximum; 1630 1631 Caps->D1Latency = (ULONG) -1; 1632 Caps->D2Latency = (ULONG) -1; 1633 Caps->D3Latency = (ULONG) -1; 1634 1635 Caps->IdealDxStateForSx = PowerDeviceMaximum; 1636 } 1637 1638 typedef enum _WDF_REMOVE_LOCK_OPTIONS_FLAGS { 1639 WDF_REMOVE_LOCK_OPTION_ACQUIRE_FOR_IO = 0x00000001 1640 } WDF_REMOVE_LOCK_OPTIONS_FLAGS; 1641 1642 typedef struct _WDF_REMOVE_LOCK_OPTIONS { 1643 // 1644 // Size of the structure in bytes 1645 // 1646 ULONG Size; 1647 1648 // 1649 // Bit field combination of values from the WDF_REMOVE_LOCK_OPTIONS_FLAGS 1650 // enumeration 1651 // 1652 ULONG Flags; 1653 } WDF_REMOVE_LOCK_OPTIONS, *PWDF_REMOVE_LOCK_OPTIONS; 1654 1655 1656 // 1657 // Default remove lock options initialization macro 1658 // 1659 FORCEINLINE 1660 VOID 1661 WDF_REMOVE_LOCK_OPTIONS_INIT( 1662 _Out_ PWDF_REMOVE_LOCK_OPTIONS RemoveLockOptions, 1663 _In_ ULONG Flags 1664 ) 1665 { 1666 RtlZeroMemory(RemoveLockOptions, sizeof(WDF_REMOVE_LOCK_OPTIONS)); 1667 1668 RemoveLockOptions->Size = sizeof(WDF_REMOVE_LOCK_OPTIONS); 1669 RemoveLockOptions->Flags = Flags; 1670 } 1671 1672 typedef 1673 _Function_class_(EVT_WDFDEVICE_WDM_IRP_PREPROCESS) 1674 _IRQL_requires_same_ 1675 _IRQL_requires_max_(DISPATCH_LEVEL) 1676 NTSTATUS 1677 STDCALL 1678 EVT_WDFDEVICE_WDM_IRP_PREPROCESS( 1679 _In_ 1680 WDFDEVICE Device, 1681 _Inout_ 1682 PIRP Irp 1683 ); 1684 1685 typedef EVT_WDFDEVICE_WDM_IRP_PREPROCESS *PFN_WDFDEVICE_WDM_IRP_PREPROCESS; 1686 1687 typedef 1688 _Function_class_(EVT_WDFDEVICE_WDM_IRP_DISPATCH) 1689 _IRQL_requires_same_ 1690 _IRQL_requires_max_(DISPATCH_LEVEL) 1691 NTSTATUS 1692 STDCALL 1693 EVT_WDFDEVICE_WDM_IRP_DISPATCH( 1694 _In_ 1695 WDFDEVICE Device, 1696 _In_ 1697 UCHAR MajorFunction, 1698 _In_ 1699 UCHAR MinorFunction, 1700 _In_ 1701 ULONG Code, 1702 _In_ 1703 WDFCONTEXT DriverContext, 1704 _Inout_ 1705 PIRP Irp, 1706 _In_ 1707 WDFCONTEXT DispatchContext 1708 ); 1709 1710 typedef EVT_WDFDEVICE_WDM_IRP_DISPATCH *PFN_WDFDEVICE_WDM_IRP_DISPATCH; 1711 1712 // 1713 // This is called to pre-process a request using METHOD_NEITHER 1714 // 1715 typedef 1716 _Function_class_(EVT_WDF_IO_IN_CALLER_CONTEXT) 1717 _IRQL_requires_same_ 1718 _IRQL_requires_max_(DISPATCH_LEVEL) 1719 VOID 1720 STDCALL 1721 EVT_WDF_IO_IN_CALLER_CONTEXT( 1722 _In_ 1723 WDFDEVICE Device, 1724 _In_ 1725 WDFREQUEST Request 1726 ); 1727 1728 typedef EVT_WDF_IO_IN_CALLER_CONTEXT *PFN_WDF_IO_IN_CALLER_CONTEXT; 1729 1730 typedef 1731 _Function_class_(EVT_WDFDEVICE_WDM_POST_PO_FX_REGISTER_DEVICE) 1732 _IRQL_requires_same_ 1733 _IRQL_requires_max_(PASSIVE_LEVEL) 1734 NTSTATUS 1735 STDCALL 1736 EVT_WDFDEVICE_WDM_POST_PO_FX_REGISTER_DEVICE( 1737 _In_ 1738 WDFDEVICE Device, 1739 _In_ 1740 POHANDLE PoHandle 1741 ); 1742 1743 typedef EVT_WDFDEVICE_WDM_POST_PO_FX_REGISTER_DEVICE *PFN_WDFDEVICE_WDM_POST_PO_FX_REGISTER_DEVICE; 1744 1745 typedef 1746 _Function_class_(EVT_WDFDEVICE_WDM_PRE_PO_FX_UNREGISTER_DEVICE) 1747 _IRQL_requires_same_ 1748 _IRQL_requires_max_(PASSIVE_LEVEL) 1749 VOID 1750 STDCALL 1751 EVT_WDFDEVICE_WDM_PRE_PO_FX_UNREGISTER_DEVICE( 1752 _In_ 1753 WDFDEVICE Device, 1754 _In_ 1755 POHANDLE PoHandle 1756 ); 1757 1758 typedef EVT_WDFDEVICE_WDM_PRE_PO_FX_UNREGISTER_DEVICE *PFN_WDFDEVICE_WDM_PRE_PO_FX_UNREGISTER_DEVICE; 1759 1760 typedef struct _WDF_POWER_FRAMEWORK_SETTINGS { 1761 // 1762 // Size of the structure, in bytes. 1763 // 1764 ULONG Size; 1765 1766 // 1767 // Client driver's callback function that is invoked after KMDF has 1768 // registered with the power framework. This field can be NULL if the 1769 // client driver does not wish to specify this callback. 1770 // 1771 PFN_WDFDEVICE_WDM_POST_PO_FX_REGISTER_DEVICE EvtDeviceWdmPostPoFxRegisterDevice; 1772 1773 // 1774 // Client driver's callback function that is invoked before KMDF 1775 // unregisters with the power framework. This field can be NULL if the 1776 // client driver does not wish to specify this callback. 1777 // 1778 PFN_WDFDEVICE_WDM_PRE_PO_FX_UNREGISTER_DEVICE EvtDeviceWdmPrePoFxUnregisterDevice; 1779 1780 // 1781 // Pointer to a PO_FX_COMPONENT structure that describes the only component 1782 // in the single-component device. This field can be NULL if the client 1783 // driver wants KMDF to use the default specification for this component 1784 // (i.e. support for F0 only). 1785 // 1786 PPO_FX_COMPONENT Component; 1787 1788 // 1789 // Client driver's PO_FX_COMPONENT_ACTIVE_CONDITION_CALLBACK callback 1790 // function. This field can be NULL if the client driver does not wish to 1791 // specify this callback. 1792 // 1793 PPO_FX_COMPONENT_ACTIVE_CONDITION_CALLBACK ComponentActiveConditionCallback; 1794 1795 // 1796 // Client driver's PO_FX_COMPONENT_IDLE_CONDITION_CALLBACK callback 1797 // function. This field can be NULL if the client driver does not wish to 1798 // specify this callback. 1799 // 1800 PPO_FX_COMPONENT_IDLE_CONDITION_CALLBACK ComponentIdleConditionCallback; 1801 1802 // 1803 // Client driver's PO_FX_COMPONENT_IDLE_STATE_CALLBACK callback function. 1804 // This field can be NULL if the client driver does not wish to specify 1805 // this callback. 1806 // 1807 PPO_FX_COMPONENT_IDLE_STATE_CALLBACK ComponentIdleStateCallback; 1808 1809 // 1810 // Client driver's PO_FX_POWER_CONTROL_CALLBACK callback function. This 1811 // field can be NULL if the client driver does not wish to specify this 1812 // callback. 1813 // 1814 PPO_FX_POWER_CONTROL_CALLBACK PowerControlCallback; 1815 1816 // 1817 // Context value that is passed in to the ComponentIdleStateCallback and 1818 // PowerControlCallback callback functions. 1819 // 1820 PVOID PoFxDeviceContext; 1821 } WDF_POWER_FRAMEWORK_SETTINGS, *PWDF_POWER_FRAMEWORK_SETTINGS; 1822 1823 FORCEINLINE 1824 VOID 1825 WDF_POWER_FRAMEWORK_SETTINGS_INIT( 1826 _Out_ PWDF_POWER_FRAMEWORK_SETTINGS PowerFrameworkSettings 1827 ) 1828 { 1829 RtlZeroMemory(PowerFrameworkSettings, 1830 sizeof(WDF_POWER_FRAMEWORK_SETTINGS)); 1831 PowerFrameworkSettings->Size = sizeof(WDF_POWER_FRAMEWORK_SETTINGS); 1832 } 1833 1834 1835 typedef struct _WDF_IO_TYPE_CONFIG { 1836 // 1837 // Size of this structure in bytes 1838 // 1839 ULONG Size; 1840 1841 // 1842 // <KMDF_DOC/> 1843 // Identifies the method that the driver will use to access data buffers 1844 // that it receives for read and write requests. 1845 // 1846 // <UMDF_DOC/> 1847 // Identifies the method that the driver will "prefer" to use to access data 1848 // buffers that it receives for read and write requests. Note that UMDF 1849 // driver provides just a preference, and not a guarantee.Therefore, 1850 // even if a driver specified direct access method, UMDF might use the 1851 // buffered access method for one or more of the device's requests to 1852 // improve performance. For example, UMDF uses buffered access for small 1853 // buffers, if it can copy the data to the driver's buffer faster than it 1854 // can map the buffers for direct access. 1855 // 1856 WDF_DEVICE_IO_TYPE ReadWriteIoType; 1857 1858 // 1859 // <UMDF_ONLY/> 1860 // Identifies the method that the driver will "prefer" to use to access data 1861 // buffers that it receives for IOCTL requests. Note that UMDF 1862 // driver provides just a preference, and not a guarantee. Therefore, 1863 // even if a driver specified direct access method, UMDF might use the 1864 // buffered access method for one or more of the device's requests to 1865 // improve performance. For example, UMDF uses buffered access for small 1866 // buffers, if it can copy the data to the driver's buffer faster than it 1867 // can map the buffers for direct access. 1868 // 1869 WDF_DEVICE_IO_TYPE DeviceControlIoType; 1870 1871 // 1872 // <UMDF_ONLY/> 1873 // Optional, Provides the smallest buffer size (in bytes) for which 1874 // UMDF will use direct access for the buffers. For example, set 1875 // DirectTransferThreshold to "12288" to indicate that UMDF should use buffered 1876 // access for all buffers that are smaller than 12 kilobytes, and direct 1877 // access for buffers equal to or greater than that. Typically, you 1878 // do not need to provide this value because UMDF uses a value that provides 1879 // the best performance. Note that there are other requirements that must be 1880 // met in order to get direct access of buffers. See Docs for details. 1881 // 1882 ULONG DirectTransferThreshold; 1883 1884 } WDF_IO_TYPE_CONFIG, *PWDF_IO_TYPE_CONFIG; 1885 1886 FORCEINLINE 1887 VOID 1888 WDF_IO_TYPE_CONFIG_INIT( 1889 _Out_ PWDF_IO_TYPE_CONFIG IoTypeConfig 1890 ) 1891 { 1892 RtlZeroMemory(IoTypeConfig, sizeof(WDF_IO_TYPE_CONFIG)); 1893 IoTypeConfig->Size = sizeof(WDF_IO_TYPE_CONFIG); 1894 IoTypeConfig->ReadWriteIoType = WdfDeviceIoBuffered; 1895 IoTypeConfig->DeviceControlIoType = WdfDeviceIoBuffered; 1896 } 1897 1898 1899 1900 1901 1902 typedef struct _WDF_DEVICE_PROPERTY_DATA { 1903 // 1904 // Size of this structure 1905 // 1906 _In_ ULONG Size; 1907 1908 // 1909 // A pointer to a DEVPROPKEY structure that specifies the device 1910 // property key. 1911 // 1912 _In_ const DEVPROPKEY * PropertyKey; 1913 1914 // 1915 // A locale identifier. Set this parameter either to a language-specific 1916 // LCID value or to LOCALE_NEUTRAL. The LOCALE_NEUTRAL LCID specifies 1917 // that the property is language-neutral (that is, not specific to any 1918 // language). Do not set this parameter to LOCALE_SYSTEM_DEFAULT or 1919 // LOCALE_USER_DEFAULT. For more information about language-specific 1920 // LCID values, see LCID Structure. 1921 // 1922 _In_ LCID Lcid; 1923 1924 // 1925 // Set this parameter to PLUGPLAY_PROPERTY_PERSISTENT if the property 1926 // value set by this routine should persist across computer restarts. 1927 // Otherwise, set Flags to zero. Ignored for Query DDIs. 1928 // 1929 _In_ ULONG Flags; 1930 1931 } WDF_DEVICE_PROPERTY_DATA, *PWDF_DEVICE_PROPERTY_DATA; 1932 1933 FORCEINLINE 1934 VOID 1935 WDF_DEVICE_PROPERTY_DATA_INIT ( 1936 _Out_ PWDF_DEVICE_PROPERTY_DATA PropertyData, 1937 _In_ const DEVPROPKEY* PropertyKey 1938 ) 1939 { 1940 RtlZeroMemory(PropertyData, sizeof(* PropertyData)); 1941 1942 PropertyData->Size = sizeof(*PropertyData); 1943 PropertyData->PropertyKey = PropertyKey; 1944 } 1945 1946 // 1947 // VOID 1948 // WdfDeviceStopIdle( 1949 // _In_ WDFDEVICE Device, 1950 // _In_ BOOLEAN WaitForD0 1951 // ); 1952 // 1953 // VOID 1954 // WdfDeviceStopIdleWithTag( 1955 // _In_ WDFDEVICE Device, 1956 // _In_ BOOLEAN WaitForD0, 1957 // _In_ PVOID Tag 1958 // ); 1959 // 1960 // VOID 1961 // WdfDeviceResumeIdle( 1962 // _In_ WDFDEVICE Device 1963 // ); 1964 // 1965 // VOID 1966 // WdfDeviceResumeIdleWithTag( 1967 // _In_ WDFDEVICE Device 1968 // _In_ PVOID Tag 1969 // ); 1970 // 1971 #define WdfDeviceStopIdle(Device, WaitForD0) \ 1972 WdfDeviceStopIdleWithTag(Device, WaitForD0, NULL) 1973 1974 #define WdfDeviceStopIdleWithTag(Device, WaitForD0, Tag) \ 1975 WdfDeviceStopIdleActual(Device, WaitForD0, Tag, __LINE__, __FILE__) 1976 1977 #define WdfDeviceResumeIdle(Device) \ 1978 WdfDeviceResumeIdleWithTag(Device, NULL) 1979 1980 #define WdfDeviceResumeIdleWithTag(Device, Tag) \ 1981 WdfDeviceResumeIdleActual(Device, Tag, __LINE__, __FILE__) 1982 1983 1984 1985 // 1986 // WDF Function: WdfDeviceGetDeviceState 1987 // 1988 typedef 1989 _IRQL_requires_max_(DISPATCH_LEVEL) 1990 WDFAPI 1991 VOID 1992 (STDCALL *PFN_WDFDEVICEGETDEVICESTATE)( 1993 _In_ 1994 PWDF_DRIVER_GLOBALS DriverGlobals, 1995 _In_ 1996 WDFDEVICE Device, 1997 _Out_ 1998 PWDF_DEVICE_STATE DeviceState 1999 ); 2000 2001 _IRQL_requires_max_(DISPATCH_LEVEL) 2002 FORCEINLINE 2003 VOID 2004 WdfDeviceGetDeviceState( 2005 _In_ 2006 WDFDEVICE Device, 2007 _Out_ 2008 PWDF_DEVICE_STATE DeviceState 2009 ) 2010 { 2011 ((PFN_WDFDEVICEGETDEVICESTATE) WdfFunctions[WdfDeviceGetDeviceStateTableIndex])(WdfDriverGlobals, Device, DeviceState); 2012 } 2013 2014 // 2015 // WDF Function: WdfDeviceSetDeviceState 2016 // 2017 typedef 2018 _IRQL_requires_max_(DISPATCH_LEVEL) 2019 WDFAPI 2020 VOID 2021 (STDCALL *PFN_WDFDEVICESETDEVICESTATE)( 2022 _In_ 2023 PWDF_DRIVER_GLOBALS DriverGlobals, 2024 _In_ 2025 WDFDEVICE Device, 2026 _In_ 2027 PWDF_DEVICE_STATE DeviceState 2028 ); 2029 2030 _IRQL_requires_max_(DISPATCH_LEVEL) 2031 FORCEINLINE 2032 VOID 2033 WdfDeviceSetDeviceState( 2034 _In_ 2035 WDFDEVICE Device, 2036 _In_ 2037 PWDF_DEVICE_STATE DeviceState 2038 ) 2039 { 2040 ((PFN_WDFDEVICESETDEVICESTATE) WdfFunctions[WdfDeviceSetDeviceStateTableIndex])(WdfDriverGlobals, Device, DeviceState); 2041 } 2042 2043 // 2044 // WDF Function: WdfWdmDeviceGetWdfDeviceHandle 2045 // 2046 typedef 2047 _IRQL_requires_max_(DISPATCH_LEVEL) 2048 WDFAPI 2049 WDFDEVICE 2050 (STDCALL *PFN_WDFWDMDEVICEGETWDFDEVICEHANDLE)( 2051 _In_ 2052 PWDF_DRIVER_GLOBALS DriverGlobals, 2053 _In_ 2054 PDEVICE_OBJECT DeviceObject 2055 ); 2056 2057 _IRQL_requires_max_(DISPATCH_LEVEL) 2058 FORCEINLINE 2059 WDFDEVICE 2060 WdfWdmDeviceGetWdfDeviceHandle( 2061 _In_ 2062 PDEVICE_OBJECT DeviceObject 2063 ) 2064 { 2065 return ((PFN_WDFWDMDEVICEGETWDFDEVICEHANDLE) WdfFunctions[WdfWdmDeviceGetWdfDeviceHandleTableIndex])(WdfDriverGlobals, DeviceObject); 2066 } 2067 2068 // 2069 // WDF Function: WdfDeviceWdmGetDeviceObject 2070 // 2071 typedef 2072 _IRQL_requires_max_(DISPATCH_LEVEL) 2073 WDFAPI 2074 PDEVICE_OBJECT 2075 (STDCALL *PFN_WDFDEVICEWDMGETDEVICEOBJECT)( 2076 _In_ 2077 PWDF_DRIVER_GLOBALS DriverGlobals, 2078 _In_ 2079 WDFDEVICE Device 2080 ); 2081 2082 _IRQL_requires_max_(DISPATCH_LEVEL) 2083 FORCEINLINE 2084 PDEVICE_OBJECT 2085 WdfDeviceWdmGetDeviceObject( 2086 _In_ 2087 WDFDEVICE Device 2088 ) 2089 { 2090 return ((PFN_WDFDEVICEWDMGETDEVICEOBJECT) WdfFunctions[WdfDeviceWdmGetDeviceObjectTableIndex])(WdfDriverGlobals, Device); 2091 } 2092 2093 // 2094 // WDF Function: WdfDeviceWdmGetAttachedDevice 2095 // 2096 typedef 2097 _IRQL_requires_max_(DISPATCH_LEVEL) 2098 WDFAPI 2099 PDEVICE_OBJECT 2100 (STDCALL *PFN_WDFDEVICEWDMGETATTACHEDDEVICE)( 2101 _In_ 2102 PWDF_DRIVER_GLOBALS DriverGlobals, 2103 _In_ 2104 WDFDEVICE Device 2105 ); 2106 2107 _IRQL_requires_max_(DISPATCH_LEVEL) 2108 FORCEINLINE 2109 PDEVICE_OBJECT 2110 WdfDeviceWdmGetAttachedDevice( 2111 _In_ 2112 WDFDEVICE Device 2113 ) 2114 { 2115 return ((PFN_WDFDEVICEWDMGETATTACHEDDEVICE) WdfFunctions[WdfDeviceWdmGetAttachedDeviceTableIndex])(WdfDriverGlobals, Device); 2116 } 2117 2118 // 2119 // WDF Function: WdfDeviceWdmGetPhysicalDevice 2120 // 2121 typedef 2122 _IRQL_requires_max_(DISPATCH_LEVEL) 2123 WDFAPI 2124 PDEVICE_OBJECT 2125 (STDCALL *PFN_WDFDEVICEWDMGETPHYSICALDEVICE)( 2126 _In_ 2127 PWDF_DRIVER_GLOBALS DriverGlobals, 2128 _In_ 2129 WDFDEVICE Device 2130 ); 2131 2132 _IRQL_requires_max_(DISPATCH_LEVEL) 2133 FORCEINLINE 2134 PDEVICE_OBJECT 2135 WdfDeviceWdmGetPhysicalDevice( 2136 _In_ 2137 WDFDEVICE Device 2138 ) 2139 { 2140 return ((PFN_WDFDEVICEWDMGETPHYSICALDEVICE) WdfFunctions[WdfDeviceWdmGetPhysicalDeviceTableIndex])(WdfDriverGlobals, Device); 2141 } 2142 2143 // 2144 // WDF Function: WdfDeviceWdmDispatchPreprocessedIrp 2145 // 2146 typedef 2147 _Must_inspect_result_ 2148 _IRQL_requires_max_(DISPATCH_LEVEL) 2149 WDFAPI 2150 NTSTATUS 2151 (STDCALL *PFN_WDFDEVICEWDMDISPATCHPREPROCESSEDIRP)( 2152 _In_ 2153 PWDF_DRIVER_GLOBALS DriverGlobals, 2154 _In_ 2155 WDFDEVICE Device, 2156 _In_ 2157 PIRP Irp 2158 ); 2159 2160 _Must_inspect_result_ 2161 _IRQL_requires_max_(DISPATCH_LEVEL) 2162 FORCEINLINE 2163 NTSTATUS 2164 WdfDeviceWdmDispatchPreprocessedIrp( 2165 _In_ 2166 WDFDEVICE Device, 2167 _In_ 2168 PIRP Irp 2169 ) 2170 { 2171 return ((PFN_WDFDEVICEWDMDISPATCHPREPROCESSEDIRP) WdfFunctions[WdfDeviceWdmDispatchPreprocessedIrpTableIndex])(WdfDriverGlobals, Device, Irp); 2172 } 2173 2174 // 2175 // WDF Function: WdfDeviceWdmDispatchIrp 2176 // 2177 typedef 2178 _Must_inspect_result_ 2179 _IRQL_requires_max_(DISPATCH_LEVEL) 2180 WDFAPI 2181 NTSTATUS 2182 (STDCALL *PFN_WDFDEVICEWDMDISPATCHIRP)( 2183 _In_ 2184 PWDF_DRIVER_GLOBALS DriverGlobals, 2185 _In_ 2186 WDFDEVICE Device, 2187 _In_ 2188 PIRP Irp, 2189 _In_ 2190 WDFCONTEXT DispatchContext 2191 ); 2192 2193 _Must_inspect_result_ 2194 _IRQL_requires_max_(DISPATCH_LEVEL) 2195 FORCEINLINE 2196 NTSTATUS 2197 WdfDeviceWdmDispatchIrp( 2198 _In_ 2199 WDFDEVICE Device, 2200 _In_ 2201 PIRP Irp, 2202 _In_ 2203 WDFCONTEXT DispatchContext 2204 ) 2205 { 2206 return ((PFN_WDFDEVICEWDMDISPATCHIRP) WdfFunctions[WdfDeviceWdmDispatchIrpTableIndex])(WdfDriverGlobals, Device, Irp, DispatchContext); 2207 } 2208 2209 // 2210 // WDF Function: WdfDeviceWdmDispatchIrpToIoQueue 2211 // 2212 typedef 2213 _Must_inspect_result_ 2214 _IRQL_requires_max_(DISPATCH_LEVEL) 2215 WDFAPI 2216 NTSTATUS 2217 (STDCALL *PFN_WDFDEVICEWDMDISPATCHIRPTOIOQUEUE)( 2218 _In_ 2219 PWDF_DRIVER_GLOBALS DriverGlobals, 2220 _In_ 2221 WDFDEVICE Device, 2222 _In_ 2223 PIRP Irp, 2224 _In_ 2225 WDFQUEUE Queue, 2226 _In_ 2227 ULONG Flags 2228 ); 2229 2230 _Must_inspect_result_ 2231 _IRQL_requires_max_(DISPATCH_LEVEL) 2232 FORCEINLINE 2233 NTSTATUS 2234 WdfDeviceWdmDispatchIrpToIoQueue( 2235 _In_ 2236 WDFDEVICE Device, 2237 _In_ 2238 PIRP Irp, 2239 _In_ 2240 WDFQUEUE Queue, 2241 _In_ 2242 ULONG Flags 2243 ) 2244 { 2245 return ((PFN_WDFDEVICEWDMDISPATCHIRPTOIOQUEUE) WdfFunctions[WdfDeviceWdmDispatchIrpToIoQueueTableIndex])(WdfDriverGlobals, Device, Irp, Queue, Flags); 2246 } 2247 2248 // 2249 // WDF Function: WdfDeviceAddDependentUsageDeviceObject 2250 // 2251 typedef 2252 _Must_inspect_result_ 2253 _IRQL_requires_max_(DISPATCH_LEVEL) 2254 WDFAPI 2255 NTSTATUS 2256 (STDCALL *PFN_WDFDEVICEADDDEPENDENTUSAGEDEVICEOBJECT)( 2257 _In_ 2258 PWDF_DRIVER_GLOBALS DriverGlobals, 2259 _In_ 2260 WDFDEVICE Device, 2261 _In_ 2262 PDEVICE_OBJECT DependentDevice 2263 ); 2264 2265 _Must_inspect_result_ 2266 _IRQL_requires_max_(DISPATCH_LEVEL) 2267 FORCEINLINE 2268 NTSTATUS 2269 WdfDeviceAddDependentUsageDeviceObject( 2270 _In_ 2271 WDFDEVICE Device, 2272 _In_ 2273 PDEVICE_OBJECT DependentDevice 2274 ) 2275 { 2276 return ((PFN_WDFDEVICEADDDEPENDENTUSAGEDEVICEOBJECT) WdfFunctions[WdfDeviceAddDependentUsageDeviceObjectTableIndex])(WdfDriverGlobals, Device, DependentDevice); 2277 } 2278 2279 // 2280 // WDF Function: WdfDeviceRemoveDependentUsageDeviceObject 2281 // 2282 typedef 2283 _IRQL_requires_max_(DISPATCH_LEVEL) 2284 WDFAPI 2285 VOID 2286 (STDCALL *PFN_WDFDEVICEREMOVEDEPENDENTUSAGEDEVICEOBJECT)( 2287 _In_ 2288 PWDF_DRIVER_GLOBALS DriverGlobals, 2289 _In_ 2290 WDFDEVICE Device, 2291 _In_ 2292 PDEVICE_OBJECT DependentDevice 2293 ); 2294 2295 _IRQL_requires_max_(DISPATCH_LEVEL) 2296 FORCEINLINE 2297 VOID 2298 WdfDeviceRemoveDependentUsageDeviceObject( 2299 _In_ 2300 WDFDEVICE Device, 2301 _In_ 2302 PDEVICE_OBJECT DependentDevice 2303 ) 2304 { 2305 ((PFN_WDFDEVICEREMOVEDEPENDENTUSAGEDEVICEOBJECT) WdfFunctions[WdfDeviceRemoveDependentUsageDeviceObjectTableIndex])(WdfDriverGlobals, Device, DependentDevice); 2306 } 2307 2308 // 2309 // WDF Function: WdfDeviceAddRemovalRelationsPhysicalDevice 2310 // 2311 typedef 2312 _Must_inspect_result_ 2313 _IRQL_requires_max_(DISPATCH_LEVEL) 2314 WDFAPI 2315 NTSTATUS 2316 (STDCALL *PFN_WDFDEVICEADDREMOVALRELATIONSPHYSICALDEVICE)( 2317 _In_ 2318 PWDF_DRIVER_GLOBALS DriverGlobals, 2319 _In_ 2320 WDFDEVICE Device, 2321 _In_ 2322 PDEVICE_OBJECT PhysicalDevice 2323 ); 2324 2325 _Must_inspect_result_ 2326 _IRQL_requires_max_(DISPATCH_LEVEL) 2327 FORCEINLINE 2328 NTSTATUS 2329 WdfDeviceAddRemovalRelationsPhysicalDevice( 2330 _In_ 2331 WDFDEVICE Device, 2332 _In_ 2333 PDEVICE_OBJECT PhysicalDevice 2334 ) 2335 { 2336 return ((PFN_WDFDEVICEADDREMOVALRELATIONSPHYSICALDEVICE) WdfFunctions[WdfDeviceAddRemovalRelationsPhysicalDeviceTableIndex])(WdfDriverGlobals, Device, PhysicalDevice); 2337 } 2338 2339 // 2340 // WDF Function: WdfDeviceRemoveRemovalRelationsPhysicalDevice 2341 // 2342 typedef 2343 _IRQL_requires_max_(DISPATCH_LEVEL) 2344 WDFAPI 2345 VOID 2346 (STDCALL *PFN_WDFDEVICEREMOVEREMOVALRELATIONSPHYSICALDEVICE)( 2347 _In_ 2348 PWDF_DRIVER_GLOBALS DriverGlobals, 2349 _In_ 2350 WDFDEVICE Device, 2351 _In_ 2352 PDEVICE_OBJECT PhysicalDevice 2353 ); 2354 2355 _IRQL_requires_max_(DISPATCH_LEVEL) 2356 FORCEINLINE 2357 VOID 2358 WdfDeviceRemoveRemovalRelationsPhysicalDevice( 2359 _In_ 2360 WDFDEVICE Device, 2361 _In_ 2362 PDEVICE_OBJECT PhysicalDevice 2363 ) 2364 { 2365 ((PFN_WDFDEVICEREMOVEREMOVALRELATIONSPHYSICALDEVICE) WdfFunctions[WdfDeviceRemoveRemovalRelationsPhysicalDeviceTableIndex])(WdfDriverGlobals, Device, PhysicalDevice); 2366 } 2367 2368 // 2369 // WDF Function: WdfDeviceClearRemovalRelationsDevices 2370 // 2371 typedef 2372 _IRQL_requires_max_(DISPATCH_LEVEL) 2373 WDFAPI 2374 VOID 2375 (STDCALL *PFN_WDFDEVICECLEARREMOVALRELATIONSDEVICES)( 2376 _In_ 2377 PWDF_DRIVER_GLOBALS DriverGlobals, 2378 _In_ 2379 WDFDEVICE Device 2380 ); 2381 2382 _IRQL_requires_max_(DISPATCH_LEVEL) 2383 FORCEINLINE 2384 VOID 2385 WdfDeviceClearRemovalRelationsDevices( 2386 _In_ 2387 WDFDEVICE Device 2388 ) 2389 { 2390 ((PFN_WDFDEVICECLEARREMOVALRELATIONSDEVICES) WdfFunctions[WdfDeviceClearRemovalRelationsDevicesTableIndex])(WdfDriverGlobals, Device); 2391 } 2392 2393 // 2394 // WDF Function: WdfDeviceGetDriver 2395 // 2396 typedef 2397 _IRQL_requires_max_(DISPATCH_LEVEL) 2398 WDFAPI 2399 WDFDRIVER 2400 (STDCALL *PFN_WDFDEVICEGETDRIVER)( 2401 _In_ 2402 PWDF_DRIVER_GLOBALS DriverGlobals, 2403 _In_ 2404 WDFDEVICE Device 2405 ); 2406 2407 _IRQL_requires_max_(DISPATCH_LEVEL) 2408 FORCEINLINE 2409 WDFDRIVER 2410 WdfDeviceGetDriver( 2411 _In_ 2412 WDFDEVICE Device 2413 ) 2414 { 2415 return ((PFN_WDFDEVICEGETDRIVER) WdfFunctions[WdfDeviceGetDriverTableIndex])(WdfDriverGlobals, Device); 2416 } 2417 2418 // 2419 // WDF Function: WdfDeviceRetrieveDeviceName 2420 // 2421 typedef 2422 _Must_inspect_result_ 2423 _IRQL_requires_max_(PASSIVE_LEVEL) 2424 WDFAPI 2425 NTSTATUS 2426 (STDCALL *PFN_WDFDEVICERETRIEVEDEVICENAME)( 2427 _In_ 2428 PWDF_DRIVER_GLOBALS DriverGlobals, 2429 _In_ 2430 WDFDEVICE Device, 2431 _In_ 2432 WDFSTRING String 2433 ); 2434 2435 _Must_inspect_result_ 2436 _IRQL_requires_max_(PASSIVE_LEVEL) 2437 FORCEINLINE 2438 NTSTATUS 2439 WdfDeviceRetrieveDeviceName( 2440 _In_ 2441 WDFDEVICE Device, 2442 _In_ 2443 WDFSTRING String 2444 ) 2445 { 2446 return ((PFN_WDFDEVICERETRIEVEDEVICENAME) WdfFunctions[WdfDeviceRetrieveDeviceNameTableIndex])(WdfDriverGlobals, Device, String); 2447 } 2448 2449 // 2450 // WDF Function: WdfDeviceAssignMofResourceName 2451 // 2452 typedef 2453 _Must_inspect_result_ 2454 _IRQL_requires_max_(PASSIVE_LEVEL) 2455 WDFAPI 2456 NTSTATUS 2457 (STDCALL *PFN_WDFDEVICEASSIGNMOFRESOURCENAME)( 2458 _In_ 2459 PWDF_DRIVER_GLOBALS DriverGlobals, 2460 _In_ 2461 WDFDEVICE Device, 2462 _In_ 2463 PCUNICODE_STRING MofResourceName 2464 ); 2465 2466 _Must_inspect_result_ 2467 _IRQL_requires_max_(PASSIVE_LEVEL) 2468 FORCEINLINE 2469 NTSTATUS 2470 WdfDeviceAssignMofResourceName( 2471 _In_ 2472 WDFDEVICE Device, 2473 _In_ 2474 PCUNICODE_STRING MofResourceName 2475 ) 2476 { 2477 return ((PFN_WDFDEVICEASSIGNMOFRESOURCENAME) WdfFunctions[WdfDeviceAssignMofResourceNameTableIndex])(WdfDriverGlobals, Device, MofResourceName); 2478 } 2479 2480 // 2481 // WDF Function: WdfDeviceGetIoTarget 2482 // 2483 typedef 2484 _IRQL_requires_max_(DISPATCH_LEVEL) 2485 WDFAPI 2486 WDFIOTARGET 2487 (STDCALL *PFN_WDFDEVICEGETIOTARGET)( 2488 _In_ 2489 PWDF_DRIVER_GLOBALS DriverGlobals, 2490 _In_ 2491 WDFDEVICE Device 2492 ); 2493 2494 _IRQL_requires_max_(DISPATCH_LEVEL) 2495 FORCEINLINE 2496 WDFIOTARGET 2497 WdfDeviceGetIoTarget( 2498 _In_ 2499 WDFDEVICE Device 2500 ) 2501 { 2502 return ((PFN_WDFDEVICEGETIOTARGET) WdfFunctions[WdfDeviceGetIoTargetTableIndex])(WdfDriverGlobals, Device); 2503 } 2504 2505 // 2506 // WDF Function: WdfDeviceGetDevicePnpState 2507 // 2508 typedef 2509 _IRQL_requires_max_(DISPATCH_LEVEL) 2510 WDFAPI 2511 WDF_DEVICE_PNP_STATE 2512 (STDCALL *PFN_WDFDEVICEGETDEVICEPNPSTATE)( 2513 _In_ 2514 PWDF_DRIVER_GLOBALS DriverGlobals, 2515 _In_ 2516 WDFDEVICE Device 2517 ); 2518 2519 _IRQL_requires_max_(DISPATCH_LEVEL) 2520 FORCEINLINE 2521 WDF_DEVICE_PNP_STATE 2522 WdfDeviceGetDevicePnpState( 2523 _In_ 2524 WDFDEVICE Device 2525 ) 2526 { 2527 return ((PFN_WDFDEVICEGETDEVICEPNPSTATE) WdfFunctions[WdfDeviceGetDevicePnpStateTableIndex])(WdfDriverGlobals, Device); 2528 } 2529 2530 // 2531 // WDF Function: WdfDeviceGetDevicePowerState 2532 // 2533 typedef 2534 _IRQL_requires_max_(DISPATCH_LEVEL) 2535 WDFAPI 2536 WDF_DEVICE_POWER_STATE 2537 (STDCALL *PFN_WDFDEVICEGETDEVICEPOWERSTATE)( 2538 _In_ 2539 PWDF_DRIVER_GLOBALS DriverGlobals, 2540 _In_ 2541 WDFDEVICE Device 2542 ); 2543 2544 _IRQL_requires_max_(DISPATCH_LEVEL) 2545 FORCEINLINE 2546 WDF_DEVICE_POWER_STATE 2547 WdfDeviceGetDevicePowerState( 2548 _In_ 2549 WDFDEVICE Device 2550 ) 2551 { 2552 return ((PFN_WDFDEVICEGETDEVICEPOWERSTATE) WdfFunctions[WdfDeviceGetDevicePowerStateTableIndex])(WdfDriverGlobals, Device); 2553 } 2554 2555 // 2556 // WDF Function: WdfDeviceGetDevicePowerPolicyState 2557 // 2558 typedef 2559 _IRQL_requires_max_(DISPATCH_LEVEL) 2560 WDFAPI 2561 WDF_DEVICE_POWER_POLICY_STATE 2562 (STDCALL *PFN_WDFDEVICEGETDEVICEPOWERPOLICYSTATE)( 2563 _In_ 2564 PWDF_DRIVER_GLOBALS DriverGlobals, 2565 _In_ 2566 WDFDEVICE Device 2567 ); 2568 2569 _IRQL_requires_max_(DISPATCH_LEVEL) 2570 FORCEINLINE 2571 WDF_DEVICE_POWER_POLICY_STATE 2572 WdfDeviceGetDevicePowerPolicyState( 2573 _In_ 2574 WDFDEVICE Device 2575 ) 2576 { 2577 return ((PFN_WDFDEVICEGETDEVICEPOWERPOLICYSTATE) WdfFunctions[WdfDeviceGetDevicePowerPolicyStateTableIndex])(WdfDriverGlobals, Device); 2578 } 2579 2580 // 2581 // WDF Function: WdfDeviceAssignS0IdleSettings 2582 // 2583 typedef 2584 _Must_inspect_result_ 2585 _IRQL_requires_max_(DISPATCH_LEVEL) 2586 WDFAPI 2587 NTSTATUS 2588 (STDCALL *PFN_WDFDEVICEASSIGNS0IDLESETTINGS)( 2589 _In_ 2590 PWDF_DRIVER_GLOBALS DriverGlobals, 2591 _In_ 2592 WDFDEVICE Device, 2593 _In_ 2594 PWDF_DEVICE_POWER_POLICY_IDLE_SETTINGS Settings 2595 ); 2596 2597 _Must_inspect_result_ 2598 _IRQL_requires_max_(DISPATCH_LEVEL) 2599 FORCEINLINE 2600 NTSTATUS 2601 WdfDeviceAssignS0IdleSettings( 2602 _In_ 2603 WDFDEVICE Device, 2604 _In_ 2605 PWDF_DEVICE_POWER_POLICY_IDLE_SETTINGS Settings 2606 ) 2607 { 2608 return ((PFN_WDFDEVICEASSIGNS0IDLESETTINGS) WdfFunctions[WdfDeviceAssignS0IdleSettingsTableIndex])(WdfDriverGlobals, Device, Settings); 2609 } 2610 2611 // 2612 // WDF Function: WdfDeviceAssignSxWakeSettings 2613 // 2614 typedef 2615 _Must_inspect_result_ 2616 _IRQL_requires_max_(DISPATCH_LEVEL) 2617 WDFAPI 2618 NTSTATUS 2619 (STDCALL *PFN_WDFDEVICEASSIGNSXWAKESETTINGS)( 2620 _In_ 2621 PWDF_DRIVER_GLOBALS DriverGlobals, 2622 _In_ 2623 WDFDEVICE Device, 2624 _In_ 2625 PWDF_DEVICE_POWER_POLICY_WAKE_SETTINGS Settings 2626 ); 2627 2628 _Must_inspect_result_ 2629 _IRQL_requires_max_(DISPATCH_LEVEL) 2630 FORCEINLINE 2631 NTSTATUS 2632 WdfDeviceAssignSxWakeSettings( 2633 _In_ 2634 WDFDEVICE Device, 2635 _In_ 2636 PWDF_DEVICE_POWER_POLICY_WAKE_SETTINGS Settings 2637 ) 2638 { 2639 return ((PFN_WDFDEVICEASSIGNSXWAKESETTINGS) WdfFunctions[WdfDeviceAssignSxWakeSettingsTableIndex])(WdfDriverGlobals, Device, Settings); 2640 } 2641 2642 // 2643 // WDF Function: WdfDeviceOpenRegistryKey 2644 // 2645 typedef 2646 _Must_inspect_result_ 2647 _IRQL_requires_max_(PASSIVE_LEVEL) 2648 WDFAPI 2649 NTSTATUS 2650 (STDCALL *PFN_WDFDEVICEOPENREGISTRYKEY)( 2651 _In_ 2652 PWDF_DRIVER_GLOBALS DriverGlobals, 2653 _In_ 2654 WDFDEVICE Device, 2655 _In_ 2656 ULONG DeviceInstanceKeyType, 2657 _In_ 2658 ACCESS_MASK DesiredAccess, 2659 _In_opt_ 2660 PWDF_OBJECT_ATTRIBUTES KeyAttributes, 2661 _Out_ 2662 WDFKEY* Key 2663 ); 2664 2665 _Must_inspect_result_ 2666 _IRQL_requires_max_(PASSIVE_LEVEL) 2667 FORCEINLINE 2668 NTSTATUS 2669 WdfDeviceOpenRegistryKey( 2670 _In_ 2671 WDFDEVICE Device, 2672 _In_ 2673 ULONG DeviceInstanceKeyType, 2674 _In_ 2675 ACCESS_MASK DesiredAccess, 2676 _In_opt_ 2677 PWDF_OBJECT_ATTRIBUTES KeyAttributes, 2678 _Out_ 2679 WDFKEY* Key 2680 ) 2681 { 2682 return ((PFN_WDFDEVICEOPENREGISTRYKEY) WdfFunctions[WdfDeviceOpenRegistryKeyTableIndex])(WdfDriverGlobals, Device, DeviceInstanceKeyType, DesiredAccess, KeyAttributes, Key); 2683 } 2684 2685 // 2686 // WDF Function: WdfDeviceOpenDevicemapKey 2687 // 2688 typedef 2689 _Must_inspect_result_ 2690 _IRQL_requires_max_(PASSIVE_LEVEL) 2691 WDFAPI 2692 NTSTATUS 2693 (STDCALL *PFN_WDFDEVICEOPENDEVICEMAPKEY)( 2694 _In_ 2695 PWDF_DRIVER_GLOBALS DriverGlobals, 2696 _In_ 2697 WDFDEVICE Device, 2698 _In_ 2699 PCUNICODE_STRING KeyName, 2700 _In_ 2701 ACCESS_MASK DesiredAccess, 2702 _In_opt_ 2703 PWDF_OBJECT_ATTRIBUTES KeyAttributes, 2704 _Out_ 2705 WDFKEY* Key 2706 ); 2707 2708 _Must_inspect_result_ 2709 _IRQL_requires_max_(PASSIVE_LEVEL) 2710 FORCEINLINE 2711 NTSTATUS 2712 WdfDeviceOpenDevicemapKey( 2713 _In_ 2714 WDFDEVICE Device, 2715 _In_ 2716 PCUNICODE_STRING KeyName, 2717 _In_ 2718 ACCESS_MASK DesiredAccess, 2719 _In_opt_ 2720 PWDF_OBJECT_ATTRIBUTES KeyAttributes, 2721 _Out_ 2722 WDFKEY* Key 2723 ) 2724 { 2725 return ((PFN_WDFDEVICEOPENDEVICEMAPKEY) WdfFunctions[WdfDeviceOpenDevicemapKeyTableIndex])(WdfDriverGlobals, Device, KeyName, DesiredAccess, KeyAttributes, Key); 2726 } 2727 2728 // 2729 // WDF Function: WdfDeviceSetSpecialFileSupport 2730 // 2731 typedef 2732 _IRQL_requires_max_(DISPATCH_LEVEL) 2733 WDFAPI 2734 VOID 2735 (STDCALL *PFN_WDFDEVICESETSPECIALFILESUPPORT)( 2736 _In_ 2737 PWDF_DRIVER_GLOBALS DriverGlobals, 2738 _In_ 2739 WDFDEVICE Device, 2740 _In_ 2741 WDF_SPECIAL_FILE_TYPE FileType, 2742 _In_ 2743 BOOLEAN FileTypeIsSupported 2744 ); 2745 2746 _IRQL_requires_max_(DISPATCH_LEVEL) 2747 FORCEINLINE 2748 VOID 2749 WdfDeviceSetSpecialFileSupport( 2750 _In_ 2751 WDFDEVICE Device, 2752 _In_ 2753 WDF_SPECIAL_FILE_TYPE FileType, 2754 _In_ 2755 BOOLEAN FileTypeIsSupported 2756 ) 2757 { 2758 ((PFN_WDFDEVICESETSPECIALFILESUPPORT) WdfFunctions[WdfDeviceSetSpecialFileSupportTableIndex])(WdfDriverGlobals, Device, FileType, FileTypeIsSupported); 2759 } 2760 2761 // 2762 // WDF Function: WdfDeviceSetCharacteristics 2763 // 2764 typedef 2765 _IRQL_requires_max_(DISPATCH_LEVEL) 2766 WDFAPI 2767 VOID 2768 (STDCALL *PFN_WDFDEVICESETCHARACTERISTICS)( 2769 _In_ 2770 PWDF_DRIVER_GLOBALS DriverGlobals, 2771 _In_ 2772 WDFDEVICE Device, 2773 _In_ 2774 ULONG DeviceCharacteristics 2775 ); 2776 2777 _IRQL_requires_max_(DISPATCH_LEVEL) 2778 FORCEINLINE 2779 VOID 2780 WdfDeviceSetCharacteristics( 2781 _In_ 2782 WDFDEVICE Device, 2783 _In_ 2784 ULONG DeviceCharacteristics 2785 ) 2786 { 2787 ((PFN_WDFDEVICESETCHARACTERISTICS) WdfFunctions[WdfDeviceSetCharacteristicsTableIndex])(WdfDriverGlobals, Device, DeviceCharacteristics); 2788 } 2789 2790 // 2791 // WDF Function: WdfDeviceGetCharacteristics 2792 // 2793 typedef 2794 _IRQL_requires_max_(DISPATCH_LEVEL) 2795 WDFAPI 2796 ULONG 2797 (STDCALL *PFN_WDFDEVICEGETCHARACTERISTICS)( 2798 _In_ 2799 PWDF_DRIVER_GLOBALS DriverGlobals, 2800 _In_ 2801 WDFDEVICE Device 2802 ); 2803 2804 _IRQL_requires_max_(DISPATCH_LEVEL) 2805 FORCEINLINE 2806 ULONG 2807 WdfDeviceGetCharacteristics( 2808 _In_ 2809 WDFDEVICE Device 2810 ) 2811 { 2812 return ((PFN_WDFDEVICEGETCHARACTERISTICS) WdfFunctions[WdfDeviceGetCharacteristicsTableIndex])(WdfDriverGlobals, Device); 2813 } 2814 2815 // 2816 // WDF Function: WdfDeviceGetAlignmentRequirement 2817 // 2818 typedef 2819 _IRQL_requires_max_(DISPATCH_LEVEL) 2820 WDFAPI 2821 ULONG 2822 (STDCALL *PFN_WDFDEVICEGETALIGNMENTREQUIREMENT)( 2823 _In_ 2824 PWDF_DRIVER_GLOBALS DriverGlobals, 2825 _In_ 2826 WDFDEVICE Device 2827 ); 2828 2829 _IRQL_requires_max_(DISPATCH_LEVEL) 2830 FORCEINLINE 2831 ULONG 2832 WdfDeviceGetAlignmentRequirement( 2833 _In_ 2834 WDFDEVICE Device 2835 ) 2836 { 2837 return ((PFN_WDFDEVICEGETALIGNMENTREQUIREMENT) WdfFunctions[WdfDeviceGetAlignmentRequirementTableIndex])(WdfDriverGlobals, Device); 2838 } 2839 2840 // 2841 // WDF Function: WdfDeviceSetAlignmentRequirement 2842 // 2843 typedef 2844 _IRQL_requires_max_(DISPATCH_LEVEL) 2845 WDFAPI 2846 VOID 2847 (STDCALL *PFN_WDFDEVICESETALIGNMENTREQUIREMENT)( 2848 _In_ 2849 PWDF_DRIVER_GLOBALS DriverGlobals, 2850 _In_ 2851 WDFDEVICE Device, 2852 _In_ 2853 ULONG AlignmentRequirement 2854 ); 2855 2856 _IRQL_requires_max_(DISPATCH_LEVEL) 2857 FORCEINLINE 2858 VOID 2859 WdfDeviceSetAlignmentRequirement( 2860 _In_ 2861 WDFDEVICE Device, 2862 _In_ 2863 ULONG AlignmentRequirement 2864 ) 2865 { 2866 ((PFN_WDFDEVICESETALIGNMENTREQUIREMENT) WdfFunctions[WdfDeviceSetAlignmentRequirementTableIndex])(WdfDriverGlobals, Device, AlignmentRequirement); 2867 } 2868 2869 // 2870 // WDF Function: WdfDeviceInitFree 2871 // 2872 typedef 2873 _IRQL_requires_max_(DISPATCH_LEVEL) 2874 WDFAPI 2875 VOID 2876 (STDCALL *PFN_WDFDEVICEINITFREE)( 2877 _In_ 2878 PWDF_DRIVER_GLOBALS DriverGlobals, 2879 _In_ 2880 PWDFDEVICE_INIT DeviceInit 2881 ); 2882 2883 _IRQL_requires_max_(DISPATCH_LEVEL) 2884 FORCEINLINE 2885 VOID 2886 WdfDeviceInitFree( 2887 _In_ 2888 PWDFDEVICE_INIT DeviceInit 2889 ) 2890 { 2891 ((PFN_WDFDEVICEINITFREE) WdfFunctions[WdfDeviceInitFreeTableIndex])(WdfDriverGlobals, DeviceInit); 2892 } 2893 2894 // 2895 // WDF Function: WdfDeviceInitSetPnpPowerEventCallbacks 2896 // 2897 typedef 2898 _IRQL_requires_max_(DISPATCH_LEVEL) 2899 WDFAPI 2900 VOID 2901 (STDCALL *PFN_WDFDEVICEINITSETPNPPOWEREVENTCALLBACKS)( 2902 _In_ 2903 PWDF_DRIVER_GLOBALS DriverGlobals, 2904 _In_ 2905 PWDFDEVICE_INIT DeviceInit, 2906 _In_ 2907 PWDF_PNPPOWER_EVENT_CALLBACKS PnpPowerEventCallbacks 2908 ); 2909 2910 _IRQL_requires_max_(DISPATCH_LEVEL) 2911 FORCEINLINE 2912 VOID 2913 WdfDeviceInitSetPnpPowerEventCallbacks( 2914 _In_ 2915 PWDFDEVICE_INIT DeviceInit, 2916 _In_ 2917 PWDF_PNPPOWER_EVENT_CALLBACKS PnpPowerEventCallbacks 2918 ) 2919 { 2920 ((PFN_WDFDEVICEINITSETPNPPOWEREVENTCALLBACKS) WdfFunctions[WdfDeviceInitSetPnpPowerEventCallbacksTableIndex])(WdfDriverGlobals, DeviceInit, PnpPowerEventCallbacks); 2921 } 2922 2923 // 2924 // WDF Function: WdfDeviceInitSetPowerPolicyEventCallbacks 2925 // 2926 typedef 2927 _IRQL_requires_max_(DISPATCH_LEVEL) 2928 WDFAPI 2929 VOID 2930 (STDCALL *PFN_WDFDEVICEINITSETPOWERPOLICYEVENTCALLBACKS)( 2931 _In_ 2932 PWDF_DRIVER_GLOBALS DriverGlobals, 2933 _In_ 2934 PWDFDEVICE_INIT DeviceInit, 2935 _In_ 2936 PWDF_POWER_POLICY_EVENT_CALLBACKS PowerPolicyEventCallbacks 2937 ); 2938 2939 _IRQL_requires_max_(DISPATCH_LEVEL) 2940 FORCEINLINE 2941 VOID 2942 WdfDeviceInitSetPowerPolicyEventCallbacks( 2943 _In_ 2944 PWDFDEVICE_INIT DeviceInit, 2945 _In_ 2946 PWDF_POWER_POLICY_EVENT_CALLBACKS PowerPolicyEventCallbacks 2947 ) 2948 { 2949 ((PFN_WDFDEVICEINITSETPOWERPOLICYEVENTCALLBACKS) WdfFunctions[WdfDeviceInitSetPowerPolicyEventCallbacksTableIndex])(WdfDriverGlobals, DeviceInit, PowerPolicyEventCallbacks); 2950 } 2951 2952 // 2953 // WDF Function: WdfDeviceInitSetPowerPolicyOwnership 2954 // 2955 typedef 2956 _IRQL_requires_max_(DISPATCH_LEVEL) 2957 WDFAPI 2958 VOID 2959 (STDCALL *PFN_WDFDEVICEINITSETPOWERPOLICYOWNERSHIP)( 2960 _In_ 2961 PWDF_DRIVER_GLOBALS DriverGlobals, 2962 _In_ 2963 PWDFDEVICE_INIT DeviceInit, 2964 _In_ 2965 BOOLEAN IsPowerPolicyOwner 2966 ); 2967 2968 _IRQL_requires_max_(DISPATCH_LEVEL) 2969 FORCEINLINE 2970 VOID 2971 WdfDeviceInitSetPowerPolicyOwnership( 2972 _In_ 2973 PWDFDEVICE_INIT DeviceInit, 2974 _In_ 2975 BOOLEAN IsPowerPolicyOwner 2976 ) 2977 { 2978 ((PFN_WDFDEVICEINITSETPOWERPOLICYOWNERSHIP) WdfFunctions[WdfDeviceInitSetPowerPolicyOwnershipTableIndex])(WdfDriverGlobals, DeviceInit, IsPowerPolicyOwner); 2979 } 2980 2981 // 2982 // WDF Function: WdfDeviceInitRegisterPnpStateChangeCallback 2983 // 2984 typedef 2985 _Must_inspect_result_ 2986 _IRQL_requires_max_(PASSIVE_LEVEL) 2987 WDFAPI 2988 NTSTATUS 2989 (STDCALL *PFN_WDFDEVICEINITREGISTERPNPSTATECHANGECALLBACK)( 2990 _In_ 2991 PWDF_DRIVER_GLOBALS DriverGlobals, 2992 _In_ 2993 PWDFDEVICE_INIT DeviceInit, 2994 _In_ 2995 WDF_DEVICE_PNP_STATE PnpState, 2996 _In_ 2997 PFN_WDF_DEVICE_PNP_STATE_CHANGE_NOTIFICATION EvtDevicePnpStateChange, 2998 _In_ 2999 ULONG CallbackTypes 3000 ); 3001 3002 _Must_inspect_result_ 3003 _IRQL_requires_max_(PASSIVE_LEVEL) 3004 FORCEINLINE 3005 NTSTATUS 3006 WdfDeviceInitRegisterPnpStateChangeCallback( 3007 _In_ 3008 PWDFDEVICE_INIT DeviceInit, 3009 _In_ 3010 WDF_DEVICE_PNP_STATE PnpState, 3011 _In_ 3012 PFN_WDF_DEVICE_PNP_STATE_CHANGE_NOTIFICATION EvtDevicePnpStateChange, 3013 _In_ 3014 ULONG CallbackTypes 3015 ) 3016 { 3017 return ((PFN_WDFDEVICEINITREGISTERPNPSTATECHANGECALLBACK) WdfFunctions[WdfDeviceInitRegisterPnpStateChangeCallbackTableIndex])(WdfDriverGlobals, DeviceInit, PnpState, EvtDevicePnpStateChange, CallbackTypes); 3018 } 3019 3020 // 3021 // WDF Function: WdfDeviceInitRegisterPowerStateChangeCallback 3022 // 3023 typedef 3024 _Must_inspect_result_ 3025 _IRQL_requires_max_(PASSIVE_LEVEL) 3026 WDFAPI 3027 NTSTATUS 3028 (STDCALL *PFN_WDFDEVICEINITREGISTERPOWERSTATECHANGECALLBACK)( 3029 _In_ 3030 PWDF_DRIVER_GLOBALS DriverGlobals, 3031 _In_ 3032 PWDFDEVICE_INIT DeviceInit, 3033 _In_ 3034 WDF_DEVICE_POWER_STATE PowerState, 3035 _In_ 3036 PFN_WDF_DEVICE_POWER_STATE_CHANGE_NOTIFICATION EvtDevicePowerStateChange, 3037 _In_ 3038 ULONG CallbackTypes 3039 ); 3040 3041 _Must_inspect_result_ 3042 _IRQL_requires_max_(PASSIVE_LEVEL) 3043 FORCEINLINE 3044 NTSTATUS 3045 WdfDeviceInitRegisterPowerStateChangeCallback( 3046 _In_ 3047 PWDFDEVICE_INIT DeviceInit, 3048 _In_ 3049 WDF_DEVICE_POWER_STATE PowerState, 3050 _In_ 3051 PFN_WDF_DEVICE_POWER_STATE_CHANGE_NOTIFICATION EvtDevicePowerStateChange, 3052 _In_ 3053 ULONG CallbackTypes 3054 ) 3055 { 3056 return ((PFN_WDFDEVICEINITREGISTERPOWERSTATECHANGECALLBACK) WdfFunctions[WdfDeviceInitRegisterPowerStateChangeCallbackTableIndex])(WdfDriverGlobals, DeviceInit, PowerState, EvtDevicePowerStateChange, CallbackTypes); 3057 } 3058 3059 // 3060 // WDF Function: WdfDeviceInitRegisterPowerPolicyStateChangeCallback 3061 // 3062 typedef 3063 _Must_inspect_result_ 3064 _IRQL_requires_max_(PASSIVE_LEVEL) 3065 WDFAPI 3066 NTSTATUS 3067 (STDCALL *PFN_WDFDEVICEINITREGISTERPOWERPOLICYSTATECHANGECALLBACK)( 3068 _In_ 3069 PWDF_DRIVER_GLOBALS DriverGlobals, 3070 _In_ 3071 PWDFDEVICE_INIT DeviceInit, 3072 _In_ 3073 WDF_DEVICE_POWER_POLICY_STATE PowerPolicyState, 3074 _In_ 3075 PFN_WDF_DEVICE_POWER_POLICY_STATE_CHANGE_NOTIFICATION EvtDevicePowerPolicyStateChange, 3076 _In_ 3077 ULONG CallbackTypes 3078 ); 3079 3080 _Must_inspect_result_ 3081 _IRQL_requires_max_(PASSIVE_LEVEL) 3082 FORCEINLINE 3083 NTSTATUS 3084 WdfDeviceInitRegisterPowerPolicyStateChangeCallback( 3085 _In_ 3086 PWDFDEVICE_INIT DeviceInit, 3087 _In_ 3088 WDF_DEVICE_POWER_POLICY_STATE PowerPolicyState, 3089 _In_ 3090 PFN_WDF_DEVICE_POWER_POLICY_STATE_CHANGE_NOTIFICATION EvtDevicePowerPolicyStateChange, 3091 _In_ 3092 ULONG CallbackTypes 3093 ) 3094 { 3095 return ((PFN_WDFDEVICEINITREGISTERPOWERPOLICYSTATECHANGECALLBACK) WdfFunctions[WdfDeviceInitRegisterPowerPolicyStateChangeCallbackTableIndex])(WdfDriverGlobals, DeviceInit, PowerPolicyState, EvtDevicePowerPolicyStateChange, CallbackTypes); 3096 } 3097 3098 // 3099 // WDF Function: WdfDeviceInitSetExclusive 3100 // 3101 typedef 3102 _IRQL_requires_max_(DISPATCH_LEVEL) 3103 WDFAPI 3104 VOID 3105 (STDCALL *PFN_WDFDEVICEINITSETEXCLUSIVE)( 3106 _In_ 3107 PWDF_DRIVER_GLOBALS DriverGlobals, 3108 _In_ 3109 PWDFDEVICE_INIT DeviceInit, 3110 _In_ 3111 BOOLEAN IsExclusive 3112 ); 3113 3114 _IRQL_requires_max_(DISPATCH_LEVEL) 3115 FORCEINLINE 3116 VOID 3117 WdfDeviceInitSetExclusive( 3118 _In_ 3119 PWDFDEVICE_INIT DeviceInit, 3120 _In_ 3121 BOOLEAN IsExclusive 3122 ) 3123 { 3124 ((PFN_WDFDEVICEINITSETEXCLUSIVE) WdfFunctions[WdfDeviceInitSetExclusiveTableIndex])(WdfDriverGlobals, DeviceInit, IsExclusive); 3125 } 3126 3127 // 3128 // WDF Function: WdfDeviceInitSetIoType 3129 // 3130 typedef 3131 _IRQL_requires_max_(DISPATCH_LEVEL) 3132 WDFAPI 3133 VOID 3134 (STDCALL *PFN_WDFDEVICEINITSETIOTYPE)( 3135 _In_ 3136 PWDF_DRIVER_GLOBALS DriverGlobals, 3137 _In_ 3138 PWDFDEVICE_INIT DeviceInit, 3139 _In_ 3140 WDF_DEVICE_IO_TYPE IoType 3141 ); 3142 3143 _IRQL_requires_max_(DISPATCH_LEVEL) 3144 FORCEINLINE 3145 VOID 3146 WdfDeviceInitSetIoType( 3147 _In_ 3148 PWDFDEVICE_INIT DeviceInit, 3149 _In_ 3150 WDF_DEVICE_IO_TYPE IoType 3151 ) 3152 { 3153 ((PFN_WDFDEVICEINITSETIOTYPE) WdfFunctions[WdfDeviceInitSetIoTypeTableIndex])(WdfDriverGlobals, DeviceInit, IoType); 3154 } 3155 3156 // 3157 // WDF Function: WdfDeviceInitSetPowerNotPageable 3158 // 3159 typedef 3160 _IRQL_requires_max_(DISPATCH_LEVEL) 3161 WDFAPI 3162 VOID 3163 (STDCALL *PFN_WDFDEVICEINITSETPOWERNOTPAGEABLE)( 3164 _In_ 3165 PWDF_DRIVER_GLOBALS DriverGlobals, 3166 _In_ 3167 PWDFDEVICE_INIT DeviceInit 3168 ); 3169 3170 _IRQL_requires_max_(DISPATCH_LEVEL) 3171 FORCEINLINE 3172 VOID 3173 WdfDeviceInitSetPowerNotPageable( 3174 _In_ 3175 PWDFDEVICE_INIT DeviceInit 3176 ) 3177 { 3178 ((PFN_WDFDEVICEINITSETPOWERNOTPAGEABLE) WdfFunctions[WdfDeviceInitSetPowerNotPageableTableIndex])(WdfDriverGlobals, DeviceInit); 3179 } 3180 3181 // 3182 // WDF Function: WdfDeviceInitSetPowerPageable 3183 // 3184 typedef 3185 _IRQL_requires_max_(DISPATCH_LEVEL) 3186 WDFAPI 3187 VOID 3188 (STDCALL *PFN_WDFDEVICEINITSETPOWERPAGEABLE)( 3189 _In_ 3190 PWDF_DRIVER_GLOBALS DriverGlobals, 3191 _In_ 3192 PWDFDEVICE_INIT DeviceInit 3193 ); 3194 3195 _IRQL_requires_max_(DISPATCH_LEVEL) 3196 FORCEINLINE 3197 VOID 3198 WdfDeviceInitSetPowerPageable( 3199 _In_ 3200 PWDFDEVICE_INIT DeviceInit 3201 ) 3202 { 3203 ((PFN_WDFDEVICEINITSETPOWERPAGEABLE) WdfFunctions[WdfDeviceInitSetPowerPageableTableIndex])(WdfDriverGlobals, DeviceInit); 3204 } 3205 3206 // 3207 // WDF Function: WdfDeviceInitSetPowerInrush 3208 // 3209 typedef 3210 _IRQL_requires_max_(DISPATCH_LEVEL) 3211 WDFAPI 3212 VOID 3213 (STDCALL *PFN_WDFDEVICEINITSETPOWERINRUSH)( 3214 _In_ 3215 PWDF_DRIVER_GLOBALS DriverGlobals, 3216 _In_ 3217 PWDFDEVICE_INIT DeviceInit 3218 ); 3219 3220 _IRQL_requires_max_(DISPATCH_LEVEL) 3221 FORCEINLINE 3222 VOID 3223 WdfDeviceInitSetPowerInrush( 3224 _In_ 3225 PWDFDEVICE_INIT DeviceInit 3226 ) 3227 { 3228 ((PFN_WDFDEVICEINITSETPOWERINRUSH) WdfFunctions[WdfDeviceInitSetPowerInrushTableIndex])(WdfDriverGlobals, DeviceInit); 3229 } 3230 3231 // 3232 // WDF Function: WdfDeviceInitSetDeviceType 3233 // 3234 typedef 3235 _IRQL_requires_max_(DISPATCH_LEVEL) 3236 WDFAPI 3237 VOID 3238 (STDCALL *PFN_WDFDEVICEINITSETDEVICETYPE)( 3239 _In_ 3240 PWDF_DRIVER_GLOBALS DriverGlobals, 3241 _In_ 3242 PWDFDEVICE_INIT DeviceInit, 3243 _In_ 3244 DEVICE_TYPE DeviceType 3245 ); 3246 3247 _IRQL_requires_max_(DISPATCH_LEVEL) 3248 FORCEINLINE 3249 VOID 3250 WdfDeviceInitSetDeviceType( 3251 _In_ 3252 PWDFDEVICE_INIT DeviceInit, 3253 _In_ 3254 DEVICE_TYPE DeviceType 3255 ) 3256 { 3257 ((PFN_WDFDEVICEINITSETDEVICETYPE) WdfFunctions[WdfDeviceInitSetDeviceTypeTableIndex])(WdfDriverGlobals, DeviceInit, DeviceType); 3258 } 3259 3260 // 3261 // WDF Function: WdfDeviceInitAssignName 3262 // 3263 typedef 3264 _Must_inspect_result_ 3265 _IRQL_requires_max_(PASSIVE_LEVEL) 3266 WDFAPI 3267 NTSTATUS 3268 (STDCALL *PFN_WDFDEVICEINITASSIGNNAME)( 3269 _In_ 3270 PWDF_DRIVER_GLOBALS DriverGlobals, 3271 _In_ 3272 PWDFDEVICE_INIT DeviceInit, 3273 _In_opt_ 3274 PCUNICODE_STRING DeviceName 3275 ); 3276 3277 _Must_inspect_result_ 3278 _IRQL_requires_max_(PASSIVE_LEVEL) 3279 FORCEINLINE 3280 NTSTATUS 3281 WdfDeviceInitAssignName( 3282 _In_ 3283 PWDFDEVICE_INIT DeviceInit, 3284 _In_opt_ 3285 PCUNICODE_STRING DeviceName 3286 ) 3287 { 3288 return ((PFN_WDFDEVICEINITASSIGNNAME) WdfFunctions[WdfDeviceInitAssignNameTableIndex])(WdfDriverGlobals, DeviceInit, DeviceName); 3289 } 3290 3291 // 3292 // WDF Function: WdfDeviceInitAssignSDDLString 3293 // 3294 typedef 3295 _Must_inspect_result_ 3296 _IRQL_requires_max_(PASSIVE_LEVEL) 3297 WDFAPI 3298 NTSTATUS 3299 (STDCALL *PFN_WDFDEVICEINITASSIGNSDDLSTRING)( 3300 _In_ 3301 PWDF_DRIVER_GLOBALS DriverGlobals, 3302 _In_ 3303 PWDFDEVICE_INIT DeviceInit, 3304 _In_opt_ 3305 PCUNICODE_STRING SDDLString 3306 ); 3307 3308 _Must_inspect_result_ 3309 _IRQL_requires_max_(PASSIVE_LEVEL) 3310 FORCEINLINE 3311 NTSTATUS 3312 WdfDeviceInitAssignSDDLString( 3313 _In_ 3314 PWDFDEVICE_INIT DeviceInit, 3315 _In_opt_ 3316 PCUNICODE_STRING SDDLString 3317 ) 3318 { 3319 return ((PFN_WDFDEVICEINITASSIGNSDDLSTRING) WdfFunctions[WdfDeviceInitAssignSDDLStringTableIndex])(WdfDriverGlobals, DeviceInit, SDDLString); 3320 } 3321 3322 // 3323 // WDF Function: WdfDeviceInitSetDeviceClass 3324 // 3325 typedef 3326 _IRQL_requires_max_(DISPATCH_LEVEL) 3327 WDFAPI 3328 VOID 3329 (STDCALL *PFN_WDFDEVICEINITSETDEVICECLASS)( 3330 _In_ 3331 PWDF_DRIVER_GLOBALS DriverGlobals, 3332 _In_ 3333 PWDFDEVICE_INIT DeviceInit, 3334 _In_ 3335 CONST GUID* DeviceClassGuid 3336 ); 3337 3338 _IRQL_requires_max_(DISPATCH_LEVEL) 3339 FORCEINLINE 3340 VOID 3341 WdfDeviceInitSetDeviceClass( 3342 _In_ 3343 PWDFDEVICE_INIT DeviceInit, 3344 _In_ 3345 CONST GUID* DeviceClassGuid 3346 ) 3347 { 3348 ((PFN_WDFDEVICEINITSETDEVICECLASS) WdfFunctions[WdfDeviceInitSetDeviceClassTableIndex])(WdfDriverGlobals, DeviceInit, DeviceClassGuid); 3349 } 3350 3351 // 3352 // WDF Function: WdfDeviceInitSetCharacteristics 3353 // 3354 typedef 3355 _IRQL_requires_max_(DISPATCH_LEVEL) 3356 WDFAPI 3357 VOID 3358 (STDCALL *PFN_WDFDEVICEINITSETCHARACTERISTICS)( 3359 _In_ 3360 PWDF_DRIVER_GLOBALS DriverGlobals, 3361 _In_ 3362 PWDFDEVICE_INIT DeviceInit, 3363 _In_ 3364 ULONG DeviceCharacteristics, 3365 _In_ 3366 BOOLEAN OrInValues 3367 ); 3368 3369 _IRQL_requires_max_(DISPATCH_LEVEL) 3370 FORCEINLINE 3371 VOID 3372 WdfDeviceInitSetCharacteristics( 3373 _In_ 3374 PWDFDEVICE_INIT DeviceInit, 3375 _In_ 3376 ULONG DeviceCharacteristics, 3377 _In_ 3378 BOOLEAN OrInValues 3379 ) 3380 { 3381 ((PFN_WDFDEVICEINITSETCHARACTERISTICS) WdfFunctions[WdfDeviceInitSetCharacteristicsTableIndex])(WdfDriverGlobals, DeviceInit, DeviceCharacteristics, OrInValues); 3382 } 3383 3384 // 3385 // WDF Function: WdfDeviceInitSetFileObjectConfig 3386 // 3387 typedef 3388 _IRQL_requires_max_(DISPATCH_LEVEL) 3389 WDFAPI 3390 VOID 3391 (STDCALL *PFN_WDFDEVICEINITSETFILEOBJECTCONFIG)( 3392 _In_ 3393 PWDF_DRIVER_GLOBALS DriverGlobals, 3394 _In_ 3395 PWDFDEVICE_INIT DeviceInit, 3396 _In_ 3397 PWDF_FILEOBJECT_CONFIG FileObjectConfig, 3398 _In_opt_ 3399 PWDF_OBJECT_ATTRIBUTES FileObjectAttributes 3400 ); 3401 3402 _IRQL_requires_max_(DISPATCH_LEVEL) 3403 FORCEINLINE 3404 VOID 3405 WdfDeviceInitSetFileObjectConfig( 3406 _In_ 3407 PWDFDEVICE_INIT DeviceInit, 3408 _In_ 3409 PWDF_FILEOBJECT_CONFIG FileObjectConfig, 3410 _In_opt_ 3411 PWDF_OBJECT_ATTRIBUTES FileObjectAttributes 3412 ) 3413 { 3414 ((PFN_WDFDEVICEINITSETFILEOBJECTCONFIG) WdfFunctions[WdfDeviceInitSetFileObjectConfigTableIndex])(WdfDriverGlobals, DeviceInit, FileObjectConfig, FileObjectAttributes); 3415 } 3416 3417 // 3418 // WDF Function: WdfDeviceInitSetRequestAttributes 3419 // 3420 typedef 3421 _IRQL_requires_max_(DISPATCH_LEVEL) 3422 WDFAPI 3423 VOID 3424 (STDCALL *PFN_WDFDEVICEINITSETREQUESTATTRIBUTES)( 3425 _In_ 3426 PWDF_DRIVER_GLOBALS DriverGlobals, 3427 _In_ 3428 PWDFDEVICE_INIT DeviceInit, 3429 _In_ 3430 PWDF_OBJECT_ATTRIBUTES RequestAttributes 3431 ); 3432 3433 _IRQL_requires_max_(DISPATCH_LEVEL) 3434 FORCEINLINE 3435 VOID 3436 WdfDeviceInitSetRequestAttributes( 3437 _In_ 3438 PWDFDEVICE_INIT DeviceInit, 3439 _In_ 3440 PWDF_OBJECT_ATTRIBUTES RequestAttributes 3441 ) 3442 { 3443 ((PFN_WDFDEVICEINITSETREQUESTATTRIBUTES) WdfFunctions[WdfDeviceInitSetRequestAttributesTableIndex])(WdfDriverGlobals, DeviceInit, RequestAttributes); 3444 } 3445 3446 // 3447 // WDF Function: WdfDeviceInitAssignWdmIrpPreprocessCallback 3448 // 3449 typedef 3450 _Must_inspect_result_ 3451 _IRQL_requires_max_(DISPATCH_LEVEL) 3452 WDFAPI 3453 NTSTATUS 3454 (STDCALL *PFN_WDFDEVICEINITASSIGNWDMIRPPREPROCESSCALLBACK)( 3455 _In_ 3456 PWDF_DRIVER_GLOBALS DriverGlobals, 3457 _In_ 3458 PWDFDEVICE_INIT DeviceInit, 3459 _In_ 3460 PFN_WDFDEVICE_WDM_IRP_PREPROCESS EvtDeviceWdmIrpPreprocess, 3461 _In_ 3462 UCHAR MajorFunction, 3463 _When_(NumMinorFunctions > 0, _In_reads_bytes_(NumMinorFunctions)) 3464 _When_(NumMinorFunctions == 0, _In_opt_) 3465 PUCHAR MinorFunctions, 3466 _In_ 3467 ULONG NumMinorFunctions 3468 ); 3469 3470 _Must_inspect_result_ 3471 _IRQL_requires_max_(DISPATCH_LEVEL) 3472 FORCEINLINE 3473 NTSTATUS 3474 WdfDeviceInitAssignWdmIrpPreprocessCallback( 3475 _In_ 3476 PWDFDEVICE_INIT DeviceInit, 3477 _In_ 3478 PFN_WDFDEVICE_WDM_IRP_PREPROCESS EvtDeviceWdmIrpPreprocess, 3479 _In_ 3480 UCHAR MajorFunction, 3481 _When_(NumMinorFunctions > 0, _In_reads_bytes_(NumMinorFunctions)) 3482 _When_(NumMinorFunctions == 0, _In_opt_) 3483 PUCHAR MinorFunctions, 3484 _In_ 3485 ULONG NumMinorFunctions 3486 ) 3487 { 3488 return ((PFN_WDFDEVICEINITASSIGNWDMIRPPREPROCESSCALLBACK) WdfFunctions[WdfDeviceInitAssignWdmIrpPreprocessCallbackTableIndex])(WdfDriverGlobals, DeviceInit, EvtDeviceWdmIrpPreprocess, MajorFunction, MinorFunctions, NumMinorFunctions); 3489 } 3490 3491 // 3492 // WDF Function: WdfDeviceInitSetIoInCallerContextCallback 3493 // 3494 typedef 3495 _IRQL_requires_max_(DISPATCH_LEVEL) 3496 WDFAPI 3497 VOID 3498 (STDCALL *PFN_WDFDEVICEINITSETIOINCALLERCONTEXTCALLBACK)( 3499 _In_ 3500 PWDF_DRIVER_GLOBALS DriverGlobals, 3501 _In_ 3502 PWDFDEVICE_INIT DeviceInit, 3503 _In_ 3504 PFN_WDF_IO_IN_CALLER_CONTEXT EvtIoInCallerContext 3505 ); 3506 3507 _IRQL_requires_max_(DISPATCH_LEVEL) 3508 FORCEINLINE 3509 VOID 3510 WdfDeviceInitSetIoInCallerContextCallback( 3511 _In_ 3512 PWDFDEVICE_INIT DeviceInit, 3513 _In_ 3514 PFN_WDF_IO_IN_CALLER_CONTEXT EvtIoInCallerContext 3515 ) 3516 { 3517 ((PFN_WDFDEVICEINITSETIOINCALLERCONTEXTCALLBACK) WdfFunctions[WdfDeviceInitSetIoInCallerContextCallbackTableIndex])(WdfDriverGlobals, DeviceInit, EvtIoInCallerContext); 3518 } 3519 3520 // 3521 // WDF Function: WdfDeviceInitSetRemoveLockOptions 3522 // 3523 typedef 3524 _IRQL_requires_max_(DISPATCH_LEVEL) 3525 WDFAPI 3526 VOID 3527 (STDCALL *PFN_WDFDEVICEINITSETREMOVELOCKOPTIONS)( 3528 _In_ 3529 PWDF_DRIVER_GLOBALS DriverGlobals, 3530 _In_ 3531 PWDFDEVICE_INIT DeviceInit, 3532 _In_ 3533 PWDF_REMOVE_LOCK_OPTIONS Options 3534 ); 3535 3536 _IRQL_requires_max_(DISPATCH_LEVEL) 3537 FORCEINLINE 3538 VOID 3539 WdfDeviceInitSetRemoveLockOptions( 3540 _In_ 3541 PWDFDEVICE_INIT DeviceInit, 3542 _In_ 3543 PWDF_REMOVE_LOCK_OPTIONS Options 3544 ) 3545 { 3546 ((PFN_WDFDEVICEINITSETREMOVELOCKOPTIONS) WdfFunctions[WdfDeviceInitSetRemoveLockOptionsTableIndex])(WdfDriverGlobals, DeviceInit, Options); 3547 } 3548 3549 // 3550 // WDF Function: WdfDeviceCreate 3551 // 3552 typedef 3553 _Must_inspect_result_ 3554 _IRQL_requires_max_(PASSIVE_LEVEL) 3555 WDFAPI 3556 NTSTATUS 3557 (STDCALL *PFN_WDFDEVICECREATE)( 3558 _In_ 3559 PWDF_DRIVER_GLOBALS DriverGlobals, 3560 _Inout_ 3561 PWDFDEVICE_INIT* DeviceInit, 3562 _In_opt_ 3563 PWDF_OBJECT_ATTRIBUTES DeviceAttributes, 3564 _Out_ 3565 WDFDEVICE* Device 3566 ); 3567 3568 _Must_inspect_result_ 3569 _IRQL_requires_max_(PASSIVE_LEVEL) 3570 FORCEINLINE 3571 NTSTATUS 3572 WdfDeviceCreate( 3573 _Inout_ 3574 PWDFDEVICE_INIT* DeviceInit, 3575 _In_opt_ 3576 PWDF_OBJECT_ATTRIBUTES DeviceAttributes, 3577 _Out_ 3578 WDFDEVICE* Device 3579 ) 3580 { 3581 return ((PFN_WDFDEVICECREATE) WdfFunctions[WdfDeviceCreateTableIndex])(WdfDriverGlobals, DeviceInit, DeviceAttributes, Device); 3582 } 3583 3584 // 3585 // WDF Function: WdfDeviceSetStaticStopRemove 3586 // 3587 typedef 3588 _IRQL_requires_max_(DISPATCH_LEVEL) 3589 WDFAPI 3590 VOID 3591 (STDCALL *PFN_WDFDEVICESETSTATICSTOPREMOVE)( 3592 _In_ 3593 PWDF_DRIVER_GLOBALS DriverGlobals, 3594 _In_ 3595 WDFDEVICE Device, 3596 _In_ 3597 BOOLEAN Stoppable 3598 ); 3599 3600 _IRQL_requires_max_(DISPATCH_LEVEL) 3601 FORCEINLINE 3602 VOID 3603 WdfDeviceSetStaticStopRemove( 3604 _In_ 3605 WDFDEVICE Device, 3606 _In_ 3607 BOOLEAN Stoppable 3608 ) 3609 { 3610 ((PFN_WDFDEVICESETSTATICSTOPREMOVE) WdfFunctions[WdfDeviceSetStaticStopRemoveTableIndex])(WdfDriverGlobals, Device, Stoppable); 3611 } 3612 3613 // 3614 // WDF Function: WdfDeviceCreateDeviceInterface 3615 // 3616 typedef 3617 _Must_inspect_result_ 3618 _IRQL_requires_max_(PASSIVE_LEVEL) 3619 WDFAPI 3620 NTSTATUS 3621 (STDCALL *PFN_WDFDEVICECREATEDEVICEINTERFACE)( 3622 _In_ 3623 PWDF_DRIVER_GLOBALS DriverGlobals, 3624 _In_ 3625 WDFDEVICE Device, 3626 _In_ 3627 CONST GUID* InterfaceClassGUID, 3628 _In_opt_ 3629 PCUNICODE_STRING ReferenceString 3630 ); 3631 3632 _Must_inspect_result_ 3633 _IRQL_requires_max_(PASSIVE_LEVEL) 3634 FORCEINLINE 3635 NTSTATUS 3636 WdfDeviceCreateDeviceInterface( 3637 _In_ 3638 WDFDEVICE Device, 3639 _In_ 3640 CONST GUID* InterfaceClassGUID, 3641 _In_opt_ 3642 PCUNICODE_STRING ReferenceString 3643 ) 3644 { 3645 return ((PFN_WDFDEVICECREATEDEVICEINTERFACE) WdfFunctions[WdfDeviceCreateDeviceInterfaceTableIndex])(WdfDriverGlobals, Device, InterfaceClassGUID, ReferenceString); 3646 } 3647 3648 // 3649 // WDF Function: WdfDeviceSetDeviceInterfaceState 3650 // 3651 typedef 3652 _IRQL_requires_max_(PASSIVE_LEVEL) 3653 WDFAPI 3654 VOID 3655 (STDCALL *PFN_WDFDEVICESETDEVICEINTERFACESTATE)( 3656 _In_ 3657 PWDF_DRIVER_GLOBALS DriverGlobals, 3658 _In_ 3659 WDFDEVICE Device, 3660 _In_ 3661 CONST GUID* InterfaceClassGUID, 3662 _In_opt_ 3663 PCUNICODE_STRING ReferenceString, 3664 _In_ 3665 BOOLEAN IsInterfaceEnabled 3666 ); 3667 3668 _IRQL_requires_max_(PASSIVE_LEVEL) 3669 FORCEINLINE 3670 VOID 3671 WdfDeviceSetDeviceInterfaceState( 3672 _In_ 3673 WDFDEVICE Device, 3674 _In_ 3675 CONST GUID* InterfaceClassGUID, 3676 _In_opt_ 3677 PCUNICODE_STRING ReferenceString, 3678 _In_ 3679 BOOLEAN IsInterfaceEnabled 3680 ) 3681 { 3682 ((PFN_WDFDEVICESETDEVICEINTERFACESTATE) WdfFunctions[WdfDeviceSetDeviceInterfaceStateTableIndex])(WdfDriverGlobals, Device, InterfaceClassGUID, ReferenceString, IsInterfaceEnabled); 3683 } 3684 3685 // 3686 // WDF Function: WdfDeviceRetrieveDeviceInterfaceString 3687 // 3688 typedef 3689 _Must_inspect_result_ 3690 _IRQL_requires_max_(PASSIVE_LEVEL) 3691 WDFAPI 3692 NTSTATUS 3693 (STDCALL *PFN_WDFDEVICERETRIEVEDEVICEINTERFACESTRING)( 3694 _In_ 3695 PWDF_DRIVER_GLOBALS DriverGlobals, 3696 _In_ 3697 WDFDEVICE Device, 3698 _In_ 3699 CONST GUID* InterfaceClassGUID, 3700 _In_opt_ 3701 PCUNICODE_STRING ReferenceString, 3702 _In_ 3703 WDFSTRING String 3704 ); 3705 3706 _Must_inspect_result_ 3707 _IRQL_requires_max_(PASSIVE_LEVEL) 3708 FORCEINLINE 3709 NTSTATUS 3710 WdfDeviceRetrieveDeviceInterfaceString( 3711 _In_ 3712 WDFDEVICE Device, 3713 _In_ 3714 CONST GUID* InterfaceClassGUID, 3715 _In_opt_ 3716 PCUNICODE_STRING ReferenceString, 3717 _In_ 3718 WDFSTRING String 3719 ) 3720 { 3721 return ((PFN_WDFDEVICERETRIEVEDEVICEINTERFACESTRING) WdfFunctions[WdfDeviceRetrieveDeviceInterfaceStringTableIndex])(WdfDriverGlobals, Device, InterfaceClassGUID, ReferenceString, String); 3722 } 3723 3724 // 3725 // WDF Function: WdfDeviceCreateSymbolicLink 3726 // 3727 typedef 3728 _Must_inspect_result_ 3729 _IRQL_requires_max_(PASSIVE_LEVEL) 3730 WDFAPI 3731 NTSTATUS 3732 (STDCALL *PFN_WDFDEVICECREATESYMBOLICLINK)( 3733 _In_ 3734 PWDF_DRIVER_GLOBALS DriverGlobals, 3735 _In_ 3736 WDFDEVICE Device, 3737 _In_ 3738 PCUNICODE_STRING SymbolicLinkName 3739 ); 3740 3741 _Must_inspect_result_ 3742 _IRQL_requires_max_(PASSIVE_LEVEL) 3743 FORCEINLINE 3744 NTSTATUS 3745 WdfDeviceCreateSymbolicLink( 3746 _In_ 3747 WDFDEVICE Device, 3748 _In_ 3749 PCUNICODE_STRING SymbolicLinkName 3750 ) 3751 { 3752 return ((PFN_WDFDEVICECREATESYMBOLICLINK) WdfFunctions[WdfDeviceCreateSymbolicLinkTableIndex])(WdfDriverGlobals, Device, SymbolicLinkName); 3753 } 3754 3755 // 3756 // WDF Function: WdfDeviceQueryProperty 3757 // 3758 typedef 3759 _Must_inspect_result_ 3760 _IRQL_requires_max_(PASSIVE_LEVEL) 3761 WDFAPI 3762 NTSTATUS 3763 (STDCALL *PFN_WDFDEVICEQUERYPROPERTY)( 3764 _In_ 3765 PWDF_DRIVER_GLOBALS DriverGlobals, 3766 _In_ 3767 WDFDEVICE Device, 3768 _In_ 3769 DEVICE_REGISTRY_PROPERTY DeviceProperty, 3770 _In_ 3771 ULONG BufferLength, 3772 _Out_writes_bytes_all_(BufferLength) 3773 PVOID PropertyBuffer, 3774 _Out_ 3775 PULONG ResultLength 3776 ); 3777 3778 _Must_inspect_result_ 3779 _IRQL_requires_max_(PASSIVE_LEVEL) 3780 FORCEINLINE 3781 NTSTATUS 3782 WdfDeviceQueryProperty( 3783 _In_ 3784 WDFDEVICE Device, 3785 _In_ 3786 DEVICE_REGISTRY_PROPERTY DeviceProperty, 3787 _In_ 3788 ULONG BufferLength, 3789 _Out_writes_bytes_all_(BufferLength) 3790 PVOID PropertyBuffer, 3791 _Out_ 3792 PULONG ResultLength 3793 ) 3794 { 3795 return ((PFN_WDFDEVICEQUERYPROPERTY) WdfFunctions[WdfDeviceQueryPropertyTableIndex])(WdfDriverGlobals, Device, DeviceProperty, BufferLength, PropertyBuffer, ResultLength); 3796 } 3797 3798 // 3799 // WDF Function: WdfDeviceAllocAndQueryProperty 3800 // 3801 typedef 3802 _Must_inspect_result_ 3803 _IRQL_requires_max_(PASSIVE_LEVEL) 3804 WDFAPI 3805 NTSTATUS 3806 (STDCALL *PFN_WDFDEVICEALLOCANDQUERYPROPERTY)( 3807 _In_ 3808 PWDF_DRIVER_GLOBALS DriverGlobals, 3809 _In_ 3810 WDFDEVICE Device, 3811 _In_ 3812 DEVICE_REGISTRY_PROPERTY DeviceProperty, 3813 _In_ 3814 _Strict_type_match_ 3815 POOL_TYPE PoolType, 3816 _In_opt_ 3817 PWDF_OBJECT_ATTRIBUTES PropertyMemoryAttributes, 3818 _Out_ 3819 WDFMEMORY* PropertyMemory 3820 ); 3821 3822 _Must_inspect_result_ 3823 _IRQL_requires_max_(PASSIVE_LEVEL) 3824 FORCEINLINE 3825 NTSTATUS 3826 WdfDeviceAllocAndQueryProperty( 3827 _In_ 3828 WDFDEVICE Device, 3829 _In_ 3830 DEVICE_REGISTRY_PROPERTY DeviceProperty, 3831 _In_ 3832 _Strict_type_match_ 3833 POOL_TYPE PoolType, 3834 _In_opt_ 3835 PWDF_OBJECT_ATTRIBUTES PropertyMemoryAttributes, 3836 _Out_ 3837 WDFMEMORY* PropertyMemory 3838 ) 3839 { 3840 return ((PFN_WDFDEVICEALLOCANDQUERYPROPERTY) WdfFunctions[WdfDeviceAllocAndQueryPropertyTableIndex])(WdfDriverGlobals, Device, DeviceProperty, PoolType, PropertyMemoryAttributes, PropertyMemory); 3841 } 3842 3843 // 3844 // WDF Function: WdfDeviceSetPnpCapabilities 3845 // 3846 typedef 3847 _IRQL_requires_max_(DISPATCH_LEVEL) 3848 WDFAPI 3849 VOID 3850 (STDCALL *PFN_WDFDEVICESETPNPCAPABILITIES)( 3851 _In_ 3852 PWDF_DRIVER_GLOBALS DriverGlobals, 3853 _In_ 3854 WDFDEVICE Device, 3855 _In_ 3856 PWDF_DEVICE_PNP_CAPABILITIES PnpCapabilities 3857 ); 3858 3859 _IRQL_requires_max_(DISPATCH_LEVEL) 3860 FORCEINLINE 3861 VOID 3862 WdfDeviceSetPnpCapabilities( 3863 _In_ 3864 WDFDEVICE Device, 3865 _In_ 3866 PWDF_DEVICE_PNP_CAPABILITIES PnpCapabilities 3867 ) 3868 { 3869 ((PFN_WDFDEVICESETPNPCAPABILITIES) WdfFunctions[WdfDeviceSetPnpCapabilitiesTableIndex])(WdfDriverGlobals, Device, PnpCapabilities); 3870 } 3871 3872 // 3873 // WDF Function: WdfDeviceSetPowerCapabilities 3874 // 3875 typedef 3876 _IRQL_requires_max_(DISPATCH_LEVEL) 3877 WDFAPI 3878 VOID 3879 (STDCALL *PFN_WDFDEVICESETPOWERCAPABILITIES)( 3880 _In_ 3881 PWDF_DRIVER_GLOBALS DriverGlobals, 3882 _In_ 3883 WDFDEVICE Device, 3884 _In_ 3885 PWDF_DEVICE_POWER_CAPABILITIES PowerCapabilities 3886 ); 3887 3888 _IRQL_requires_max_(DISPATCH_LEVEL) 3889 FORCEINLINE 3890 VOID 3891 WdfDeviceSetPowerCapabilities( 3892 _In_ 3893 WDFDEVICE Device, 3894 _In_ 3895 PWDF_DEVICE_POWER_CAPABILITIES PowerCapabilities 3896 ) 3897 { 3898 ((PFN_WDFDEVICESETPOWERCAPABILITIES) WdfFunctions[WdfDeviceSetPowerCapabilitiesTableIndex])(WdfDriverGlobals, Device, PowerCapabilities); 3899 } 3900 3901 // 3902 // WDF Function: WdfDeviceSetBusInformationForChildren 3903 // 3904 typedef 3905 _IRQL_requires_max_(DISPATCH_LEVEL) 3906 WDFAPI 3907 VOID 3908 (STDCALL *PFN_WDFDEVICESETBUSINFORMATIONFORCHILDREN)( 3909 _In_ 3910 PWDF_DRIVER_GLOBALS DriverGlobals, 3911 _In_ 3912 WDFDEVICE Device, 3913 _In_ 3914 PPNP_BUS_INFORMATION BusInformation 3915 ); 3916 3917 _IRQL_requires_max_(DISPATCH_LEVEL) 3918 FORCEINLINE 3919 VOID 3920 WdfDeviceSetBusInformationForChildren( 3921 _In_ 3922 WDFDEVICE Device, 3923 _In_ 3924 PPNP_BUS_INFORMATION BusInformation 3925 ) 3926 { 3927 ((PFN_WDFDEVICESETBUSINFORMATIONFORCHILDREN) WdfFunctions[WdfDeviceSetBusInformationForChildrenTableIndex])(WdfDriverGlobals, Device, BusInformation); 3928 } 3929 3930 // 3931 // WDF Function: WdfDeviceIndicateWakeStatus 3932 // 3933 typedef 3934 _Must_inspect_result_ 3935 _IRQL_requires_max_(DISPATCH_LEVEL) 3936 WDFAPI 3937 NTSTATUS 3938 (STDCALL *PFN_WDFDEVICEINDICATEWAKESTATUS)( 3939 _In_ 3940 PWDF_DRIVER_GLOBALS DriverGlobals, 3941 _In_ 3942 WDFDEVICE Device, 3943 _In_ 3944 NTSTATUS WaitWakeStatus 3945 ); 3946 3947 _Must_inspect_result_ 3948 _IRQL_requires_max_(DISPATCH_LEVEL) 3949 FORCEINLINE 3950 NTSTATUS 3951 WdfDeviceIndicateWakeStatus( 3952 _In_ 3953 WDFDEVICE Device, 3954 _In_ 3955 NTSTATUS WaitWakeStatus 3956 ) 3957 { 3958 return ((PFN_WDFDEVICEINDICATEWAKESTATUS) WdfFunctions[WdfDeviceIndicateWakeStatusTableIndex])(WdfDriverGlobals, Device, WaitWakeStatus); 3959 } 3960 3961 // 3962 // WDF Function: WdfDeviceSetFailed 3963 // 3964 typedef 3965 _IRQL_requires_max_(DISPATCH_LEVEL) 3966 WDFAPI 3967 VOID 3968 (STDCALL *PFN_WDFDEVICESETFAILED)( 3969 _In_ 3970 PWDF_DRIVER_GLOBALS DriverGlobals, 3971 _In_ 3972 WDFDEVICE Device, 3973 _In_ 3974 WDF_DEVICE_FAILED_ACTION FailedAction 3975 ); 3976 3977 _IRQL_requires_max_(DISPATCH_LEVEL) 3978 FORCEINLINE 3979 VOID 3980 WdfDeviceSetFailed( 3981 _In_ 3982 WDFDEVICE Device, 3983 _In_ 3984 WDF_DEVICE_FAILED_ACTION FailedAction 3985 ) 3986 { 3987 ((PFN_WDFDEVICESETFAILED) WdfFunctions[WdfDeviceSetFailedTableIndex])(WdfDriverGlobals, Device, FailedAction); 3988 } 3989 3990 // 3991 // WDF Function: WdfDeviceStopIdleNoTrack 3992 // 3993 typedef 3994 _Must_inspect_result_ 3995 _When_(WaitForD0 == 0, _IRQL_requires_max_(DISPATCH_LEVEL)) 3996 _When_(WaitForD0 != 0, _IRQL_requires_max_(PASSIVE_LEVEL)) 3997 WDFAPI 3998 NTSTATUS 3999 (STDCALL *PFN_WDFDEVICESTOPIDLENOTRACK)( 4000 _In_ 4001 PWDF_DRIVER_GLOBALS DriverGlobals, 4002 _In_ 4003 WDFDEVICE Device, 4004 _In_ 4005 BOOLEAN WaitForD0 4006 ); 4007 4008 _Must_inspect_result_ 4009 _When_(WaitForD0 == 0, _IRQL_requires_max_(DISPATCH_LEVEL)) 4010 _When_(WaitForD0 != 0, _IRQL_requires_max_(PASSIVE_LEVEL)) 4011 FORCEINLINE 4012 NTSTATUS 4013 WdfDeviceStopIdleNoTrack( 4014 _In_ 4015 WDFDEVICE Device, 4016 _In_ 4017 BOOLEAN WaitForD0 4018 ) 4019 { 4020 return ((PFN_WDFDEVICESTOPIDLENOTRACK) WdfFunctions[WdfDeviceStopIdleNoTrackTableIndex])(WdfDriverGlobals, Device, WaitForD0); 4021 } 4022 4023 // 4024 // WDF Function: WdfDeviceResumeIdleNoTrack 4025 // 4026 typedef 4027 _IRQL_requires_max_(DISPATCH_LEVEL) 4028 WDFAPI 4029 VOID 4030 (STDCALL *PFN_WDFDEVICERESUMEIDLENOTRACK)( 4031 _In_ 4032 PWDF_DRIVER_GLOBALS DriverGlobals, 4033 _In_ 4034 WDFDEVICE Device 4035 ); 4036 4037 _IRQL_requires_max_(DISPATCH_LEVEL) 4038 FORCEINLINE 4039 VOID 4040 WdfDeviceResumeIdleNoTrack( 4041 _In_ 4042 WDFDEVICE Device 4043 ) 4044 { 4045 ((PFN_WDFDEVICERESUMEIDLENOTRACK) WdfFunctions[WdfDeviceResumeIdleNoTrackTableIndex])(WdfDriverGlobals, Device); 4046 } 4047 4048 // 4049 // WDF Function: WdfDeviceStopIdleActual 4050 // 4051 typedef 4052 _Must_inspect_result_ 4053 _When_(WaitForD0 == 0, _IRQL_requires_max_(DISPATCH_LEVEL)) 4054 _When_(WaitForD0 != 0, _IRQL_requires_max_(PASSIVE_LEVEL)) 4055 WDFAPI 4056 NTSTATUS 4057 (STDCALL *PFN_WDFDEVICESTOPIDLEACTUAL)( 4058 _In_ 4059 PWDF_DRIVER_GLOBALS DriverGlobals, 4060 _In_ 4061 WDFDEVICE Device, 4062 _In_ 4063 BOOLEAN WaitForD0, 4064 _In_opt_ 4065 PVOID Tag, 4066 _In_ 4067 LONG Line, 4068 _In_z_ 4069 PCHAR File 4070 ); 4071 4072 _Must_inspect_result_ 4073 _When_(WaitForD0 == 0, _IRQL_requires_max_(DISPATCH_LEVEL)) 4074 _When_(WaitForD0 != 0, _IRQL_requires_max_(PASSIVE_LEVEL)) 4075 FORCEINLINE 4076 NTSTATUS 4077 WdfDeviceStopIdleActual( 4078 _In_ 4079 WDFDEVICE Device, 4080 _In_ 4081 BOOLEAN WaitForD0, 4082 _In_opt_ 4083 PVOID Tag, 4084 _In_ 4085 LONG Line, 4086 _In_z_ 4087 PCHAR File 4088 ) 4089 { 4090 return ((PFN_WDFDEVICESTOPIDLEACTUAL) WdfFunctions[WdfDeviceStopIdleActualTableIndex])(WdfDriverGlobals, Device, WaitForD0, Tag, Line, File); 4091 } 4092 4093 // 4094 // WDF Function: WdfDeviceResumeIdleActual 4095 // 4096 typedef 4097 _IRQL_requires_max_(DISPATCH_LEVEL) 4098 WDFAPI 4099 VOID 4100 (STDCALL *PFN_WDFDEVICERESUMEIDLEACTUAL)( 4101 _In_ 4102 PWDF_DRIVER_GLOBALS DriverGlobals, 4103 _In_ 4104 WDFDEVICE Device, 4105 _In_opt_ 4106 PVOID Tag, 4107 _In_ 4108 LONG Line, 4109 _In_z_ 4110 PCHAR File 4111 ); 4112 4113 _IRQL_requires_max_(DISPATCH_LEVEL) 4114 FORCEINLINE 4115 VOID 4116 WdfDeviceResumeIdleActual( 4117 _In_ 4118 WDFDEVICE Device, 4119 _In_opt_ 4120 PVOID Tag, 4121 _In_ 4122 LONG Line, 4123 _In_z_ 4124 PCHAR File 4125 ) 4126 { 4127 ((PFN_WDFDEVICERESUMEIDLEACTUAL) WdfFunctions[WdfDeviceResumeIdleActualTableIndex])(WdfDriverGlobals, Device, Tag, Line, File); 4128 } 4129 4130 // 4131 // WDF Function: WdfDeviceGetFileObject 4132 // 4133 typedef 4134 _IRQL_requires_max_(DISPATCH_LEVEL) 4135 WDFAPI 4136 WDFFILEOBJECT 4137 (STDCALL *PFN_WDFDEVICEGETFILEOBJECT)( 4138 _In_ 4139 PWDF_DRIVER_GLOBALS DriverGlobals, 4140 _In_ 4141 WDFDEVICE Device, 4142 _In_ 4143 PFILE_OBJECT FileObject 4144 ); 4145 4146 _IRQL_requires_max_(DISPATCH_LEVEL) 4147 FORCEINLINE 4148 WDFFILEOBJECT 4149 WdfDeviceGetFileObject( 4150 _In_ 4151 WDFDEVICE Device, 4152 _In_ 4153 PFILE_OBJECT FileObject 4154 ) 4155 { 4156 return ((PFN_WDFDEVICEGETFILEOBJECT) WdfFunctions[WdfDeviceGetFileObjectTableIndex])(WdfDriverGlobals, Device, FileObject); 4157 } 4158 4159 // 4160 // WDF Function: WdfDeviceEnqueueRequest 4161 // 4162 typedef 4163 _Must_inspect_result_ 4164 _IRQL_requires_max_(DISPATCH_LEVEL) 4165 WDFAPI 4166 NTSTATUS 4167 (STDCALL *PFN_WDFDEVICEENQUEUEREQUEST)( 4168 _In_ 4169 PWDF_DRIVER_GLOBALS DriverGlobals, 4170 _In_ 4171 WDFDEVICE Device, 4172 _In_ 4173 WDFREQUEST Request 4174 ); 4175 4176 _Must_inspect_result_ 4177 _IRQL_requires_max_(DISPATCH_LEVEL) 4178 FORCEINLINE 4179 NTSTATUS 4180 WdfDeviceEnqueueRequest( 4181 _In_ 4182 WDFDEVICE Device, 4183 _In_ 4184 WDFREQUEST Request 4185 ) 4186 { 4187 return ((PFN_WDFDEVICEENQUEUEREQUEST) WdfFunctions[WdfDeviceEnqueueRequestTableIndex])(WdfDriverGlobals, Device, Request); 4188 } 4189 4190 // 4191 // WDF Function: WdfDeviceGetDefaultQueue 4192 // 4193 typedef 4194 _IRQL_requires_max_(DISPATCH_LEVEL) 4195 WDFAPI 4196 WDFQUEUE 4197 (STDCALL *PFN_WDFDEVICEGETDEFAULTQUEUE)( 4198 _In_ 4199 PWDF_DRIVER_GLOBALS DriverGlobals, 4200 _In_ 4201 WDFDEVICE Device 4202 ); 4203 4204 _IRQL_requires_max_(DISPATCH_LEVEL) 4205 FORCEINLINE 4206 WDFQUEUE 4207 WdfDeviceGetDefaultQueue( 4208 _In_ 4209 WDFDEVICE Device 4210 ) 4211 { 4212 return ((PFN_WDFDEVICEGETDEFAULTQUEUE) WdfFunctions[WdfDeviceGetDefaultQueueTableIndex])(WdfDriverGlobals, Device); 4213 } 4214 4215 // 4216 // WDF Function: WdfDeviceConfigureRequestDispatching 4217 // 4218 typedef 4219 _Must_inspect_result_ 4220 _IRQL_requires_max_(DISPATCH_LEVEL) 4221 WDFAPI 4222 NTSTATUS 4223 (STDCALL *PFN_WDFDEVICECONFIGUREREQUESTDISPATCHING)( 4224 _In_ 4225 PWDF_DRIVER_GLOBALS DriverGlobals, 4226 _In_ 4227 WDFDEVICE Device, 4228 _In_ 4229 WDFQUEUE Queue, 4230 _In_ 4231 _Strict_type_match_ 4232 WDF_REQUEST_TYPE RequestType 4233 ); 4234 4235 _Must_inspect_result_ 4236 _IRQL_requires_max_(DISPATCH_LEVEL) 4237 FORCEINLINE 4238 NTSTATUS 4239 WdfDeviceConfigureRequestDispatching( 4240 _In_ 4241 WDFDEVICE Device, 4242 _In_ 4243 WDFQUEUE Queue, 4244 _In_ 4245 _Strict_type_match_ 4246 WDF_REQUEST_TYPE RequestType 4247 ) 4248 { 4249 return ((PFN_WDFDEVICECONFIGUREREQUESTDISPATCHING) WdfFunctions[WdfDeviceConfigureRequestDispatchingTableIndex])(WdfDriverGlobals, Device, Queue, RequestType); 4250 } 4251 4252 // 4253 // WDF Function: WdfDeviceConfigureWdmIrpDispatchCallback 4254 // 4255 typedef 4256 _Must_inspect_result_ 4257 _IRQL_requires_max_(DISPATCH_LEVEL) 4258 WDFAPI 4259 NTSTATUS 4260 (STDCALL *PFN_WDFDEVICECONFIGUREWDMIRPDISPATCHCALLBACK)( 4261 _In_ 4262 PWDF_DRIVER_GLOBALS DriverGlobals, 4263 _In_ 4264 WDFDEVICE Device, 4265 _In_opt_ 4266 WDFDRIVER Driver, 4267 _In_ 4268 UCHAR MajorFunction, 4269 _In_ 4270 PFN_WDFDEVICE_WDM_IRP_DISPATCH EvtDeviceWdmIrpDisptach, 4271 _In_opt_ 4272 WDFCONTEXT DriverContext 4273 ); 4274 4275 _Must_inspect_result_ 4276 _IRQL_requires_max_(DISPATCH_LEVEL) 4277 FORCEINLINE 4278 NTSTATUS 4279 WdfDeviceConfigureWdmIrpDispatchCallback( 4280 _In_ 4281 WDFDEVICE Device, 4282 _In_opt_ 4283 WDFDRIVER Driver, 4284 _In_ 4285 UCHAR MajorFunction, 4286 _In_ 4287 PFN_WDFDEVICE_WDM_IRP_DISPATCH EvtDeviceWdmIrpDisptach, 4288 _In_opt_ 4289 WDFCONTEXT DriverContext 4290 ) 4291 { 4292 return ((PFN_WDFDEVICECONFIGUREWDMIRPDISPATCHCALLBACK) WdfFunctions[WdfDeviceConfigureWdmIrpDispatchCallbackTableIndex])(WdfDriverGlobals, Device, Driver, MajorFunction, EvtDeviceWdmIrpDisptach, DriverContext); 4293 } 4294 4295 // 4296 // WDF Function: WdfDeviceGetSystemPowerAction 4297 // 4298 typedef 4299 _IRQL_requires_max_(DISPATCH_LEVEL) 4300 WDFAPI 4301 POWER_ACTION 4302 (STDCALL *PFN_WDFDEVICEGETSYSTEMPOWERACTION)( 4303 _In_ 4304 PWDF_DRIVER_GLOBALS DriverGlobals, 4305 _In_ 4306 WDFDEVICE Device 4307 ); 4308 4309 _IRQL_requires_max_(DISPATCH_LEVEL) 4310 FORCEINLINE 4311 POWER_ACTION 4312 WdfDeviceGetSystemPowerAction( 4313 _In_ 4314 WDFDEVICE Device 4315 ) 4316 { 4317 return ((PFN_WDFDEVICEGETSYSTEMPOWERACTION) WdfFunctions[WdfDeviceGetSystemPowerActionTableIndex])(WdfDriverGlobals, Device); 4318 } 4319 4320 // 4321 // WDF Function: WdfDeviceWdmAssignPowerFrameworkSettings 4322 // 4323 typedef 4324 _Must_inspect_result_ 4325 _IRQL_requires_max_(PASSIVE_LEVEL) 4326 WDFAPI 4327 NTSTATUS 4328 (STDCALL *PFN_WDFDEVICEWDMASSIGNPOWERFRAMEWORKSETTINGS)( 4329 _In_ 4330 PWDF_DRIVER_GLOBALS DriverGlobals, 4331 _In_ 4332 WDFDEVICE Device, 4333 _In_ 4334 PWDF_POWER_FRAMEWORK_SETTINGS PowerFrameworkSettings 4335 ); 4336 4337 _Must_inspect_result_ 4338 _IRQL_requires_max_(PASSIVE_LEVEL) 4339 FORCEINLINE 4340 NTSTATUS 4341 WdfDeviceWdmAssignPowerFrameworkSettings( 4342 _In_ 4343 WDFDEVICE Device, 4344 _In_ 4345 PWDF_POWER_FRAMEWORK_SETTINGS PowerFrameworkSettings 4346 ) 4347 { 4348 return ((PFN_WDFDEVICEWDMASSIGNPOWERFRAMEWORKSETTINGS) WdfFunctions[WdfDeviceWdmAssignPowerFrameworkSettingsTableIndex])(WdfDriverGlobals, Device, PowerFrameworkSettings); 4349 } 4350 4351 // 4352 // WDF Function: WdfDeviceInitSetReleaseHardwareOrderOnFailure 4353 // 4354 typedef 4355 _IRQL_requires_max_(DISPATCH_LEVEL) 4356 WDFAPI 4357 VOID 4358 (STDCALL *PFN_WDFDEVICEINITSETRELEASEHARDWAREORDERONFAILURE)( 4359 _In_ 4360 PWDF_DRIVER_GLOBALS DriverGlobals, 4361 _In_ 4362 PWDFDEVICE_INIT DeviceInit, 4363 _In_ 4364 WDF_RELEASE_HARDWARE_ORDER_ON_FAILURE ReleaseHardwareOrderOnFailure 4365 ); 4366 4367 _IRQL_requires_max_(DISPATCH_LEVEL) 4368 FORCEINLINE 4369 VOID 4370 WdfDeviceInitSetReleaseHardwareOrderOnFailure( 4371 _In_ 4372 PWDFDEVICE_INIT DeviceInit, 4373 _In_ 4374 WDF_RELEASE_HARDWARE_ORDER_ON_FAILURE ReleaseHardwareOrderOnFailure 4375 ) 4376 { 4377 ((PFN_WDFDEVICEINITSETRELEASEHARDWAREORDERONFAILURE) WdfFunctions[WdfDeviceInitSetReleaseHardwareOrderOnFailureTableIndex])(WdfDriverGlobals, DeviceInit, ReleaseHardwareOrderOnFailure); 4378 } 4379 4380 // 4381 // WDF Function: WdfDeviceInitSetIoTypeEx 4382 // 4383 typedef 4384 _IRQL_requires_max_(PASSIVE_LEVEL) 4385 WDFAPI 4386 VOID 4387 (STDCALL *PFN_WDFDEVICEINITSETIOTYPEEX)( 4388 _In_ 4389 PWDF_DRIVER_GLOBALS DriverGlobals, 4390 _In_ 4391 PWDFDEVICE_INIT DeviceInit, 4392 _In_ 4393 PWDF_IO_TYPE_CONFIG IoTypeConfig 4394 ); 4395 4396 _IRQL_requires_max_(PASSIVE_LEVEL) 4397 FORCEINLINE 4398 VOID 4399 WdfDeviceInitSetIoTypeEx( 4400 _In_ 4401 PWDFDEVICE_INIT DeviceInit, 4402 _In_ 4403 PWDF_IO_TYPE_CONFIG IoTypeConfig 4404 ) 4405 { 4406 ((PFN_WDFDEVICEINITSETIOTYPEEX) WdfFunctions[WdfDeviceInitSetIoTypeExTableIndex])(WdfDriverGlobals, DeviceInit, IoTypeConfig); 4407 } 4408 4409 4410 4411 4412 4413 4414 4415 4416 4417 4418 4419 // 4420 // WDF Function: WdfDeviceQueryPropertyEx 4421 // 4422 typedef 4423 _Must_inspect_result_ 4424 _IRQL_requires_max_(APC_LEVEL) 4425 WDFAPI 4426 NTSTATUS 4427 (STDCALL *PFN_WDFDEVICEQUERYPROPERTYEX)( 4428 _In_ 4429 PWDF_DRIVER_GLOBALS DriverGlobals, 4430 _In_ 4431 WDFDEVICE Device, 4432 _In_ 4433 PWDF_DEVICE_PROPERTY_DATA DeviceProperty, 4434 _In_ 4435 ULONG BufferLength, 4436 _Out_ 4437 PVOID PropertyBuffer, 4438 _Out_ 4439 PULONG RequiredSize, 4440 _Out_ 4441 PDEVPROPTYPE Type 4442 ); 4443 4444 _Must_inspect_result_ 4445 _IRQL_requires_max_(APC_LEVEL) 4446 FORCEINLINE 4447 NTSTATUS 4448 WdfDeviceQueryPropertyEx( 4449 _In_ 4450 WDFDEVICE Device, 4451 _In_ 4452 PWDF_DEVICE_PROPERTY_DATA DeviceProperty, 4453 _In_ 4454 ULONG BufferLength, 4455 _Out_ 4456 PVOID PropertyBuffer, 4457 _Out_ 4458 PULONG RequiredSize, 4459 _Out_ 4460 PDEVPROPTYPE Type 4461 ) 4462 { 4463 return ((PFN_WDFDEVICEQUERYPROPERTYEX) WdfFunctions[WdfDeviceQueryPropertyExTableIndex])(WdfDriverGlobals, Device, DeviceProperty, BufferLength, PropertyBuffer, RequiredSize, Type); 4464 } 4465 4466 // 4467 // WDF Function: WdfDeviceAllocAndQueryPropertyEx 4468 // 4469 typedef 4470 _Must_inspect_result_ 4471 _IRQL_requires_max_(APC_LEVEL) 4472 WDFAPI 4473 NTSTATUS 4474 (STDCALL *PFN_WDFDEVICEALLOCANDQUERYPROPERTYEX)( 4475 _In_ 4476 PWDF_DRIVER_GLOBALS DriverGlobals, 4477 _In_ 4478 WDFDEVICE Device, 4479 _In_ 4480 PWDF_DEVICE_PROPERTY_DATA DeviceProperty, 4481 _In_ 4482 _Strict_type_match_ 4483 POOL_TYPE PoolType, 4484 _In_opt_ 4485 PWDF_OBJECT_ATTRIBUTES PropertyMemoryAttributes, 4486 _Out_ 4487 WDFMEMORY* PropertyMemory, 4488 _Out_ 4489 PDEVPROPTYPE Type 4490 ); 4491 4492 _Must_inspect_result_ 4493 _IRQL_requires_max_(APC_LEVEL) 4494 FORCEINLINE 4495 NTSTATUS 4496 WdfDeviceAllocAndQueryPropertyEx( 4497 _In_ 4498 WDFDEVICE Device, 4499 _In_ 4500 PWDF_DEVICE_PROPERTY_DATA DeviceProperty, 4501 _In_ 4502 _Strict_type_match_ 4503 POOL_TYPE PoolType, 4504 _In_opt_ 4505 PWDF_OBJECT_ATTRIBUTES PropertyMemoryAttributes, 4506 _Out_ 4507 WDFMEMORY* PropertyMemory, 4508 _Out_ 4509 PDEVPROPTYPE Type 4510 ) 4511 { 4512 return ((PFN_WDFDEVICEALLOCANDQUERYPROPERTYEX) WdfFunctions[WdfDeviceAllocAndQueryPropertyExTableIndex])(WdfDriverGlobals, Device, DeviceProperty, PoolType, PropertyMemoryAttributes, PropertyMemory, Type); 4513 } 4514 4515 // 4516 // WDF Function: WdfDeviceAssignProperty 4517 // 4518 typedef 4519 _Must_inspect_result_ 4520 _IRQL_requires_max_(APC_LEVEL) 4521 WDFAPI 4522 NTSTATUS 4523 (STDCALL *PFN_WDFDEVICEASSIGNPROPERTY)( 4524 _In_ 4525 PWDF_DRIVER_GLOBALS DriverGlobals, 4526 _In_ 4527 WDFDEVICE Device, 4528 _In_ 4529 PWDF_DEVICE_PROPERTY_DATA DeviceProperty, 4530 _In_ 4531 DEVPROPTYPE Type, 4532 _In_ 4533 ULONG Size, 4534 _In_opt_ 4535 PVOID Data 4536 ); 4537 4538 _Must_inspect_result_ 4539 _IRQL_requires_max_(APC_LEVEL) 4540 FORCEINLINE 4541 NTSTATUS 4542 WdfDeviceAssignProperty( 4543 _In_ 4544 WDFDEVICE Device, 4545 _In_ 4546 PWDF_DEVICE_PROPERTY_DATA DeviceProperty, 4547 _In_ 4548 DEVPROPTYPE Type, 4549 _In_ 4550 ULONG Size, 4551 _In_opt_ 4552 PVOID Data 4553 ) 4554 { 4555 return ((PFN_WDFDEVICEASSIGNPROPERTY) WdfFunctions[WdfDeviceAssignPropertyTableIndex])(WdfDriverGlobals, Device, DeviceProperty, Type, Size, Data); 4556 } 4557 4558 4559 4560 #endif // (NTDDI_VERSION >= NTDDI_WIN2K) 4561 4562 4563 WDF_EXTERN_C_END 4564 4565 #endif // _WDFDEVICE_H_ 4566 4567 4568