112 lines
2.7 KiB
C
112 lines
2.7 KiB
C
/*++
|
|
|
|
Copyright (c) 2001 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
pagefile.c
|
|
|
|
Abstract:
|
|
|
|
This module contains code to create a pagefile in the WinPE environment.
|
|
|
|
[WinPE]
|
|
PageFileSize = size - Creates a pagefile of the specified size named c:\pagefile.sys.
|
|
|
|
Author:
|
|
|
|
Adrian Cosma (acosma) 06/2001
|
|
|
|
Revision History:
|
|
|
|
--*/
|
|
|
|
|
|
//
|
|
// Include File(s):
|
|
//
|
|
|
|
#include "factoryp.h"
|
|
|
|
|
|
//
|
|
// Defined Value(s):
|
|
//
|
|
|
|
#define PAGEFILENAME _T("\\??\\C:\\pagefile.sys")
|
|
#define PAGEFILESIZE 64
|
|
|
|
|
|
//
|
|
// External Function(s):
|
|
//
|
|
|
|
BOOL DisplayCreatePageFile(LPSTATEDATA lpStateData)
|
|
{
|
|
MEMORYSTATUSEX mStatus;
|
|
static INT iRet = 0;
|
|
|
|
if ( 0 == iRet )
|
|
{
|
|
// Fill in required values
|
|
//
|
|
ZeroMemory(&mStatus, sizeof(mStatus));
|
|
mStatus.dwLength = sizeof(mStatus);
|
|
|
|
// If we are running on less than or 64MB machine OR if there is a PageFileSize=x entry in the
|
|
// winbom, set the static variable so we know whether this check has been done and if we need to
|
|
// create the pagefile.
|
|
//
|
|
// iRet = 0 - we haven't initialized this yet
|
|
// iRet = 1 - we don't need to create a pagefile
|
|
// iRet = 0 - we need to create a pagefile
|
|
//
|
|
if ( ( ( GlobalMemoryStatusEx(&mStatus) ) &&
|
|
( (mStatus.ullTotalPhys / (1024 * 1024)) <= 64) ) ||
|
|
( IniSettingExists(lpStateData->lpszWinBOMPath, INI_SEC_WBOM_WINPE, INI_KEY_WBOM_WINPE_PAGEFILE, NULL) ) )
|
|
{
|
|
iRet = 2;
|
|
}
|
|
else
|
|
{
|
|
iRet = 1;
|
|
}
|
|
}
|
|
|
|
return (iRet - 1);
|
|
}
|
|
|
|
BOOL CreatePageFile(LPSTATEDATA lpStateData)
|
|
{
|
|
NTSTATUS Status;
|
|
UNICODE_STRING UnicodeString;
|
|
LARGE_INTEGER liPageFileSize;
|
|
BOOL bRet = TRUE;
|
|
UINT uiPageFileSizeMB;
|
|
|
|
if ( DisplayCreatePageFile(lpStateData) )
|
|
{
|
|
uiPageFileSizeMB = GetPrivateProfileInt(INI_SEC_WBOM_WINPE, INI_KEY_WBOM_WINPE_PAGEFILE, PAGEFILESIZE, lpStateData->lpszWinBOMPath);
|
|
|
|
// If the user specified 0 means we don't want to create the file.
|
|
//
|
|
if ( uiPageFileSizeMB )
|
|
{
|
|
liPageFileSize.QuadPart = uiPageFileSizeMB * 1024 * 1024;
|
|
// Request the privilege to create a pagefile.
|
|
//
|
|
EnablePrivilege(SE_CREATE_PAGEFILE_NAME, TRUE);
|
|
|
|
RtlInitUnicodeString(&UnicodeString, PAGEFILENAME);
|
|
|
|
Status = NtCreatePagingFile(&UnicodeString, &liPageFileSize, &liPageFileSize, 0);
|
|
if ( !NT_SUCCESS(Status) )
|
|
{
|
|
bRet = FALSE;
|
|
FacLogFile(0 | LOG_ERR, IDS_ERR_PAGEFILE, Status);
|
|
}
|
|
}
|
|
}
|
|
|
|
return bRet;
|
|
} |