cywsh 发表于 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 ,内核 就为该对象分配一个内存块,并对它初始化。这时,内核对进程的句柄表进行扫描,找出一个空项。内核便找空位置上的结构并对它进行初始化。该指针成员将被设置为内核对象的数据结构的内存地址,访问屏蔽设置为全部访问权,同时,各个标志也作了 设置
页: [1]
查看完整版本: 内核对象源码