블록 등록에 대한 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 이름을 사용하는 블록을 등록할 수 있습니다.
이 경우 드라이버는 다음을 수행합니다.
다음을 지정하는 Parameters.WMI.Buffer에서 WMIREGINFO 구조를 채웁니다.
다른 드라이버를 대신하여 제공된 데이터를 포함하여 드라이버에서 제공하는 모든 등록 데이터의 바이트 수입니다.
드라이버의 레지스트리 경로입니다.
드라이버의 MOF 리소스 이름입니다.
등록할 블록 수입니다.
각 블록에 대해 하나씩 WMIREGGUID 구조체의 배열입니다.
각 블록에 대해 드라이버는 다음을 지정하는 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 이름 문자열 또는 기본 이름 문자열을 씁니다.
드라이버가 다른 드라이버를 대신하여 블록을 등록하는 경우(클래스 드라이버가 미니클래스 드라이버를 대신할 수 있음) 드라이버는 다른 WMIREGINFO 구조체와 WMIREGGUID 구조 목록을 다른 드라이버 블록에 대한 등록 정보로 채우고 첫 번째 WMIREGINFO의 NextWmiRegInfo를 첫 번째 WMIREGINFO의 시작부터 두 번째 WMIREGINFO 구조체의 시작 부분까지 오프셋(바이트)으로 설정합니다.