CreateFileMappingW x64 位调用方法

来源:互联网 发布:明星页游 知乎 编辑:程序博客网 时间:2024/06/03 04:09
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 解决。备注一下,以免以前再出错。方便有对样问题的朋友们。

原创粉丝点击