Example #1
0
mmio_file_t *
mmio_file_read(const char *filename)
{
    HANDLE ffm, fd;
    WCHAR *wfilename;
    void *rv;
    int len;

    len = mbstowcs(NULL, filename, 0) + 1;
    wfilename = malloc(len * sizeof(WCHAR));
    mbstowcs(wfilename, filename, len);

    if ((ffm =
         CreateFileForMappingW(wfilename, GENERIC_READ, FILE_SHARE_READ,
                               NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL,
                               NULL)) == INVALID_HANDLE_VALUE) {
        E_ERROR("Failed to create mapping for the file '%s': %08x\n", filename,
                GetLastError());
        return NULL;
    }
    if ((fd =
         CreateFileMappingW(ffm, NULL, PAGE_READONLY, 0, 0, NULL)) == NULL) {
        E_ERROR("Failed to CreateFileMapping: %08x\n", GetLastError());
        CloseHandle(ffm);
        return NULL;
    }
    rv = MapViewOfFile(fd, FILE_MAP_READ, 0, 0, 0);
    free(wfilename);
    CloseHandle(ffm);
    CloseHandle(fd);

    return (mmio_file_t *) rv;
}
Example #2
0
HANDLE XCEAPI
XCECreateFileForMappingW(
    LPCWSTR wfname,
    DWORD dwDesiredAccess,
    DWORD dwShareMode,
    LPSECURITY_ATTRIBUTES lpSecurityAttributes,
    DWORD dwCreationDisposition,
    DWORD dwFlagsAndAttributes,
    HANDLE hTemplateFile
    )
{
  HANDLE hFile;
  wchar_t wpath[MAX_PATH];
  wchar_t *p;
  DWORD dwError = 0;

  XCEFixPathW(wfname, wpath);

  SetLastError(0);

  hFile = CreateFileForMappingW(wpath, dwDesiredAccess, dwShareMode,
		      lpSecurityAttributes, dwCreationDisposition,
		      dwFlagsAndAttributes, hTemplateFile);

  if(hFile == INVALID_HANDLE_VALUE)
    {
      dwError = GetLastError();

      XCEShowMessageA("CreateFileForMapping: %d", dwError);

      errno = _winerror2errno(dwError);
    }

  return hFile;
}
static HANDLE open_exe_file (LPCWSTR name, struct binary_info *binary_info)
{
  HANDLE handle;
  
  handle = CreateFileForMappingW( name, GENERIC_READ, FILE_SHARE_READ,
				  NULL, OPEN_EXISTING, 0, 0 );
  if (handle != INVALID_HANDLE_VALUE)
    MODULE_get_binary_info( handle, binary_info );
  
  return handle;
}