共用方式為


IOCTL_SRIOV_DETACH IOCTL (pcivirt.h)

要求表示虛擬化堆疊想要取消註冊先前透過IOCTL_SRIOV_ATTACH要求) 註冊 (隨插即用 事件。

主要程序代碼

IRP_MJ_DEVICE_CONTROL

狀態區塊

Irp->如果要求成功,IoStatus.Status 會設定為 STATUS_SUCCESS。 否則, Status 會以 NTSTATUS 程式代碼表示適當的錯誤狀況。

備註

此 IOCTL 要求是由虛擬化堆疊傳送至 PCI Express SR-IOV 實體函式, (公開GUID_DEVINTERFACE_VIRTUALIZABLE_DEVICE的 PF) 驅動程式。

從這裡開始,PF 不應預期會收到 IOCTL_SRIOV_EVENT_COMPLETEIOCTL_SRIOV_NOTIFICATION 要求。

必須停止等候 IOCTL_SRIOV_EVENT_COMPLETE的驅動程式。 如果驅動程式目前正在等候,它應該會停止等候,並繼續處理 隨插即用 IRP。

在此處理IOCTL_SRIOV_DETACH要求的範例中,PF 驅動程式會在其裝置內容中維護 PnP 狀態。 當驅動程式收到IRP_MN_QUERY_STOP_DEVICE時,deviceContext-PnpRebalancing> 會設定為 TRUE,並在收到IRP_MN_START_DEVICE時設定為 FALSE。

    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

另請參閱

WdfIoTargetSendInternalIoctlSynchronously

WdfIoTargetSendInternalIoctlOthersSynchronously

在驅動程式中建立IOCTL要求

IOCTL_SRIOV_ATTACH

WdfIoTargetSendIoctlSynchronously