次の方法で共有


コードとデータをページング可能にすべき場合

ドライバーの全部または一部をページング可能にすることができます。 ドライバー コードをページングすると、ドライバーのコード フットプリントのサイズが小さくなるため、システム領域を他の用途に解放することができます。 これは、モデムや CD-ROM などの散発的に使用されるデバイスのドライバーや、ほとんど呼び出されないドライバーの部分に最も実用的です。

次のいずれかを実行するドライバー コードは、メモリ常駐である必要があります。 つまり、このコードは、非ページ セクション内、またはコードの実行時にメモリ内でロックされているページングされたセクションのいずれかである必要があります。

  • IRQL = DISPATCH_LEVEL 以上で実行されます。

  • スピン ロックを取得します。

  • KeReleaseMutexKeReleaseSemaphoreなどのカーネルのオブジェクト サポート ルーチンのいずれかを呼び出し、 Wait パラメーターを TRUEに設定します。 WaitTRUEに設定してカーネルを呼び出した場合、IRQL は DISPATCH_LEVEL で返されます。

ドライバー コードがページ エラーの原因となる可能性のある処理が、コードによって行われる場合、IRQL < DISPATCH_LEVEL で実行されている必要があります。 コードが以下のような場合、コードによってページ エラーが発生する可能性があります。

  • メモリ内でロックされていないページ プールにアクセスします。

  • ページング可能なルーチンを呼び出します。

  • ユーザー スレッドのコンテキストでロック解除されたユーザー バッファーにアクセスします。

通常、ページング可能なすべてのコード (またはデータ) の合計量が 4 キロバイト (KB) 以上の場合は、セクションをページングする必要があります。 可能な限り、ページング可能なコード (またはデータ) は、ページング可能な場合もありますが、ロックしなければならにコード (またはデータ) とは別のセクションに分離する必要があります。 たとえば、単にページング可能なコードとロックされたオンデマンド コードを組み合わせると、結合されたセクションに対して必要以上に多くのシステム領域がロックダウンされます。 ただし、ドライバーにページング可能なコード (またはデータ) がの4 KB 未満の場合は、そのコード (またはデータ) とロックされたオンデマンド コード (またはデータ) を 1 つのセクションに組み合わせて、システム領域を節約できます。