Pregunta

Hace poco estaba tratando de usar W32pServiceTable en mi conductor. Yo importé wink32.lib en las fuentes:

TARGETNAME=exp
TARGETTYPE=DRIVER
TARGETLIB=$(DDK_LIB_PATH)\win32k.lib
SOURCES=Experimental.cpp
MSC_WARNING_LEVEL=/W3

Y declaro en el archivo de origen:

extern PDWORD W32pServiceTable;

Pero estoy símbolo sin resolver. Leo, que sólo los conductores pueden utilizar GDI wink32.lib. Pero estoy bastante seguro de que otros conductores también pueden vincular a la biblioteca (pero no sé cómo). Estaría muy agradecido si pudiera ayudar.

¿Fue útil?

Solución

Esto es cierto. Sólo los conductores pueden utilizar GDI win32k.sys, y viceversa -. GDI conductores pueden estar vinculados estáticamente sólo para win32k.sys

La razón de esto es que la mayoría de los Windows internas se cargan en el espacio de memoria global, mientras que win32k.sys se carga en el llamado "espacio de sesión". Algo de información está aquí:

http://www.tar.hu/wininternals/ch07lev1sec4.html

En palabras sencillas - la mayor parte de los componentes y los controladores de Windows se cargan una vez para todo el sistema, mientras que cosas como la gestión de la interfaz de usuario, GDI y etc -. Se cargan por sesión

Hay una posibilidad complicado durante el tiempo de ejecución para los conductores de GDI para obtener punteros a funciones Ntoskrnl y los utilizan, y viceversa -. Controladores WDM con un poco de esfuerzo puede utilizar win32k funciones (que trabajará para la sesión 'actual')

De todos modos, ¿por qué quieres que enlace a win32k? ¿Qué funcionalidad necesita?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top