if (Length == 0)
{
RtlReleaseRelativeName(&RelativeName);
- RtlFreeHeap(GetProcessHeap(), 0, NtPathU.Buffer);
+ RtlFreeHeap(RtlGetProcessHeap(), 0, NtPathU.Buffer);
SetLastError(ERROR_FILENAME_EXCED_RANGE);
return FALSE;
}
0);
RtlReleaseRelativeName(&RelativeName);
- RtlFreeHeap(GetProcessHeap(), 0, PathUBuffer);
+ RtlFreeHeap(RtlGetProcessHeap(), 0, PathUBuffer);
if (NT_SUCCESS(Status))
{
{
DWORD Length;
NTSTATUS Status;
- ULONG EaLength = 0;
PVOID EaBuffer = NULL;
BOOL ReparsePoint = FALSE;
IO_STATUS_BLOCK IoStatusBlock;
FILE_EA_INFORMATION FileEaInfo;
+ ULONG EaLength = 0, StreamSize;
OBJECT_ATTRIBUTES ObjectAttributes;
FILE_BASIC_INFORMATION FileBasicInfo;
PREPARSE_DATA_BUFFER ReparseDataBuffer;
HANDLE TemplateHandle, DirectoryHandle;
+ PFILE_STREAM_INFORMATION FileStreamInfo;
FILE_ATTRIBUTE_TAG_INFORMATION FileTagInfo;
UNICODE_STRING NtPathU, NtTemplatePathU, NewDirectory;
RTL_RELATIVE_NAME_U RelativeName, TemplateRelativeName;
if (Status != STATUS_INVALID_PARAMETER)
{
RtlReleaseRelativeName(&TemplateRelativeName);
- RtlFreeHeap(GetProcessHeap(), 0, TemplateBuffer);
+ RtlFreeHeap(RtlGetProcessHeap(), 0, TemplateBuffer);
BaseSetLastNTError(Status);
return FALSE;
}
if (!NT_SUCCESS(Status))
{
RtlReleaseRelativeName(&TemplateRelativeName);
- RtlFreeHeap(GetProcessHeap(), 0, TemplateBuffer);
+ RtlFreeHeap(RtlGetProcessHeap(), 0, TemplateBuffer);
BaseSetLastNTError(Status);
return FALSE;
}
if (!NT_SUCCESS(Status))
{
RtlReleaseRelativeName(&TemplateRelativeName);
- RtlFreeHeap(GetProcessHeap(), 0, TemplateBuffer);
+ RtlFreeHeap(RtlGetProcessHeap(), 0, TemplateBuffer);
CloseHandle(TemplateHandle);
BaseSetLastNTError(Status);
return FALSE;
if (!NT_SUCCESS(Status))
{
RtlReleaseRelativeName(&TemplateRelativeName);
- RtlFreeHeap(GetProcessHeap(), 0, TemplateBuffer);
+ RtlFreeHeap(RtlGetProcessHeap(), 0, TemplateBuffer);
CloseHandle(TemplateHandle);
BaseSetLastNTError(Status);
return FALSE;
if (!NT_SUCCESS(Status))
{
RtlReleaseRelativeName(&TemplateRelativeName);
- RtlFreeHeap(GetProcessHeap(), 0, TemplateBuffer);
+ RtlFreeHeap(RtlGetProcessHeap(), 0, TemplateBuffer);
CloseHandle(TemplateHandle);
BaseSetLastNTError(Status);
return FALSE;
if (!RtlDosPathNameToRelativeNtPathName_U(lpNewDirectory, &NtPathU, NULL, &RelativeName))
{
RtlReleaseRelativeName(&TemplateRelativeName);
- RtlFreeHeap(GetProcessHeap(), 0, TemplateBuffer);
+ RtlFreeHeap(RtlGetProcessHeap(), 0, TemplateBuffer);
NtClose(TemplateHandle);
SetLastError(ERROR_PATH_NOT_FOUND);
return FALSE;
{
RtlReleaseRelativeName(&RelativeName);
RtlReleaseRelativeName(&TemplateRelativeName);
- RtlFreeHeap(GetProcessHeap(), 0, TemplateBuffer);
- RtlFreeHeap(GetProcessHeap(), 0, PathUBuffer);
+ RtlFreeHeap(RtlGetProcessHeap(), 0, TemplateBuffer);
+ RtlFreeHeap(RtlGetProcessHeap(), 0, PathUBuffer);
NtClose(TemplateHandle);
SetLastError(ERROR_INVALID_NAME);
return FALSE;
}
RtlReleaseRelativeName(&TemplateRelativeName);
- RtlFreeHeap(GetProcessHeap(), 0, TemplateBuffer);
+ RtlFreeHeap(RtlGetProcessHeap(), 0, TemplateBuffer);
/* Check if path length is < MAX_PATH (with space for file name).
* If not, prefix is required.
if (Length == 0)
{
RtlReleaseRelativeName(&RelativeName);
- RtlFreeHeap(GetProcessHeap(), 0, PathUBuffer);
+ RtlFreeHeap(RtlGetProcessHeap(), 0, PathUBuffer);
CloseHandle(TemplateHandle);
SetLastError(ERROR_FILENAME_EXCED_RANGE);
return FALSE;
if (Length > MAX_PATH)
{
RtlReleaseRelativeName(&RelativeName);
- RtlFreeHeap(GetProcessHeap(), 0, PathUBuffer);
+ RtlFreeHeap(RtlGetProcessHeap(), 0, PathUBuffer);
CloseHandle(TemplateHandle);
SetLastError(ERROR_FILENAME_EXCED_RANGE);
return FALSE;
if (!NT_SUCCESS(Status))
{
RtlReleaseRelativeName(&RelativeName);
- RtlFreeHeap(GetProcessHeap(), 0, PathUBuffer);
+ RtlFreeHeap(RtlGetProcessHeap(), 0, PathUBuffer);
CloseHandle(TemplateHandle);
BaseSetLastNTError(Status);
return FALSE;
if (!EaBuffer)
{
RtlReleaseRelativeName(&RelativeName);
- RtlFreeHeap(GetProcessHeap(), 0, PathUBuffer);
+ RtlFreeHeap(RtlGetProcessHeap(), 0, PathUBuffer);
CloseHandle(TemplateHandle);
BaseSetLastNTError(STATUS_NO_MEMORY);
return FALSE;
TRUE);
if (!NT_SUCCESS(Status))
{
- RtlFreeHeap(GetProcessHeap(), 0, EaBuffer);
+ RtlFreeHeap(RtlGetProcessHeap(), 0, EaBuffer);
IoStatusBlock.Information = 0;
}
else
{
RtlReleaseRelativeName(&RelativeName);
- RtlFreeHeap(GetProcessHeap(), 0, PathUBuffer);
+ RtlFreeHeap(RtlGetProcessHeap(), 0, PathUBuffer);
if (EaBuffer)
{
- RtlFreeHeap(GetProcessHeap(), 0, EaBuffer);
+ RtlFreeHeap(RtlGetProcessHeap(), 0, EaBuffer);
}
CloseHandle(TemplateHandle);
BaseSetLastNTError(Status);
}
RtlReleaseRelativeName(&RelativeName);
- RtlFreeHeap(GetProcessHeap(), 0, PathUBuffer);
+ RtlFreeHeap(RtlGetProcessHeap(), 0, PathUBuffer);
if (EaBuffer)
{
RtlFreeHeap(RtlGetProcessHeap(), 0, EaBuffer);
/* In case it's not a reparse point, handle streams on the file */
else
{
- PVOID StreamInfo;
- ULONG StreamSize = 0x1000;
- for (;;)
+ for (StreamSize = 0x1000; ; StreamSize = StreamSize * 2)
{
- StreamInfo = RtlAllocateHeap(RtlGetProcessHeap(), 0, StreamSize);
- if (!StreamInfo)
+ FileStreamInfo = RtlAllocateHeap(RtlGetProcessHeap(), 0, StreamSize);
+ if (!FileStreamInfo)
{
BaseMarkFileForDelete(DirectoryHandle, FileBasicInfo.FileAttributes);
SetLastError(STATUS_NO_MEMORY);
/* Query stream information */
Status = NtQueryInformationFile(TemplateHandle,
&IoStatusBlock,
- StreamInfo,
+ FileStreamInfo,
StreamSize,
FileStreamInformation);
- if (!NT_SUCCESS(Status))
+ if (NT_SUCCESS(Status))
{
- RtlFreeHeap(RtlGetProcessHeap(), 0, StreamInfo);
- StreamInfo = NULL;
- StreamSize << 1;
+ break;
}
+ RtlFreeHeap(RtlGetProcessHeap(), 0, FileStreamInfo);
+ FileStreamInfo = NULL;
+
/* If it failed, ensure that's not because of too small buffer */
if (Status != STATUS_BUFFER_OVERFLOW &&
Status != STATUS_BUFFER_TOO_SMALL)
if (!NT_SUCCESS(Status) || IoStatusBlock.Information == 0)
{
- if (StreamInfo)
+ if (FileStreamInfo)
{
- RtlFreeHeap(RtlGetProcessHeap(), 0, StreamInfo);
+ RtlFreeHeap(RtlGetProcessHeap(), 0, FileStreamInfo);
}
NtClose(TemplateHandle);
#if 1
/* FIXME: TODO */
DPRINT1("Warning: streams copying is unimplemented!\n");
- RtlFreeHeap(RtlGetProcessHeap(), 0, StreamInfo);
+ RtlFreeHeap(RtlGetProcessHeap(), 0, FileStreamInfo);
NtClose(TemplateHandle);
NtClose(DirectoryHandle);
#endif
if (!NT_SUCCESS(Status))
{
- BaseSetLastNTError (Status);
+ BaseSetLastNTError(Status);
return FALSE;
}