WD_UsbResetDeviceEx() 関数 (v5.04 で追加) で、ソフト リセット (以前のバージョンで使用していた、WD_UsbResetDevice() 関数で実行したリセットと似ています) とハード リセットを識別できます。 WD_UsbResetDeviceEx() 関数を使用した、ソフト リセットとハード リセットの違いは、次のとおりです: ソフト リセット: デバイスが無効状態になった時のみ、リセット要求を発行します (Microsoft のドライバによって実行時)。 ハード リセット: デバイスが無効または有効な状態に関わらず、常にリセット要求を発行します。 ハード リセット オプションを使用するには、WD_UsbResetDeviceEx() へ渡される WD_USB_RESET_DEVICE 構造体の dwOptions フィールドに WD_USB_HARD_RESET フラグを設定します。デフォルトでは、dwOptions フィールドに 0 に設定すると、関数は ソフト リセット を実行します - i.e. 例、現在、デバイスが無効な場合のみ、リセット要求を発行します。 次の例に従って、WD_UsbResetEx() 関数を使用して、ハード リセット を実行します: WD_USB_RESET_DEVICE reset; BZERO(resest); reset.hDevice = hDevice; //The handle received from // WD_UsbDeviceRegister() reset.dwOptions = WD_USB_HARD_RESET; WD_UsbResetDeviceEx(hWD, &reset); 注意: ハード リセットを実行する際にシステム クラッシュを防ぐには、次の内容を実行することを推奨します: WD_UsbResetDeviceEx() を呼出し後、すぐに、デバイスを登録解除し (WD_UsbDeviceUnregister() 関数を呼んで)、スキャンを行い (WD_UsbScanDevice() 関数を呼んで)、再び登録します (WD_UsbDeviceRegister() 関数を呼んで)。これで、Windows がデバイスのすべてのリソースを割り当て、後に起こる可能性のある競合を防ぎます。
WD_USB_RESET_DEVICE reset; BZERO(resest); reset.hDevice = hDevice; //The handle received from // WD_UsbDeviceRegister() reset.dwOptions = WD_USB_HARD_RESET; WD_UsbResetDeviceEx(hWD, &reset); 注意: ハード リセットを実行する際にシステム クラッシュを防ぐには、次の内容を実行することを推奨します: WD_UsbResetDeviceEx() を呼出し後、すぐに、デバイスを登録解除し (WD_UsbDeviceUnregister() 関数を呼んで)、スキャンを行い (WD_UsbScanDevice() 関数を呼んで)、再び登録します (WD_UsbDeviceRegister() 関数を呼んで)。これで、Windows がデバイスのすべてのリソースを割り当て、後に起こる可能性のある競合を防ぎます。