IOCTL_SRIOV_DETACH IOCTL (pcivirt.h)

La demande indique que la pile de virtualisation souhaite annuler l’inscription pour Plug-and-Play événements (précédemment inscrits via la demande de IOCTL_SRIOV_ATTACH).

Code principal

IRP_MJ_DEVICE_CONTROL

Bloc d’état

Irp->IoStatus.Status est défini sur STATUS_SUCCESS si la demande réussit. Sinon, Status indique la condition d’erreur appropriée en tant que code NTSTATUS .

Remarques

Cette requête IOCTL est envoyée par la pile de virtualisation au pilote PCI Express SR-IOV Physical Function (PF) qui expose GUID_DEVINTERFACE_VIRTUALIZABLE_DEVICE.

À partir de là, le PF ne doit pas s’attendre à recevoir des demandes IOCTL_SRIOV_EVENT_COMPLETE et IOCTL_SRIOV_NOTIFICATION .

Le conducteur qui doit cesser d’attendre IOCTL_SRIOV_EVENT_COMPLETE. Si le pilote est en attente, il doit cesser d’attendre et continuer à traiter Plug-and-Play IRPs.

Dans cet exemple de gestion de la demande IOCTL_SRIOV_DETACH, le pilote PF conserve les états PnP dans son contexte d’appareil. DeviceContext-PnpRebalancing> est défini sur TRUE lorsque le pilote reçoit IRP_MN_QUERY_STOP_DEVICE et sur FALSE lorsqu’il reçoit 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;



Configuration requise

Condition requise Valeur
En-tête pcivirt.h
IRQL PASSIVE_LEVEL

Voir aussi

WdfIoTargetSendInternalIoctlSynchronously

WdfIoTargetSendInternalIoctlOthersSynchronously

Création de requêtes IOCTL dans les pilotes

IOCTL_SRIOV_ATTACH

WdfIoTargetSendIoctlSynchronously