Red de conocimiento de abogados - Derecho de sociedades - Puntero de subrutina de lenguaje sencillo

Puntero de subrutina de lenguaje sencillo

<1>Concepto básico de gancho Hook (Hook) es una plataforma de mecanismo de procesamiento de mensajes de Windows. Las aplicaciones pueden configurar subrutinas en ella para monitorear ciertos mensajes de ventanas específicas, y las ventanas monitoreadas pueden ser creadas por. otros procesos. Cuando llega un mensaje, se procesa antes de la función del controlador de ventana de destino. El mecanismo de enlace permite que las aplicaciones intercepten y procesen mensajes de ventana o eventos específicos.

Un gancho es en realidad un segmento de programa que procesa mensajes y se conecta al sistema a través de llamadas al sistema. Siempre que se envía un mensaje específico, el programa de enlace capturará el mensaje antes de llegar a la ventana de destino, es decir, la función de enlace primero obtendrá el control

. En este momento, la función de enlace puede procesar (cambiar) el mensaje, continuar entregándolo sin procesarlo o forzar la finalización de la entrega del mensaje.

Mecanismo operativo

1. Lista de ganchos y subrutina de ganchos:

Cada gancho tiene una lista de punteros asociada, que se denomina lista enlazada. mantenido por el sistema. El puntero de esta lista apunta a la función de devolución de llamada especificada y definida por la aplicación llamada por la subrutina Hook, es decir, cada subrutina de procesamiento del gancho. Cuando aparece un mensaje asociado con el tipo de Hook especificado, el sistema pasa el mensaje a la subrutina Hook. Algunos subprocesos de Hook solo pueden monitorear mensajes, modificar mensajes o detener el progreso de los mensajes para evitar que estos mensajes pasen al siguiente subproceso de Hook o ventana de destino. El gancho instalado más recientemente se coloca al principio de la cadena y el gancho instalado más recientemente se coloca al final, es decir, el que se agrega más tarde obtiene el control primero.

Windows no requiere que el orden de desinstalación de los subprocesos de enlace se invierta respecto del orden de instalación. Cada vez que se desinstala un gancho, Windows libera la memoria que ocupa y actualiza toda la lista de ganchos. Si el programa instala un gancho pero finaliza antes de desinstalarlo, el sistema lo desinstalará automáticamente.

La subrutina de enlace es una función de devolución de llamada definida por la aplicación (función CALLBACK). No se puede definir como una función miembro de una determinada clase, solo se puede definir como una función C ordinaria. Se utiliza para monitorear el sistema o un tipo específico de evento. Estos eventos pueden asociarse con un subproceso específico o pueden ser eventos para todos los subprocesos del sistema.

La subrutina de gancho debe seguir la siguiente sintaxis:

LRESULT CALLBACK HookProc

(

int nCode,

WPARAM wParam,

LPARAM lParam

);

Por supuesto, lo anterior es la expresión en C, lo que significa que esta subrutina de enlace definida directamente debe Hay Hay tres parámetros, que deberían expresarse así en Yi Zhong:

Subrutina HookProc, tipo entero, público, función de devolución de llamada de gancho

. Parámetro ncode, tipo entero

.

.Parámetro wParam, tipo entero

.Parámetro lParam, tipo entero

HookProc es el nombre definido por la aplicación.

El parámetro nCode es el código Hook y la subrutina Hook utiliza este parámetro para determinar la tarea. El valor de este parámetro depende del tipo de gancho. Cada tipo de gancho tiene su propio conjunto de caracteres característicos de código de gancho.

Los valores de los parámetros wParam y lParam dependen del código Hook, pero sus valores típicos contienen información sobre el envío o recepción de mensajes.

2. Instalación y liberación del gancho:

<1>Instalación del gancho

Utilice la función API SetWindowsHookEx() para instalar una subrutina de gancho definida por una aplicación instalada. en la lista de anzuelos. La función SetWindowsHookEx siempre instala la subrutina Hook al comienzo de la cadena Hook. Cuando ocurre un evento monitoreado por un tipo específico de Hook, el sistema llama a la subrutina Hook al comienzo de la cadena Hook asociada con este Hook. Cada subproceso Hook en la cadena Hook decide si pasa este evento al siguiente subproceso Hook.

La subrutina Hook necesita llamar a la función CallNextHookEx para transferir eventos a la siguiente subrutina Hook.

HHOOK SetWindowsHookEx(

int idHook, //Parámetro<1>

 

HOOKPROC lpfn, //Parámetro<2>

HINSTANCE hMod, //Parámetro<3>

DWORD dwThreadId //Parámetro<4>

En Yizhongze Declare el DLL como esta:

.DLL comando api_SetWindowsHookExA, tipo entero, "SetWindowsHookExA"

Parámetro idHook, tipo entero

. /p>

.Parámetro nMod, tipo entero

.Parámetro dwThreadID, tipo entero

Parámetro<1>idHook es el tipo de gancho, es decir, el tipo de mensaje que maneja

El parámetro<2>lpfn es el puntero de dirección del subproceso de enlace. Si el parámetro dwThreadId es 0, o es el identificador de un hilo creado por otro proceso,

lpfn debe apuntar al subproceso de enlace en la DLL. Además, lpfn puede apuntar a un código de subrutina de enlace del proceso actual. El parámetro <3>nMod es el identificador de la instancia de la aplicación. Identifica la DLL que contiene la subrutina apuntada por lpfn. Si dwThreadId identifica un subproceso creado por el proceso actual y el código de la subrutina se encuentra en el proceso actual, hMod debe ser NULL. Simplemente puede configurarlo para que sea el identificador de instancia de esta aplicación.

Parámetro<4>dwThreadID: el identificador del subproceso asociado con el subproceso de enlace instalado. Si es 0, el subproceso de enlace está asociado con todos los subprocesos y es un enlace global.

Si la función tiene éxito, devuelve el identificador del subproceso de enlace, y si falla, devuelve (NULL) 0.