Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Запрос указывает, что стек виртуализации хочет отменить регистрацию для событий Plug and Play (ранее зарегистрированных через запрос IOCTL_SRIOV_ATTACH).
Основной код
Блок состояния
Irp->IoStatus.Status STATUS_SUCCESS, если запрос выполнен успешно. В противном случае состояние указывает соответствующее условие ошибки в виде кода NTSTATUS.
Замечания
Этот запрос IOCTL отправляется стеком виртуализации в драйвер SR-IOV физической функции (PF) PCI Express, который предоставляет GUID_DEVINTERFACE_VIRTUALIZABLE_DEVICE.
Отсюда PF не должен ожидать получения IOCTL_SRIOV_EVENT_COMPLETE и IOCTL_SRIOV_NOTIFICATION запросов.
Драйвер, который должен перестать ожидать IOCTL_SRIOV_EVENT_COMPLETE. Если драйвер в настоящее время ожидает, он должен прекратить ожидание и продолжить обработку IRP Plug and Play.
В этом примере обработка запроса IOCTL_SRIOV_DETACH драйвер PF сохраняет состояния PnP в контексте устройства. УстройствоContext->PnpRebalancing имеет значение TRUE, когда драйвер получает IRP_MN_QUERY_STOP_DEVICE и устанавливает значение FALSE при получении 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;
Требования
| Требование | Ценность |
|---|---|
| заголовка | pcivirt.h |
| IRQL | PASSIVE_LEVEL |
См. также
WdfIoTargetSendInternalIoctlSynchronous
WdfIoTargetSendInternalIoctlOthersSynchronously