看流星社区

 找回密码
 注册账号
查看: 2526|回复: 0

[Delphi] 内核对象源码

[复制链接]

该用户从未签到

发表于 2013-5-2 09:23:14 | 显示全部楼层 |阅读模式
HFileMapp: THandle;
FileMapp: Pointer;

const
  MappName = 'FileMapp';

implementation

{$R *.dfm}
const
  CPCIDKeyFileName = 'PCIDKey.dat';
var
  FileHandle: THandle;
  FileName: string;
begin
  FileName := ExtractFilePath(ParamStr(0)) + CPCIDKeyFileName;
  CreateFile(PChar(FileName), GENERIC_READ or GENERIC_WRITE, FILE_SHARE_READ, nil,
      OPEN_ALWAYS, FILE_FLAG_SEQUENTIAL_SCAN, 0)
end;
-
procedure TForm1.Button1Click(Sender: TObject);
begin
  HFileMapp := CreateFileMapping($FFFFFFFF, nil, PAGE_READWRITE, 0, 1000, MappName);
  if HFileMapp <> 0 then
    FileMapp := MapViewOfFile(HFileMapp, FILE_MAP_ALL_ACCESS, 0, 0, 0);
  FlushViewOfFile(FileMapp , 0); //刷新
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  StrCopy(PChar(FileMapp), PChar(Edit1.Text));
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
   Edit2.Text := PChar(FileMapp);
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  CloseHandle(HFileMapp);
  UnmapViewOfFile(FileMapp);
end;



调用

:const
  MappName = 'FileMapp.dat';

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
  HFileMapp: THandle;
begin
  HFileMapp := OpenFileMapping(FILE_MAP_ALL_ACCESS, FALSE, MappName);
  if HFileMapp > 0 then
  begin
    Edit1.Text := PChar(MapViewOfFile(HFileMapp, FILE_MAP_ALL_ACCESS, 0, 0, 0));
  end;
end;


当进程初次被初始化时,它的句柄表是空的。然后,当进程中的线程调用创建内核对象的函数时,比如C r e a t e F i l e M a p p i n g ,内核 就为该对象分配一个内存块,并对它初始化。这时,内核对进程的句柄表进行扫描,找出一个空项。内核便找空位置上的结构并对它进行初始化。该指针成员将被设置为内核对象的数据结构的内存地址,访问屏蔽设置为全部访问权,同时,各个标志也作了 设置
点击按钮快速添加回复内容: 支持 高兴 激动 给力 加油 苦寻 生气 回帖 路过 感恩
您需要登录后才可以回帖 登录 | 注册账号

本版积分规则

小黑屋|手机版|Archiver|看流星社区 |网站地图

GMT+8, 2024-4-20 21:24

Powered by Kanliuxing X3.4

© 2010-2019 kanliuxing.com

快速回复 返回顶部 返回列表