type
PShared = ^TShared;
TShared = record
hGetMsgHook, hCallWndHook, hDeBugWndHook: THandle;
taskName1: array[0..32] of AnsiChar;
taskName2: array[0..32] of AnsiChar;
end;
try
hMappingFile := OpenFileMappingW(FILE_MAP_WRITE or FILE_MAP_READ, False, PWideChar(WideString(HookShareMemName)));
if hMappingFile <> 0 then
begin
DataShared := MapViewOfFile(hMappingFile, FILE_MAP_WRITE or FILE_MAP_READ, 0, 0, 0);
if DataShared <> nil then
begin
dwtaskName1 := AnsiString(LowerCase(trim(DataShared^.taskName1)));
dwtaskName2 := AnsiString(LowerCase(trim(DataShared^.taskName2)));
OutputDebugStringW(PWideChar(WideString(dwtaskName1)));
OutputDebugStringW(PWideChar(WideString(dwtaskName2)));
end;
end
else
begin
{$IFDEF win64}
try
hMappingFile := CreateFileMappingW($FFFFFFFFFFFFFFFF, nil, PAGE_READWRITE, 0, SizeOf(TShared) * 2, PWideChar(WideString(HookShareMemName)));
if hMappingFile > 0 then
begin
DataShared := MapViewOfFile(hMappingFile, FILE_MAP_WRITE or FILE_MAP_READ, 0, 0, 0);
end;
except
end;
{$ELSE}
try
hMappingFile := CreateFileMappingW($FFFFFFFF, nil, PAGE_READWRITE, 0, SizeOf(TShared) * 2, PWideChar(WideString(HookShareMemName)));
if hMappingFile > 0 then
begin
DataShared := MapViewOfFile(hMappingFile, FILE_MAP_WRITE or FILE_MAP_READ, 0, 0, 0);
end;
except
end;
{$ENDIF}
end;
except
end;
在一次写勾子的过程中,发现x64位 CreateFileMappingW 失败。后来找了很久才发现是内存地址问题,把 $FFFFFFFF - 》 $FFFFFFFFFFFFFFFF 解决。备注一下,以免以前再出错。方便有对样问题的朋友们。