mirror of https://github.com/lianthony/NT4.0
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
121 lines
2.3 KiB
121 lines
2.3 KiB
/*++
|
|
|
|
Copyright (c) 1995 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
umfuncs.c
|
|
|
|
Abstract:
|
|
|
|
User mode library functions
|
|
|
|
[Environment:]
|
|
|
|
Win32 subsystem, PostScript driver, user mode
|
|
|
|
[Notes:]
|
|
|
|
Revision History:
|
|
|
|
06/15/95 -davidx-
|
|
Created it.
|
|
|
|
mm/dd/yy -author-
|
|
description
|
|
|
|
--*/
|
|
|
|
#include "pslib.h"
|
|
|
|
|
|
|
|
BOOL
|
|
MAPFILE(
|
|
PCWSTR pwstrFilename,
|
|
HANDLE *phModule,
|
|
PBYTE *ppData,
|
|
DWORD *pSize
|
|
)
|
|
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
Map a file into process memory space.
|
|
|
|
Arguments:
|
|
|
|
pwstrFilename pointer to Unicode filename
|
|
phModule pointer to a variable for return module handle
|
|
ppData pointer to a variable for returning mapped memory address
|
|
pSize pointer to a variable for returning file size
|
|
|
|
Return Value:
|
|
|
|
TRUE if the file was successfully mapped. FALSE otherwise.
|
|
|
|
[Note:]
|
|
|
|
Use FREEMODULE(hmodule) to unmap the file when you're done.
|
|
|
|
--*/
|
|
|
|
{
|
|
HANDLE hFile, hFileMap;
|
|
PVOID pv;
|
|
BOOL bResult;
|
|
|
|
// Open the file we are interested in mapping.
|
|
|
|
if ((hFile = CreateFileW(pwstrFilename, GENERIC_READ,
|
|
FILE_SHARE_READ, NULL, OPEN_EXISTING,
|
|
FILE_ATTRIBUTE_NORMAL, NULL)) == INVALID_HANDLE_VALUE)
|
|
{
|
|
DBGERRMSG("CreateFileW");
|
|
return FALSE;
|
|
}
|
|
|
|
// Try to obtain the file size if requested
|
|
|
|
if (pSize != NULL) {
|
|
|
|
*pSize = GetFileSize(hFile, NULL);
|
|
|
|
if (*pSize == 0xFFFFFFFF) {
|
|
|
|
DBGERRMSG("GetFileSize");
|
|
CloseHandle(hFile);
|
|
return FALSE;
|
|
}
|
|
}
|
|
|
|
// create the mapping object and
|
|
// get the pointer mapped to the desired file.
|
|
|
|
if ((hFileMap = CreateFileMappingW(
|
|
hFile, NULL, PAGE_READONLY, 0, 0, NULL)) != NULL &&
|
|
(pv = MapViewOfFile(hFileMap, FILE_MAP_READ, 0, 0, 0)) != NULL)
|
|
{
|
|
*phModule = (HANDLE) pv;
|
|
*ppData = (PBYTE) pv;
|
|
bResult = TRUE;
|
|
} else {
|
|
|
|
DBGERRMSG("CreateFileMappingW/MapViewOfFile");
|
|
bResult = FALSE;
|
|
}
|
|
|
|
// now that we have our pointer, we can close the file and the
|
|
// mapping object.
|
|
|
|
if (hFileMap && !CloseHandle(hFileMap)) {
|
|
DBGERRMSG("CloseHandle");
|
|
}
|
|
|
|
if (!CloseHandle(hFile)) {
|
|
DBGERRMSG("CloseHandle");
|
|
}
|
|
|
|
return bResult;
|
|
}
|