다음을 통해 공유


Windows Deployment Services 서버 API 사용

표준 WDS(Windows 배포 서비스) 솔루션을 사용할 수 없는 환경에서 WDS 서버는 개발자가 PXE(Preboot 실행 환경) 요청을 처리하기 위해 공급자라고 하는 플러그 인을 작성할 수 있는 API를 노출합니다. 개발자는 WDS용 PXE 공급자를 작성할 때 다음 지침을 준수해야 합니다.

서버에 WDS 역할 설치

  • WDS(Windows 배포 서비스)는 RIS(원격 설치 서비스)의 수정된 버전입니다. WDS PXE 서버 및 공급자를 구현하려면 WDS 서버 역할이 필요합니다.
  • WDS는 Windows Server 2008 및 Windows Server 2003부터 RIS를 표준 구성 요소로 SP2(서비스 팩 2)로 대체합니다.
  • WINDOWS Server 2003 SP1(서비스 팩 1)에서 WDS로 RIS 서버를 업데이트해야 합니다. Windows 자동화 설치 키트 (WAIK) 를 사용하여 WDS 서버 역할을 설치할 수 있습니다.

공급자 등록

  • 설치하는 동안 공급자 DLL(동적 연결 라이브러리)을 등록하고 공급자를 등록된 공급자의 순서가 지정된 목록에 삽입합니다.

    메모

    새 공급자 또는 수정된 공급자를 설치할 때 변경 내용을 적용하려면 WDS PXE 서비스를 다시 시작해야 합니다.

     

  • PxeProviderRegister 함수를 사용하여 공급자를 등록하고 목록에 추가합니다. PxeProviderUnRegister 함수를 사용하여 등록된 공급자의 등록을 취소하고 목록에서 제거합니다.

  • 순서가 지정된 목록에서 공급자의 시퀀스를 지정합니다. 다른 공급자가 나중에 등록될 수 있으므로 목록에 있는 공급자의 인덱스가 보장될 수 없습니다. 등록된 다른 공급자 앞이나 뒤에 공급자를 삽입하려면 먼저 PxeProviderQueryIndex 함수를 사용하여 등록된 공급자의 인덱스를 가져와서 더 크거나 작은 인덱스 값을 지정하면서 새 공급자를 등록합니다.

  • 설치는 공급자가 등록될 때 반환되는 레지스트리 키 아래에 공급자 구성 정보를 저장할 수 있습니다. 레지스트리 키의 주소는 phProviderKey에 의해 PxeProviderRegister에서 수신됩니다. 공급자는 PxeProviderInitialize 콜백에 대한 hProviderKey 매개 변수와 동일한 키에 대한 핸들을 받습니다. 공급자는 이 키의 주소를 저장해야 합니다.

  • 항상 서버의 Program Files 폴더에 공급자 DLL(동적 연결 라이브러리)을 설치합니다.

초기화

  • 공급자에서 PxeProviderInitialize 콜백 함수를 내보내는 DLL이 포함되도록 합니다. 모든 공급자에는 PxeProviderInitialize 콜백이 필요합니다. WDS는 공급자를 로드할 때 공급자의 PxeProviderInitialize 함수를 호출하고 공급자 등록 중에 구성 정보를 저장하는 데 사용되는 동일한 키에 핸들을 전달합니다.
  • PxeProviderInitialize 콜백이 반환되고 성공하면 공급자가 완전히 초기화되고 요청을 처리할 준비가 되어 있어야 합니다.
  • PxeProviderInitialize 함수를 처리하는 동안 공급자의 모든 콜백을 등록합니다. 콜백은 PxeRegisterCallback 함수에 등록해야 합니다.
  • PxeProviderInitialize 함수의 처리 내에서 모든 공급자의 내부 리소스를 초기화합니다.

종료

  • PxeProviderShutdown 콜백을 구현합니다. 모든 공급자는 PxeProviderShutdown콜백이 있어야 합니다.
  • PxeProviderShutdown 콜백 함수는 공급자를 완전히 종료하고 모든 리소스를 해제해야 합니다.
  • PxeProviderShutdown 콜백이 반환되면 PxeProviderInitialize 함수에 전달된 hProvider 핸들이 더 이상 유효하지 않으며 WDS를 호출하는 데 사용하면 안 됩니다.
  • PxeProviderInitialize 콜백을 처리하는 동안 PXE_CALLBACK_SHUTDOWN를 사용하여 PxeRegisterCallback 함수를 호출해서 PxeProviderShutdown 콜백을 등록합니다. PxeProviderInitialize 함수가 실패하는 경우 PxeProviderShutdown 콜백을 호출하지 마세요.

요청 패킷 처리

공급자에 대한 PxeProviderRecvRequest 콜백을 구현합니다. 모든 공급자는 PxeProviderRecvRequest 콜백이 있어야 합니다. WDS는 요청을 받으면 등록된 공급자 목록의 첫 번째 공급자에 대한 PxeProviderRecvRequest 콜백을 호출합니다.

  • 공급자가 이 요청을 동기적으로 처리하는 경우 PxeProviderRecvRequest 함수는 ERROR_SUCCESS값을 반환해야 합니다. 공급자가 이 요청을 비동기적으로 처리하는 경우에만 PxeProviderRecvRequest 콜백은 ERROR_IO_PENDING 반환하고 요청이 처리될 때 PxeAsyncRecvDone 함수를 호출해야 합니다.

  • PxeProviderRecvRequest 콜백 및 PxeAsyncRecvDone 함수는 요청을 처리하기 위해 공급자가 수행한 작업을 설명하는 PXE_BOOT_ACTION 열거형의 주소를 반환합니다.

    공급자가 요청을 처리하는 네 가지 방법이 있습니다.

    • 공급자는 네트워크 부팅 프로그램의 경로를 포함하는 표준 DHCP 응답 패킷을 사용하여 클라이언트에 회신합니다. 열거형에 대한 PXE_BA_NBP 값을 반환하면 공급자가 요청 패킷을 성공적으로 처리하고 PxePacketAllocate 호출하고 PxeSendReply함수를응답 패킷을 전송하여 요청을 완료했음을 의미합니다.
    • 공급자는 DHCP를 준수하지 않는 사용자 지정 응답 패킷을 사용하여 클라이언트에 회신합니다. 열거형에 대한 PXE_BA_CUSTOM 값을 반환하면 공급자가 요청 패킷을 성공적으로 처리하고 PxePacketAllocate 호출하고 PxeSendReply함수를사용자 지정 응답 패킷을 전송하여 요청을 완료했음을 의미합니다.
    • 공급자는 요청을 무시해야 한다고 결정합니다. 열거형에 대한 PXE_BA_IGNORE 값을 반환한다는 것은 공급자가 요청과 연결된 모든 리소스를 해제했으며 요청이 등록된 공급자 목록의 다음 공급자에게 전달되지 않음을 의미합니다. 공급자는 요청 패킷이 잘못되었다는 것을 감지하는 경우 이 옵션을 사용할 수 있습니다.
    • 공급자가 요청 서비스를 거부합니다. 열거형에 대한 PXE_BA_REJECT 값을 반환하면 등록된 공급자 목록에서 다음 공급자에게 요청을 전달하도록 시스템에 지시합니다. 이 공급자가 목록의 마지막 공급자인 경우 요청과 연결된 모든 리소스를 해제하고 요청은 무시됩니다.
    • PxeProviderInitialize 콜백을 처리하는 동안 PxeRegisterCallback 함수를 PXE_CALLBACK_RECV_REQUEST 호출하여 PxeProviderRecvRequest 콜백을 등록합니다.

응답 패킷 생성

  • API를 사용하여 DHCP 요청을 처리하고 응답 패킷을 생성하는 공급자를 작성합니다.
  • PxeProviderSetAttribute 함수는 공급자가 패킷을 필터링하는 데 사용하는 특성을 지정합니다. 공급자의 특성을 지정하여 공급자가 모든 패킷을 보거나, 공급자가 DHCP 패킷만 보거나, 공급자가 DHCP 공급업체 클래스 식별자 옵션(60)을 "PXEClient"로 지정하는 DHCP 패킷만 볼 수 있도록 지정할 수 있습니다.
  • PxeDhcpIsValid 함수는 패킷이 유효한 DHCP 패킷인지 확인합니다. 공급자는 PxeDhcpIsValid 함수를 사용하여 지정된 패킷이 유효한 DHCP 패킷인지 확인하기 위해 PxeProviderSetAttribute 함수로 설정된 필터가 모든 패킷을 수신하도록 설정된 경우 클라이언트의 패킷이 DHCP 패킷인지 여부를 확인할 수 있습니다.
  • PxeDhcpInitialize 함수는 응답 패킷을 클라이언트에서 받은 패킷의 정보를 기반으로 하는 DHCP 회신 패킷으로 초기화합니다. PxeProviderInitialize 함수는 PxeProviderRecvRequest 콜백에서 클라이언트로부터 받은 유효한 DHCP 패킷의 주소를 사용합니다. PxeDhcpInitialize 함수는 PxePacketAllocate 함수와 함께 할당된 회신 패킷에 대한 포인터를 가져옵니다.
  • PxeDhcpGetOptionValue 함수는 DHCP 패킷에서 옵션 값을 검색합니다. PxeDhcpGetVendorOptionValue 함수는 DHCP 패킷의 공급업체별 정보 필드(43)에서 옵션 값을 검색합니다.
  • 그런 다음 공급자는 회신 패킷을 정보로 채우고 PxeSendReply 함수를 사용하여 회신 패킷을 클라이언트에 보낼 수 있습니다. PxeDhcpAppendOption 함수는 회신 패킷에 DHCP 옵션을 추가합니다.
  • 패킷을 전송하여 클라이언트 요청에 회신하는 공급자는 PxePacketAllocate 함수를 사용하여 응답 패킷을 할당해야 합니다. 그런 다음 공급자는 회신 패킷을 정보로 채우고 PxeSendReply 함수를 사용하여 회신 패킷을 클라이언트에 보낼 수 있습니다.
  • 할당된 메모리가 더 이상 필요하지 않은 경우 공급자는 PxePacketFree 함수를 사용하여 메모리를 해제해야 합니다.

등록된 공급자 열거

  • API를 사용하여 목록에 등록된 다른 공급자를 열거하고 확인하는 공급자를 작성합니다.
  • PxeGetServerInfo 함수는 PXE 서버에 대한 정보를 반환합니다. PxeGetServerInfo 함수는 서버에 대해 추적을 사용할 수 있는지 여부를 나타내는 BOOL 반환합니다. TRUE 추적이 사용하도록 설정되어 있음을 나타냅니다.
  • PxeProviderEnumFirst 함수는 등록된 공급자 목록에서 공급자 열거를 시작합니다. PxeProviderEnumFirst 함수는 열거형을 시작하고 PxeProviderEnumNext 함수를 호출할 때 사용해야 하는 핸들의 주소를 반환합니다. PxeProviderEnumNext 함수는 공급자에 대한 정보를 포함하는 PXE_PROVIDER 구조를 반환합니다. PxeProviderFreeInfo 함수는 PxeProviderEnumNext 함수에 의해 PXE_PROVIDER 구조에 할당된 메모리를 해제합니다. PxeProviderEnumClose 함수는 등록된 공급자 목록에 있는 공급자의 열거형을 닫습니다.

서비스 제어 코드 처리

PXE 로그에 추적 항목 추가

  • PxeTrace 함수는 PXE 로그에 추적 항목을 추가합니다. WDSPXE는 관리자가 문제를 해결하는 데 도움이 되는 추적을 제공합니다. 공급자는 다양한 심각도 수준의 추적 항목을 기록할 수 있습니다. 관리자는 특정 심각도 수준에 대한 항목만 기록하도록 WDSPXE를 구성할 수 있습니다.

Windows Deployment Services API에 대한 정보

Windows Deployment Services 클라이언트 API 사용하기