DPC会被分配到不停的CPU核心上,如果分配到同一个核心,那么DPC是串行的,如果分配到不同的CPU核心上,那么DPC是并行的,但如果设置WDF_OBJECT_ATTRIBUTES的SynchronizationScope属性为WdfSynchronizationScopeDevice,那么即便CPU有多核,DPC也不会在不同的核心上并发,因为系统加锁进行同步保护了,也就是说设置 WdfSynchronizationScopeDevice后,那些回调函数不会并发执行,只会串行执行。当一个CPU在执行DPC时,另一个CPU中的DPC是拿不到锁的,因此不会被执行。
// Initialize FDO Attributes and create our device objectWDF_OBJECT_ATTRIBUTES fdo_attr;WDF_OBJECT_ATTRIBUTES_INIT(&fdo_attr);WDF_OBJECT_ATTRIBUTES_SET_CONTEXT_TYPE(&fdo_attr, your_device_extension); // Specify a context for DeviceObject.// Set the Synchronization scope to device so that only one event callback for this is executing at anytime. // This eliminates the need to hold any lock to synchronize access to device extension. fdo_attr.SynchronizationScope = WdfSynchronizationScopeDevice;// Context Cleanup will be called