Deshabilitar programáticamente el administrador de tareas, el registro, y las propiedades de pantalla


Fecha: 02/Ago/2004 (31 de julio de 2004)
Autor: Javier Pelaez Terrazas.    Email:  [email protected]

.

Este artículo muestra como habilitar y deshabilitar desde código (VB.NET) el administrador de tareas, el registro y las propiedades de pantalla en los sistemas operativos Windows XP y Windows 2000 (sólo he probado en ambos).

Adjunto con el artículo una simpática y sencilla aplicación que realiza todo lo mencionado anteriormente, desarrollada en Visual Studio 2003 (Windows Forms).

Requisitos

Para lograr cada uno de los tres cometidos, se debe acceder a sendas claves de registro, cuyos valores indican al sistema operativo si cada característica está o no habilitada para el usuario actual.

Primero, se deben crear la siguiente clave de registro (si es que no existe):

	HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\system
Luego, se deben crear los siguientes valores de tipo D_WORD en dicha clave:

	DisableRegistryTools
	disabletaskmgr
	NoDispCPL

Código Fuente

Primero, se debe realizar la siguiente importación:

	Imports Microsoft.Win32

Si no se desea ir al registro manualmente, también se puede verificar la existencia de la clave y valores especificados por código, y crearlos si es necesario. El código para hacer esto es el siguiente:

    Para verificar y crear de ser necesario la clave del registro:

	Public Sub crearLlave()
		Dim r As RegistryKey = Registry.CurrentUser.OpenSubKey( _
			"software\microsoft\windows\currentversion\policies\system")
		If IsNothing(r) Then
			Registry.CurrentUser.CreateSubKey( _
				"software\microsoft\windows\currentversion\policies\system")
		End If
	End Sub

    Para verificar y crear de ser necesario los valores necesarios dentro de dicha clave:

	Public Function crearValorAdminTareas()
		Dim r As RegistryKey = Registry.CurrentUser.OpenSubKey( _
			"software\microsoft\windows\currentversion\policies\system", True)
		r.SetValue("disabletaskmgr", 0)
	End Function
	
	Public Function crearValorRegistro()
		Dim r As RegistryKey = Registry.CurrentUser.OpenSubKey( _
			"software\microsoft\windows\currentversion\policies\system", True)
		r.SetValue("DisableRegistryTools", 0)
	End Function
	
	Public Function crearValorPantalla()
		Dim r As RegistryKey = Registry.CurrentUser.OpenSubKey( _
			"software\microsoft\windows\currentversion\policies\system", True)
		r.SetValue("NoDispCPL", 0)
	End Function

El truco consiste en acceder a los valores del registro creados y modificarlos. El código en Visual Basic .NET para habilitar y deshabilitar cada una de las mencionadas características del sistema operativo es el siguiente (para todas las características, el valor de "0" significa habilitación y "1" significa deshabilitación):

	Public Sub desactivarAdminTareas()
		Dim regkey As Microsoft.Win32.RegistryKey
		regkey = Microsoft.Win32.Registry.CurrentUser.OpenSubKey( _
			"software\microsoft\windows\currentversion\policies\system", True)
		regkey.SetValue("disabletaskmgr", 1)
		regkey.Close()
	End Sub

	Public Sub activarAdminTareas()
		Dim regkey As Microsoft.Win32.RegistryKey
		regkey = Microsoft.Win32.Registry.CurrentUser.OpenSubKey( _
			"software\microsoft\windows\currentversion\policies\system", True)
		regkey.SetValue("disabletaskmgr", 0)
		regkey.Close()
	End Sub
	
	Public Sub desactivarRegistro()
		Dim regkey As Microsoft.Win32.RegistryKey
		regkey = Microsoft.Win32.Registry.CurrentUser.OpenSubKey( _
			"software\microsoft\windows\currentversion\policies\system", True)
		regkey.SetValue("DisableRegistryTools", 1)
		regkey.Close()
	End Sub

	Public Sub activarRegistro()
		Dim regkey As Microsoft.Win32.RegistryKey
		regkey = Microsoft.Win32.Registry.CurrentUser.OpenSubKey( _
			"software\microsoft\windows\currentversion\policies\system", True)
		regkey.SetValue("DisableRegistryTools", 0)
		regkey.Close()
	End Sub
	
	Public Sub desactivarPropiedadesDePantalla()
		Dim regkey As Microsoft.Win32.RegistryKey
		regkey = Microsoft.Win32.Registry.CurrentUser.OpenSubKey( _
			"software\microsoft\windows\currentversion\policies\system", True)
		regkey.SetValue("NoDispCPL", 1)
		regkey.Close()
	End Sub

	Public Sub activarPropiedadesDePantalla()
		Dim regkey As Microsoft.Win32.RegistryKey
		regkey = Microsoft.Win32.Registry.CurrentUser.OpenSubKey( _
			"software\microsoft\windows\currentversion\policies\system", True)
		regkey.SetValue("NoDispCPL", 0)
		regkey.Close()
	End Sub
Este código no funcionará si no se han creado correctamente la clave y valores de registro mencionados.

La habilitación y deshabilitación de dichas características sólo será efectiva para los usuarios regulares del computador (debido a que las claves están en el directorio HKEY_CURRENT_USER). Es decir, la sesión del usuario administrador no será afectada. Para que esto sí ocurra, se debe utilizar HKEY_LOCAL_MACHINE.

Mayor información

Para obtener mayor información acerca de las clases RegistryKey y Registry, visitar los siguientes links:

    Registry:          http://msdn.microsoft.com/library/spa/default.asp?url=/library/SPA/cpref/html/frlrfmicrosoftwin32registryclasstopic.asp
    RegistryKey:    http://msdn.microsoft.com/library/spa/default.asp?url=/library/SPA/cpref/html/frlrfmicrosoftwin32registrykeyclasstopic.asp

PRECAUCIÓN: Se debe tener cuidado con la utilización de este código, ya que por ejemplo si se deshabilita todo, ¡ya no se puede ingresar al registro para volverlo a habilitar manualmente! (se da un círculo vicioso, jeje). Para evitar dolores de cabeza, se debe tener siempre a mano un ejecutable con código para habilitar todas las características mencionadas.

Finalmente, no duden en escribirme con cualquier duda o problema que les pueda surgir a raíz del presente artículo, y por favor, ¡no olviden votar en la caja de PanoramaBox (arriba a la derecha) si es que el artículo les ha parecido interesante y/o útil!!. Muchas gracias.
 


ir al índice

Fichero con el código de ejemplo: javierpelaezt_DeshabilitacionCaracteristicasWindows.zip - Tamaño 10 KB