Storport 가상 미니포트 드라이버 구현

이 페이지에서는 Storport VMiniport(가상 미니포트 드라이버)에 대한 개략적인 구현 정보를 제공합니다. VMiniport 인터페이스는 storport.h에 정의되어 있습니다.

디자인 고려 사항은 다양한 VMiniports에 고유하므로 구현 세부 사항은 여기에 포함되지 않습니다.

VMiniport 인터페이스

이 섹션에서는 VMiniport가 구현/사용하는 더 눈에 띄는 함수, 콜백 및 구조를 나열합니다. 일부 함수 및 콜백이 필요합니다. 선택적 콜백은 VMiniport의 디자인에 고유합니다.

  • DriverEntry는 VMiniport가 로드된 후 운영 체제가 호출하는 첫 번째 루틴입니다. 이 루틴은 필수입니다.

  • HW_INITIALIZATION_DATA VMiniport가 초기화하는 동안 Storport에 전달하는 Vminiport 할당 및 초기화된 구조체입니다. VMiniport는 이 구조의 콜백 함수에 대한 포인터를 제공합니다.

    다음 콜백 루틴이 필요합니다.

    VMiniport는 고유한 아키텍처에 따라 일부 콜백 루틴을 구현해야 할 수도 있지만 다음 콜백 루틴은 선택 사항입니다.

    • HwInitializeTracing

    • HwCleanupTracing. 이 루틴은 HwInitializeTracing 이 콜백 루틴을 가리키는 경우에 필요합니다. 그렇지 않으면 이 루틴은 선택 사항이며 VMiniport에 고유합니다.

    • HwProcessServiceRequest. 이 루틴은 VMiniport가 호출자(예: 사용자 모드 애플리케이션 또는 커널 모드 드라이버)를 업데이트하거나 호출자가 VMiniport를 대신하여 작업을 수행하도록 요구할 때 완료되는 "역방향 콜백" IRP를 수신합니다.

    • HwCompleteServiceIrp. HwProcessServiceRequest가 콜백 루틴을 가리키는 경우 이 루틴이 필요합니다. 그렇지 않으면 이 루틴은 선택 사항이며 VMiniport에 고유합니다. VMiniport가 보류 중일 수 있는 역방향 콜백 IRP를 완료할 수 있도록 가상 어댑터를 제거할 때 HwCompleteServiceIrp가 호출됩니다.

    또한 VMiniport는 HW_INITIALIZATION_DATA 구조체의 다음 멤버를 설정해야 합니다.

    • HwInitializationDataSizesizeof(HW_INITIALIZATION_DATA)로 설정합니다.

    • AdapterInterfaceType내부로 설정합니다. 이는 Storport에 가상 어댑터임을 나타냅니다.

    • HwBuildIo를 NULL로 설정합니다.

    Vminiport 드라이버는 필요에 따라 다른 필드를 설정합니다. 사용하지 않는 필드는 0으로 설정해야 합니다.

  • storport 할당 구조체인 PORT_CONFIGURATION_INFORMATION. Storport는 일부 PORT_CONFIGURATION_INFORMATION 멤버를 초기화한 다음 VMiniport의 HwFindAdapter 콜백에 전달합니다. 여기서 VMiniport는 초기화를 완료합니다. 이 구조체는 Storport에 의해 미리 초기화되므로 HWFindAdapter 는 구조체를 0으로 설정하면 안 됩니다. VMiniport는 VirtualDevice 를 TRUE로 설정해야 합니다.

VMiniport 초기화

VMiniport에는 세 가지 초기화 단계가 있습니다.

  • 첫 번째 단계에서 VMiniport의 DriverEntry 루틴은 초기화된 HW_INITIALIZATION_DATA 구조체에 대한 포인터를 사용하여 StorPortInitialize를 호출합니다.

  • Storport는 Storport 할당 및 부분적으로 초기화된 PORT_CONFIGURATION_INFORMATION 구조로 VMiniport의 HwFindAdapter 콜백을 호출합니다. HwFindAdapter의 주 함수는 VirtualDevice 멤버를 TRUE로 설정하는 등 PORT_CONFIGURATION_INFORMATION 초기화를 완료하는 것입니다.

  • HwFindAdapter가 성공적으로 반환되면 Storport는 VMiniport의 HwInitialize 콜백을 호출하여 VMiniport의 초기화를 완료합니다.

VMiniport I/O

Storport는 VMiniport의 HwStartIo 콜백을 호출하여 I/O 요청을 시작합니다. Storport에서 I/O 요청은 SCSI_REQUEST_BLOCK 또는 STORAGE_REQUEST_BLOCK (각각 표준 또는 확장 SRB)를 사용하여 설명됩니다.

실제 미니포트 드라이버와 달리 Storport는 HwStartIo 를 호출하기 전에 Vminiport에서 HwBuildIo를 호출하지 않습니다.

HwStartIo를 호출하기 전에 잠금이 유지되지 않습니다. 가상 미니포트 인터페이스를 통해 노출되는 각 논리 단위의 기본 큐 깊이는 250입니다.