Freigeben über


IOCTL_SRIOV_DETACH IOCTL (pcivirt.h)

Die Anforderung gibt an, dass der Virtualisierungsstapel die Registrierung für Plug & Play Ereignisse aufheben möchte (die zuvor über die IOCTL_SRIOV_ATTACH-Anforderung registriert wurden).

Hauptcode

IRP_MJ_DEVICE_CONTROL

Statusblock

Irp->IoStatus.Status wird auf STATUS_SUCCESS festgelegt, wenn die Anforderung erfolgreich ist. Andernfalls gibt Status die entsprechende Fehlerbedingung als NTSTATUS-Code an.

Hinweise

Diese IOCTL-Anforderung wird vom Virtualisierungsstapel an den PF-Treiber (PCI Express Express SR-IOV Physical Function) gesendet, der GUID_DEVINTERFACE_VIRTUALIZABLE_DEVICE verfügbar macht.

Von hier an sollte die PF nicht erwarten, dass sie IOCTL_SRIOV_EVENT_COMPLETE und IOCTL_SRIOV_NOTIFICATION Anforderungen empfängt.

Der Treiber, der nicht mehr auf IOCTL_SRIOV_EVENT_COMPLETE warten muss. Wenn der Treiber derzeit wartet, sollte er nicht mehr warten und die Verarbeitung Plug & Play IRPs fortsetzen.

In diesem Beispiel für die Behandlung der IOCTL_SRIOV_DETACH-Anforderung verwaltet der PF-Treiber PnP-Zustände in seinem Gerätekontext. DeviceContext-PnpRebalancing> wird auf TRUE festgelegt, wenn der Treiber IRP_MN_QUERY_STOP_DEVICE empfängt, und auf FALSE festgelegt, wenn er IRP_MN_START_DEVICE empfängt.

    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;



Anforderungen

Anforderung Wert
Header pcivirt.h
IRQL PASSIVE_LEVEL

Weitere Informationen

WdfIoTargetSendInternalIoctlSynchronously

WdfIoTargetSendInternalIoctlOthersSynchronly

Erstellen von IOCTL-Anforderungen in Treibern

IOCTL_SRIOV_ATTACH

WdfIoTargetSendIoctlSynchronously