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