امتیاز موضوع:
  • 0 رأی - میانگین امتیازات: 0
  • 1
  • 2
  • 3
  • 4
  • 5
memory usage
نویسنده پیام
breakfast آفلاین
تازه وارد

ارسال‌ها: 5
موضوع‌ها: 3
تاریخ عضویت: آبان ۱۳۸۹

تشکرها : 1
( 1 تشکر در 1 ارسال )
ارسال: #1
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
(آخرین ویرایش در این ارسال: ۱۵-خرداد-۱۳۹۱, ۰۸:۵۶:۵۲، توسط lord_viper.)
۱۴-خرداد-۱۳۹۱, ۲۲:۰۹:۰۵
ارسال‌ها
پاسخ
breakfast آفلاین
تازه وارد

ارسال‌ها: 5
موضوع‌ها: 3
تاریخ عضویت: آبان ۱۳۸۹

تشکرها : 1
( 1 تشکر در 1 ارسال )
ارسال: #2
RE: memory usage
کسی نیست؟
۱۵-خرداد-۱۳۹۱, ۱۶:۲۹:۵۰
ارسال‌ها
پاسخ


پرش به انجمن:


کاربرانِ درحال بازدید از این موضوع: 1 مهمان

صفحه‌ی تماس | IranVig | بازگشت به بالا | | بایگانی | پیوند سایتی RSS