次の方法で共有


プロトコル ドライバーのページ可能で破棄可能なコード

ドライバー開発者は、可能な限りページ可能なコードを指定し、メモリ常駐の必要があるコードのシステム領域を解放する必要があります。 NDIS_PAGEABLE_FUNCTION マクロを使用して、関数をページ可能としてマークできます。 IRQL、リソース管理機能、および関数のその他の特性により、関数がページできない場合があります。

すべての ProtocolXxx 関数は、PASSIVE_LEVEL から DISPATCH_LEVEL までの範囲の IRQL で実行されます。 IRQL = PASSIVE_LEVEL でのみ実行される関数は、ページ可能としてマークする必要があります。

IRQL = PASSIVE_LEVEL で実行されるドライバー関数は、IRQL >= DISPATCH_LEVEL で実行される関数 (スピン ロックを取得する関数など) を呼び出したり呼び出されたりしない限り、ページ可能にすることができます。 スピン ロックを取得すると、取得スレッドの IRQL が DISPATCH_LEVEL に引き上げられます。 IRQL = PASSIVE_LEVEL で実行される ProtocolBindAdapterEx などのドライバー関数は、そのドライバー関数がページ可能なコードとしてマークされている場合、NdisXxx 関数 (IRQL >= DISPATCH_LEVEL で実行される) を呼び出してはなりません。 各 NdisXxx 関数の IRQL の詳細については、NDIS ライブラリ関数 を参照してください。

NDIS プロトコル ドライバーの DriverEntry 関数と、DriverEntry からのみ呼び出されるコードは、NDIS_INIT_FUNCTION マクロを使用して初期化専用コードとして指定する必要があります。 このマクロで識別されるコードは、システム初期化時に 1 回だけ実行されると見なされ、その結果、その間にのみマップされます。 初期化専用としてマークされた関数が返されると、その関数は破棄されます。