Setpagefile.exe源码
Setpagefile.exe的源码
怎么样建立系统服务,怎么样访问注册表,这些东西就不贴了。这些都是简单的东西。我只把创建页面文件的API函数调用贴出来。创建页面文件需要调用一个 API函数,即NtCreatePagingFile。Google一下,看你找不找得到这个函数的调用说明。答案当然是没有。好了,不卖关子了,贴出来,是Pascal语法。
代码
好啦,代码都贴出来了。是程序员的话,一看就知道是怎么回事了。我就不解释各参数是什么意思了,看变量名就知道是什么了。
注意一点就是,在调用NtCreatePagingFile之前,需要获得SeCreatePagefilePrivilege权限。
SetCreatePagefilePrivilege函数就是做这件事情的。自己去写吧,还有NtCreatePagingFile这个函数去哪里调用,自己动动脑吧。如果什么都是伸手即来,那写代码还会有什么乐趣?
怎么样建立系统服务,怎么样访问注册表,这些东西就不贴了。这些都是简单的东西。我只把创建页面文件的API函数调用贴出来。创建页面文件需要调用一个 API函数,即NtCreatePagingFile。Google一下,看你找不找得到这个函数的调用说明。答案当然是没有。好了,不卖关子了,贴出来,是Pascal语法。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
function TSetPageFileService.SetPageFile: Boolean;
var
PageFileName: UNICODE_STRING;
InitialSize,MaximumSize: ULARGE_INTEGER;
Device: array [0..1023] of Char;
PageFileFullName: array [0..1023] of WideChar;
begin
Result := False;
SetCreatePagefilePrivilege;
QueryDosDevice(PAnsiChar(FSetPageFileToDisk),Device,1024);
StringToWideChar(Device+'\pagefile.sys',PageFileFullName,1024);
PageFileName.Length := Length(Trim(PageFileFullName))*2;
PageFileName.MaximumLength := PageFileName.Length + 2;
PageFileName.Buffer := PageFileFullName;
InitialSize.QuadPart := FPageFileInitialSize*$100000;
MaximumSize.QuadPart := FPageFileMaximumSize*$100000;
Result := NtCreatePagingFile(@PageFileName,@InitialSize,@MaximumSize,0) = 0 ;
end;
var
PageFileName: UNICODE_STRING;
InitialSize,MaximumSize: ULARGE_INTEGER;
Device: array [0..1023] of Char;
PageFileFullName: array [0..1023] of WideChar;
begin
Result := False;
SetCreatePagefilePrivilege;
QueryDosDevice(PAnsiChar(FSetPageFileToDisk),Device,1024);
StringToWideChar(Device+'\pagefile.sys',PageFileFullName,1024);
PageFileName.Length := Length(Trim(PageFileFullName))*2;
PageFileName.MaximumLength := PageFileName.Length + 2;
PageFileName.Buffer := PageFileFullName;
InitialSize.QuadPart := FPageFileInitialSize*$100000;
MaximumSize.QuadPart := FPageFileMaximumSize*$100000;
Result := NtCreatePagingFile(@PageFileName,@InitialSize,@MaximumSize,0) = 0 ;
end;
好啦,代码都贴出来了。是程序员的话,一看就知道是怎么回事了。我就不解释各参数是什么意思了,看变量名就知道是什么了。
注意一点就是,在调用NtCreatePagingFile之前,需要获得SeCreatePagefilePrivilege权限。
SetCreatePagefilePrivilege函数就是做这件事情的。自己去写吧,还有NtCreatePagingFile这个函数去哪里调用,自己动动脑吧。如果什么都是伸手即来,那写代码还会有什么乐趣?