IOCTL_SRIOV_DETACH IOCTL (pcivirt.h)

请求指示虚拟化堆栈希望取消注册以前通过IOCTL_SRIOV_ATTACH请求) 注册 (即插即用事件。

主要代码

IRP_MJ_DEVICE_CONTROL

状态块

Irp->如果请求成功,IoStatus.Status 设置为 STATUS_SUCCESS。 否则, “状态” 指示相应的错误条件作为 NTSTATUS 代码。

注解

此 IOCTL 请求由虚拟化堆栈发送到公开GUID_DEVINTERFACE_VIRTUALIZABLE_DEVICE的 PCI Express SR-IOV 物理功能 (PF) 驱动程序。

从现在起,PF 不应收到 IOCTL_SRIOV_EVENT_COMPLETEIOCTL_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

WdfIoTargetSendInternalIoctlOthersSynchronously

在驱动程序中创建 IOCTL 请求

IOCTL_SRIOV_ATTACH

WdfIoTargetSendIoctlSynchronously