2017-03-06 3 views
0

Windows Server 2016でvirtualHBAドライバに関する問題が発生しました.AはHLKクラッシュダンプサポートテストを実行しました。 10回のうち3回試験に合格。これら3つのテストでは、完全ダンプ、またはカーネルダンプまたはミニダンプを取っている間、クラッシュダンプは0%でハングします。ExAllocatePoolWithTagへの呼び出しが返されない

カーネルでコードをデバッグすると、バッファ割り当てのためにExAllocatePoolWithTag()への呼び出しが実際には返されないことがわかりました。

以下は、が返信しない文です。です。

pDeviceExtension->pcmdbuf=(struct mycmdrsp *)ExAllocatePoolWithTag(NonPagedPoolCacheAligned,pcmdqSignalSize,((ULONG)'TA1')); 

私はこれに関するウェブを検索しました。しかし、見つかったすべてのページは、この関数に焦点を当てていますNULL私のケースでは決して戻ってきません。

今後の進め方に関するお手伝いをさせていただきますようお願い申し上げます。

ありがとうございます。

答えて

3

クラッシュダンプモードでメモリを割り当てることはできません。 HIGH_LEVELで割り込みを無効にしているので、間違ったIRQLでこのAPIを呼び出しています。

ハードウェアアダプタの典型的な解決策は、通常のHwFindAdapterコール中にPORT_CONFIGURATION_INFORMATION構造体にRequestedDumpBufferSizeを設定することです。クラッシュダンプモードで再び呼び出されると、CrashDumpRegionフィールドを使用してダンプバッファの割り当てを取得します。このメモリ領域からバッファを割り当てるには、独自の「クラッシュダンプモードのみ」のアロケータを作成する必要があります。

これは、最終的に必要とするメモリ量を知ることは難しい/不可能であることを考えると、大きな苦痛です。私は通常、最小限の構成オーバーヘッド(一度に1つのチャネル、8つのI/O要求など)を計算し、レジストリで設定可能なスラッシュを追加します。唯一の利点は、すべての歌、すべてのダンスの設定にする必要はありませんので、環境が削除されていることです。

+0

あなたが言っていることは、まったく同じ時点で失敗したはずのものよりも正しいことです。しかし、上記のように、クラッシュダンプテストは、Completeダンプを取っている間、または(Complete Dumpテストを正常に完了した後で)カーネルダンプを取っている間に、4/10回、それを通過します。 –

+1

私は推測していない。通話の前にIRQLをチェックし、文書を確認してください。あなたがやっていることの結果は、構造的には未定義ですが、時にはうまくいくという事実が正しいとは限りません。 – snoone

+0

私はIRQLをチェックしていると言いましたが、HIGH_LEVELになっています(!irql 1.他のすべてのプロセッサではLOW_LEVELを表示しています)。現在実行中のプロセッサがわかりません。また、あなたが参照している関連するMSDNドキュメントが見つかりませんでした。可能であれば、関連リンクを共有してください。なぜなら、私が見つけたリンクは、非常に高いレベルのクラッシュダンプドライバについて話していて、それを非常に詳細な内部ではないからです。 –

関連する問題