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