2017-10-17 1 views
-1

大量のデータをディスクに書き込むことができるUEFIアプリケーションを作成しています。 FAT-32のファイルサイズの制限とディレクトリあたりのファイル数などについてはわかっていますが、これは問題ではありません。私が書き込もうとしているメモリ領域は、メモリマップによって使用可能であるとマークされています。問題なく読み書きできますが、ある量のデータの後では、エラーメッセージなしでリブートします。 次の行は問題になります:EFI_FILE_HANDLE->約3.4GBを超える書き込みでクラッシュするGiB

uefi_call_wrapper(handle->Write, 3, handle, size, content); 

ハンドルが数行先に初期化され、サイズは常に最大128MiBおよびコンテンツの読み取り/書き込みアクセス権を持つ有効なメモリ領域です。 私は既にEDK2を使ってWindows上の薄い部分を書き直して同じ問題を抱えています。

誰もがこれを手伝ってくれますか? あらかじめありがとうございました。

+0

どのようなエラーが表示されますか? –

+0

私は何のエラーも出ません.VMはリブートし、実際にはちょうどハングして何も起こりません。 – AlexRoot

+0

'handle'のタイプは何ですか?書き込みは小さいサイズで呼び出すと機能しますか?それが失敗し始めるサイズは何ですか?再起動した後に再起動するのではなく、再起動する必要はありませんか? – prl

答えて

0

皆さん、ありがとうございます。 size引数はポインタです。私は問題の解決策を見つけました。ウォッチドッグタイマーをリセットする必要があるかどうかは分かりませんでした。 uefi_call_wrapper(ST->BootServices->SetWatchdogTimer, 4, 0, 0, 0, NULL);を呼び出した後、すべてが正常に動作します

乾杯!

1

handleがEFI_FILE_PROTOCOLへのポインタであると仮定すると、WriteのBufferSizeパラメータは参照渡しされます。関数が復帰すると、BufferSizeに書き込まれたバイト数が格納されます。あなたはあなたの質問に十分な文脈を与えていませんでしたが、あなたが価値によってそれを渡しているように見えます。

関連する問題