電源管理に関するデバイス オブジェクト フラグの設定
AddDevice ルーチンで、各 ドライバーはデバイス オブジェクト (フィルタ デバイス オブジェクト (DO)、ファンクショナル デバイス オブジェクト (FDO)、またはフィジカル デバイス オブジェクト (PDO)) を作成し、デバイス オブジェクトに DO_XXX フラグを設定して、デバイス属性と ドライバー設定を記述します。 以下のデバイス オブジェクト フラグは、電源管理に関連します。
フラグ | 説明 |
---|---|
DO_POWER_INRUSH | デバイスが最初にオンになったときに、デバイスが引き込む電流が急増することを示します。 このサージまたは「突入」は短時間続き、その後デバイスが引き込む電流はより低い動作レベルに低下します。 |
DO_POWER_PAGABLE | ドライバーがページング可能であることを示します。 Windows 2000 以降、ページング可能な ドライバーは DO_POWER_PAGABLE フラグを設定する必要があります。 電源マネージャーは、IRQL = PASSIVE_LEVEL でそのようなドライバーを呼び出します。 ページング可能な ドライバーの詳細については、 ドライバーをページング可能にするを参照してください。 |
デバイス オブジェクト フラグは通常、バス ドライバーがデバイスのPDOを作成するときに設定されます。 しかし、ファンクション ドライバーによっては、 AddDevice ルーチンの一部として、これらのフラグの値を変更する必要がある場合があります。 Windows Vista 以降、オペレーティングシステムは、デバイススタック内のすべてのデバイスオブジェクトに同じ電源関連フラグが設定されていることを要求しません。 ただし、Windows Server 2003、Windows XP、および Windows 2000 では、デバイススタック内のすべてのデバイスオブジェクトに同じ電源関連フラグが設定されている必要があります。
Windows 2000 以降、ページングパスにあるデバイスの ドライバーは、DO_POWER_PAGABLE フラグを設定してはなりません。 ドライバーがページング ファイルの I/O 操作に参加している場合、ドライバーは 「ページングパス」 にあります。 このフラグを設定しないドライバーは、IRQL = DISPATCH_LEVELで呼び出し可能でなければなりません。 詳細は、 ディスパッチルーチンの制約を参照してください。
一般に、 ドライバーはDO_POWER_PAGABLEフラグに対するバス ドライバーの値を変更してはならず、下位 ドライバーがこのフラグをクリアした場合、 ドライバーは決してこのフラグを設定しないでください。 PnP paging requests ( IRP_MN_DEVICE_USAGE_NOTIFICATION 要求を伴う IRP_MJ_PNP に応答するのが一般的)を含む移行を処理する場合、ストレージ ドライバーは、フラグの設定とクリアを注意深くシーケンスする必要があります。
起動時に突入電源を必要とするデバイスの ドライバーは、DO_DEVICE_INITIALIZING フラグをクリアする前に、デバイス オブジェクトに DO_POWER_INRUSH フラグを設定しなければなりません。 デバイス スタック内の1つの ドライバー(通常はバス ドライバー(PDO))のみが、そのデバイスの DO_POWER_INRUSH フラグを設定する必要があります。 このフラグは、電源の過負荷を避けるために、そのようなデバイスは、他のそのようなデバイスと順番に、一度に1つずつパワーアップされなければならないことを電源マネージャーに通知します。 電源マネージャーは、電源突入 IRP がシステム内の任意の時点で 1 つだけアクティブであることを確認します。
Windows Vista 以降、 ドライバーは DO_POWER_PAGABLE フラグと DO_POWER_INRUSH フラグの両方を設定できます。 Windows Server 2003、Windows XP、Windows 2000では、 ドライバーはDO_POWER_PAGABLEフラグとDO_POWER_INRUSHフラグの両方を設定することはできません。