IOCTL_SRIOV_DETACH IOCTL (pcivirt.h)
请求指示虚拟化堆栈希望取消注册以前通过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_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;
要求
要求 | 值 |
---|---|
Header | pcivirt.h |
IRQL | PASSIVE_LEVEL |
另请参阅
WdfIoTargetSendInternalIoctlSynchronously