}
NTSTATUS STDCALL
-NtCreatePagingFile(IN PUNICODE_STRING FileNameUnsafe,
- IN PLARGE_INTEGER InitialSizeUnsafe,
- IN PLARGE_INTEGER MaximumSizeUnsafe,
+NtCreatePagingFile(IN PUNICODE_STRING FileName,
+ IN PLARGE_INTEGER InitialSize,
+ IN PLARGE_INTEGER MaximumSize,
IN ULONG Reserved)
{
NTSTATUS Status;
ULONG Count;
ULONG Size;
KPROCESSOR_MODE PreviousMode;
- UNICODE_STRING FileName;
- LARGE_INTEGER InitialSize, MaximumSize;
+ UNICODE_STRING CapturedFileName;
+ LARGE_INTEGER SafeInitialSize, SafeMaximumSize;
DPRINT("NtCreatePagingFile(FileName %wZ, InitialSize %I64d)\n",
FileName, InitialSize->QuadPart);
}
PreviousMode = ExGetPreviousMode();
- Status = RtlCaptureUnicodeString(&FileName,
+ Status = RtlCaptureUnicodeString(&CapturedFileName,
PreviousMode,
PagedPool,
FALSE,
- FileNameUnsafe);
+ FileName);
if (!NT_SUCCESS(Status))
{
return(Status);
{
_SEH_TRY
{
- ProbeForRead(InitialSizeUnsafe,
+ ProbeForRead(InitialSize,
sizeof(LARGE_INTEGER),
sizeof(ULONG));
- InitialSize = *InitialSizeUnsafe;
- ProbeForRead(MaximumSizeUnsafe,
+ SafeInitialSize = *InitialSize;
+ ProbeForRead(MaximumSize,
sizeof(LARGE_INTEGER),
sizeof(ULONG));
- MaximumSize = *MaximumSizeUnsafe;
+ SafeMaximumSize = *MaximumSize;
}
_SEH_HANDLE
{
}
else
{
- InitialSize = *InitialSizeUnsafe;
- MaximumSize = *MaximumSizeUnsafe;
+ SafeInitialSize = *InitialSize;
+ SafeMaximumSize = *MaximumSize;
}
InitializeObjectAttributes(&ObjectAttributes,
- &FileName,
+ &CapturedFileName,
0,
NULL,
NULL);
CreateFileTypeNone,
NULL,
SL_OPEN_PAGING_FILE);
- RtlReleaseCapturedUnicodeString(&FileName,
+ RtlReleaseCapturedUnicodeString(&CapturedFileName,
PreviousMode,
FALSE);
if (!NT_SUCCESS(Status))
Status = ZwSetInformationFile(FileHandle,
&IoStatus,
- &InitialSize,
+ &SafeInitialSize,
sizeof(LARGE_INTEGER),
FileAllocationInformation);
if (!NT_SUCCESS(Status))
Status = ObReferenceObjectByHandle(FileHandle,
FILE_ALL_ACCESS,
IoFileObjectType,
- UserMode,
+ PreviousMode,
(PVOID*)&FileObject,
NULL);
if (!NT_SUCCESS(Status))
#endif
ExtentCount = 0;
- MaxVcn = (ULONG)((InitialSize.QuadPart + BytesPerAllocationUnit - 1) / BytesPerAllocationUnit);
+ MaxVcn = (ULONG)((SafeInitialSize.QuadPart + BytesPerAllocationUnit - 1) / BytesPerAllocationUnit);
while(1)
{
Status = ZwFsControlFile(FileHandle,
RtlZeroMemory(PagingFile, sizeof(*PagingFile));
PagingFile->FileObject = FileObject;
- PagingFile->MaximumSize.QuadPart = MaximumSize.QuadPart;
- PagingFile->CurrentSize.QuadPart = InitialSize.QuadPart;
- PagingFile->FreePages = (ULONG)(InitialSize.QuadPart / PAGE_SIZE);
+ PagingFile->MaximumSize.QuadPart = SafeMaximumSize.QuadPart;
+ PagingFile->CurrentSize.QuadPart = SafeInitialSize.QuadPart;
+ PagingFile->FreePages = (ULONG)(SafeInitialSize.QuadPart / PAGE_SIZE);
PagingFile->UsedPages = 0;
KeInitializeSpinLock(&PagingFile->AllocMapLock);