请求解决代码如下:
 hFile:=createfile(pchar('c:\winnt\system\tt.bin'),
                     GENERIC_READ or GENERIC_WRITE,
                     FILE_SHARE_READ,
                     nil,
                     OPEN_EXISTING,
                     FILE_FLAG_SEQUENTIAL_SCAN,
                     0);
    if hFile = INVALID_HANDLE_VALUE then Exit;
    FileSize:=GetFileSize(hFile, @HighSize);
    hMapping:=CreateFileMapping(hFile,
                                nil,
                                PAGE_READWRITE,
                                0,
                                0,
                                pchar('tt.bin'));
  if (hMapping = 0) then
  begin
    CloseHandle(hFile);
    Exit;
  end;
  {close the file handle, as we no longer need it}
  CloseHandle(hFile);
  Data := pbyte(MapViewOfFile(hMapping, FILE_MAP_WRITE, 0, 0, 0));

解决方案 »

  1.   

    CreateFileMapping 为什么没有分配内存空间?
      

  2.   

    CreateFileMapping 怎样分配内存空间呢?
      

  3.   

    pchar('tt.bin'))上面二个0就是申请的内存大小,一个高位,一个低位
      

  4.   

    hehe,我贴了一段检测文件是否是pe格式的代码,凑合吧。
    反正内存映射是这样了。var
      hFile , hMapping : Hwnd;
      pMapping : Pointer;
    begin
      hFile :=  CreateFile(PChar(Edit1.Text),GENERIC_READ,FILE_SHARE_READ,nil,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);
      if hFile <> INVALID_HANDLE_VALUE then begin
        hMapping := CreateFileMapping(hFile,nil,PAGE_READONLY,0,0,nil);
        if hMapping <> NULL then begin
          pMapping := MapViewOfFile(hMapping,FILE_MAP_READ,0,0,0);
          if IMAGE_DOS_HEADER(pMapping^).e_magic = IMAGE_DOS_SIGNATURE  then begin
            Inc(Longword(pMapping),IMAGE_DOS_HEADER(pMapping^)._lfanew);
            if IMAGE_NT_HEADERS(pMapping^).Signature = IMAGE_NT_SIGNATURE then
              Application.MessageBox('所选文件为 PE 格式!','提示信息',MB_ICONINFORMATION+MB_OK)
            else
              ShowMessage(format('%x',[IMAGE_NT_HEADERS(pMapping^).Signature])+'  '+format('%x',[IMAGE_NT_SIGNATURE]))
          end;
        end;
      end;
      CloseHandle(hFile);