Este artículo se tradujo automáticamente. Para ver el artículo en inglés, active la casilla Inglés. Además, puede mostrar el texto en inglés en una ventana emergente si mueve el puntero del mouse sobre el texto.
Traducción
Inglés

Método ThreadPool.UnsafeRegisterWaitForSingleObject (WaitHandle, WaitOrTimerCallback, Object, UInt32, Boolean)

 

Publicado: octubre de 2016

Registra un delegado para que espere a la clase WaitHandle y especifica un entero de 32 bits sin signo como tiempo de espera, en milisegundos. Este método no propaga la pila de llamadas al subproceso de trabajo.

Esta API no es conforme a CLS.

Espacio de nombres:   System.Threading
Ensamblado:  mscorlib (en mscorlib.dll)

[SecurityCriticalAttribute]
[CLSCompliantAttribute(false)]
public static RegisteredWaitHandle UnsafeRegisterWaitForSingleObject(
	WaitHandle waitObject,
	WaitOrTimerCallback callBack,
	object state,
	uint millisecondsTimeOutInterval,
	bool executeOnlyOnce
)

Parámetros

waitObject
Type: System.Threading.WaitHandle

La clase WaitHandle que se va a registrar. Use un WaitHandle diferente de Mutex.

callBack
Type: System.Threading.WaitOrTimerCallback

Delegado al que se llamará cuando el parámetro waitObject esté marcado.

state
Type: System.Object

Objeto que se pasa al delegado.

millisecondsTimeOutInterval
Type: System.UInt32

Tiempo de espera en milisegundos. Si el valor del parámetro millisecondsTimeOutInterval es 0 (cero), la función comprueba el estado del objeto y regresa inmediatamente. Si millisecondsTimeOutInterval es -1, el intervalo de tiempo de espera de la función nunca transcurre.

executeOnlyOnce
Type: System.Boolean

Es true para indicar que el subproceso no esperará en el parámetro waitObject después de haber llamado al delegado; es false para indicar que el temporizador se restablecerá cada vez que se complete la operación de espera, hasta que se anule el registro de la espera.

Valor devuelto

Type: System.Threading.RegisteredWaitHandle

Objeto RegisteredWaitHandle que puede usarse para cancelar la operación de espera registrada.

Exception Condition
SecurityException

El llamador no dispone del permiso requerido.

A diferencia de la RegisterWaitForSingleObject método UnsafeRegisterWaitForSingleObject no propaga la pila de llamadas al subproceso de trabajo. Esto permite que el código pierda la pila de llamadas y, por lo tanto, para elevar sus privilegios de seguridad.

System_CAPS_cautionPrecaución

Mediante UnsafeRegisterWaitForSingleObject sin darse cuenta podría abrir un agujero de seguridad. Seguridad de acceso del código basa sus comprobaciones de permisos en los permisos de todos los llamadores en la pila. Cuando trabajo en cola en un subproceso de grupo de subprocesos con UnsafeRegisterWaitForSingleObject, la pila del subproceso del grupo no tendrá el contexto de los llamadores reales. Código malintencionado pueda aprovechar esta circunstancia para evitar las comprobaciones de permiso.

Mediante un Mutex para waitObject no proporciona la exclusión mutua de devoluciones de llamada porque la API de Win32 subyacente utiliza el valor predeterminado WT_EXECUTEDEFAULT marca, por lo que cada devolución de llamada se envía en un subproceso independiente del grupo.

Cuando haya terminado con el RegisteredWaitHandle que devuelve este método, llame a su RegisteredWaitHandle.Unregister método para liberar las referencias al identificador de espera. Se recomienda que siempre llame a la RegisteredWaitHandle.Unregister (método), incluso si especifica true para executeOnlyOnce. Colección de elementos no utilizados resulta más eficaz si se llama a la RegisteredWaitHandle.Unregister método en lugar de según el finalizador del controlador de espera registrada.

SecurityCriticalAttribute

Requires full trust for the immediate caller. This member cannot be used by partially trusted or transparent code.

.NET Framework
Disponible desde 1.1
Volver al principio
Mostrar: