winbase.h


VirtualLock

La función VirtualLock bloquea la región especificada del espacio de direcciones virtual del proceso en memoria, asegurando que los accesos subsiguientes a la región no incurrirán en fallos de página.

Sintaxis

BOOL VirtualLock(
    LPVOID lpAddress,  // dirección del primer byte del rango a bloquear
    DWORD dwSize       // número de bytes en el rango a bloquear
   );

Parámetros

lpAddress: apunta a la dirección base de la región de páginas a bloquear.

dwSize: especifica el tamaño, en bytes, de la región a bloquear. La región de páginas afectadas incluye todas las páginas que contengan uno o más bytes en el rango entre el parámetro lpAddress a (lpAddress+dwSize). Esto significa que un rango de dos bytes sobre el límite de dos páginas provocará que ambas páginas sean bloqueadas.

Valor de retorno

Si la función tiene éxito, el valor de retorno es distinto de cero.

Si la función falla, el valor de retorno es cero. Para obtener información más detallada sobre el error, llamar a la función GetLastError.

Observaciones

Todas las páginas de la región especificada deben estar acomodadas. La memoria protegida con la bandera PAGE_NOACCESS no puede ser bloqueada.

Bloquear páginas en memoria puede degradar las prestaciones del sistema reduciendo la cantidad de memoria RAM y forzando al sistema a intercambiar otras páginas críticas al fichero de paginación. Por defecto, un proceso puede bloquear un máximo de 30 páginas. El límite por defecto es intencionadamente pequeño para impedir una degradación de prestaciones severa. Las aplicaciones que necesiten un bloqueo de un número de páginas mayor deben llamar primero a SetProcessWorkingSetSize para incrementar sus tamaños de trabajo mínimo y máximo. El número máximo de páginas que un proceso puede bloquear es igual al número de páginas en su conjunto de trabajo mínimo menos una pequeña sobrecarga.

Las páginas que haya bloqueado un proceso penmanecen residentes aunque el proceso esté inactivo por periodos prolongados.

Para desbloquear una región de páginas bloquedas, usar la función VirtualUnlock. Las páginas bloqueadas son desbloqueadas automáticamente cuando el proceso termina.

Esta función no es como las funciones GlobalLock o LocalLock ya que no se incrementa un contador de bloqueos y no se conviernte un manipulador en un puntero. No hay un contador de bloqueos para páginas virtuales, de modo que múltiples llamadas a VirtualUnlock nunca son necesarias para desbloquear una región de páginas.

Windows 95: en Windows 95, la función VirtualLock está implementada vacía, de modo que no tiene efecto y siempre devuelve TRUE.