為什么我的VirtualQueryEx回傳總是0?向各位大佬求助。
以下是我的代碼(VirtualQueryEx函式在倒數第十行):
#include <iostream>
#include <windows.h>
#include <iomanip>
#include<WinBase.h>
using namespace std;
DWORD WINAPI alloction(LPVOID lpParam);
DWORD WINAPI track(LPVOID lpParam);
HANDLE h[2];
HANDLE x[2];
int main()
{
h[0] = CreateThread(NULL, 0, alloction, NULL, 0, NULL);
h[1] = CreateThread(NULL, 0, track, NULL, 0, NULL);
x[0] = CreateSemaphore(NULL, 1, 1, L"A");
x[1] = CreateSemaphore(NULL, 0, 1, L"B");
WaitForMultipleObjects(2, h, true, INFINITE);
CloseHandle(h[0]);
CloseHandle(h[1]);
system("pause");
return 0;
}
DWORD WINAPI alloction(LPVOID lpParam)
{
WaitForSingleObject(x[0], INFINITE);
VirtualAlloc(NULL,1024, MEM_RESERVE, PAGE_READWRITE);
ReleaseSemaphore(x[1], 1, 0);
return 0;
}
DWORD WINAPI track(LPVOID lpParam)
{
WaitForSingleObject(x[1], INFINITE);
MEMORYSTATUS lpBuffer;
SYSTEM_INFO systemInfo;
MEMORY_BASIC_INFORMATION a;
ZeroMemory(&a, sizeof(a));
GetSystemInfo(&systemInfo);
GlobalMemoryStatus(&lpBuffer);
;
cout << left << setw(20) << "dwActiveProcessorMask: " << systemInfo.dwActiveProcessorMask << endl
<< setw(20) << "dwAllocationGranularity: " << systemInfo.dwAllocationGranularity << endl
<< setw(20) << "dwNumberOfProcessors: " << systemInfo.dwNumberOfProcessors << endl
<< setw(20) << "dwOemId: " << systemInfo.dwOemId << endl
<< setw(20) << "dwPageSize : " << systemInfo.dwPageSize << endl
<< setw(20) << "dwProcessorType: " << systemInfo.dwProcessorType << endl
<< setw(20) << "lpMaximumApplicationAddress : " << systemInfo.lpMaximumApplicationAddress << endl
<< setw(20) << "lpMinimumApplicationAddress: " << systemInfo.lpMinimumApplicationAddress << endl
<< setw(20) << "wProcessorArchitecture: " << systemInfo.wProcessorArchitecture << endl
<< setw(20) << "wProcessorLevel: " << systemInfo.wProcessorLevel << endl
<< setw(20) << "wProcessorRevision: " << systemInfo.wProcessorRevision << endl
<< setw(20) << "wReserved: " << systemInfo.wReserved << endl << endl;
cout << "**************************************************************************************************************" << endl;
cout << left << setw(20) << "dwAvailPageFile: " << lpBuffer.dwAvailPageFile << endl
<< setw(20) << "dwAvailPhys: " << lpBuffer.dwAvailPhys << endl
<< setw(20) << "dwAvailVirtual: " << lpBuffer.dwAvailVirtual << endl
<< setw(20) << "dwLength" << lpBuffer.dwLength << endl
<< setw(20) << "dwMemoryLoad: " << lpBuffer.dwMemoryLoad << endl
<< setw(20) << "dwTotalPageFile: " << lpBuffer.dwTotalPageFile << endl
<< setw(20) << "dwTotalPhys: " << lpBuffer.dwTotalPhys << endl
<< setw(20) << "dwTotalVirtual: " << lpBuffer.dwTotalVirtual << endl << endl;
cout << "**************************************************************************************************************" << endl;
cout<<(VirtualQueryEx(h[0], (LPVOID)systemInfo.lpMinimumApplicationAddress, &a, sizeof(a)) == sizeof(a))<< endl;
cout << left << setw(20) << "AllocationBase:" << a.AllocationBase << endl
<< setw(20) << "AllocationProtect:" << a.AllocationProtect << endl
<< setw(20) << "BaseAddress :" << a.BaseAddress << endl
<< setw(20) << "Protect :" << a.Protect << endl
<< setw(20) << "RegionSize :" << a.RegionSize << endl
<< setw(20) << "State :" << a.State << endl
<< setw(20) << "Type :" << a.Type << endl << endl;
return 0;
}
uj5u.com熱心網友回復:
你用GetLastError查看一下什么錯誤碼uj5u.com熱心網友回復:
我剛試了下,它回傳值是6,表示意思是句柄無效,可是我這個h0是全域變數,為什么會句柄無效呢
uj5u.com熱心網友回復:
已解決,這個VirtualQuery的句柄是行程句柄,我創建的是執行緒,所以句柄無效,謝謝各位
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/63059.html
標籤:C++ 語言
上一篇:C語言期中作業 大佬進 急求
下一篇:商品訂購系統
