I/O 操作のためのデバイスのプログラミング
I/O 操作のためにデバイスをプログラムする SynchCritSection ルーチンの設計、記述、呼び出しには、以下の一般的なガイドラインを適用します。
I/O 操作用にデバイスをプログラムする SynchCritSection ルーチンには、できるだけすみやかに制御を返すことが求められます。
そのため、 SynchCritSection ルーチンには、I/O のためにデバイスを設定するために必要な処理のみを実行することが求められます。 すなわち、ドライバーは、 SynchCritSection ルーチンを呼び出す前に、すべての IRP の前処理、他のドライバー ルーチンの状態情報の初期化、およびハードウェア リソースの取得を行う必要があります。
デバイス ドライバーには、デバイスをプログラムするための複数 の SynchCritSection ルーチンを盛り込むことができます。
たとえば、読み取り要求を設定するデバイスのドライバーは、特定のデバイス制御要求を設定するデバイスのドライバーとは著しく異なり、そのような場合はそれぞれに個別の SynchCritSection ルーチンを設けて、要求の種類ごとにデバイスをプログラムします。
SynchCritSection ルーチンを実行するとドライバーの ISR が実行できなくなるため、すべての SynchCritSection ルーチンにはできるだけすみやかに制御を返すことが求められ…ります。
どのような操作を実行するか、またはどのような状態情報を更新するかを決定するために SynchCritSection ルーチンを記述するうえで、 switch ステートメントや、入れ子になった if..then..else ステートメントを多数持つ、単一かつ大規模な、凡用のSynchCritSectionルーチンを記述しないでください。 一方で、1 つのデバイス レジスタのみをプログラムする SynchCritSection ルーチンも多数記述しないでください。