PnP テスト (デバイスの基礎)PnP Tests (Device Fundamentals)

デバイスの基本 PnP テストでは、ドライバーがほぼすべての PnP Irp を処理するように強制します。ただし、特に、削除、再調整、および驚くべき削除という3つの領域があります。The Device Fundamentals PnP tests force a driver to handle almost all of the PnP IRPs; however, there are three areas that are stressed specifically: removal, rebalance, and surprise removal. PnP テストでは、これらを個別にテストするメカニズム、またはすべてをまとめてテストする (つまり、ストレステストとして) ことができます。The PnP test provides a mechanism to test each of these separately, or to test them all together (that is, as a stress test). この PnP テストは、(テストアプリケーションを通じて) ユーザーモード API 呼び出しとカーネルモード API 呼び出し (上位フィルタードライバーを使用) の組み合わせを使用して実現されます。This PnP testing is accomplished by using a combination of user-mode API calls (through the test application) and kernel-mode API calls (through an upper-filter driver).

PNP テストPNP tests

プラグアンドプレイ (PnP) テストでは、ドライバーおよびユーザーモードコンポーネントでさまざまな PnP 関連のコードパスを実行します。The Plug and Play (PnP) tests execute various PnP-related code paths in the driver and user-mode components. テストコンピューターでドライバー検証ツールが有効になっている状態で、PnP テストを実行する必要があります。The PnP tests should be run with Driver Verifier enabled on the test computer. ドライバーの検証機能の有効化の詳細については、「ドライバープロジェクトのドライバーの検証ツールのプロパティ」を参照してください。For information about enabling Driver Verifier, see Driver Verifier properties for driver projects.

テストTest 説明Description

拡張デバイステスト (EDT) のサポートを無効にするDisable Enhanced Device Testing (EDT) Support

このテストは、DQ パラメーターを使用して指定されたデバイスの上位フィルターとして、テストフィルタードライバー (msdmfilt) をアンインストールします。This test uninstalls the test filter driver (msdmfilt.sys) as an upper filter on devices specified using the DQ parameter. このテストフィルターは、このテストカテゴリで実行中のテストの一部としてインストールされますThis test filter gets installed as part of running tests in this test category

パラメーター: - 「デバイスの基本テストパラメーター 」を参照Parameters: - see Device Fundamentals Test Parameters

DQDQ

TestCyclesTestCycles

DoSimpleIODoSimpleIO

IOPeriodIOPeriod

Doconon EntioDoConcurrentIO

IOTypeIOType

PNP (無効化および有効化) の前後の IO での再起動PNP (disable and enable) reboot with IO before and after

このテストでは、システムの再起動により、デバイスで基本的な PnP の無効化/有効化と i/o が実行されます。This test performs basic PnP disable/enable and I/O on devices with a system reboot.

テストバイナリ:Devfund_PNP_DisableEnable_Reboot_With_IO_BeforeAndAfterTest binary: Devfund_PNP_DisableEnable_Reboot_With_IO_BeforeAndAfter.wsc

テストメソッド:PNP_DisableEnable_Reboot_With_IO_Before_And_AfterTest method: PNP_DisableEnable_Reboot_With_IO_Before_And_After

パラメーター: - 「デバイスの基本テストパラメーター 」を参照Parameters: - see Device Fundamentals Test Parameters

DQDQ

IOPeriodIOPeriod

PNP (disable および enable) と i/o の前後の i/oPNP (disable and enable) with I/O before and after

このテストでは、デバイスで i/o と基本的な PnP の無効化/有効化を実行します。This test performs I/O and basic PnP disable/enable on devices.

このテストは次のことを行います。This test does the following:

  1. システムレポートデバイスの問題コードにデバイスがないことを確認します。Verifies that there are no devices on the system reporting device problem codes.
  2. WDTF Simple i/o プラグインを使用して、システム上のすべてのデバイスで i/o をテストします。Tests I/O on every device on the system using WDTF Simple I/O plugins. 詳細については、「 WDTF Simple i/o プラグインの提供」を参照してください。See Provided WDTF Simple I/O plug-ins for more information.
  3. WDTF PnP action インターフェイスを使用して、システム上のすべてのデバイスを無効にして有効にします。詳細については、「 IWDTFPNPAction2::D isableDevice 」と「 IWDTFPNPAction2:: enabledeviceメソッド」を参照してください。Disables and enables every device on the system using WDTF PnP action interfaces, see IWDTFPNPAction2::DisableDevice and IWDTFPNPAction2::EnableDevice methods for more information.
  4. システムレポートデバイスの問題コードにデバイスがないことを確認します。Verifies that there are no devices on the system reporting device problem codes.
  5. WDTF Simple i/o プラグインを使用して、システム上のすべてのデバイスで i/o をテストします。Tests I/O on every device on the system using WDTF Simple I/O plugins. 詳細については、「 WDTF Simple i/o プラグインの提供」を参照してください。See Provided WDTF Simple I/O plug-ins for more information.
  6. 手順3-5 を何度か繰り返します。Repeats steps 3-5 several times.

テストバイナリ:Devfund_PNP_DisableEnable_With_IO_BeforeAndAfterTest binary: Devfund_PNP_DisableEnable_With_IO_BeforeAndAfter.wsc

テストメソッド:PNP_DisableEnable_With_IO_Before_And_AfterTest method: PNP_DisableEnable_With_IO_Before_And_After

パラメーター: - 「デバイスの基本テストパラメーター 」を参照Parameters: - see Device Fundamentals Test Parameters

DQDQ

IOPeriodIOPeriod

PNP によるデバイステストの削除の取り消しPNP Cancel Remove Device test

このテストでは、EDT フィルタードライバーを使用して、ターゲットデバイススタックに IRP_MN_CANCEL_REMOVE_DEVICE を送信します。This test uses the EDT filter driver to send IRP_MN_CANCEL_REMOVE_DEVICE to target device stacks.

詳細については、「デバイスの削除テストについて」を参照してください。For more information, see About the Device Removal tests.

テストバイナリ:Devfund_PnPDTestTest binary: Devfund_PnPDTest.dll

テストメソッド:PNPCancelRemoveDeviceTest method: PNPCancelRemoveDevice

パラメーター: - 「デバイスの基本テストパラメーター 」を参照Parameters: - see Device Fundamentals Test Parameters

DQDQ

TestCyclesTestCycles

DoSimpleIODoSimpleIO

IOPeriodIOPeriod

Doconon EntioDoConcurrentIO

PNP キャンセルのデバイステストの停止PNP Cancel Stop Device test

このテストでは、EDT フィルタードライバーを使用して、ターゲットデバイススタックに IRP_MN_CANCEL_STOP_DEVICE を送信します。This test uses the EDT filter driver to send IRP_MN_CANCEL_STOP_DEVICE to target device stacks.

詳細については、「テストの再調整について」を参照してください。For more information, see About the Rebalance tests.

テストバイナリ:Devfund_PnPDTestTest binary: Devfund_PnPDTest.dll

テストメソッド:PNPCancelStopDeviceTest method: PNPCancelStopDevice

パラメーター: - 「デバイスの基本テストパラメーター 」を参照Parameters: - see Device Fundamentals Test Parameters

DQDQ

TestCyclesTestCycles

DoSimpleIODoSimpleIO

IOPeriodIOPeriod

Doconon EntioDoConcurrentIO

PNP 差分のデバイステストの削除PNP DIF Remove Device Test

このテストでは、SetupDi API を使用して、インストーラーのDIF_REMOVE要求を送信し、デバイスを削除します。This test uses the SetupDi API to send a DIF_REMOVE request for the installers to remove the device.

テストバイナリ:Devfund_PnPDTestTest binary: Devfund_PnPDTest.dll

テストメソッド:PNPDIFRemoveAndRescanParentDeviceTest method: PNPDIFRemoveAndRescanParentDevice

パラメーター: - 「デバイスの基本テストパラメーター 」を参照Parameters: - see Device Fundamentals Test Parameters

DQDQ

TestCyclesTestCycles

DoSimpleIODoSimpleIO

IOPeriodIOPeriod

Doconon EntioDoConcurrentIO

PNP デバイステストを無効にして有効にするPNP Disable and Enable Device test

このテストでは、ターゲットデバイスを無効にして有効にします。This test disables and enables the target devices.

テストバイナリ:Devfund_PnPDTestTest binary: Devfund_PnPDTest.dll

テストメソッド:PNPDisableAndEnableDeviceTest method: PNPDisableAndEnableDevice

パラメーター: - 「デバイスの基本テストパラメーター 」を参照Parameters: - see Device Fundamentals Test Parameters

DQDQ

TestCyclesTestCycles

DoSimpleIODoSimpleIO

IOPeriodIOPeriod

Doconon EntioDoConcurrentIO

IOTypeIOType

PNP 再調整失敗デバイステストPNP Rebalance Fail Restart Device test

このテストでは、EDT フィルタードライバーを使用して、ターゲットデバイススタックに IRP_MN_STOP_DEVICE を送信しようとします。This test uses the EDT filter driver to try to send IRP_MN_STOP_DEVICE to target device stacks. その後、EDT フィルタードライバーは、IRP_MN_START_DEVICE 要求 (IRP_MN_STOP_DEVICE 要求に従う) が失敗し、ターゲットデバイスの突然の削除をトリガーします。The EDT filter driver then fails IRP_MN_START_DEVICE requests (that follow IRP_MN_STOP_DEVICE requests) to trigger the surprise removal of target devices.

詳細については、「テストの再調整について」を参照してください。For more information, see About the Rebalance tests.

テストバイナリ:Devfund_PnPDTestTest binary: Devfund_PnPDTest.dll

テストメソッド:PNPTryStopDeviceAndFailRestartTest method: PNPTryStopDeviceAndFailRestart

パラメーター: - 「デバイスの基本テストパラメーター 」を参照Parameters: - see Device Fundamentals Test Parameters

DQDQ

TestCyclesTestCycles

DoSimpleIODoSimpleIO

IOPeriodIOPeriod

Doconon EntioDoConcurrentIO

PNP 再調整要求の新しいリソースのデバイステストPNP Rebalance Request New Resources Device test

このテストでは、EDT フィルタードライバーを使用して、ターゲットデバイススタックに IRP_MN_STOP_DEVICE を送信しようとします。This test uses the EDT filter driver to try to send IRP_MN_STOP_DEVICE to target device stacks. また、デバイスのリソース要件を操作して、デバイスに新しいリソースが割り当てられる可能性を最大化します。It also manipulates the resource requirements of the devices to maximize the chances that new resources are allocated to devices.

詳細については、「テストの再調整について」を参照してください。For more information, see About the Rebalance tests.

テストバイナリ:Devfund_PnPDTestTest binary: Devfund_PnPDTest.dll

テストメソッド:PNPTryStopDeviceRequestNewResourcesAndRestartDeviceTest method: PNPTryStopDeviceRequestNewResourcesAndRestartDevice

パラメーター: - 「デバイスの基本テストパラメーター 」を参照Parameters: - see Device Fundamentals Test Parameters

DQDQ

TestCyclesTestCycles

DoSimpleIODoSimpleIO

IOPeriodIOPeriod

Doconon EntioDoConcurrentIO

PNP デバイステストの削除PNP Remove Device Test

このテストによって、IRP_MN_QUERY_REMOVE_DEVICE と IRP_MN_REMOVE_DEVICE がターゲットデバイススタックに送信されます。This test causes IRP_MN_QUERY_REMOVE_DEVICE and IRP_MN_REMOVE_DEVICE to be sent to target device stacks.

詳細については、「デバイスの削除テストについて」を参照してください。For more information, see About the Device Removal tests.

テストバイナリ:Devfund_PnPDTestTest binary: Devfund_PnPDTest.dll

テストメソッド:PNPRemoveAndRestartDeviceTest method: PNPRemoveAndRestartDevice

パラメーター: - 「デバイスの基本テストパラメーター 」を参照Parameters: - see Device Fundamentals Test Parameters

DQDQ

TestCyclesTestCycles

DoSimpleIODoSimpleIO

IOPeriodIOPeriod

Doconon EntioDoConcurrentIO

PNP 停止 (再調整) デバイステストPNP Stop (Rebalance) Device test

このテストでは、EDT フィルタードライバーを使用して、ターゲットデバイススタックに IRP_MN_STOP_DEVICE を送信しようとします。This test uses the EDT filter driver to try to send IRP_MN_STOP_DEVICE to target device stacks.

詳細については、「テストの再調整について」を参照してください。For more information, see About the Rebalance tests.

テストバイナリ:Devfund_PnPDTestTest binary: Devfund_PnPDTest.dll

テストメソッド:PNPTryStopAndRestartDeviceTest method: PNPTryStopAndRestartDevice

パラメーター: - 「デバイスの基本テストパラメーター 」を参照Parameters: - see Device Fundamentals Test Parameters

DQDQ

TestCyclesTestCycles

DoSimpleIODoSimpleIO

IOPeriodIOPeriod

Doconon EntioDoConcurrentIO

PNP の突然のデバイステストの削除PNP Surprise Remove Device test

このテストでは、EDT フィルタードライバーを使用して、ターゲットデバイススタックに IRP_MN_SURPRISE_REMOVAL を送信します。This test uses the EDT filter driver to send IRP_MN_SURPRISE_REMOVAL to target device stacks.

詳細については、「突然の削除のテストについて」を参照してください。For more information, see About the Surprise Removal test.

テストバイナリ:Devfund_PnPDTestTest binary: Devfund_PnPDTest.dll

テストメソッド:PNPSurpriseRemoveAndRestartDeviceTest method: PNPSurpriseRemoveAndRestartDevice

パラメーター: - 「デバイスの基本テストパラメーター 」を参照Parameters: - see Device Fundamentals Test Parameters

DQDQ

TestCyclesTestCycles

DoSimpleIODoSimpleIO

IOPeriodIOPeriod

Doconon EntioDoConcurrentIO

デバイスの削除テストについてAbout the Device Removal tests

  • PNP デバイステストの削除PNP Remove Device Test
  • PNP によるデバイステストの削除の取り消しPNP Cancel Remove Device test

デバイスの削除テストでは、IRP__によって、_デバイスの削除_デバイスの削除、IRP___の削除__デバイスの削除__デバイスの削除の削除が含まれます。The Device Removal test encompasses IRP_MN_QUERY_REMOVE_DEVICE, IRP_MN_CANCEL_REMOVE_DEVICE, and IRP_MN_REMOVE_DEVICE.

テストでは、ターゲットデバイススタックに上位フィルタードライバーをインストールしようとします。The test attempts to install its upper-filter driver on the target device stack. この試行により、クエリ削除の IRP が生成されます。This attempt results in a query-remove IRP.

このクエリ削除の IRP が失敗した場合、テストによってコンピューターが再起動され、フィルタードライバーがデバイススタックに取得されます。If this query-remove IRP fails, the test restarts the computer to get the filter driver onto the device stack. 削除要求が拒否されていない場合、デバイススタックは削除され、デバイススタックのフィルタードライバーを使用して再起動されます。If the remove request is not vetoed, the device stack will be removed and restarted with the filter driver on the device stack.

テストでは、セットアップ Api を使用して、クエリ削除の IRP をデバイススタックに送信します。The test, by using setup APIs, causes a query-remove IRP to be sent to the device stack. フィルタードライバーがこの削除要求に失敗したため、削除の取り消しの IRP が送信されます。The filter driver fails this remove request, so a cancel-remove IRP is sent. フィルタードライバーは、取り消しが正常に終了したことをアサートします。The filter driver will assert that the cancel-remove was successful.

次に、適切なクラスインストーラーと登録されているすべての共同インストーラーを呼び出して、デバイスを無効または有効にしたり、reenumerate したりします (これにより、差分_PROPERTYCHANGE を使用したクラスと共同インストーラーの処理がテストされ_DISABLE、DICS_ENABLE、および DICS_PROPCHANGE)。Next, the test application calls the appropriate class installer and any registered co-installers to disable or enable and remove or reenumerate the device (this tests the class and co-installers handling of DIF_PROPERTYCHANGE with DICS_DISABLE, DICS_ENABLE, and DICS_PROPCHANGE). _IRP を受信し_デバイス_削除すると、フィルタードライバーは、下位のドライバーが正常に完了したことをアサートします。When receiving IRP_MN_REMOVE_DEVICE, the filter driver will assert that the lower drivers completed it successfully.

これらの各手順には、暫定的な削除要求が含まれます。Each of these steps involves a preliminary remove request. 要求が拒否された場合、デバイスは削除されません。If that request is vetoed, the device will not be removed. USB カメラでビデオをストリーミングしているときや、ターゲットデバイスがブートパスまたはページングパスにある場合など、必要に応じて削除要求を拒否することを選択できます。You can choose to veto a remove request when appropriate, such as while streaming video on a USB camera or if the target device is in the boot or paging path. すべての削除要求を失敗させるだけでは、一般的には適切な方法ではないことに注意してください。Remember that simply failing all remove requests is generally not good practice. すべての削除要求が失敗しても、突然削除された後に削除の IRP が発行されること、またはデバイススタック内のすべてのユーザーが start IRP に失敗した場合に、ドライバーが削除を受信しないことは保証されません。Failing all remove requests will not guarantee that driver will never receive a remove because a remove IRP will still be issued after a surprise removal, or if anyone in the device stack fails a start IRP.

突然の削除テストについてAbout the Surprise Removal test

  • PNP の突然のデバイステストの削除PNP Surprise Remove Device test

突然の削除テストでは、_予期しない IRP_が含まれています。これにより、IRP___デバイス_削除されます。The Surprise Removal test encompasses IRP_MN_SURPRISE_REMOVAL followed by IRP_MN_REMOVE_DEVICE.

前のテストと同様に、テストアプリケーションは、ターゲットデバイススタックに上位フィルターを追加し、スタックを再起動しようとします。As with the previous tests, the test application will attempt to add an upper filter to the target device stack and then restart the stack. この試行が成功しなかった場合、テストによってコンピューターが再起動されます。If this attempt is not successful, the test restarts the computer.

テストアプリケーションによってトリガーされた場合、フィルタードライバーによって、システムによって、IRP__、デバイススタックに予期しない_削除が送信され、その後、_デバイスの削除__IRP が送信されます。When triggered by the test application, the filter driver will cause the system to send an IRP_MN_SURPRISE_REMOVAL to the device stack, followed by an IRP_MN_REMOVE_DEVICE. フィルタードライバーは、これらの両方の Irp が下位のドライバーによって正常に完了したことをアサートします。The filter driver will assert that both of these IRPs are completed successfully by lower drivers.

予期しない削除のテストが完了すると、デバイスがアンインストールされ、再列挙されます。また、フィルタードライバーもスタックから削除されます。After the surprise removal test is complete, the device will be uninstalled and reenumerated, also removing the filter driver from the stack.

再調整テストについてAbout the Rebalance Tests

  • PNP 停止 (再調整) デバイステストPNP Stop (Rebalance) Device test
  • PNP 再調整要求の新しいリソースのデバイステストPNP Rebalance Request New Resources Device test
  • PNP 再調整失敗デバイステストPNP Rebalance Fail Restart Device test
  • PNP キャンセルのデバイステストの停止PNP Cancel Stop Device test

削除テストと同様に、テストアプリケーションは、ターゲットデバイススタックに上位フィルターを追加し、差分_PROPERTYCHANGE でSetupdicallclassinstallerを使用してデバイススタックを再起動しようとします。As with the removal test, the test application attempts to add an upper filter to the target device stack and then restart the device stack by using SetupDiCallClassInstaller with DIF_PROPERTYCHANGE. この試行が成功しなかった場合 (つまり、ターゲットデバイススタック上のだれかがクエリ削除の IRP に失敗した場合)、テストは再調整のためにコンピューターを再起動します。If this attempt is not successful (that is, if someone on the target device stack failed the query-remove IRP), the test restarts the computer to test rebalance.

選択した再バランステストに応じて、次のイベントが発生します。Depending upon which rebalance test that you choose, the following events occur:

  1. PNP 停止 (再調整) デバイステストこのテストでは再調整手順を開始します。これにより、IRP__クエリ_デバイスドライバーへの_デバイスの PnP IRP が停止します。PNP Stop (Rebalance) Device test This test initiates a rebalance procedure which results in the IRP_MN_QUERY_STOP_DEVICE PnP IRP to the device driver.

    スタック内のいずれかのドライバーで障害が発生した場合、この IRP は再調整手順を破棄します。If any driver in the stack fails this IRP the rebalance procedure is abandoned. Windows Vista では、複数レベルの再調整がサポートされていることに注意してください。Please note that in Windows Vista, there is support for multi-level rebalance. 非リーフデバイスノードで再調整が開始された場合、そのデバイスノードがルートとして使用されているデバイスツリーに存在するすべてのデバイススタックも再調整を実行します。If a rebalance is started on a non-leaf device node, all of the device stacks that are present in the device tree with that device node as the root also go through rebalance. また、子デバイスのスタックのいずれかがクエリの停止に失敗した場合は、再調整手順全体が破棄されます。And if any of the child device stacks fails query stop, the whole rebalance procedure is abandoned. そのため、ドライバーは、正規の理由を伴わずにクエリを停止することはできません。So drivers must not fail query stop without a genuine reason to do so. このエラーが発生した場合、PnP マネージャーは、送信されたクエリの停止のすべてのデバイススタックにキャンセル停止 (IRP_完了_キャンセル_停止) を送信します。If this failure happens, the PnP manager sends cancel stop (IRP_MN_CANCEL_STOP) to all the device stacks that had been sent query stop.

    使用されているすべてのデバイススタックがクエリを停止した場合、テストは再調整を続行し、IRP__クエリ_リソース_要件と IRP__フィルター_リソース_要件を送信します。デバイスのリソース要件を見つけるための IRP。If all of the device stacks involved pass query stop, the test continues with the rebalance and sends the IRP_MN_QUERY_RESOURCE_REQUIREMENTS and IRP_MN_FILTER_RESOURCE_REQUIREMENTS IRPS to find the resource requirement of the devices.

    この時点以降、ターゲットデバイスがリソースを使用するかどうかに応じて、2つの異なるパスを使用できます。After this point, two different paths are possible depending on whether the target device consumes any resources or not:

    • デバイスがリソースを消費しない場合は、PnP マネージャー自体がキャンセル停止 (IRP__キャンセル__デバイスの停止) を最適化として送信します。If the device does not consume any resources, the PnP manager itself sends a cancel stop (IRP_MN_CANCEL_STOP_DEVICE) as an optimization.

      デバイスが実際にリソースを消費している場合は、IRP__停止_デバイスと IRP_、_デバイスの Irp を開始_開始することで、再調整手順が完了します。If the device actually consumes resources, the rebalance procedure is completed with the IRP_MN_STOP_DEVICE and IRP_MN_START_DEVICE IRPs.

    このオプションを使用すると、デバイスのリソースが変更されません。With this option, the resources of the device do not change.

  2. PNP キャンセルデバイステストの停止: このテストは再調整手順を開始しますが、フィルタードライバーはクエリ停止 IRP を意図的に失敗させます。PNP Cancel Stop Device test: This test initiates a rebalance procedure, but the filter driver deliberately fails the query stop IRP. Irp_の順序は、_クエリ__デバイスを停止します (これは、起動中にフィルタードライバーによってエラーが発生し、再調整がキャンセルされます)。 IRP__をキャンセル_停止_ドライブ.The order of IRPs looks like IRP_MN_QUERY_STOP_DEVICE (which is failed by the filter driver while coming up, causing a cancellation of rebalance) and IRP_MN_CANCEL_STOP_DEVICE.

    このオプションを使用すると、デバイスのリソースが変更されません。With this option, the resources of the device do not change

  3. PNP 再調整要求の新しいリソースのデバイステストこのテストは再調整を開始し、デバイスのリソース要件を操作して、実際に新しいリソースがデバイスに割り当てられる可能性を最大化します。PNP Rebalance Request New Resources Device test This test initiates a rebalance and also manipulates the resource requirement of the device to maximize the chances that actually new resources are allocated to the device. このオプションを使用すると、リソースのないデバイスでも、実際には再調整手順全体を実行できます。This option also helps a device with no resources to actually go through the complete rebalance procedure:

    1. 最初に単純な再調整が開始され、次のような Irp が発生します。First the simple rebalance is started, causing the following IRPs:

      • IRP__クエリ__デバイスを停止します (この IRP がすべてのドライバーによって渡されることを前提としています)。IRP_MN_QUERY_STOP_DEVICE (assuming this IRP is passed by all the drivers. このテストでは、この IRP が失敗したケースが既にカバーされています)。The test already covered the case where this IRP is failed.)
      • IRP__クエリ_リソース_の要件IRP_MN_QUERY_RESOURCE_REQUIREMENTS
      • IRP__フィルター_リソース_要件をフィルター処理します。IRP_MN_FILTER_RESOURCE_REQUIREMENTS. この IRP への応答として、フィルタードライバーは、デバイスがリソースを消費しているかどうかに基づいてアクションを実行します。In response to this IRP, while going up, filter driver takes action based on whether the device consumes any resources or not:
        • デバイスにリソース要件がない場合は、フィルターによって偽のリソースが割り当てられます。If the device has no resource requirement, filter assigns a fake resource.
        • デバイスにリソース要件がある場合は、現在の割り当てを変更する確率を最大化するような方法でリソース要件リストを再構築しようとします。If the device has a resource requirement, it tries to restructure the resource requirement list in such a way that maximizes the probability of changing the current assignment. たとえば、デバイスが 00 ~ FF の任意の場所に2バイトのメモリを必要とし、現在は 3A-3B が割り当てられている場合は、新しいリソースの要件 (優先順位) が00-39 または 3C-FF または 3A-3B のように変更されます。For example, if a device needs 2 bytes of memory anywhere between 00 to FF and currently is assigned 3A-3B, modify such that the new resource requirement (in order of preference) looks like 00-39 or 3C-FF or 3A-3B. 同様に、デバイスリソース要件の一覧に別の要件がある場合は、代替の要件がリストの前に来るように順序を変更します。Similarly if the device resource requirement list has any alternate requirements, it will change their order so the alternate requirement comes earlier in the list.
    2. ここで、デバイスは常に再調整手順を完了する必要があります。Now the device should always complete the rebalance procedure.

      IRP___デバイスの停止IRP_MN_STOP_DEVICE

      IRP_、_デバイス (割り当てられた新しいリソース_開始します。IRP_MN_START_DEVICE (The new allocated resources. 偽の要件が作成された場合は、実際のドライバーから新しいリソースをマスクします。)If fake requirements were created, mask the new resources from the actual drivers.)

  4. PNP 再調整失敗デバイステストこのテストは再調整を開始しますが、再調整後にフィルタードライバーが開始を取得すると、意図的に失敗します。これにより、突然の削除 IRP の後に削除 IRP が続きます。PNP Rebalance Fail Restart Device Test This test initiates a rebalance but when the filter driver gets the start after the rebalance, it deliberately fails it-which causes the surprise removal IRP followed by Removal IRP.

    最初に、再調整手順を開始し、リソースを消費しないデバイスのフェイクリソース要件を生成することによって、ドライバーが停止と開始を確実に行うようにします。First, it starts the rebalance procedure and makes sure that the driver gets a stop and a start by generating fake resource requirement for a device which does not consume any resources.

    • IRP__クエリ__デバイスを停止します (この IRP がすべてのドライバーによって渡されることを前提としています)。IRP_MN_QUERY_STOP_DEVICE (assuming this IRP is passed by all the drivers. このテストでは、この IRP が失敗したケースが既にカバーされています)。The test already covered the case where this IRP is failed.)
    • IRP__クエリ_リソース_の要件IRP_MN_QUERY_RESOURCE_REQUIREMENTS
    • IRP__フィルター_リソース_要件 (実際のリソース要件が null の場合は、フィルターによって仮のリソース要件が割り当てられます。そのため、停止と開始があります)。IRP_MN_FILTER_RESOURCE_REQUIREMENTS (If the actual resource requirement are null, filter assign fake resource requirement, so there is a stop and a start.)
    • IRP___デバイスの停止IRP_MN_STOP_DEVICE
    • IRP_、_デバイスを起動_ます (この IRP は、起動中にこの IRP に失敗します。IRP_MN_START_DEVICE (The filter fails this IRP while going up. この操作により、予期しない IRP が削除されます)。This action causes the surprise remove IRP.)
    • IRP__驚く_削除IRP_MN_SURPRISE_REMOVAL
    • IRP__削除IRP_MN_REMOVE

    再調整テストが完了すると、デバイスがアンインストールされ、再列挙されます。また、フィルタードライバーもスタックから削除されます。After the rebalance test is complete, the device will be uninstalled and reenumerated, also removing the filter driver from the stack.

デバイスのエラーコードDevice Error Codes

デバイスの状態が [OK] でないというエラーメッセージが表示された場合は、デバイスマネージャーでデバイスの状態の詳細を確認してください。If the test gives an error message saying that the device status is not OK, you can learn more about the device status through Device Manager. さまざまなデバイスエラーコードの概要については、「デバイスマネージャーのエラーメッセージ」を参照してください。For a summary of the various device error codes, see Device Manager Error Messages.

セットアップ API ログを使用してインストールエラーをデバッグするDebug installation failures using the Setup API logs

セットアップ API のログ (setupapi.log と setupapi.log) には、このテストで記録されたドライバーのインストールエラーをデバッグするのに役立つ情報が含まれている場合があります。The Setup API logs (setupapi.app.log and setupapi.dev.log) might contain useful information to debug driver installation failures logged by this test. セットアップ API のログは、テストシステムの% windir%\inf\ ディレクトリにあります。The Setup API logs can be found under %windir%\inf\ directory on the test system.

これらのログの詳細度と有用性を向上させるには、再インストールテストを実行する前に、次のレジストリキーを0x2000FFFF に設定します。To increase the verbosity and potential usefulness of these logs, set the following registry key to 0x2000FFFF before running the Reinstall test:

HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Setup\LogLevel

Visual Studio を使用して実行時にドライバーをテストする方法How to How to test a driver at runtime using Visual Studio

デバイスの基本テストを選択して構成する方法How to select and configure the Device Fundamentals tests

デバイスの基本テストDevice Fundamentals Tests

デバイスの基本テストパラメーターDevice Fundamentals Test Parameters

指定された WDTF 単純な i/o プラグインProvided WDTF Simple I/O plug-ins

コマンドプロンプトから実行時にドライバーをテストする方法How to test a driver at runtime from a Command Prompt