Compartir a través de


Uso de la API de servidor de Servicios de implementación de Windows

En entornos en los que no se puede usar la solución estándar de Servicios de implementación de Windows (WDS), el servidor WDS expone una API que permite a los desarrolladores escribir complementos, denominados proveedores, para controlar las solicitudes del entorno de ejecución de prearranque (PXE). Los desarrolladores deben cumplir las siguientes directrices al escribir proveedores PXE para WDS.

Instalar el rol WDS en el servidor

  • Servicios de implementación de Windows (WDS) es la versión revisada de servicios de instalación remota (RIS), necesitará el rol de servidor WDS para implementar el servidor PXE de WDS y los proveedores.
  • WDS reemplaza RIS como componente estándar a partir de Windows Server 2008 y Windows Server 2003 por Service Pack 2 (SP2).
  • Debe actualizar el servidor RIS a WDS en Windows Server 2003 con Service Pack 1 (SP1). Puede instalar el rol de servidor WDS con el Kit de instalación automatizada (WAIK) de Windows.

Registrar proveedores

  • Registre la biblioteca de vínculos dinámicos (DLL) del proveedor durante su instalación e inserte el proveedor en la lista ordenada de proveedores registrados.

    Nota

    Al instalar un proveedor nuevo o modificado, deberá reiniciar el servicio PXE de WDS para que los cambios surtan efecto.

     

  • Use la función PxeProviderRegister para registrar el proveedor y agregarla a la lista. Use la función PxeProviderUnRegister para anular el registro de un proveedor registrado y quitarlo de la lista.

  • Especifique la secuencia del proveedor en la lista ordenada. No se puede garantizar el índice de un proveedor de la lista porque otro proveedor puede registrarse más adelante antes que él. Para insertar el proveedor en la lista antes o después de otro proveedor registrado, use primero la función PxeProviderQueryIndex para obtener el índice del proveedor registrado y, a continuación, registrar el nuevo proveedor mientras se especifica un valor de índice mayor o menor.

  • La instalación puede almacenar la información de configuración del proveedor en la clave del Registro devuelta cuando se registra el proveedor. La dirección de la clave del Registro la recibe phProviderKey de PxeProviderRegister. El proveedor recibe un identificador de esta misma clave que el parámetro hProviderKey a su devolución de llamada PxeProviderInitialize . El proveedor debe almacenar la dirección de esta clave.

  • Instale siempre la biblioteca de vínculos dinámicos (DLL) del proveedor en la carpeta Archivos de programa del servidor.

Initialize

  • Incluya un archivo DLL que exporte la función de devolución de llamada PxeProviderInitialize en el proveedor. Cada proveedor requiere una devolución de llamada PxeProviderInitialize . Cuando WDS carga un proveedor, llama a la función PxeProviderInitialize del proveedor y pasa un identificador a la misma clave que se usa para almacenar información de configuración durante el registro del proveedor.
  • Cuando la devolución de llamada PxeProviderInitialize se devuelve y se realiza correctamente, el proveedor debe inicializarse completamente y estar listo para procesar las solicitudes.
  • Registre cada devolución de llamada en el proveedor durante el procesamiento de la función PxeProviderInitialize . Las devoluciones de llamada deben registrarse con la función PxeRegisterCallback .
  • Inicialice todos los recursos internos del proveedor dentro del procesamiento de su función PxeProviderInitialize .

Shutdown

  • Implemente la devolución de llamada PxeProviderShutdown . Todos los proveedores deben tener una devolución de llamada PxeProviderShutdown.
  • La función de devolución de llamada PxeProviderShutdown debe apagar completamente el proveedor y liberar todos sus recursos.
  • Después de que se devuelva la devolución de llamada PxeProviderShutdown , el identificador hProvider pasado a la función PxeProviderInitialize ya no es válido y no debe usarse para llamar a WDS.
  • Registre la devolución de llamada PxeProviderShutdown llamando a la función PxeRegisterCallback con PXE_CALLBACK_SHUTDOWN durante el procesamiento de la devolución de llamada PxeProviderInitialize . No llame a la devolución de llamada PxeProviderShutdown si se produce un error en la función PxeProviderInitialize .

Controlar el paquete de solicitud

Implemente la devolución de llamada PxeProviderRecvRequest para el proveedor. Todos los proveedores deben tener una devolución de llamada PxeProviderRecvRequest . Cuando WDS recibe una solicitud, llama a la devolución de llamada PxeProviderRecvRequest para el primer proveedor de la lista de proveedores registrados.

  • Si el proveedor procesará esta solicitud de forma sincrónica, la función PxeProviderRecvRequest debe devolver un valor de ERROR_SUCCESS. Si y solo si el proveedor procesará esta solicitud de forma asincrónica, la devolución de llamada PxeProviderRecvRequest debe devolver ERROR_IO_PENDING y llamar a la función PxeAsyncRecvDone cuando se haya procesado la solicitud.

  • La devolución de llamada PxeProviderRecvRequest y la función PxeAsyncRecvDone devuelve la dirección de una enumeración de PXE_BOOT_ACTION que describe la acción realizada por el proveedor para controlar la solicitud.

    Hay cuatro maneras de que un proveedor controle una solicitud:

    • El proveedor responde al cliente con un paquete de respuesta DHCP estándar que contiene una ruta de acceso al programa de arranque de red. Devolver el valor PXE_BA_NBP de la enumeración significa que el proveedor ha procesado correctamente el paquete de solicitud y ha completado la solicitud enviando un paquete de respuesta llamando a las funciones PxePacketAllocate y PxeSendReply .
    • El proveedor responde al cliente con un paquete de respuesta personalizado que no se ajusta a DHCP. Devolver el valor PXE_BA_CUSTOM de la enumeración significa que el proveedor ha procesado correctamente el paquete de solicitud y ha completado la solicitud mediante el envío de un paquete de respuesta personalizado llamando a las funciones PxePacketAllocate y PxeSendReply .
    • El proveedor determina que se debe omitir la solicitud. Devolver el valor de PXE_BA_IGNORE de la enumeración significa que el proveedor ha liberado todos los recursos asociados a la solicitud y la solicitud no se pasa al siguiente proveedor en la lista de proveedores registrados. Los proveedores pueden usar esta opción si detectan que un paquete de solicitud no es válido.
    • El proveedor rechaza atender la solicitud. Si se devuelve el valor de PXE_BA_REJECT de la enumeración, se indica al sistema que pase la solicitud al siguiente proveedor en la lista de proveedores registrados. Si este era el último proveedor de la lista, libera todos los recursos asociados a la solicitud y se omite la solicitud.
    • Registre la devolución de llamada PxeProviderRecvRequest llamando a la función PxeRegisterCallback con PXE_CALLBACK_RECV_REQUEST durante el procesamiento de la devolución de llamada PxeProviderInitialize .

Generar paquete de respuesta

  • Use la API para escribir proveedores para controlar la solicitud DHCP y generar paquetes de respuesta.
  • La función PxeProviderSetAttribute especifica los atributos utilizados por el proveedor para filtrar los paquetes. Los atributos del proveedor se pueden especificar para que el proveedor vea todos los paquetes, el proveedor solo ve paquetes DHCP o solo ve paquetes DHCP que especifican la opción Identificador de clase del proveedor DHCP (60) como "PXEClient".
  • La función PxeDhcpIsValid comprueba que un paquete es un paquete DHCP válido. Los proveedores pueden usar la función PxeDhcpIsValid para comprobar si un paquete del cliente es un paquete DHCP cuando el filtro establecido con la función PxeProviderSetAttribute se establece para recibir todos los paquetes para determinar si un paquete especificado es un paquete DHCP válido.
  • La función PxeDhcpInitialize inicializa un paquete de respuesta como un paquete de respuesta DHCP que se basa en la información de un paquete recibido del cliente. La función PxeProviderInitialize toma la dirección de un paquete DHCP válido recibido del cliente en la devolución de llamada PxeProviderRecvRequest . La función PxeDhcpInitialize toma un puntero a un paquete de respuesta asignado con la función PxePacketAllocate .
  • La función PxeDhcpGetOptionValue recupera un valor de opción de un paquete DHCP. La función PxeDhcpGetVendorOptionValue recupera un valor de opción del campo Información específica del proveedor (43) de un paquete DHCP.
  • A continuación, el proveedor puede rellenar el paquete de respuesta con información y usar la función PxeSendReply para enviar el paquete de respuesta al cliente. La función PxeDhcpAppendOption anexa una opción DHCP al paquete de respuesta.
  • Un proveedor que responda a las solicitudes de cliente mediante el envío de un paquete debe asignar el paquete de respuesta mediante la función PxePacketAllocate . A continuación, el proveedor puede rellenar el paquete de respuesta con información y usar la función PxeSendReply para enviar el paquete de respuesta al cliente.
  • Cuando la memoria asignada ya no es necesaria, el proveedor debe liberarla mediante la función PxePacketFree .

Enumerar proveedores registrados

  • Use la API para escribir proveedores que enumeren y comprueben otros proveedores registrados en la lista.
  • La función PxeGetServerInfo devuelve información sobre el servidor PXE. La función PxeGetServerInfo devuelve un BOOL que indica si el seguimiento está habilitado para el servidor. TRUE indica que el seguimiento está habilitado.
  • La función PxeProviderEnumFirst inicia una enumeración de proveedores en la lista de proveedores registrados. La función PxeProviderEnumFirst inicia la enumeración y devuelve la dirección del identificador que se debe usar al llamar a la función PxeProviderEnumNext . La función PxeProviderEnumNext devuelve una estructura PXE_PROVIDER que contiene la información sobre el proveedor. La función PxeProviderFreeInfo libera la memoria asignada para la estructura de PXE_PROVIDER por la función PxeProviderEnumNext . La función PxeProviderEnumClose cierra la enumeración de proveedores de la lista de proveedores registrados.

Controlar códigos de control de servicio

Agregar entradas de seguimiento al registro PXE

  • La función PxeTrace agrega una entrada de seguimiento al registro PXE. WDSPXE proporciona seguimiento para ayudar a los administradores a solucionar problemas. Los proveedores pueden registrar entradas de seguimiento de diferentes niveles de gravedad. Los administradores pueden configurar WDSPXE para registrar solo las entradas de determinados niveles de gravedad.

Acerca de la API de servicios de implementación de Windows

Uso de la API de cliente de Servicios de implementación de Windows