Partager via


IOCTL_SRIOV_DETACH IOCTL (pcivirt.h)

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

Code principal

IRP_MJ_DEVICE_CONTROL

Bloc d’état

> IoStatus.Status est défini sur STATUS_SUCCESS si la requête réussit. Sinon, 'état indique la condition d’erreur appropriée en tant que code NTSTATUS.

Remarques

Cette demande 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 devrait pas s’attendre à recevoir des demandes de IOCTL_SRIOV_EVENT_COMPLETE et de IOCTL_SRIOV_NOTIFICATION.

Le conducteur qui doit cesser d’attendre IOCTL_SRIOV_EVENT_COMPLETE. Si le pilote attend actuellement, il doit cesser d’attendre et continuer à traiter les irps Plug-and-Play.

Dans cet exemple de gestion de la requête IOCTL_SRIOV_DETACH, le pilote PF gère les états PnP dans son contexte d’appareil. Le deviceContext->PnpRebalancing a la valeur TRUE, lorsque le pilote reçoit IRP_MN_QUERY_STOP_DEVICE et a la valeur 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;



Exigences

Exigence Valeur
d’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