Cómo usar ScanPolicy en OpenCore

Puesto que existen dispositivos de almacenamiento de varias clases (USB, SATA, NVMe, etc.) y también diferentes sistemas de archivos y tipos de particiones (EFI, APFS, HFS+, etc.) es útil disponer de un mecanismo para definir cuáles de esos elementos van a ser tenidos en cuenta por OpenCore (OC) de acuerdo con nuestras necesidades.

Esto se consigue con la clave ScanPolicy (Integer) que está en la sección Misc / Security del archivo config.plist y que define la política de detección de tipos de dispositivo y sistemas de archivos por parte de OC.
ScanPolicy se calcula sumando valores hexadecimales elegidos de una lista (disponible en el PDF de configuración de OC) y convirtiendo la suma total a su valor decimal que es el que debe anotarse en config.plist. OpenCore sólo mostrará en su menú (picker) como opciones de arranque los elementos definidos en ScanPolicy.

Lista completa

0x00000001 - OC_SCAN_FILE_SYSTEM_LOCK, escanea solamente sistemas de archivos conocidos definidos como parte de esta política.
0x00000002 - OC_SCAN_DEVICE_LOCK, escanea solamente dispositivos conocidos definidos como parte de esta política.
0x00000100 - OC_SCAN_ALLOW_FS_APFS, permite escanear el sistema de archivos APFS.
0x00000200 - OC_SCAN_ALLOW_FS_HFS, permite escanear el sistema de archivos HFS.
0x00000400 - OC_SCAN_ALLOW_FS_ESP, permite escanear el sistema de archivos EFI.
0x00000800 - OC_SCAN_ALLOW_FS_NTFS, permite escanear el sistema de archivos NTFS.
0x00001000 - OC_SCAN_ALLOW_FS_EXT, permite escanear el sistema de archivos EXT.
0x00010000 - OC_SCAN_ALLOW_DEVICE_SATA, permite escanear dispositivos SATA.
0x00020000 - OC_SCAN_ALLOW_DEVICE_SASEX, permite escanear dispositivos SAS y Mac NVMe.
0x00040000 - OC_SCAN_ALLOW_DEVICE_SCSI, permite escanear dispositivos SCSI.
0x00080000 - OC_SCAN_ALLOW_DEVICE_NVME, permite escanear dispositivos NVMe.
0x00100000 - OC_SCAN_ALLOW_DEVICE_ATAPI, permite escanear dispositivos de CD/DVD.
0x00200000 - OC_SCAN_ALLOW_DEVICE_USB, permite escanear dispositivos USB.
0x00400000 - OC_SCAN_ALLOW_DEVICE_FIREWIRE, permite escanear dispositivos FireWire.
0x00800000 - OC_SCAN_ALLOW_DEVICE_SDCARD, permite escanear dispositivos lectores de tarjetas.
0x01000000 - OC_SCAN_ALLOW_DEVICE_PCI, permite escanear dispositivos conectados directamente al bus PCI.

A cada elemento de la lista le corresponde un valor hexadecimal, una vez obtenida la suma total ha de ser convertida a su valor decimal. Es sencillo hacerlo con la calculadora de macOS:

  • Poner la calculadora en modo De programación (Comando + 3 o menú Visualización)
  • Seleccionar el sistema de numeración hexadecimal (hacer clic en 16)
  • Sumar los valores de los elementos seleccionados
  • Una vez obtenido el valor total, seleccionar el sistema de numeración decimal (hacer clic en 10)
  • Copiar el número resultante y pegarlo en ScanPolicy de config.plist.

Nota 1: OC_SCAN_FILE_SYSTEM_LOCK y OC_SCAN_DEVICE_LOCK se seleccionan siempre, en caso contrario no tendría sentido definir ScanPolicy.
Nota 2: Si ScanPolicy tiene el valor 0 permite que todo tipo de dispositivos y de sistemas encontrados sean considerados capaces de ser arrancados por OC.
Nota 3: seleccionar OC_SCAN_ALLOW_FS_ESP permite escanear el sistema de archivos de la partición del sistema EFI. En este caso todas las particiones EFI estarán visibles, lo que puede no ser deseable.

Valor seguro (failsafe)

En el PDF de configuración de OC se propone 0x10F0103 como valor seguro, este valor se corresponde con:

OC_SCAN_FILE_SYSTEM_LOCK - 1
OC_SCAN_DEVICE_LOCK - 2
OC_SCAN_ALLOW_FS_APFS - 100
OC_SCAN_ALLOW_DEVICE_SATA - 10000
OC_SCAN_ALLOW_DEVICE_SASEX - 20000
OC_SCAN_ALLOW_DEVICE_SCSI - 40000
OC_SCAN_ALLOW_DEVICE_NVME - 80000
OC_SCAN_ALLOW_DEVICE_PCI - 1000000.

1 + 2 + 100 + 1000 + 2000 + 4000 + 8000 + 1000000 = 0x10F0103 hexadecimal (17760515 decimal).

Personalización de la lista

Pero es posible que queramos personalizar esto. Por ejemplo, queremos seleccionar solamente estos elementos: APFS (macOS Big Sur), HFS (USB de instalación) y dispositivos de tipo SATA, NVMe y USB:

0x00000001 - OC_SCAN_FILE_SYSTEM_LOCK.
0x00000002 - OC_SCAN_DEVICE_LOCK.
0x00000100 - OC_SCAN_ALLOW_FS_APFS.
0x00000200 - OC_SCAN_ALLOW_FS_HFS.
0x00010000 - OC_SCAN_ALLOW_DEVICE_SATA.
0x00080000 - OC_SCAN_ALLOW_DEVICE_NVME.
0x00200000 - OC_SCAN_ALLOW_DEVICE_USB.

1 + 2 + 100 + 200 + 10000 + 80000 + 200000 = 0x290303 hexadecimal (2687747 en decimal). En config.plist quedaría así:

	<key>ScanPolicy</key>
	<integer>2687747</integer>

Como siempre, en Dortania hay un excelente texto sobre este tema.

Aplicación web para calcular de forma gráfica el valor de ScanPolicy:
ScanPolicy Generator (autor original i3p9).

Deja un comentario