wait lock objects, 103, 114, 398–399
collection objects, 457
deleting, 116
wake support for KMDF drivers, 174, 207, 212–217, 220–222
example, 217–220
watch construct (SDV), 826
watchdog timer example (KMDF), 301–305
WDF architecture, 73–76
WDF bloggers, 21
WDF driver model, 51–64. See also KMDF drivers; UMDF drivers
defined, 52–53
I/O model, 55–59
interaction with Windows, 68
object model, 53–55
Plug and Play and power management, 59–61, 170–176, 189–190
defaults, 170
security, 61–62
serviceability and versioning, 63–64
synchronization requirements, 383
testing and tracing, 63
WDM drivers vs., 25, 51–52
!wdf extensions. See KMDF debugger extensions
WDF frameworks, 67–89. See also KMDF drivers; UMDF drivers
device and driver support, 84–89
distributions of, 638–639
object model, 72, 75
overview of KMDF, 71–73, 81–84
overview of UMDF, 68–70, 76–81
WDF memory objects. See memory objects
WDF object model, 91–128. See also KMDF object model; UMDF object model
attributes, 94, 108
context areas, 122–128
implementation, 95–105
object creation, 106–110, 149–157
object hierarchy and lifetime, 110–122. See also hierarchy of WDF objects
WDF support objects, 441–473
collection objects, 102, 114, 455–459
deleting, 115
general objects (base objects), 97, 454–455
deleting, 116
in object hierarchy, 112
memory allocation. See allocating memory
registry access, 447–453
KMDF registry objects and methods, 450–453
UMDF device property store, 99, 447–450
timer objects, 104, 114, 459–464
deleting, 116, 120
synchronization scope, 395–396
WMI support in KMDF drivers, 464–473
WDF update logs, 664
WDF verifiers, 63
WDF_ABS_TIMEOUT_IN_Xxx conversion functions, 461
WDF_CALLBACK_CONSTRAINT enumeration, 390
WDF_COMMON_BUFFER_CONFIG structure, 566
WDF_DECLARE_CONTEXT_TYPE_WITH_NAME macro, 127, 154
WDF_DEVICE_IO_TYPE enumeration, 229–230
WDF_DEVICE_PNP_CAPABILITIES structure, 204
WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS structure, 208–210, 216
WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS_INIT macrostructure, 208
WDF_DEVICE_POWER_POLICY_WAKE_SETTINGS structure, 214, 215–216
WDF_DEVICE_POWER_POLICY_WAKE_SETTINGS_INIT macro, 216
WDF_DEVICE_POWER_STATE enumeration, 175
WDF_DMA_ENABLER_CONFIG structure, 566, 568
WDF_DRIVER_CONFIG_INIT function, 139
WDF_FILEOBJECT_CONFIG structure, 273
WDF_INTERRUPT_CONFIG structure, 539
WDF_IO_QUEUE_CONFIG structure, 194, 197, 204
WDF_IO_TARGET_OPEN_PARAMS structure, 314–316
WDF_IO_TARGET_OPEN_PARAMS_INIT_XXX functions, 314–315
WDF_NO_ATTRIBUTES structure, 539
WDF_OBJECT_ATTRIBUTES structure, 108, 139
WDF_OBJECT_ATTRIBUTES_INIT function, 108
WDF_OBJECT_ATTRIBUTES_INIT_CONTEXT_TYPE macro, 127–128, 469
WDF_OBJECT_ATTRIBUTES_SET_CONTEXT_TYPE macro, 127–128, 154
WDF_Object_CONFIG structures, 107
WDF_Object_CONFIG_INIT functions, 107
WDF_POWER_DEVICE_STATE enumeration, 206
WDF_POWER_POLICY_EVENT_CALLBACKS structure, 214, 216
WDF_POWER_POLICY_EVENT_CALLBACKS_INIT macro, 214, 217
WDF_PROPERTY_SDTORE_DISPOSITION enumeration, 448
WDF_REQUEST_PARAMETERS structure, 270, 291
WDF_REQUEST_SEND_OPTION_Xxx flags, 338
WDF_REQUEST_SEND_OPTION_IGNORE_TARGET_STATE, 338, 340
WDF_REQUEST_SEND_OPTION_SEND_AND_FORGET, 338, 341, 343–345
WDF_SYNCHRONIZATION_SCOPE enumeration, 391
WDF_TIMER_CONFIG_INIT function, 460
WDF_TRI_STATE enumeration, 273
WDF_USB_DEVICE_SELECT_CONFIG_PARAMS structure, 365–367
WDF_USB_REQUEST_COMPLETION_PARAMS structure, 375
WDF_WMI_INSTANCE_CONFIG structure, 467, 469
WDF_WMI_PROVIDER_CONFIG structure, 466, 469
WDFCHILDLIST objects. See child list objects
WdfChildListXxx methods, 158
WDFCMRESLIST objects. See resource list objects
WdfCmResourceListGetCount method, 532
WdfCmResourceListGetDescriptor list, 532, 536
WDFCOLLECTION objects. See collection objects
WdfCollectionXxx methods, 456
WdfCollectionAdd method, 408
WDFCOMMONBUFFER objects. See DMA common buffer objects
WdfCommonBufferCreate method, 566, 568–569
WdfCommonBufferCreateWithConfig method, 566, 568–569
WdfCommonBufferGetAlignedLogicalAddress method, 567, 569
WdfCommonBufferGetAlignedVirtualAddress method, 567, 569
WdfControlFinishInitializing method, 144
!wdfcrashdump debugger extension, 728
WDFDEVICE objects. See device objects
WdfDeviceAllocAndQueryProperty method, 450
WdfDeviceAssignMofResourceName method, 469
WdfDeviceAssignS0IdleSettings method, 209–212, 217, 218, 220, 853
WdfDeviceAssignSxWakeSettings method, 214, 215, 216, 853
WdfDeviceConfigureRequestDispatching method, 265, 267, 279
WdfDeviceCreate method, 155
WdfDeviceEnqueueRequest method, 252
WdfDeviceGetDevicePowerState method, 175
WdfDeviceGetIoTarget method, 313, 344
WDFDEVICE_INIT structure, 153, 155, 193
WdfDeviceInitialize method, 155
WdfDeviceInitXxx methods, 146, 153
WdfDeviceInitAssignName, 160
WdfDeviceInitAssignSDDLString, 160, 162
WdfDeviceInitAssignWdfmIrpPreprocessCallback, 504–506
WdfDeviceInitSetIoInCallerContextCallback, 250
WdfDeviceInitSetIoType method, 229–230
WdfDeviceInitSetPnpPowerEventCallbacks, 204, 215, 298–299
WdfDeviceInitSetPowerNotPageable, 175
WdfDeviceInitSetPowerPageable, 175
WdfDeviceInitSetPowerPolicyEventCallback, 153, 217, 853
WdfDeviceInitSetPowerPolicyOwnership, 143
WdfDeviceOpenRegistryKey method, 450–451
WdfDeviceQueryProperty method, 450
WdfDeviceResumeIdle method, 210
WdfDeviceSetAlignmentRequirement method, 568
WdfDeviceSetDeviceState method, 187
WdfDeviceSetSpecialFileSupport method, 174
WdfDeviceStopIdle method, 210–211, 220, 258
WdfDeviceWdmXxx methods, 501
WdfDevStateIsNP method, 175–176
WdfDmaDirectionReadFromDevice method, 571
WdfDmaDirectionWriteToDevice method, 571
WDFDMAENABLER objects. See DMA enabler objects
WdfDmaProfileXxx methods, 566, 568
WDFDMATRANSACTION objects. See DMA transaction objects
WdfDmaTransactionCreate method, 567, 569
WdfDmaTransactionDmaCompleted method, 572, 576–577
WdfDmaTransactionDmaCompletedFinal method, 575
WdfDmaTransactionDmaCompletedWithLength method, 576
WdfDmaTransactionExecute method, 570
WdfDmaTransactionGetBytesTransferred method, 573, 575, 577
WdfDmaTransactionInitialize method, 569, 571
WdfDmaTransactionInitializeUsingRequest method, 569, 571
WdfDmaTransactionRelease method, 572, 577
WDFDPC objects. See DPCs (deferred procedure calls)
WdfDpcWdmGetDpc method, 501
WDFDRIVER objects, 103, 114, 137
deleting, 116
WdfDriverCreate method, 139
WdfExecutionLevelXxx execution levels, 396–398
WdfFdoInitWdmGetPhysicalDevice method, 501
WdfFdoInitXxx functions, 154
registry objects and methods, 450–453
WdfFdoInitSetDefaultChildListConfig, 157–158
WdfFdoInitSetEventCallbacks, 153
WdfFdoInitSetFilter, 154, 193
WDFFILEOBJECT objects. See file objects
WdfFileObjectWdmGetFileObject method, 501
WdfGetDriver method, 139
WdfGetRequestParameters method, 291
WDFINTERRUPT objects. See interrupt objects
WdfInterruptAcquireLock method, 515, 547
WdfInterruptCreate method, 540
WdfInterruptDisable method, 541
WdfInterruptEnable method, 541
WdfInterruptGetDevice method, 544–545
WdfInterruptQueueDpcForIsr method, 545
WdfInterruptReleaseLock method, 547
WdfInterruptSynchronize method, 515, 546–547
WdfInterruptWdmGetInterrupt method, 501
WdfIoQueueXxx methods, 260, 265–266, 268, 270–271
WdfIoQueueRetrieveXxx methods, 252, 268, 270–271
WDFIORESLIST objects. See resource range list objects
WDFIORESREQLIST objects. See resource requirements list objects
WDFIOTARGET objects. See target objects
WdfIoTargetClose method, 319
WdfIoTargetCloseForQueryRemove method, 320, 321
WdfIoTargetCreate method, 314
WdfIoTargetFormatRequestXxx methods, 332–334, 338
WdfIoTargetGetState method, 319
WdfIoTargetOpen method, 314, 319
WdfIoTargetSendXxxSynchronously methods, 337–338
WdfIoTargetStart method, 319, 360
WdfIoTargetStop method, 320, 360
WdfIoTargetWdmXxx methods, 501
!wdfkd debugger extensions, 705
!wdfkd.wdfdriverinfo, 689–690
WdfKd.dll library, 14
WDFKEY objects. See registry key objects
!wdflogdump debugger extension, 727
WDFLOOKASIDE objects. See lookaside list objects
WdfLookasideListCreate method, 445
WDFMEMORY objects. See memory objects
WdfMemoryXxx methods, 248, 444
WdfMemoryAssignBuffer, 350
WdfMemoryCreate, 327, 330, 444
WdfMemoryCreateFromLookaside, 444, 446
WdfMemoryCreatePreallocated, 327, 444
WdfMemoryGetBuffer, 444, 446
WDFOBJECT objects. See generic objects
WdfObjectAcquireLock method, 386
WdfObjectAllocateContext method, 126, 128
WdfObjectCreate method, 109, 455
WdfObjectDelete method, 115, 120
deleting memory objects, 447
WdfObjectDereference method, 115
WdfObjectReference method, 115
WdfObjectReleaseLock method, 386
WdfPdoInitAllocate method, 158
WdfPdoInitSetEventCallbacks method, 159
WdfPowerDeviceXxx constants, 206–207
WdfPropertyStoreCreateIfMissing method, 449
WDFQUEUE objects. See queue objects
WdfRegistryXxx methods, 450–453
WdfRegistryOpenKey, 450
WdfRegistryWdmGetHandle, 501
WDFREQUEST objects, 103, 114, 323
deleting, 116
WdfRequestCancelSentRequest method, 352
WdfRequestComplete method, 292, 509
WdfRequestCompleteWithInformation method, 292
WdfRequestCompleteWithPriorityBoost method, 292, 509
WdfRequestCreate method, 323
WdfRequestCreateFromIrp method, 348–350, 501
WdfRequestFormatRequestUsingCurrentType method, 331
WdfRequestGetCompletionParams request, 336
WdfRequestGetStatus method, 339
WdfRequestIsCanceled method, 295
WdfRequestMarkCancelable method, 294
WdfRequestProbeAndLockUserBufferXxx, 252
WdfRequestRetrieveXxx methods, 247–251, 501, 570
WdfRequestRetrieveInputMemory, 347
WdfRequestRetrieveOutputMemory, 286, 347
WdfRequestReuse method, 347–350
WdfRequestSend method, 337, 344, 345
WdfRequestSetCompletionRoutine method, 334
WdfRequestStopActionPurge method, 352
WdfRequestStopActionSuspend method, 352
WdfRequestUnmarkCancelable method, 294, 403
WdfRequestWdmGetIrp method, 502
!wdfsettraceprefix debugger extension, 729
WDFSPINLOCK objects. See spin lock objects
WdfSpinLockCreate method, 539
WDFSTRING objects. See string objects
WDFTIMER objects. See timer objects
WdfTimerCreate method, 459–460, 463
WdfTimerGetParentObject method, 460
WdfTimerStart method, 460, 461, 463
WdfTimerStop method, 460, 463
!wdftmffile debugger extension, 727
WDFUSBDEVICE objects. See USB device objects
WDFUSBINTERFACE objects. See USB interface objects
WdfUsbInterfaceXxx methods, 359, 361, 368
WDFUSBPIPE objects. See USB pipe objects
WdfUsbTargetDeviceXxx methods, 359, 360, 365–367, 371–372
WdfUsbTargetPipeXxx methods, 359, 368, 372, 374, 502
WdfUsbTargetPipeConfigContinuousReader, 375
WdfVerifierDbgBreakPoint method, 688
WDFVERIFY macro, 688
WDFWAITLOCK objects. See wait lock objects
WdfWaitLockAcquire method, collection objects, 457
WdfWaitLockCreate method, collection objects, 457
WdfWaitLockRelease method, collection objects, 457
WdfWdmDeviceGetWdfDeviceHandle method, 502
WdfWdmDriverGetWdfDriverHandle method, 502
WDFWMIINSTANCE objects. See WMI instance objects
WdfWmiInstanceCreate method, 469
WdfWmiInstanceRegister method, 467
WDFWMIPROVIDER objects. See WMI provider objects
WdfWmiProviderCreate method, 467
WDFWORKITEM objects. See work item objects
WdfWorkItemCreate method, 526
WdfWorkItemEnqueue method, 524, 526
thread context, 510
WDK (Windows Driver Kit), obtaining, 13
WDK documentation, 14–15
WDK installation, 11–14
WDK root folder, 14
%wdk% root folder, 14
WDM drivers, 88, 500–503. See also kernel-mode programming
WDF driver model vs., 25, 51–52
WDT_TIMER_CONFIG_INIT_PERIODIC function, 460
WDTF (Windows Device Testing Framework), 675–676
!wdtlogsave debugger extension, 728
WER (Windows Error Reporting), 692–693, 696
WHDC (Windows Hardware Developer Central), 20
WIN32_WINNT_VERSION macro, 628
WinDbg debugger, 18, 63, 698, 699–706
commands, 702
extensions, 704–706
installation error debugging, 663
KMDF debugging session, starting, 714–715
suggestions for experimenting, 729–730
viewing KMDF log, 726–729
viewing trace messages, 725–726
WINDBG list server, 21
Windows API, 26, 86–87, 497–500
Windows Debugger Users List, 21
Windows Device Manager, 637
Windows Device Testing Framework, 675–676
Windows DMA abstraction, 555–563
Windows driver architecture, 27–28
Windows Error Reporting (WER), 692–693, 696
Windows File System Developers List, 21
Windows I/O model, 31–36, 239
Windows kernel, about, 24. See also entries at kernel
Windows logo, obtaining, 653
Windows symbols, obtaining, 19
Windows system architecture, 25–27
Windows System Software Developers List, 21
Windows trace preprocessor, 669
Windows version, selecting, 619–620
Windows Vista, elevated privileges for, 15
Windows Vista, ETW in, 416–417
Windows Vista, kernel debugging for, 711–712
WinHEC event, 22
with guard construct (SDV), 826
WMI handler (I/O requests), 240
WMI instance objects, 104, 114, 147, 467
deleting, 116
event callbacks, 470–473
WMI provider objects, 104, 114, 147, 466–467
deleting, 116
WMI request handlers, 464
WMI support in KMDF drivers, 464–473
work item, defined, 49
work item objects, 104, 114, 523
deleting, 116, 120
driver threads and, 523–527
synchronization scope, 395–396
WPP_CLEANUP macro, 429–431
WPP_CONTROL_GUIDS macro, 425–426
WPP_DEFINE_CONTROL_GUID macro, 425
WPP_INIT_TRACING macro, 427–429
WPP_LEVEL_ENABLED macro, 422
WPP_LEVEL_LOGGER macro, 422
WPP preprocessor, running, 420–424
WPP software tracing. See tracing
write requests (I/O), 32, 225, 242
event callbacks for, 282–291
formatting for I/O targets, 332–333
synchronous, 337
WRITE_PORT_Xxx macros, 530
WRITE_REGISTER_Xxx macros, 530
WriteFile function, 33, 225
Wudfddi.idl file, 595
!wudfext debugger extensions, 705
WudfExt.dll library, 14
Wudfhost process, 78