⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 filemapping.pas.svn-base

📁 这是一段游戏修改工具的源代码.ring3功能由dephi开发,驱动是C开发.希望对大家有帮助
💻 SVN-BASE
字号:
unit FileMapping;
{
Wrapper class for filemapping
version 0.1: Only supports opening of exisiting files and no appending
version 0.2: copy on write, you can now write to it without actually messing up the file

}

interface

uses windows,classes,SysUtils;

type TFileMapping=class
  private
    FileHandle: THandle;
    FileMapping: THandle;
    FFileContent: pointer;
    FFileSize: Dword;
  public
    property fileContent: pointer read FFileContent;
    property filesize: dword read FFileSize;
    constructor create(filename: string);
    destructor destroy; override;
end;

implementation

destructor TFileMapping.destroy;
begin
  //clean up the mapping
  if FFileContent<>nil then
    UnmapViewOfFile(FFileContent);

  if FileMapping<>0 then
    CloseHandle(FileMapping);

  if FileHandle<>0 then
    CloseHandle(FileHandle);

  inherited destroy;
end;

constructor TFileMapping.create(filename: string);
begin
  inherited create;

  try
    //open file
    FileHandle := CreateFile(PChar(filename), GENERIC_READ or GENERIC_WRITE, FILE_SHARE_READ, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
    if FileHandle = INVALID_HANDLE_VALUE then raise exception.create(filename+' does not exist');

    FFileSize:=GetFileSize(FileHandle,nil);

    //still here, so create filemapping
    FileMapping := CreateFileMapping(FileHandle, nil, PAGE_WRITECOPY	, 0, 0, nil);
    if FileMapping = 0 then raise exception.create('Mapping failed');

    //map it completly
    FFileContent:= MapViewOfFile(FileMapping, FILE_MAP_COPY , 0, 0, 0);
    if FFileContent=nil then raise exception.Create('Failed creating a proper view');

  except
    on e: exception do
    begin
      if (FileMapping<>0) and (filemapping<>INVALID_HANDLE_VALUE) then
        CloseHandle(FileMapping);

      if (FileHandle<>0) and (FileHandle<>INVALID_HANDLE_VALUE) then
        CloseHandle(FileHandle);

      raise e;
    end;
  end;

end;

end.


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -