ايران ويج

نسخه‌ی کامل: memory usage
شما در حال مشاهده‌ی نسخه‌ی متنی این صفحه می‌باشید. مشاهده‌ی نسخه‌ی کامل با قالب بندی مناسب.
سلام
من یه برنامه واسه چاپ memory usage نوشتم که کدش این شکلیه :

ولی 2 تا erorr میده نمیدونم چطور درستش کنم
لطفا کمکم کنید
کد:
#include <windows.h>
#include <string.h>
#include <winbase.h>

using namespace std;
#include <stdio.h>
#include <psapi.h>
#pragma comment(lib,"psapi.lib")
#include <time.h>

DWORD dwLength;
DWORD dwMemoryLoad;
ULONG_PTR dwTotalPhys;
ULONG_PTR dwAvailPhys;
ULONG_PTR dwTotalPageFile;
ULONG_PTR dwAvailPageFile;
ULONG_PTR dwTotalVirtual;
ULONG_PTR dwAvailVirtual;
int *m_pBuf;
MEMORY_RESOURCE_NOTIFICATION_TYPE Low;
MEMORY_RESOURCE_NOTIFICATION_TYPE High;
HANDLE LMHandle;
HANDLE HMHandle;
HANDLE THandle;
int ResourceState;
int x=0;
BOOL state=1;
char dateStr [9];
char timeStr [9];

BOOL SetPrivilege(
HANDLE hToken, // access token handle
LPCTSTR lpszPrivilege, // name of privilege to enable/disable
BOOL bEnablePrivilege // to enable or disable privilege
)
{
TOKEN_PRIVILEGES tp;
LUID luid;

if ( !LookupPrivilegeValue(
NULL, // lookup privilege on local system
lpszPrivilege, // privilege to lookup
&luid ) ) // receives LUID of privilege
{
printf("LookupPrivilegeValue error: %u\n", GetLastError() );
return FALSE;
}

tp.PrivilegeCount = 1;
tp.Privileges[0].Luid = luid;
if (bEnablePrivilege)
tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
else
tp.Privileges[0].Attributes = 0;

// Enable the privilege or disable all privileges.

if ( !AdjustTokenPrivileges(
hToken,
FALSE,
&tp,
sizeof(TOKEN_PRIVILEGES),
(PTOKEN_PRIVILEGES) NULL,
(PDWORD) NULL) )
{
printf("AdjustTokenPrivileges error: %u\n", GetLastError() );
return FALSE;
}

if (GetLastError() == ERROR_NOT_ALL_ASSIGNED)

{
printf("The token does not have the specified privilege. \n");
return FALSE;
}

return TRUE;
}

void processmemory()

{

FILE * pFile;
pFile = fopen ("MemoryStatus.txt","a");
DWORD PID[1024];
DWORD pBytesReturned=NULL;
BOOL S;
//PID= new DWORD(SIZEOF(pBytesReturned));

S= EnumProcesses(PID,sizeof(PID), &pBytesReturned);
BOOL x;
HANDLE TokenHandle;
TokenHandle=NULL;
fprintf(pFile,"Low Memory Notification received on %s %s ", dateStr,timeStr);
x= OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY,&TokenHandle);

if (x==0)
{

fprintf (pFile,"Unable To OpenProcessToken For current Process Error:%d",GetLastError());

}

if(SetPrivilege(TokenHandle, SE_DEBUG_NAME, TRUE))
{
fprintf (pFile,"Success");
}
else
{
fprintf (pFile,"FAILURE");
}

for(int i=0;i<=pBytesReturned/sizeof(DWORD);i++)
{
HANDLE H;
fprintf (pFile,"\nProcess:%d",PID[i]);

H= OpenProcess(PROCESS_QUERY_INFORMATION |PROCESS_VM_READ |PROCESS_ALL_ACCESS,TRUE,PID[i]);

if (H==0)
{
fprintf (pFile,"Unable To Get Process Name ");
fprintf (pFile,"Error:%d",GetLastError());
}
else

{
char Basename[MAX_PATH];

BOOL A=0;

A=GetModuleBaseName(H,NULL,(LPSTR) Basename,sizeof(Basename)/sizeof(TCHAR));
if (A==0)
{
fprintf (pFile,"Error:%d",GetLastError());
fprintf (pFile,"Unable To Get ModuleBaseName ");
}
else
{
fprintf (pFile,",Process Name:%s",Basename);
}

PROCESS_MEMORY_COUNTERS PMC;

GetProcessMemoryInfo(H, &PMC,sizeof(PMC));

fprintf (pFile,",PageFaultCount:%d",PMC.PageFaultCount);
fprintf (pFile,",PeakWorkingSetSize:%d",PMC.PeakWorkingSetSize);
fprintf (pFile,",WorkingSetSize:%d",PMC.WorkingSetSize);
fprintf (pFile,",QuotaPeakPagedPoolUsage:%d",PMC.QuotaPeakPagedPoolUsage);
fprintf (pFile,",QuotaPagedPoolUsage:%d",PMC.QuotaPagedPoolUsage);
fprintf (pFile,",QuotaPeakNonPagedPoolUsage:%d",PMC.QuotaPeakNonPagedPoolUsage);
fprintf (pFile,",QuotaNonPagedPoolUsage:%d",PMC.QuotaNonPagedPoolUsage);
fprintf (pFile,",PagefileUsage:%d",PMC.PagefileUsage);
fprintf (pFile,",PeakPagefileUsage:%d",PMC.PeakPagefileUsage);

}

}

PERFORMANCE_INFORMATION Perfinfo;
GetPerformanceInfo(&Perfinfo,sizeof(Perfinfo));
SIZE_T CommitTotal=Perfinfo.CommitTotal;

fprintf (pFile,"\n\n\nSYSTEM PERFORMANCE INFORMATION");
fprintf (pFile,"\nCommitTotal=%d",Perfinfo.CommitTotal);
fprintf (pFile,"\nCommitLimit=%d",Perfinfo.CommitLimit);
fprintf (pFile,"\nCommitPeak=%d",Perfinfo.CommitPeak);
fprintf (pFile,"\nPhysicalTotal=%d",Perfinfo.PhysicalTotal);
fprintf (pFile,"\nPhysicalAvailable=%d",Perfinfo.PhysicalAvailable);
fprintf (pFile,"\nSystemCache=%d",Perfinfo.SystemCache);
fprintf (pFile,"\nKernelTotal=%d",Perfinfo.KernelTotal);
fprintf (pFile,"\nKernelPaged=%d",Perfinfo.KernelPaged);
fprintf (pFile,"\nKernelNonpaged=%d",Perfinfo.KernelNonpaged);
fprintf (pFile,"\nPageSize=%d",Perfinfo.PageSize);
fprintf (pFile,"\nHandleCount=%d",Perfinfo.HandleCount);
fprintf (pFile,"\nProcessCount=%d",Perfinfo.ProcessCount);
fprintf (pFile,"\nThreadCount=%d",Perfinfo.ThreadCount);

OSVERSIONINFOEX OSINFO;

OSINFO.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);
GetVersionEx((LPOSVERSIONINFOA) &OSINFO);
fprintf (pFile,"\n\n\nWINDOWS VERSION INFO");
fprintf (pFile,"\ndwMajorVersion:%d",OSINFO.dwMajorVersion);
fprintf (pFile,"\ndwMinorVersion:%d",OSINFO.dwMinorVersion);
fprintf (pFile,"\ndwBuildNumber:%d",OSINFO.dwBuildNumber);
fprintf (pFile,"\ndwPlatformId:%d",OSINFO.dwPlatformId);
// fprintf (pFile,"\nszCSDVersion[128]:%s",OSINFO.szCSDVersion[128]);
fprintf (pFile,"\nwServicePackMajor:%d",OSINFO.wServicePackMajor);
fprintf (pFile,"\nwServicePackMinor:%d",OSINFO.wServicePackMinor);
fprintf (pFile,"\nwSuiteMask:%d",OSINFO.wSuiteMask);
fprintf (pFile,"\nwProductType:%d",OSINFO.wProductType);
fprintf (pFile,"\nwReserved:%d",OSINFO.wReserved);

fclose (pFile);

}

DWORD Lowmemorynotification()
{
LMHandle = CreateMemoryResourceNotification(Low);
HMHandle = CreateMemoryResourceNotification(High);
state=QueryMemoryResourceNotification(LMHandle, &ResourceState);
if (state==1)
{
printf("QueryMemoryResourceNotification Created for Low Memory pressure");
printf("\nYou will be signaled when there is low MemoryResourceNotification");
}
loop:

x=x+1;
WaitForSingleObject( LMHandle,INFINITE);
_strdate( dateStr);
_strtime( timeStr );
printf("%d",x);
printf("Low Memory Notification received on %s %s ", dateStr,timeStr);
processmemory();
printf(" Memory status is printed to Memorystatus.txt \n");
Sleep(3000);
goto loop;

return 1;
};

void main()

{
THandle=CreateThread( NULL, 8388608,(LPTHREAD_START_ROUTINE)Lowmemorynotification,NULL,0,NULL);

//8388608=>Stack size in bytes which is 1 mb
// Lowmemorynotification();

if (THandle==NULL)
{
printf("Create thread failed",GetLastError());
}

else
{
printf("\nSuccess");
WaitForSingleObject(THandle,INFINITE);
}

}

از اینجا هم میتونید کد رو ببینید
https://www.facebook.com/cproghome/posts...9247365478
کسی نیست؟