

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 内核对象区别于其他的是创建函数里含有
_SECURITY_ATTRIBUTES = record
nLength: DWORD;
lpSecurityDescriptor: Pointer;
bInheritHandle: BOOL;
end;
2 d