DXGKCB_INDICATE_CHILD_STATUS función de devolución de llamada (dispmprt.h)
La función DxgkCbIndicateChildStatus registra el estado actual de un dispositivo secundario especificado de un adaptador de pantalla.
Sintaxis
DXGKCB_INDICATE_CHILD_STATUS DxgkcbIndicateChildStatus;
NTSTATUS DxgkcbIndicateChildStatus(
[in] HANDLE DeviceHandle,
[in] PDXGK_CHILD_STATUS ChildStatus
)
{...}
Parámetros
[in] DeviceHandle
Identificador que representa un adaptador de pantalla. El controlador de minipuerto de pantalla obtuvo previamente este identificador en el miembro DeviceHandle de la estructura de DXGKRNL_INTERFACE que se pasó a DxgkDdiStartDevice.
[in] ChildStatus
Puntero a una estructura DXGK_CHILD_STATUS que identifica el dispositivo secundario y describe el estado actual del dispositivo secundario.
Valor devuelto
DxgkCbIndicateChildStatus devuelve STATUS_SUCCESS si se realiza correctamente. De lo contrario, devuelve uno de los códigos de error definidos en Ntstatus.h.
Comentarios
El DPC del controlador de minipuerto de pantalla para ISR llama a DxgkCbIndicateChildStatus cuando el adaptador de pantalla genera una interrupción por cualquiera de los siguientes motivos:
- Un dispositivo externo (normalmente un monitor) se ha conectado a uno de los dispositivos secundarios del adaptador de pantalla que tiene un valor de reconocimiento hpdAwarenessInterruptible. En este caso, el controlador de minipuerto de pantalla establece ChildStatus->Type en StatusConnection y establece ChildStatus.HotPlug. Conectado a TRUE.
- Un dispositivo externo (normalmente un monitor) se ha desconectado de uno de los dispositivos secundarios del adaptador de pantalla que tiene un valor de reconocimiento hpdAwarenessInterruptible. En este caso, el controlador de minipuerto de pantalla establece ChildStatus->Type en StatusConnection y establece ChildStatus.HotPlug. Conectado a FALSE.
- El dispositivo de pantalla conectado a uno de sus dispositivos secundarios incorporados (que tiene un valor de reconocimiento de orientación de monitor de D3DKMDT_MOA_INTERRUPTIBLE) se ha girado. En este caso, el controlador de minipuerto de pantalla establece ChildStatus->Type en StatusRotation y establece ChildStatus.Rotación. Ángulo al ángulo de rotación.
- La tapa de un ordenador portátil se abre. En este caso, el controlador de minipuerto de pantalla establece ChildStatus->Type en StatusConnection y establece ChildStatus.HotPlug. Conectado a TRUE.
- La tapa de un equipo portátil se cierra. En este caso, el controlador de minipuerto de pantalla establece ChildStatus->Type en StatusConnection y establece ChildStatus.HotPlug. Conectado a FALSE.
Ejemplos
En el ejemplo de código siguiente se muestra cómo registrar el estado actual de un dispositivo secundario.
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;
}
Requisitos
Requisito | Value |
---|---|
Cliente mínimo compatible | Windows Vista |
Plataforma de destino | Escritorio |
Encabezado | dispmprt.h (incluir Dispmprt.h) |
IRQL | <=DISPATCH_LEVEL |