阅读:963回复:0
****大家来看看设置进程优先权和地址空间的程序***
大家看看下面的设置进程优先级和工作集大小的程序,想改变进程地址空间大小,请看看有什么问题没有。
#include"stdafx.h" #include <windows.h> #include <stdio.h> #include <malloc.h> #include <conio.h> #define RAID_DISK "d:\\ecdr1480.dat" #define X86_PAGE_LEG 0x1000 //1页4KB #define BufferNum 64 //MB #define BufferSize 128*2*4*1024 //1MB int main(int argc,char **argv) { HANDLE dsk320; OVERLAPPED gOverlapped; __int8 *pBuffer,*pBufferX; DWORD ByteSize,ByteReturned,FileSize; HANDLE hProcess; DWORD priority,MiniSize,MaxSize; // Create Event for overlapped structure gOverlapped.hEvent=CreateEvent(NULL,TRUE,FALSE,NULL); if(NULL==gOverlapped.hEvent) printf("Error: couldn't open an event\n"); dsk320=CreateFile(RAID_DISK, GENERIC_READ|GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, CREATE_ALWAYS, FILE_FLAG_NO_BUFFERING, NULL); //////////////////////////// hProcess=GetCurrentProcess(); priority=GetPriorityClass(hProcess); printf("\n Current process priority : %d\n",priority); //priority=REALTIME_PRIORITY_CLASS;//256 priority=HIGH_PRIORITY_CLASS;//128 if(SetPriorityClass(hProcess,priority)) { printf(" \nSet priority is successful!\n"); } else { printf(" Set priority is failure!\n"); } priority=GetPriorityClass(hProcess); printf(" Current process priority : %d\n",priority); if(GetProcessWorkingSetSize(hProcess,&MiniSize,&MaxSize)) { printf("\n The first get process workingSetSize:\n MiniSize:%f MB\n MaxSize:%f MB\n", (float)MiniSize/1024/1024,(float)MaxSize/1024/1024); } else { printf("Get process WorkingSetSize is failuer!\n"); } MiniSize=70*1024*1024; MaxSize=100*1024*1024; if(SetProcessWorkingSetSize(hProcess,MiniSize,MaxSize)) { printf("\n set process WorkingSetSize is successful!\n"); } else { printf("set process WorkingSetSize is failuer!\n"); } if(GetProcessWorkingSetSize(hProcess,&MiniSize,&MaxSize)) { printf("\n The second Get process workingSetSize:\n MiniSize:%f MB\n MaxSize:%f MB\n\n", (float)MiniSize/1024/1024,(float)MaxSize/1024/1024); } else { printf("Get process WorkingSetSize is failuer!\n\n"); } //////////////////////////////// pBufferX=(__int8*)VirtualAlloc(0,BufferSize*BufferNum+X86_PAGE_LEG,MEM_COMMIT,PAGE_READWRITE); ByteSize=BufferSize*BufferNum; pBuffer=(UCHAR*)pBufferX; WriteFile(dsk320,pBuffer,ByteSize,&ByteReturned,NULL); FileSize=GetFileSize(dsk320,NULL); printf(" \n FileSize is:%f MB\n",(float)FileSize/1024/1024); VirtualFree((void*)pBufferX,BufferSize*BufferNum+X86_PAGE_LEG,MEM_RELEASE); CloseHandle(gOverlapped.hEvent); CloseHandle(dsk320); printf("Finished ... OK !\n"); return 0; } 该程序可以运行。 运行的结果是不能对文件d:\\ecdr1480.dat进行写数据,我的本意是想通过修改进程的优先权,改变进程的工作集的大小,可是能够修改成功,但是当用WriteFile向文件写入数据的时候,如果缓存大小超过63MB,就不能向文件写入数据,在63MB下可以,请问为什么?有什么办法?修改工作集大小,是修改进程的地址空间吗? |
|