DXGKCB_INDICATE_CHILD_STATUS回调函数 (dispmprt.h)
DxgkCbIndicateChildStatus 函数记录显示适配器的指定子设备的当前状态。
语法
DXGKCB_INDICATE_CHILD_STATUS DxgkcbIndicateChildStatus;
NTSTATUS DxgkcbIndicateChildStatus(
[in] HANDLE DeviceHandle,
[in] PDXGK_CHILD_STATUS ChildStatus
)
{...}
参数
[in] DeviceHandle
表示显示适配器的句柄。 显示微型端口驱动程序以前在传递给 DxgkDdiStartDevice 的 DXGKRNL_INTERFACE 结构的 DeviceHandle 成员中获取此句柄。
[in] ChildStatus
指向 DXGK_CHILD_STATUS 结构的指针,该结构标识子设备并描述子设备的当前状态。
返回值
DxgkCbIndicateChildStatus 如果成功,则返回STATUS_SUCCESS。 否则,它将返回 Ntstatus.h 中定义的错误代码之一。
注解
显示适配器由于以下任一原因生成中断时,显示微型端口驱动程序的 DPC for ISR 调用 DxgkCbIndicateChildStatus :
- 外部设备通常 (监视器) 已连接到显示适配器的子设备之一,其中 HPD 感知值为 HpdAwarenessIntertible。 在这种情况下,显示微型端口驱动程序将 ChildStatus->类型 设置为 StatusConnection 并设置 ChildStatus。HotPlug。已连接到TRUE。
- 外部设备 (通常监视器) 已从 HPD 感知值为 HpdAwarenessInterruptible 的显示适配器子设备之一断开连接。 在这种情况下,显示微型端口驱动程序将 ChildStatus->类型 设置为 StatusConnection 并设置 ChildStatus。HotPlug。已连接到FALSE。
- 连接到其中一个板载子设备的显示设备 (其监视器方向感知值为 D3DKMDT_MOA_INTERRUPTIBLE) 已旋转。 在这种情况下,显示微型端口驱动程序将 ChildStatus->Type 设置为 StatusRotation 并设置 ChildStatus。旋转。旋转角度 的角度。
- 便携式计算机上的盖子打开。 在这种情况下,显示微型端口驱动程序将 ChildStatus->类型 设置为 StatusConnection 并设置 ChildStatus。HotPlug。已连接到TRUE。
- 便携式计算机上的盖子会合上。 在这种情况下,显示微型端口驱动程序将 ChildStatus->类型 设置为 StatusConnection 并设置 ChildStatus。HotPlug。已连接到FALSE。
示例
下面的代码示例演示如何记录子设备的当前状态。
NTSTATUS
AtiSimulateMonitor(HW_DEVICE_EXTENSION *pHwDeviceExtension, PR2_SIMULATE_MONITOR i_pEscape)
{
NTSTATUS Status;
PVOID MonitorDescriptor = NULL;
DXGK_CHILD_STATUS ChildStatus;
ChildStatus.ChildUid = pHwDeviceExtension->ulNumberDisplays | HW_ID_DISPLAY_CHILD;
ChildStatus.Type = StatusConnection;
if(i_pEscape->Data == NULL) {
// Remove a simulated monitor
if(pHwDeviceExtension->pvSimulatedMonitorDescriptor != NULL) {
ExFreePoolWithTag(pHwDeviceExtension->pvSimulatedMonitorDescriptor, ATI_TAG);
pHwDeviceExtension->pvSimulatedMonitorDescriptor = NULL;
pHwDeviceExtension->ulSimulatedMonitorDescriptorLength = 0;
pHwDeviceExtension->ulRetryCount = 0;
pHwDeviceExtension->bReportDescriptor = FALSE;
ChildStatus.HotPlug.Connected = FALSE;
Status = DxgkCbIndicateChildStatus(pHwDeviceExtension->DeviceHandle, &ChildStatus);
}
else {
// No simulated monitor is present so the request to remove one is invalid
return STATUS_INVALID_PARAMETER;
}
}
else {
//Add a simulated monitor
}
return Status;
}
要求
要求 | 值 |
---|---|
最低受支持的客户端 | Windows Vista |
目标平台 | 桌面 |
标头 | dispmprt.h (包括 Dispmprt.h) |
IRQL | <=DISPATCH_LEVEL |