네트워크 공급자 구현
네트워크 공급자는 Windows 운영 체제에서 특정 네트워크 프로토콜을 지원할 수 있도록 하는 DLL입니다. 네트워크 공급자 API를 구현하여 이 작업을 수행합니다. 이 API는 MPR( 다중 공급자 라우터)이 네트워크와 통신하기 위해 호출하는 함수 집합입니다. 그런 다음 네트워크 공급자는 이러한 호출을 네트워크별 API 호출로 변환하여 MPR에서 지정한 작업을 수행합니다. 이러한 방식으로 Windows 운영 체제는 네트워크별 API를 이해하지 않고도 새 네트워크 프로토콜과 상호 작용할 수 있습니다.
네트워크 공급자를 만들려면 NPGetCaps 함수를 내보내는 DLL을 작성합니다.
네트워크 공급자 API의 다른 함수 지원은 선택 사항입니다. 네트워크 공급자에 함수가 필요하지 않은 경우 DLL은 함수를 구현하거나 스텁 구현을 제공할 필요가 없습니다. 자세한 내용은 네트워크 공급자 함수의 개별 함수 topics 참조하세요.
예외는 다음 열거형 함수 중 하나를 지원하는 경우 NPOpenEnum, NPEnumResource 및 NPCloseEnum의 다른 두 함수도 지원해야 한다는 것입니다.
다음 지침에서는 MPR 및 Windows 운영 체제와 잘 상호 작용하는 네트워크 공급자를 작성하는 방법을 설명합니다. 가능하면 공급자는 속도, 유효성 검사 및 라우팅에 대한 다음 지침을 준수해야 합니다.
속도
네트워크 공급자는 네트워크 리소스가 자체인지 여부를 신속하게 결정해야 합니다. MPR이 리소스 소유자를 찾기 위해 많은 공급자를 순환해야 할 수 있기 때문입니다.
네트워크 공급자가 리소스를 소유하지 않으면 WN_BAD_NETNAME 상태 코드를 즉시 반환해야 합니다.
또한 NPGetDirectoryType을 지원하는 공급자는 WinFile이 디렉터리 트리를 그리는 동안 호출되므로 이 함수에 대한 결과를 신속하게 반환해야 합니다.
유효성 검사
유효성 검사 순서가 중요합니다. 네트워크 공급자는 먼저 해당 네트워크가 시작되었는지 여부를 확인한 다음 네트워크 및 네트워크 공급자가 작업을 지원하는지 여부를 결정해야 합니다. 이러한 검사 후에 네트워크 공급자가 네트워크 리소스를 수신하는 경우 네트워크 리소스를 소유하는지 여부를 결정해야 합니다. 마지막으로 다른 매개 변수의 유효성을 검사해야 합니다.
라우팅
MPR이 네트워크 공급자를 순환해야 하는 경우 호출을 수락할 때까지 모든 공급자를 시도합니다. 즉, MPR은 항상 네트워크 공급자를 찾기 위해 계속 시도합니다.
그러나 공급자가 보고한 첫 번째 중요한 오류를 기록해 둡습니다. ERROR_BAD_NETPATH, ERROR_BAD_NET_NAME, ERROR_INVALID_PARAMETER, ERROR_INVALID_LEVEL 같은 오류는 공급자가 리소스를 관리하지 않는다는 의미이기 때문에 중요하지 않은 것으로 간주됩니다. 그러나 공급자가 오류 ERROR_INVALID_PASSWORD 또는 기타 중요한 오류와 함께 실패하는 경우 MPR은 이 오류를 기록하고 네트워크 공급자를 통해 계속 순환합니다. 일반적으로 라우팅할 때 호출을 수락하는 공급자가 없는 경우 MPR은 네트워크 공급자를 순환하는 동안 발생하는 첫 번째 중요한 오류를 보고합니다.
반환할 오류 메시지를 결정할 때 네트워크 공급자는 MPR의 이 동작을 고려해야 합니다.
구현 참고 사항
네트워크 공급자 DLL을 구현할 때 공급자는 MPR 하위 시스템에 다시 진입할 수 있는 다른 Windows 네트워킹 함수, 셸 API 또는 기타 UNC 경로 기반 쿼리를 호출해서는 안 됩니다. 네트워크 공급자 DLL, 애플리케이션 또는 기타 운영 체제 구성 요소에서 이러한 호출을 수행하면 MPR 하위 시스템 내에서 경합, 성능 저하 또는 교착 상태가 발생할 수 있습니다.