私はWindowsドライバ開発の初心者です。私はちょうど知りたい、ドライバのグローバル変数は、ページプールメモリまたは非ページプールメモリを使用しますか?ページプールメモリまたは非ページプールメモリ?? (Windowsドライバ開発)
おかげで、よろしく
Navaneeth
私はWindowsドライバ開発の初心者です。私はちょうど知りたい、ドライバのグローバル変数は、ページプールメモリまたは非ページプールメモリを使用しますか?ページプールメモリまたは非ページプールメモリ?? (Windowsドライバ開発)
おかげで、よろしく
Navaneeth
依存します。非ページプールは、RAMにとどまらなければならないメモリ用に予約する必要があります。そのため、ディスク操作によるメモリページの影響を受ける重大な処理を行っている場合は、非ページングを使用します。
詳細はhereを参照してください。
this(ただしCとは異なり、C++について説明しています)を見ると、デフォルトではグローバルは#pragmaのいずれかに置かれるように見えます。また、p22のに、これを行う方法があります。最後にthis discussここでは、データセグメントはデフォルトでページング不可能でなければならないことがわかります。
カーネルモードドライバのグローバル変数は、NonPagedPoolから割り当てられます。
(IoCreateDeviceを呼び出すと)デバイス拡張を使用することもできます。デバイス拡張は、常にNonPagedメモリから割り当てられます。私はつまり、ページプールメモリまたは非ページプールメモリ、メモリが使用されるデバイスドライバでグローバル変数を宣言するかのように私はこれが役に立てば幸い
、 マーティン
これは当てはまりません。 Windowsのカーネルドライバは複数のセクションを持つPEファイルで、通常のユーザーモードプログラムとは異なり、KMドライバは通常、* 2つの*データセクションを持っています - 1つはページングされ、もう1つはページングされません(そして、 KMドライバが初期化されました)。あなたのコードでは、allocプラグマを使ってあなたの変数(あるいは実際には関数)をページングするのか、非ページ化するのかを選択できます。 – SecurityMatt
No.myの質問が気にいらないのですか?(ローカル変数は非ページプールメモリを使用します)。 – Navaneeth
それは依存しません。 ページングプールまたは非ページプールのいずれかになります。 – Navaneeth
#pragma data_seg( "PAGE")int foo; #pragma data_seg( "NONPAGE")int bar; - fooはページング可能で、barはページングされません。プラグマを指定しないと、デフォルトは非ページングになります。 – SecurityMatt