IOCTL_SRIOV_DETACH IOCTL (pcivirt.h)
要求表示虛擬化堆疊想要取消註冊先前透過IOCTL_SRIOV_ATTACH要求) 註冊 (隨插即用 事件。
主要程序代碼
狀態區塊
Irp->如果要求成功,IoStatus.Status 會設定為 STATUS_SUCCESS。 否則, Status 會以 NTSTATUS 程式代碼表示適當的錯誤狀況。
備註
此 IOCTL 要求是由虛擬化堆疊傳送至 PCI Express SR-IOV 實體函式, (公開GUID_DEVINTERFACE_VIRTUALIZABLE_DEVICE的 PF) 驅動程式。
從這裡開始,PF 不應預期會收到 IOCTL_SRIOV_EVENT_COMPLETE 和 IOCTL_SRIOV_NOTIFICATION 要求。
必須停止等候 IOCTL_SRIOV_EVENT_COMPLETE的驅動程式。 如果驅動程式目前正在等候,它應該會停止等候,並繼續處理 隨插即用 IRP。
在此處理IOCTL_SRIOV_DETACH要求的範例中,PF 驅動程式會在其裝置內容中維護 PnP 狀態。 當驅動程式收到IRP_MN_QUERY_STOP_DEVICE時,deviceContext-PnpRebalancing> 會設定為 TRUE,並在收到IRP_MN_START_DEVICE時設定為 FALSE。
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