|
|
 |
| Doc ID: |
21 |
| 製品: |
WinDriver & KernelDriver |
| Version: |
-- |
WinDriver/KernelDriver を使用して、カード上の"共有" としてのリソースの作成で重要はことは何ですか、そして、特定のリソースの "共有" ステータスをどのように確認できますか? |
リソースを独占的にロックするかしないかによって、"共有" ステータスが決まります。
メモリ、I/O または割り込みアイテムを共有と定義しない場合、WD_CardRegister() 関数への最初の呼び出しとその後に続く呼び出しで、独占的にリソースをロックします (WD_CardRegister() 関数は、同じアプリケーション内、または他の WinDriver/KernelDriver のアプリケーションのいずれかから同じリソースをロックしようとします)。しかし、WD_CardRegister() 関数への初めの呼び出しで受信されるハンドルを解放する WD_CardUnregister() 関数を呼ぶまでは、失敗します。
[レジスタを共有として定義できません]。
注意: 通常、PCI リソース (特に割り込みの場合) を共有可能と定義してください。
メモリおよび I/O の場合、WinDriver で定義された共有ステータスは、WinDriver/KernelDriver ベースのアプリケーションにのみ影響します。
ただし、割り込みの場合、他のデバイスが同じ割り込みをロックできるかどうか、割り込み共有ステータスも決めるので、より重要性があります。
リソースを共有可能として定義したかをチェックするには、次のいずれかの方法で確認できます:
- コードから、カード上のメモリ/IO/割り込みアイテムの fNotSharable フラグの値をプリントします (cardReg.Card.Item[i].fNotSharable)。その値が 0 (False) の場合、リソースを共有として定義しています (非共有 = TRUE)。
- DriverWizard を使用してコードを生成した場合、DriverWizard を起動して、*.wdp DriverWizard プロジェクト ファイルを開き、'Memory'、'I/O' または 'Interrupt' タブ (それぞれ) を選択し、'Edit' をクリックします。そして、そのリソースをこのデバイスの共有として定義してるかを確認するために、Resource Information ウィンドウで 'Shared' ボックスがチェックされているかどうかを確認してください。
アプリケーション コードのオリジナルの *.wdp プロジェクト ファイルを使用する際、およびそのコードが 'shared' ステータスを編集しない場合にのみ、このテストは適用されます (WinDriver を使用して *.wdp ファイルを変更すると、それに続く生成されるコードにのみ影響し、既存のアプリケーション コードには影響しません)。
一般的なガイドラインとして、同じリソースを 2 度ロックするのは避けてください。同じカードへのハンドルを受信する WD_CardRegister() 関数を再び呼ぶ前に、常に WD_CardUnregister() 関数の前で WD_CardRegister() 関数への呼び出しで取得したハンドルを、WD_CardUnregister() 関数を呼んで解放することを推奨します (同じアプリケーションまたは異なるアプリケーションのいずれかから)。複数のアプリケーションからリソースにアクセスする必要がある場合、WD_CardRegister() 関数への単一の呼び出しから受信したハンドルを共有できます。詳細は テクニカル ドキュメント #98 を参照してください。 |
|
|