다음을 통해 공유


블록 등록에 대한 IRP_MN_REGINFO 및 IRP_MN_REGINFO_EX 처리

Windows 98 및 Windows 2000에서 시스템은 드라이버가 WMI 클래스를 등록할 수 있도록 드라이버에 IRP_MN_REGINFO 요청을 보냅니다. Windows XP 이상에서 시스템은 대신 IRP_MN_REGINFO_EX 요청을 보냅니다. 대부분의 드라이버는 WmiSystemControl을 사용하여 콜백 루틴을 제공하여 이러한 요청을 처리할 수 있습니다. 자세한 내용은 WMI 라이브러리를 사용하여 블록 등록 을 참조하세요.

드라이버는 동적 instance 이름을 사용하거나 드라이버 정의 정적 instance 이름 목록을 사용하는 블록을 등록하기 위해 IRP_MN_REGINFO 또는 IRP_MN_REGINFO_EX 요청을 처리해야 합니다. 이러한 블록을 등록하기 위해 WmiSystemControl을 호출할 수 없습니다. 드라이버는 필요에 따라 이 요청을 처리하여 PDO 또는 드라이버 정의 기본 이름 문자열에 따라 정적 instance 이름을 사용하는 블록을 등록할 수 있습니다.

이 경우 드라이버는 다음을 수행합니다.

  1. 다음을 지정하는 Parameters.WMI.Buffer에서 WMIREGINFO 구조를 채웁니다.

    • 다른 드라이버를 대신하여 제공된 데이터를 포함하여 드라이버에서 제공하는 모든 등록 데이터의 바이트 수입니다.

    • 드라이버의 레지스트리 경로입니다.

    • 드라이버의 MOF 리소스 이름입니다.

    • 등록할 블록 수입니다.

    • 각 블록에 대해 하나씩 WMIREGGUID 구조체의 배열입니다.

  2. 각 블록에 대해 드라이버는 다음을 지정하는 WMIREGGUID 구조를 채웁니다.

    • 블록을 나타내는 GUID입니다.

    • instance 이름 및 블록의 기타 특성(예: 블록 수집 비용이 많이 드는지 여부)에 대한 정보를 제공하는 플래그입니다. 자세한 내용은 WMI 등록 플래그를 참조하세요.

    블록이 정적 instance 이름으로 등록되는 경우 드라이버는 다음 멤버 중 하나를 설정하여 블록에 대한 정적 instance 이름 데이터를 지정합니다.

    • 드라이버가 WMIREG_FLAG_INSTANCE_LIST 플래그를 설정하는 경우 InstanceNameList를 정적 instance 이름 문자열 목록으로 오프셋으로 설정합니다. WMI는 이 목록에 대한 인덱스별 후속 요청의 인스턴스를 지정합니다.

    • 드라이버가 WMIREG_FLAG_INSTANCE_BASENAME 플래그를 설정하는 경우 BaseNameOffset 을 기본 이름 문자열로 오프셋으로 설정합니다. WMI는 이 문자열을 사용하여 블록에 대한 정적 instance 이름을 생성합니다.

    • 드라이버가 WMIREG_FLAG_INSTANCE_PDO 플래그를 설정하는 경우 Pdo 를 드라이버의 AddDevice 루틴에 전달된 PDO로 설정합니다. WMI는 PDO의 디바이스 instance 경로를 사용하여 블록에 대한 정적 instance 이름을 생성합니다. IRP_MN_REGINFO_EX 요청을 처리할 때 드라이버는 Pdo에 전달된 물리적 디바이스 개체에서 ObReferenceObject 루틴을 호출해야 합니다. (시스템은 개체를 역참조하기 위해 ObDereferenceObject 를 자동으로 호출합니다. 드라이버는 그렇게 해서는 안 됩니다.)

    드라이버는 각각 InstanceNameList 또는 BaseName으로 표시된 오프셋에 instance 이름 문자열 또는 기본 이름 문자열을 씁니다.

  3. 드라이버가 다른 드라이버를 대신하여 블록을 등록하는 경우(클래스 드라이버가 미니클래스 드라이버를 대신할 수 있음) 드라이버는 다른 WMIREGINFO 구조체와 WMIREGGUID 구조 목록을 다른 드라이버 블록에 대한 등록 정보로 채우고 첫 번째 WMIREGINFONextWmiRegInfo를 첫 번째 WMIREGINFO의 시작부터 두 번째 WMIREGINFO 구조체의 시작 부분까지 오프셋(바이트)으로 설정합니다.