다음을 통해 공유


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 구조의 작성자가 요청한 추가 스토리지