RxDriverEntry 함수(rxprocs.h)
RxDriverEntry 는 RdBSS 정적 라이브러리를 초기화하기 위해 DriverEntry 루틴에서 모놀리식 네트워크 미니 리디렉터 드라이버에 의해 호출됩니다.
모놀리식이 아닌 드라이버의 경우 이 초기화 루틴은 RDBSS.SYS 디바이스 드라이버의 DriverEntry 루틴과 동일합니다.
구문
NTSTATUS RxDriverEntry(
[in] IN PDRIVER_OBJECT DriverObject,
[in] IN PUNICODE_STRING RegistryPath
);
매개 변수
[in] DriverObject
네트워크 미니 리다이렉터 드라이버의 드라이버 개체에 대한 포인터입니다. 각 드라이버는 DriverEntry 루틴에 대한 매개 변수에서 드라이버 개체에 대한 포인터를 받습니다. 이 드라이버 개체는 네트워크 미니 리다이렉터 드라이버에 대한 디바이스 개체를 만드는 데 사용됩니다.
[in] RegistryPath
드라이버 매개 변수 및 기타 구성 데이터가 저장되는 레지스트리 경로를 포함하는 유니코드 문자열에 대한 포인터입니다. 이 레지스트리 경로는 일반적으로 HKLM\System\CurrentControlSet\Services 키 아래에 있는 특정 네트워크 미니 리디렉터에 대한 서비스 항목 아래에 있습니다.
반환 값
RxDriverEntry는 성공에 대한 STATUS_SUCCESS 반환하거나 실패에 대한 다음 오류 값 중 하나를 반환합니다.
| 반환 코드 | 설명 |
|---|---|
| RXINIT_START | RDBSS 초기화가 시작되었지만 오류가 발생했습니다. 이 오류 코드는 값이 5인 내부 RDBSS 열거형입니다. |
설명
RDBSSLIB와 정적으로 연결된 모놀리식 네트워크 미니 리다이렉터 드라이버입니다. LIB는 드라이버와 연결된 RDBSSLIB 라이브러리의 복사본을 초기화하기 위해 DriverEntry 루틴에서 RxDriverEntry 를 호출해야 합니다. 다른 RDBSS 루틴이 호출되기 전에 모놀리식 네트워크 미니 리트리버 드라이버에서 RxDriverEntry 를 호출해야 합니다.
RxDriverEntry 를 호출하여 DriverEntry 루틴이 시작될 무렵 RDBSS 라이브러리의 복사본을 초기화한 후 네트워크 미니 리디렉터 드라이버는 일반적으로 DriverEntry 루틴의 뒷부분에서 RxRegisterMinirdr를 호출하여 RDBSS에 등록합니다.
RxDriverEntry 호출이 성공하면 내부 전역 RDBBS 데이터 구조가 초기화됩니다. 이러한 데이터 구조를 보호하기 위해 다양한 스핀 잠금 및 뮤텍스가 만들어집니다. 이러한 데이터 구조 중 하나는 RDBSS 메모리 데이터 구조의 최상위 구조인 RDBSS_DATA 구조입니다. DriverObject 매개 변수는 RDBSS_DATA 구조체의 DriverObject 멤버에 저장됩니다. 또한 RxDriverEntry 는 사용하도록 설정된 경우 추적, 로깅 및 디버깅을 초기화합니다(예: 확인된 빌드).
또한 RxDriverEntry 는 RegistryPath 매개 변수로 전달된 레지스트리 경로를 열어 이 개체를 대/소문자를 구분하지 않는 문자열로 처리합니다. 이 레지스트리 키를 성공적으로 열 수 있는 경우 이 항목 아래에 Parameters 레지스트리 키를 열려고 시도합니다.
또한 RxDriverEntry 는 HKLM\System\CurrentControlSet\Services\LanmanWorkStation\Parameters 레지스트리 키를 열려고 시도합니다.
이 키를 열 수 있는 경우 운영 체제 버전에 따라 이 키 아래의 일부 값을 읽으려고 시도합니다.
Windows XP 이상에서 RxDriverEntry 는 LanmanWorkStation\Parameters 키 아래에서 DisableByteRangeLockingOnReadOnlyFiles 값을 열려고 시도합니다.
이 값은 부울로 처리되고 읽기 전용 파일에서 바이트 범위 잠금을 처리하기 위한 RDBSS 변수인 DisableByteRangeLockingOnReadOnlyFiles의 부울 값으로 저장되는 DWORD입니다. 이 변수는 RDBSS가 FCB의 네트워크 미니 리다이렉터에서 새 SRV_OPEN 요청을 처리하는 방법에 영향을 주고 특성이 호환되는지 여부를 기존 SRV_OPEN 축소할 수 있는지 여부를 결정합니다. 네트워크 미니 리 디렉터 드라이버가 이 동작을 변경하려는 경우 드라이버는 RxDriverEntry 루틴이 반환된 후 DisableByteRangeLockingOnReadOnlyFiles 값을 적절한 값으로 설정해야 합니다. RDBSSLIB입니다. LIB 정적 라이브러리는 DisableByteRangeLockingOnReadOnlyFiles를 외부 변수로 노출합니다.
Windows 2000 및 Windows XP에서 RxDriverEntry 는 LanmanWorkStation\Parameters 키에서 ReadAheadGranularity 값을 열려고 시도합니다.
이 값은 숫자로 처리되고 캐시 관리자에서 미리 읽기 위해 PAGE_SIZE 페이지 수에 내부 RDBSS 옵션의 값으로 저장되는 DWORD입니다. 16보다 큰 레지스트리 값은 이 값이 16(현재 허용되는 최대값)으로 제한된 것처럼 처리됩니다. 이 내부 옵션은 프로세서의 PAGE_SIZE 페이지 수(예: 4K PAGE_SIZE 경우 최대 0x10000 또는 64K)로 저장됩니다. Windows 2000 및 Windows XP에서 RDBSS는 다양한 만들기, 읽기 및 쓰기 작업에 대해 이 옵션을 사용하여 CcSetReadAheadGranularity를 호출합니다. 네트워크 미니 리트리버 드라이버가 이 동작을 변경하려는 경우 드라이버는 RxDriverEntry 루틴이 반환된 후 ReadAheadGranularity 값을 적절한 값으로 설정해야 합니다. RDBSSLIB입니다. LIB 정적 라이브러리는 ReadAheadGranularity를 외부 변수로 노출합니다.
X86 시스템에서 64K는 페이징 쓰기를 발급할 때 메모리 관리자가 발행하는 가장 큰 쓰기입니다(캐시 플러시는 메모리 관리자를 통해 페이징 쓰기가 수행됨). 원격 파일 시스템의 경우 64K가 최선의 선택이 아닙니다. 단일 TDI 네트워크 요청에서 전송할 수 있는 대부분의 데이터는 프로토콜 정보에 대한 오버헤드 때문에 64K 미만입니다.
Windows Server 2003에서는 ReadAheadGranularity를 설정하는 레지스트리 값이 노출되지 않으며 RDBSS 기본값은 32K(4K PAGE_SIZE 페이지 8개)입니다. 이는 로컬 파일 시스템에 대해 채택된 것과 동일한 기본값입니다.
RxDriverEntry 는 PsGetCurrentProcess 를 호출하여 실행 중인 커널 프로세스에 대한 포인터를 검색하고 이 값을 내부 RDBSS 데이터 구조에 저장합니다. 이 커널 프로세스를 파일 시스템 프로세스라고도 합니다.
그런 다음 , RxDriverEntry 는 드라이버 디스패치 테이블의 모든 항목에 대해 RxFsdDispatch 루틴에 대한 포인터를 복사합니다. 따라서 모놀리식 네트워크 미니 리디렉터 드라이버가 RDBSS 라이브러리 전에 특수 처리를 위해 특정 IRP를 받아야 하는 경우 RxDriverEntry 를 호출하기 전에 원래 드라이버 디스패치 테이블의 복사본을 저장해야 하며 RxDriverEntry 호출 후 복원된 일상적인 포인터가 반환됩니다. 또한 RDBSS는 이 동작을 방지하기 위한 옵션을 설정하지 않는 한 RxRegisterMinirdr가 호출될 때 RxFsdDispatch 를 모든 드라이버 디스패치 테이블 항목에 복사합니다.
모놀리식이 아닌 네트워크 미니 리다이렉터 드라이버(Microsoft SMB 리다이렉터)의 경우 RDBSS.SYS 디바이스 드라이버는 내부적으로 RxDriverEntry 를 호출하는 로드 시 자체 DriverEntry 루틴에서 초기화됩니다. 모놀리식 드라이버에서 RxDriverEntry 루틴은 RDBSSLIB에서 내보내집니다. LIB 정적 라이브러리이며 네트워크 미니 리디렉터에서 명시적으로 호출해야 합니다.
요구 사항
| 대상 플랫폼 | 데스크톱 |
| 헤더 | rxprocs.h(Rxprocs.h 포함) |
| IRQL | <= APC_LEVEL |
참고 항목
피드백
다음에 대한 사용자 의견 제출 및 보기