接続手段に接続された外部機器から、該外部機器の少なくとも機能を示す識別情報を取得する取得手段と、前記外部機器を制御するためのデバイスドライバを保持する保持手段と、デバイスドライバの前記接続手段に接続された前記外部機器への割り当てを、制御情報に従い制御する制御手段とを有し、前記保持手段は、外部機器の機能に依存しない処理を行う汎用デバイスドライバを少なくとも保持し、前記制御手段は、前記制御情報が第1の値を示している場合に、前記接続手段に接続された外部機器に対して前記汎用デバイスドライバを割り当て、該制御情報が第2の値を示している場合に、該外部機器から取得された前記識別情報に示される該外部機器の機能に対応するデバイスドライバが前記保持手段に保持されているか否かを判定する第1の判定を行い、該第1の判定により保持されていないと判定した場合に、前記汎用デバイスドライバを該外部機器に割り当てることを特徴とする情報処理装置。前記識別情報は、外部機器の機種を特定する情報をさらに含み、前記保持手段は、外部機器から取得した前記識別情報に示される機能を割り当てることを許可した該外部機器の機種を特定する情報のリストをさらに保持し、前記制御手段は、前記第1の判定により、前記取得手段で該外部機器から取得された前記識別情報に示される該外部機器の機能に対応するデバイスドライバが前記保持手段に保持されていると判定した場合に、該識別情報に含まれる前記機種を特定する情報に基づき、該機種を特定する情報が前記リストに存在するか否かを判定する第2の判定を行い、該第2の判定により存在しないと判定した場合に、該識別情報に示される該外部機器の機能に対応するデバイスドライバを該外部機器に割り当てることを許可するか否かを判定する第3の判定を行い、該第3の判定により許可しないと判定した場合に、前記汎用デバイスドライバを該外部機器に割り当てると共に、前記制御情報を前記第1の値に変更することを特徴とする請求項1に記載の情報処理装置。前記制御手段は、前記第3の判定を、ユーザ入力に従い行うことを特徴とする請求項2に記載の情報処理装置。前記制御手段は、前記第3の判定により許可すると判定した場合に、デバイスドライバの割り当てを許可する外部機器の機種を特定する情報を前記リストに追加することを特徴とする請求項2または請求項3に記載の情報処理装置。前記制御手段は、前記汎用デバイスドライバを外部機器に割り当てた後、ユーザ入力に応じて、該外部機器に対する該汎用デバイスドライバの割り当てを解除すると共に、前記制御情報を前記第2の値に変更することを特徴とする請求項1乃至請求項4の何れか1項に記載の情報処理装置。接続手段に接続された外部機器から、該外部機器の少なくとも機能を示す識別情報を取得する取得ステップと、制御情報が第1の値を示している場合に、前記接続手段に接続された外部機器に対して、保持手段に保持される、部機器の機能に依存しない処理を行う汎用デバイスドライバを割り当て、前記制御情報が第2の値を示している場合に、該外部機器から取得された前記識別情報に示される該外部機器の機能に対応するデバイスドライバが前記保持手段に保持されているか否かの判定を行い、該判定により保持されていないと判定した場合に、前記汎用デバイスドライバを該外部機器に割り当てる制御ステップとをコンピュータに実行させるためのプログラム。ところで、USBデバイスに対して本来属するクラスとは異なるクラスを設定して使用する場合、この異なるクラスのクラスドライバに割り当てられたUSBデバイスを正常に動作するように制御できるアプリケーションを用意する必要がある。若し、何らかの制約によりこのアプリケーションを使用できない場合、本来属するクラスとは異なるクラスのクラスドライバが割り当てられたUSBデバイスが使用できないばかりか、想定外の動作をしてしまうおそれがあるという問題点があった。上述した特許文献2に記載の技術では、USBデバイスを制御するためのアプリケーションを使用することが前提となっている。そのため、当該アプリケーションが使用できない場合に、本来属するクラスとは異なるクラスのクラスデバイスが割り当てられたUSBデバイスを正常に制御できないおそれがある問題は、解消できていない。本発明は、上記に鑑みてなされたものであって、本来属するクラスとは異なるクラスが設定されたUSBデバイスの、想定外の動作を防止することを目的とする。上述した課題を解決し、目的を達成するために、本発明は、接続手段に接続された外部機器から、外部機器の少なくとも機能を示す識別情報を取得する取得手段と、外部機器を制御するためのデバイスドライバを保持する保持手段と、デバイスドライバの接続手段に接続された外部機器への割り当てを、制御情報に従い制御する制御手段とを有し、保持手段は、外部機器の機能に依存しない処理を行う汎用デバイスドライバを少なくとも保持し、制御手段は、制御情報が第1の値を示している場合に、接続手段に接続された外部機器に対して汎用デバイスドライバを割り当て、制御情報が第2の値を示している場合に、外部機器から取得された識別情報に示される外部機器の機能に対応するデバイスドライバが保持手段に保持されているか否かを判定する第1の判定を行い、第1の判定により保持されていないと判定した場合に、汎用デバイスドライバを外部機器に割り当てることを特徴とする。また、本発明は、接続手段に接続された外部機器から、外部機器の少なくとも機能を示す識別情報を取得する取得ステップと、制御情報が第1の値を示している場合に、接続手段に接続された外部機器に対して、保持手段に保持される、部機器の機能に依存しない処理を行う汎用デバイスドライバを割り当て、制御情報が第2の値を示している場合に、外部機器から取得された識別情報に示される外部機器の機能に対応するデバイスドライバが保持手段に保持されているか否かの判定を行い、判定により保持されていないと判定した場合に、汎用デバイスドライバを外部機器に割り当てる制御ステップとをコンピュータに実行させることを特徴とする。本発明によれば、本来属するクラスとは異なるクラスが設定されたUSBデバイスの、想定外の動作を防止できるという効果を奏する。第1の実施形態の構成例以下に添付図面を参照して、本発明に係る情報処理装置およびプログラムの第1の実施形態を詳細に説明する。図1は、本第1の実施形態に適用可能な情報処理装置1の一例の構成を概略的に示す。情報処理装置1は、制御部10、USBホストコントローラ11、入力インターフェイスI/F12および表示制御部13を有する。制御部10は、例えばCPU、RAM、ROM、HDDなどを有し、CPUが、ROMやHDDに予め格納されたプログラムに従い、RAMをワークメモリとして用いて、この情報処理装置1の全体の動作を制御する。USBホストコントローラ11は、外部機器であるUSBデバイス20を接続するためのUSBデバイス接続ポートを有し、制御部10の制御に従い、USBデバイス接続ポートに接続されるUSBデバイス20との通信を制御する。入力I/F12は、例えばキーボードやポインティングデバイスマウスなどといった入力デバイス21が接続され、入力デバイス21に対してなされたユーザ入力に応じた制御信号を制御部10に対して出力する。表示制御部13は、ディスプレイ22が接続され、プログラムに従い制御部10で生成された表示制御信号を、ディスプレイ22が表示可能な形式の信号に変換してディスプレイ22に対して出力する。図2は、図1に示した情報処理装置1の機能を説明するための一例の機能ブロック図である。なお、図2において、上述の図1と共通する部分には同一の符号を付し、詳細な説明を省略する。図2において、点線の上側が制御部10上で動作するソフトウェアを示し、点線の下側がハードウェアを示す。制御部10上で動作するソフトウェアは、アプリケーション30と、グラフィクスインターフェイスI/F31と、汎用のOSであるOS32とを含む。OS32は、ハードウェアであるUSBホストコントローラ11との仲介を行うUSBスタック40を含む。アプリケーション30は、OS32との間で関数呼び出しとその戻り値送信、ならびに、メッセージの送受信などを行うことで、所定の機能を実現する。グラフィクスI/F31は、アプリケーション30やOS32からの命令に従い描画処理などを行い、所定の表示のための表示制御信号を生成し、表示制御部13に対して出力する。OS32は、ソフトウェアとハードウェアとの仲介を行うと共に、制御部10において動作する各プログラムを統括的に管理する。図3は、USBスタック40の機能を説明するための一例の機能ブロック図である。なお、図3において、上述した図1と共通する部分には同一の符号を付して、詳細な説明を省略する。USBスタック40は、検知部41、判定部42およびドライバ割当部43を有すると共に、クラスドライバ群44を有する。USBスタック40は、OS32の命令に従いUSBホストコントローラ11と通信を行う。また、USBスタック40は、USBホストコントローラ11との通信の結果に応じて、所定の表示を行うためのメッセージなどを出力する。このメッセージは、例えば図示されないグラフィクスI/F31により描画され表示制御信号に変換されて表示制御部13に対して出力される。USBスタック40において、検知部41は、USBホストコントローラ11に対してUSBデバイス20が接続されたことを検知する。判定部42は、検知部41に検知された、接続中のUSBデバイス20に対するデバイスドライバの割り当てに関する判定を行う。ドライバ割当部43は、判定部42の判定結果に基づき、接続中のUSBデバイス20に対してデバイスドライバを割り当てる。クラスドライバ群44は、USBデバイス20を制御するためのデバイスドライバの一種であるクラスドライバを保持する。なお、クラスは、USBデバイス20の機能を抽象化して分類したものである。クラスドライバは、USBデバイス20のクラスとしての動作を制御するための上位のデバイスドライバである。クラスドライバ群44は、少なくともジェネリック汎用クラスのクラスドライバジェネリッククラスドライバと呼ぶを含む。ジェネリッククラスは、例えば、USBデバイスの機能に依存しない処理のみを行うクラスである。クラスドライバ群44は、ジェネリッククラスのクラスドライバに限られず、ハブクラス、キーボードクラスのドライバなど他のクラスのクラスドライバを含むことができる。また、クラスドライバ群44に対して、他のクラスドライバを適宜追加していくことも可能である。クラスドライバ群44は、さらに、USBデバイス20を特定する識別情報のリストを保持する。このリストは、後述するようにしてUSBデバイス20から取得されたデバイスディスクリプタに示されるクラスに対応するクラスドライバの割り当てを許可したUSBデバイス20を特定する情報が登録される。図4は、このリスト45の一例の構成を示す。この図4の例では、USBデバイス20を特定する識別情報として、USBデバイス20のベンダ名VendorIDおよび機種名ProductIDが用いられている。これらベンダ名VendorIDおよび機種名ProductIDは、それぞれ、後述するデバイスディスクリプタに含まれるフィールドidVendorおよびidProductの情報を用いる。例えば、リスト45は、デフォルトでは空の状態となっており、後述する処理に従い適宜、情報が追加登録される。これに限らず、動作が既知のUSBデバイス20の情報をリスト45に対して予め登録しておいてもよい。USB通信手順次に、USBデバイス20がUSBホストコントローラ11に対して接続された際の、通信までの手順について、概略的に説明する。先ず、例えばUSBデバイス20がUSBホストコントローラ11のUSBデバイス接続ポートに接続されると、USBホストコントローラ11にUSBデバイス20が認識されその旨が検知部41に通知される。また、USBホストコントローラ11は、接続されたUSBデバイス20に対してアドレスを割り当てる。USBホストコントローラ11は、接続されたUSBデバイス20に対するアドレスの割り当てが行われると、当該USBデバイス20のディスクリプタの取得を開始する。USB通信では、USBホストコントローラ11とUSBデバイス20との通信シーケンスにおいて、USBホストコントローラ11は、ターゲットであるUSBデバイス20からコントロール転送によってディスクリプタを取得する。ディスクリプタは、ターゲットの特性、属性などの情報を含み、デバイスディスクリプタ、コンフィグレーションディスクリプタ、インターフェイスディスクリプタおよびエンドポイントディスクリプタの4種類がある。なお、以下では、適宜、これらデバイスディスクリプタ、コンフィグレーションディスクリプタ、インターフェイスディスクリプタおよびエンドポイントディスクリプタの4つのディスクリプタを纏めて標準ディスクリプタと呼ぶ。図5~図8を用いて、これら4種類のディスクリプタについて、概略的に説明する。なお、図5~図8において、オフセットは、先頭からのバイト数を示す。各フィールドは、図5~図8においてフィールド名の右に示されるデータ長を有し、各ディスクリプタにおいて、オフセットとデータ長とから、特定のフィールドにアクセスすることができる。図5は、デバイスディスクリプタを示す。デバイスディスクリプタは、このディスクリプタを送信したUSBデバイスを識別するための情報が含まれる。図5において、デバイスディスクリプタは、フィールドbLength、フィールドbDescriptorType、フィールドbcdUSB、フィールドbDeviceClass、フィールドbDeviceSubclass、フィールドbDeviceProtocol、フィールドbMaxPacketSize0、フィールドidVendor、フィールドidProduct、フィールドbcdDevice、フィールドiManufacturer、フィールドiProduct、フィールドiSerialNumberおよびフィールドbNumConfigurationを含む。これらのうち、フィールドbLengthおよびフィールドbDescriptorTypeは、それぞれディスクリプタのバイト長と種類を示す。これらフィールドbLengthおよびフィールドbDescriptorTypeは、各ディスクリプタに設けられる。デバイスディスクリプタにおいて、フィールドbDeviceClass、フィールドbDeviceSubclassおよびフィールドbDeviceProtocolは、このディスクリプタを送信したUSBデバイスのクラスを示す。クラスは、USBデバイスの機能に基づく分類を示す。また、フィールドidVendorは、このディスクリプタを送信したUSBデバイスのベンダを識別するベンダIDである。同様に、フィールドidProductは、ディスクリプタを送信したUSBデバイスの製品を示す。これらフィールドidVendorおよびフィールドidProductにより、USBデバイスの機種を識別することができる。図6は、コンフィグレーションディスクリプタを示す。コンフィグレーションディスクリプタは、ターゲットのUSB構成情報を含み、インターフェイスディスクリプタの数を示す情報を持つ。図6において、コンフィグレーションディスクリプタは、フィールドbLength、フィールドbDescriptorType、フィールドwTotalLength、フィールドbNumInterface、フィールドbConfigurationValueおよびフィールドiConfiguration、フィールドbmAttributesおよびフィールドbMaxPowerを含む。図7は、インターフェイスディスクリプタを示す。インターフェイスディスクリプタは、インターフェイスの情報を含み、インターフェイスが持つエンドポイントディスクリプタの数を持つ。図7において、インターフェイスディスクリプタは、フィールドbLength、フィールドbDescriptorType、フィールドbInterfaceNumber、フィールドbAlternateSetting、フィールドbNumEndpoint、フィールドbInterfaceClass、フィールドbInterfaceSubclass、フィールドbInterfaceProtocolおよびフィールドiInterfaceを含む。また、図8は、エンドポイントディスクリプタを示す。エンドポイントディスクリプタは、通信用のポートであるエンドポイントの情報を含む。図8において、エンドポイントディスクリプタは、フィールドbLength、フィールドbDescriptorType、フィールドbEndpointAddress、フィールドbmAttributes、フィールドwMaxPacketSizeおよびフィールドbIntervalを含む。なお、図6~図8に示したコンフィグレーションディスクリプタ、インターフェイスディスクリプタおよびエンドポイントディスクリプタは、本発明と深い関連がないため、説明を省略する。図9は、このディスクリプタ取得処理の一例のシーケンスを示す。図9の例では、USBホストコントローラ11は、USBデバイス20から、処理aでデバイスディスクリプタを取得し、処理bでコンフィグレーションディスクリプタ、インターフェイスディスクリプタおよびエンドポイントディスクリプタを取得している。すなわち、USBホストコントローラ11は、USBデバイス20に対して、標準リクエストであるコマンドGET_DESCRIPTORを、デバイスディスクリプタを指定するパラメータを指定して発行するSEQ100。USBデバイス20は、このコマンドに応答して、デバイスディスクリプタをUSBホストコントローラ11に返すSEQ101。以降、同様にして、USBホストコントローラ11は、コンフィグレーションディスクリプタを指定するパラメータをコマンドGET_DESCRIPTORに指定してUSBデバイス20に対して発行し、コンフィグレーションディスクリプタを取得するSEQ102、SEQ103。USBホストコントローラ11は、以降同様にしてSEQ102およびSEQ103の処理を繰り返し、USBデバイス20からインターフェイスディスクリプタおよびエンドポイントディスクリプタを取得する。第1の実施形態によるクラスドライバ割り当て処理次に、本第1の実施形態による、USBデバイス20に対するクラスドライバ割り当て処理について、図10のフローチャートを用いて説明する。このフローチャートによる処理は、制御部10内のOS32に含まれるUSBスタック40において実行される。この図10のフローチャートの処理に先んじて、クラスドライバ割り当てを制御するための制御情報であるクラスドライバフラグの値が無効を示す値に初期設定される。ステップS100で、検知部41により、USBホストコントローラ11の所定のUSBデバイス接続ポートにUSBデバイス20が接続されたことが検知され、ステップS101で、当該USBデバイス20のUSBデバイス接続ポートへの電気的な接続が確立され接続状態とされる。次のステップS102で、上述した図9のシーケンスに従い、当該USBデバイス20が持つディスクリプタの取得が行われる。取得したディスクリプタは、USBホストコントローラ11からUSBスタック40に渡される。次のステップS103で、判定部42により、クラスドライバフラグの値が有効および無効の何れを示すかが判定される。若し、クラスドライバフラグの値が無効を示す値であると判定された場合、処理がステップS104に移行される。ステップS104では、ドライバ割当部43が、ジェネリッククラスドライバを、ステップS101で接続状態とされた、接続中のUSBデバイス20に対して割り当てる。ジェネリッククラスドライバは、上述したように、USBデバイス20の機能に依存しない処理のみを行う。したがって、アプリケーション30がジェネリッククラスドライバを介てのUSBデバイス20の制御に対応していない限り、接続中のUSBデバイス20をアプリケーション30から制御することができない。そのため、接続中のUSBデバイス20が想定外の動作を取ることがない。しかしながら、このジェネリッククラスドライバが割り当てられた状態では、接続中のUSBデバイス20が本当に使用したい場合であっても当該USBデバイス20が機能しないことになる。そのため、ステップS105以下の手順に従い、必要に応じて、適当なクラスドライバを当該USBデバイス20に対して割り当てる。次のステップS105で、USBスタック40は、ユーザからのクラスドライバフラグを有効にする指示を待機する。当該指示がユーザから与えられたら、処理はステップS106に移行され、クラスドライバフラグの値が有効を示す値に変更される。例えば、USBスタック40は、ユーザに対してクラスドライバフラグを有効にする指示の入力を促す入力画面を表示するための表示命令をグラフィクスI/F31に渡す。グラフィクスI/F31は、この表示命令に従い描画処理を行い表示制御信号を生成して表示制御部13に対して出力し、表示制御部13は、この表示制御信号に従いディスプレイ22に対して入力画面を表示させる。この入力画面に従い、ユーザにより入力デバイス21が所定に操作されて当該指示が入力される。ステップS106でクラスドライバフラグの値が有効を示す値に変更されると、処理はステップS107に移行され、USBスタック40によりUSBデバイス接続ポートがリセットされる。このとき、ドライバ割当部43は、現在USBデバイス接続ポートに接続されているUSBデバイス20に対するジェネリッククラスドライバの割り当てを解除する。これにより、当該USBデバイス20は、USBデバイス接続ポートから一旦USBケーブルを抜いて、再び挿入したのと同様の状態となる。ステップS107でUSBデバイス接続ポートがリセットされると、処理がステップS101に戻される。一方、上述のステップS103で、判定部42によりクラスドライバフラグの値が有効を示す値であると判定された場合、処理がステップS108に移行される。ステップS108では、ドライバ割当部43により、接続中のUSBデバイス20のクラスに相当するクラスのクラスドライバがクラスドライバ群44に含まれるか否かが判定される。すなわち、ドライバ割当部43は、ステップS102で当該USBデバイス20から取得されたディスクリプタのうち、デバイスディスクリプタに含まれるフィールドbDeviceClassおよびフィールドbDeviceSubclassの値を抽出し、当該USBデバイス20に対して設定されているクラスを取得する。ドライバ割当部43は、このクラスと一致するクラスのクラスドライバがクラスドライバ群44に含まれるか否かを判定する。ステップS108で、ドライバ割当部43が、接続中のUSBデバイス20のクラスに相当するクラスのクラスドライバがクラスドライバ群44に含まれないと判定した場合、処理をステップS109に移行させる。ステップS109では、USBスタック40がクラスドライバフラグの値を無効を示す値に変更し、処理をステップS104に移行させる。一方、ステップS108で、ドライバ割当部43が、接続中のUSBデバイス20のクラスに相当するクラスのクラスドライバがクラスドライバ群44に含まれると判定した場合、処理がステップS110に移行される。ステップS110では、ドライバ割当部43が、クラスドライバ群44に保持されるリスト45を参照し、接続中のUSBデバイス20が、リスト45に登録されているか否かを判定する。より具体的には、ドライバ割当部43は、ステップS102で当該USBデバイス20から取得されたディスクリプタのうち、デバイスディスクリプタに含まれるフィールドidVendorおよびフィールドidProductの値の組を抽出し、抽出された値の組がリスト45に登録されているか否かを判定する。若し、接続中のUSBデバイス20がリスト45に登録されていると判定した場合、ドライバ割当部43は、処理をステップS111に移行させ、適当なクラスドライバを当該USBデバイス20に対して割り当てる。より具体的には、接続中のUSBデバイス20からステップS102で取得したデバイスディスクリプタに示されるクラスのクラスドライバを、当該USBデバイス20に割り当てる。ステップS111でクラスドライバのUSBデバイス20に対する割り当てが行われると、処理がステップS112に移行され、USBスタック40によりクラスドライバフラグの値が無効に変更される。そして、処理がステップS100に戻される。一方、ステップS110で、接続中のUSBデバイス20がリスト45に登録されていないと判定した場合、ドライバ割当部43は、処理をステップS113に移行させる。ステップS113では、ドライバ割当部43は、接続中のUSBデバイス20から取得したデバイスディスクリプタに示されるクラスに対応するクラスドライバに当該USBデバイス20を割り当てることを許可するか否かを判定する。このステップS113での判定は、ユーザ入力に応じて行われる。例えば、ドライバ割当部43は、ユーザに対して判定の入力を促す入力画面を表示させる命令をグラフィクスI/F31に渡す。グラフィクスI/F31は、この命令に応じて入力画面の描画処理などを行い、描画された入力画面を表示させるための表示制御信号を生成する。この表示制御信号は、表示制御部13に対して出力され、表示制御部13により、ディスプレイ22に対して入力画面が表示される。図11は、ステップS113でディスプレイ22に表示される入力画面50の一例を示す。このように、入力画面50は、接続中のUSBデバイス20から取得したデバイスディスクリプタに示されるクラスのクラスドライバを当該USBデバイス20に対して割り当てる旨を示すメッセージ53が表示される。この例では、取得したクラスがキーボードとされ、メッセージ53が接続されたUSBデバイスはキーボードとして認識します。よろしいですかとされている。入力画面50に対して、さらに、このメッセージ53に対する肯定を選択するOKボタン51と、否定を選択するNGボタン52とが表示される。ユーザは、この入力画面50の表示に従い、入力デバイス21を用いてボタン51およびボタン52のうち何れかを選択する。若し、ステップS113でOKボタン51が選択された場合には、接続中のUSBデバイス20から取得したデバイスディスクリプタに示されるクラスに対応するクラスドライバに当該USBデバイス20を割り当てることを許可すると判定される。この場合、処理はステップS111に移行され、ドライバ割当部43は、接続中のUSBデバイス20のデバイスディスクリプタから取得したクラスのクラスドライバを、当該USBデバイス20に対して割り当てる。それと共に、当該USBデバイス20のデバイスディスクリプタから取得した機種を特定する識別情報フィールドidVendorおよびフィールドidProductの情報を、リスト45に対して追加する。一方、ステップS113でNGボタン52が選択された場合には、接続中のUSBデバイス20から取得したデバイスディスクリプタに示されるクラスに対応するクラスドライバに当該USBデバイス20を割り当てることを許可しないと判定される。この場合、処理はステップS109に移行され、USBスタック40がクラスドライバフラグの値を無効を示す値に変更し、ドライバ割当部43がステップS104でジェネリッククラスドライバを当該USBデバイス20に対して割り当てる。上述のように、本第1の実施形態では、USBデバイス20の接続直後には、ジェネリッククラスドライバを当該USBデバイス20に対して割り当てる。そして、その後、当該USBデバイス20のデバイスディスクリプタから取得したクラスのクラスドライバを、当該USBデバイス20に対して割り当てるか否かを、ユーザの選択に基づき決定する。したがって、当該USBデバイス20が本来属するクラスとは異なるクラスが設定されている場合であっても、当該USBデバイス20が想定外の動作をしてしまうことが防がれる。第2の実施形態次に、本発明の第2の実施形態について説明する。本第2の実施形態は、上述の第1の実施形態で説明した情報処理装置1を、画像読取機能、印刷機能、FAX機能、複写機能といった複数の機能を統合させた複合機100に適用させた例である。図12は、本第2の実施形態による複合機100の一例の構成を示す。制御部110において、ASIC120に対して、CPU121と、RAM122と、HDD123と、PCIバス115および130とが接続される。PCIバス130に対して、例えばシリアルI/F140と、NIC141と、USBデバイス142と、USBホストコントローラ143とが接続されると共に、その他のH/Wハードウェア144が接続される。ASIC120は、CPU121と、RAM122、HDD123およびPCIバス130との間の通信の調停を行う。HDD123は、各種データや、CPU121が動作するためのプログラムが予め格納される。CPU121は、HDD123に格納されるプログラムに従い、RAM122をワークメモリとして用いて、この画像形成装置100の全体の動作を制御する。これらCPU121、RAM122、HDD123、PCIバス130およびASIC120の機能が、図1に示した制御部10の機能に対応する。HDD123は、プログラムの動作に伴い生成される中間データをHDD123に一時的に格納してもよいし、後述する、PCIバス115を介して供給される画像データなどを格納することもできる。また、ユーザ操作に応じた操作部114からの制御信号が、ASIC120を介してCPU121に供給される。これにより、ユーザ操作に応じた複合機100の制御が可能となる。操作部114は、図1に示した入力I/F12および表示制御部13、ならびに、これらに接続される入力デバイス21およびディスプレイ22に対応する。図2に示したアプリケーション30、グラフィクスI/F31およびOS32は、CPU121上で動作するプログラムとして実現される。OS32に含まれるUSBスタック40は、CPU121上で動作するプログラムのモジュールとして実現される。また、USBスタック40のクラスドライバ群44に含まれる各クラスドライバやリスト45は、例えばHDD123に保持される。シリアルI/F140は、例えばRS-232Cといったシリアル通信のためのインターフェイスである。NIC141は、インターネットやLANに対する通信を制御する。USBデバイス142は、この画像形成装置100に内蔵され、固定的に用いられるUSB機器である。USBホストコントローラ143は、USBによるバスの管理を行い、外部機器としてのUSBデバイス102を接続することができる。USBホストコントローラ143は、図1に示すUSBホストコントローラ11に対応する。PCIバス115に対して、スキャナ装置111、プロッタ装置112およびFAX制御ユニット113が接続される。スキャナ装置111は、原稿画像を読みとって画像データとして出力する。出力された画像データは、PCIバス115およびASIC120を介してCPU121に供給され、HDD123に格納される。プロッタ装置112は、例えばHDD123から読み出された画像データがASIC120およびPCIバス115を介して供給され、この画像データに基づき用紙に対して印字処理を行う。FAX制御ユニット113は、例えば公衆電話回線と接続され、スキャナ装置111で読み取った原稿画像を、指定した送信先に送信する。なお、本第2の実施形態の複合機100でプログラムとして実行されるUSBスタック40は、HDD123などに予め記憶されて提供される。これに限らず、本第2の実施形態の複合機100で実行されるUSBスタック40は、インストール可能な形式または実行可能な形式のファイルでCD、フレキシブルディスクFD、DVDなどのコンピュータで読み取り可能な記録媒体に記録して提供するように構成してもよい。さらに、本第2の実施形態の複合機100で実行されるUSBスタック40を、インターネットなどのネットワークに接続されたコンピュータ上に格納し、ネットワーク経由でダウンロードさせることにより提供するように構成してもよい。また、本第2の実施形態の複合機100で実行されるUSBスタック40をインターネットなどのネットワーク経由で提供または配布するように構成してもよい。本第2の実施形態の複合機100で実行されるプログラムであるUSBスタック40は、上述した各部検知部41、判定部42およびドライバ割当部43を含むモジュール構成となっており、実際のハードウェアとしては、CPU121が例えばHDD123などからUSBスタック40を読み出して実行することにより、これら各部が主記憶装置例えばRAM122上にロードされ、検知部41、判定部42およびドライバ割当部43が主記憶装置上に生成されるようになっている。また、クラスドライバ群44は、各部の実行に伴い、必要に応じてHDD123から主記憶装置に読み込まれる。