インスタンス ID
インスタンス ID は、デバイスの列挙子 (バス ドライバー) によって報告される文字列であり、コンピューター上の同じ種類の他のデバイスとデバイスを区別します。 インスタンス ID には、基になるバスでサポートされている場合はシリアル番号情報、または何らかの場所の情報が含まれます。 文字列には、"\" 文字や、IRP_MN_QUERY_ID 要求への応答で許可されていないその他の文字を含めることはできません。それ以外の場合、文字列のジェネリック形式はバス固有です。 インスタンス ID の文字数は、NULL ターミネータを除き、MAX_DEVICE_ID_LEN
より小さくする必要があります 。 さらに、インスタンス ID は、デバイス ID と共に デバイス インスタンス ID の作成に対するもう 1 つの入力であり、デバイス インスタンス ID の最大長は MAX_DEVICE_ID_LEN
です。 これには、インスタンス ID の長さが、デバイス インスタンス ID を長さより小さい文字列として作成できる長さ MAX_DEVICE_ID_LEN
よりも十分小さい MAX_DEVICE_ID_LEN
必要があります。
デバイスの DEVICE_CAPABILITIES 構造体の UniqueID メンバーは、次のように、バス指定の インスタンス ID がシステム全体で一意かどうかを示します。
UniqueID が FALSE の場合、デバイスのバス指定 インスタンス ID はデバイスのバスに対してのみ一意です。 プラグ アンド プレイ (PnP) マネージャーは、バス指定の インスタンス ID を変更し、対応するデバイス ID と組み合わせて、システム内で一意のデバイス インスタンス ID を作成します。
UniqueID が TRUE の場合、バス指定のデバイス ID とインスタンス ID から形成されたデバイス インスタンス ID は、システム内のデバイスを一意に識別します。
インスタンス ID は、システムの再起動にわたって永続的です。
PnP マネージャーは、Parameters.QueryId.IdType のフィールドが BusQueryInstanceID に設定されたIRP_MN_QUERY_ID の要求を使用して、デバイスのバスドライバーからこの文字列を照会します。