FCB 구조체

FCB(파일 제어 블록) 구조체는 파일 개체의 FsContext 필드를 가리켰습니다. FCB를 공유하는 모든 작업은 동일한 파일을 참조합니다. 아쉽게도 SMB 서버는 이름이 별칭이 될 수 있는 방식으로 현재 구현되므로 서로 다른 두 이름이 동일한 파일이 될 수 있습니다. FCB는 파일 작업의 초점입니다. 동일한 FCB에 대한 작업은 실제로 동일한 파일에 있으므로 동기화는 일부 상위 수준 개체가 아닌 FCB를 기반으로 합니다.

FCB 구조체를 만들 때마다 해당 SRV_OPEN 및 FOBX 구조체도 만들어집니다. 둘 이상의 SRV_OPEN 구조체를 지정된 FCB 구조체와 연결할 수 있으며 둘 이상의 FOBX 구조체가 지정된 SRV_OPEN 구조체와 연결됩니다. 대부분의 경우 하나의 SRV_OPEN 구조체가 FCB와 연결되고 지정된 SRV_OPEN 구조체와 연결된 FOBX 구조체의 수는 1입니다. 이러한 경우 공간 지역성 및 페이징 동작을 개선하기 위해 FCB 구조체에 대한 할당에는 연결된 SRV_OPEN 및 FOBX 구조체에 대한 할당도 포함됩니다.

RDBSS는 페이징 동작을 개선하기 위해 메모리에 연결된 FCB, SRV_OPEN 및 FOBX 구조를 함께 할당하려고 합니다. RDBSS는 NET_ROOT 구조체가 페이징되지 않기 때문에 FCB 및 NET_ROOT 구조체를 함께 할당하지 않지만 일반적으로 FCB 구조는 페이징 파일이 아닌 한 페이징됩니다.

FCB 구조는 열려 있는 모든 파일 및 디렉터리에 해당합니다. FCB 구조체는 다음 두 부분으로 분할됩니다.

  • 페이징이 아닌 풀에 할당된 페이징이 아닌 파트

  • 페이징된 부분

전자는 NON_PAGED_FCB 나중에 FCB라고 합니다.

FCB에는 해당 NON_PAGED_FCB 부분에 대한 포인터가 포함되어 있습니다. 백포인트는 확인된 빌드에서 디버깅을 위해 NON_PAGED_FCB FCB로 유지 관리됩니다.

NON_PAGED_FCB 메모리 관리자 및 캐시 관리자가 섹션 개체를 조작하는 데 사용하는 특수 포인터의 구조를 포함합니다. 이러한 포인터의 값은 일반적으로 파일 시스템 외부에서 설정됩니다.

FCB 구조체에는 다음이 포함됩니다.

  • FSRTL_COMMON_HEADER 구조체

  • 서명 및 참조 수

  • 이름 및 연결된 테이블 정보

  • 연결된 NET_ROOT 구조체에 대한 백포인트

  • 연결된 SRV_OPEN 구조 목록

  • 디바이스 개체

  • 네트워크 미니 리다이렉터 또는 FCB 구조의 작성자가 요청한 추가 스토리지