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
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