IOCTL_SRIOV_DETACH IOCTL (pcivirt.h)

La solicitud indica que la pila de virtualización quiere anular el registro de los eventos de Plug and Play (registrados previamente a través de la solicitud de IOCTL_SRIOV_ATTACH).

Código principal

IRP_MJ_DEVICE_CONTROL

Bloque de estado

Irp->IoStatus.Status se establece en STATUS_SUCCESS si la solicitud se realiza correctamente. De lo contrario, Status indica la condición de error adecuada como código NTSTATUS .

Comentarios

La pila de virtualización envía esta solicitud IOCTL al controlador de función física PCI Express SR-IOV (PF) que expone GUID_DEVINTERFACE_VIRTUALIZABLE_DEVICE.

Desde aquí, el PF no debe esperar recibir solicitudes de IOCTL_SRIOV_EVENT_COMPLETE y IOCTL_SRIOV_NOTIFICATION .

Controlador que debe dejar de esperar IOCTL_SRIOV_EVENT_COMPLETE. Si el controlador está esperando actualmente, debe dejar de esperar y continuar procesando Plug and Play IRP.

En este ejemplo, el control de la solicitud de IOCTL_SRIOV_DETACH, el controlador PF mantiene los estados PnP en su contexto de dispositivo. DeviceContext-PnpRebalancing> se establece en TRUE, cuando el controlador recibe IRP_MN_QUERY_STOP_DEVICE y se establece en FALSE cuando recibe IRP_MN_START_DEVICE.

    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;



Requisitos

Requisito Valor
Header pcivirt.h
IRQL PASSIVE_LEVEL

Consulte también

WdfIoTargetSendInternalIoctlSynchronously

WdfIoTargetSendInternalIoctlOthersSynchronously

Creación de solicitudes IOCTL en controladores

IOCTL_SRIOV_ATTACH

WdfIoTargetSendIoctlSynchronously