0

VMdriver5.exe というプログラム (添付した画像の左側) を実行しています。このプログラムは、VMmapper.exe という別のプログラムのプロセスを作成します。VMdriver5.c コード内で、その PID を (GetCurrentProcessId() を使用して) 取得し、作成時にその PID を VMmapper.exe に渡します。これにより、VMmapper は VMdriver5.exe のメモリ レイアウトを表示するため、仮想メモリ オプションを確認できます。

VirtualAlloc がメモリの空き領域で失敗する

特定のメモリ アドレスで VirtualAlloc() を呼び出すと正常に動作するため、何か助けが得られるかどうか疑問に思っていました。ただし、下の画像でわかるように、503,808 バイトの空きメモリ領域があり、 VirtualAlloc() を使用してその領域の 65,536 バイトを確保しようとしましたが、何らかの理由で失敗しました。パラメータの 1 つとしてメモリ アドレス 00185000 を渡します。

私が使用しているコードは次のとおりです。

lpvAddr = VirtualAlloc(vmAddress, units << 16, MEM_RESERVE, flProtect); // only works with PAGE_READONLY
            if(lpvAddr == NULL) {
               printf("Case 1: Reserve a region, VirtualAlloc() failed. Error: %ld\n", GetLastError());
            }
            else {
               printf("Committed %lu bytes at address 0x%lp\n",dwPageSize, lpvAddr); // %lu = long unsigned decimal integer
            }
            break;

助けていただければ幸いです。必要に応じて、さらにコードや情報を提供できます。みんなありがとう、ハッピーイースター。

4

0 に答える 0