Compartir a través de


Administración de PDEV

Este tema solo se aplica a Windows 2000 y versiones posteriores.

El número de subprocesos que llaman a un controlador de pantalla depende del número de PDEV existentes en un dispositivo. Cada dispositivo tiene un máximo de un PDEV habilitado por salida del adaptador y un número ilimitado de PDEV deshabilitados. Un PDEV está deshabilitado o habilitado llamando a la función DrvAssertMode del controlador. Cuando un controlador de pantalla administra una combinación de PDEV deshabilitados y habilitados, el sistema operativo permite que un único subproceso llame a una función de controlador con un PDEV habilitado mientras permite simultáneamente que varios subprocesos llamen a funciones de controlador con PDEV deshabilitados. Por ejemplo, DrvBitBlt podría ejecutarse en el PDEV habilitado, mientras que drvDisableSurface está destruyendo otro PDEV deshabilitado. Incluso si un único controlador de pantalla administra varios PDEV habilitados (por ejemplo, en un escenario de varios monitores), el sistema operativo sigue permitiendo que un único subproceso llame al código de controlador con cualquiera de esos PDEV habilitados.

Si el controlador de pantalla debe administrar los recursos globales y los estados de hardware que se comparten entre PDEV, el controlador de pantalla también debe controlar cualquier sincronización necesaria. El controlador de pantalla se asigna al espacio de sesión, por lo que cada sesión tiene su propio conjunto de variables globales. Por lo tanto, no debe usar una variable global del controlador de pantalla para contener un objeto de sincronización como una exclusión mutua. En su lugar, almacene la exclusión mutua en la extensión del dispositivo del controlador de miniporte de vídeo, que se asigna al espacio global no al espacio de sesión. Puede inicializar la exclusión mutua en la función HwVidInitialize del controlador de minipuerto de vídeo. A continuación, la función DrvEnablePDEV del controlador de pantalla puede obtener un puntero a la exclusión mutua enviando un IOCTL personalizado al controlador de minipuerto de vídeo. Los subprocesos del controlador que pertenecen a distintas sesiones tendrán copias independientes del puntero, pero todas esas copias apuntarán al mismo objeto de exclusión mutua.

El controlador de pantalla no puede llamar directamente a las rutinas del kernel que adquieren y liberan una exclusión mutua, por lo que el controlador de pantalla debe confiar en el controlador de minipuerto de vídeo para realizar esas tareas. El controlador de minipuerto de vídeo podría implementar una función que adquiere y libera la exclusión mutua, y el controlador de pantalla podría obtener un puntero a esa función en el mismo IOCTL personalizado que usa para obtener un puntero a la propia exclusión mutua.

Solo se puede llamar al siguiente número limitado de funciones de controlador con un PDEV deshabilitado: