WmiFireEvent でのイベントの送信
ドライバーは WmiFireEvent を呼び出して、動的インスタンス名を使用せず、単一基本名文字列またはPDO のデバイスインスタンス ID をベースとする静的インスタンス名を使用するイベントを送信できます。
イベントは、ブロックの単一インスタンスでなければなりません。つまり、ドライバーは、単一の項目または複数のインスタンスで構成されるイベントを送信して、 WmiFireEvent を呼び出すことはできません。 このようなイベントを送信するには、 Sending an Event with IoWMIWriteEventで説明されているように、ドライバーは IoWMIWriteEventを呼び出す必要があります。
ドライバーは、WMI がイベントを有効にするまでイベントを送信してはなりません。 イベントが有効化された後、イベントのトリガー条件が発生すると、ドライバーは次のようになります:
非ページプールからバッファーを割り当てて、イベントデータをバッファーに書き込みます。 イベントにデータがない場合は、ドライバーはこの手順をスキップできます。
WmiFireEvent を以下のパラメータで呼び出します:
ドライバーのデバイスオブジェクトへのポインター
イベントブロックを表すGUID へのポインター
イベントブロックが複数のインスタンスを持つ場合のインスタンスのインデックス
データがイベントと共に送信される場合はデータのバイト数で、何もない場合は0
データがイベントと共に送信される場合は、データを含むドライバー割り当てバッファへのポインター、または何もない場合は NULL
ドライバーは、イベントデータバッファを含む WmiFireEventに渡されるすべてのパラメータを、非ページ プールから割り当てる必要があります。 WMIは、ドライバーがそれ以上介入することなく、ドライバーが割り当てたメモリをリリースします。
WmiFireEvent が返されると、ドライバーはイベントのトリガー条件の監視を再開し、トリガー条件が発生するたびに、WMIがそのイベントを無効にするまで、イベントを送信します。