IOCTL_VPCI_WRITE_BLOCK IOCTL ()
PCI Express (PCIe) 虛擬函式的驅動程式 (VF) 發出 IOCTL (IOCTL) IOCTL_VPCI_WRITE_BLOCK IOCTL 控制程式代碼,以便將數據寫入 VF 設定區塊。 驅動程式會將此 IOCTL 發出至驅動程式堆疊中的下一個較低驅動程式。
注意 此 IOCTL 要求是由支援單一根目錄 I/O 虛擬化 (SR-IOV) 介面之裝置上的 PCIe VF 驅動程式所發出。
主要程序代碼
狀態區塊
如果要求成功,Irp-IoStatus.Status> 會設定為 STATUS_SUCCESS。
否則,狀態為適當的錯誤狀況為NTSTATUS程式碼。
如需詳細資訊,請參閱 [XREF-LINK:NTSTATUS 值]。
備註
準備 I/O 要求封包結構
驅動程式必須先配置或重複使用 I/O 要求封包, (IRP) 。 您可以使用 IoBuildDeviceIoControlRequest 例程來特別配置 IOCTL IRP。 您也可以使用一般用途 IRP 建立和初始化例程,例如 IoAllocateIrp、 IoReuseIrp 或 IoInitializeIrp。 如需 IRP 配置的詳細資訊,請參閱 為 Lower-Level 驅動程式建立 IRP。然後,驅動程式必須設定 IRP 結構的成員,如下表所述。
IRP 成員 | 值 |
---|---|
UserBuffer | NULL |
UserEvent |
呼叫 KeInitializeEvent 例程時初始化的事件物件位址。 注意 如果不需要異步完成 IOCTL 要求,則此成員應該設定為 NULL。 如需詳細資訊,請參閱 在驅動程式中建立IOCTL要求。
|
UserIosb | 呼叫端配置 IO_STATUS_BLOCK 結構的位址。 此結構會由較低的驅動程式更新,以指出 I/O 要求的最終狀態。 |
準備 I/O 堆疊位置結構
驅動程式會呼叫 IoGetNextIrpStackLocation 例程來存取較低驅動程式的 I/O 堆棧位置。 此函式會傳回 IO_STACK_LOCATION結構的指標 ,其中包含I/O堆棧位置的參數。驅動程式接著必須在 IO_STACK_LOCATION 結構中設定成員,如下表所述:
IO_STACK_LOCATION成員 | 值 |
---|---|
MajorFunction | |
Parameters.DeviceIoControl.IoControlCode | |
Parameters.DeviceIoControl.Type3InputBuffer | VPCI_WRITE_BLOCK_INPUT 結構的指標。 驅動程式會將此結構格式化為 IOCTL_VPCI_WRITE_BLOCK I/O 要求的參數。 |
IParameters.DeviceIoControl.InputBufferLength | VPCI_WRITE_BLOCK_INPUT 結構的大小,以位元組為單位。 |
Parameters.DeviceIoControl.OutputBufferLength | 零個 |
發出IOCTL要求
若要發出此 IOCTL 要求,驅動程式會呼叫 IoCallDriver 例程,將要求傳遞至驅動程式堆疊中的下一個較低驅動程式。 驅動程式會設定 IoCallDriver 的參數,如下表所述。IoCallDriver 參數 | 值 |
---|---|
DeviceObject | 較低驅動程式的裝置物件。 |
Irp | 先前已配置和初始化之 IRP 的位址。 如需詳細資訊,請參閱 準備 I/O 要求封包 (IRP) 結構。 |
IOCTL 要求完成結果
當IOCTL_VPCI_WRITE_BLOCK IOCTL 要求完成時,呼叫端配置IO_STATUS_BLOCK結構的 Status 成員會設定為下表中的其中一個值:狀態值 | 描述 |
---|---|
STATUS_SUCCESS | IOCTL 已順利完成。 |
STATUS_PENDING |
IOCTL 尚未完成。 驅動程式必須呼叫 KeWaitForSingleObject 例程,才能讓目前的線程進入等候狀態。 驅動程式會將 Object 參數設定為呼叫 KeInitializeEvent 例程中所初始化之事件對象的位址。
當 IOCTL 要求完成時,事件會發出訊號。 事件發出訊號之後,線程就會繼續執行。 |
STATUS_BUFFER_TOO_SMALL | Parameters.DeviceIoControl.InputBufferLength 成員設定為小於 VPCI_WRITE_BLOCK_INPUT 結構大小的值。 |
如果要求成功完成,IO_STATUS_BLOCK 結構的信息成員會設定為寫入的位元元組數目。 否則, Information 成員會設定為零。
發出 IOCTL_VPCI_WRITE_BLOCK IOCTL 時,會通知 PCIe 實體函式的驅動程式 (PF) 將數據寫入指定的 VF 設定區塊。
注意 操作系統會保留和管理此 IOCTL 成功完成所需的資源。
一旦配置 VF 設定區塊,就可以在下列驅動程式之間以受保護的方式交換 VF 設定數據:
- 在客體作業系統中執行的 VF 驅動程式。 此操作系統會在 Hyper-V 子分割內執行。
-
在管理作業系統中執行的 PF 驅動程式。
此操作系統會在 Hyper-V 父分割區內執行。
注意IOCTL_VPCI_WRITE_BLOCK IOCTL 提供 WriteVfConfigBlock 例程的異步替代方案。
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 | 可在 Windows Server 2012 和更新版本的 Windows 中使用。 |
標頭 | (包含 Wdm.h) |
IRQL | DISPATCH_LEVEL |
另請參閱
IRP_MJ_INTERNAL_DEVICE_CONTROL