要求指出虛擬化堆疊想要取消註冊隨插即用事件(先前透過 IOCTL_SRIOV_ATTACH 要求註冊)。
主要程序代碼
狀態區塊
如果要求成功,Irp->IoStatus.Status 會設定為STATUS_SUCCESS。 否則,狀態 會以 NTSTATUS 程式代碼表示適當的錯誤狀況。
言論
此 IOCTL 要求是由虛擬化堆疊傳送至公開GUID_DEVINTERFACE_VIRTUALIZABLE_DEVICE的 PCI Express SR-IOV 實體函式 (PF) 驅動程式。
從這裡開始,PF 不應該預期會收到 IOCTL_SRIOV_EVENT_COMPLETE 和 IOCTL_SRIOV_NOTIFICATION 要求。
必須停止等候 IOCTL_SRIOV_EVENT_COMPLETE的驅動程式。 如果驅動程式目前正在等候,它應該停止等候,並繼續處理隨插即用 IRP。
在這個處理IOCTL_SRIOV_DETACH要求的範例中,PF 驅動程式會在其裝置內容中維護 PnP 狀態。 當驅動程式收到 >,並在收到IRP_MN_START_DEVICE時,deviceContext-PnpRebalancing 設定為 TRUE。
case IOCTL_SRIOV_DETACH:
WdfWaitLockAcquire(deviceContext->PnpStateLock, NULL);
deviceContext->PnpVspAttached = FALSE;
if (deviceContext->PnpRebalancing != FALSE)
{
//
// Any new client (VSP state machine) will not know about
// the current rebalance is it should block attach until
// rebalance is over.
//
deviceContext>PnpSafeToAttach = FALSE;
KeClearEvent(&deviceContext>PnpSafeEvent);
}
//
// Unblock the PnP thread if it waiting for an IO control from the
// client as the client just detached.
//
deviceContext->PnpEventStatus = STATUS_SUCCESS;
KeSetEvent(&deviceContext->PnpUnblockEvent, IO_NO_INCREMENT, FALSE);
WdfWaitLockRelease(deviceContext->PnpStateLock);
status = STATUS_SUCCESS;
break;
要求
要求 | 價值 |
---|---|
標頭 | pcivirt.h |
IRQL | PASSIVE_LEVEL |
另請參閱
WdfIoTargetSendInternalIoctlSynchronously
WdfIoTargetSendInternalIoctlOthersSynchronously
在驅動程式 中建立IOCTL要求