20 #define _SEH2_LEAVE goto __SEH2_FINALLY__label; 21 #define _SEH2_FINALLY __SEH2_FINALLY__label: 95 if (PathBuffer ==
NULL)
98 wcscpy(PathBuffer, PathName);
99 EndPtr = PathBuffer +
wcslen(PathName);
105 while (
Ptr < EndPtr && BackslashCount < 4)
119 DPRINT(
"PathBuffer: %S\n", PathBuffer);
122 DPRINT(
"Create: %S\n", PathBuffer);
136 DPRINT(
"Create: %S\n", PathBuffer);
144 if (PathBuffer !=
NULL)
196 DPRINT1(
"NtQueryInformationFile failed with Status 0x%08lx\n",
Status);
210 DPRINT1(
"NtSetInformationFile failed with Status 0x%08lx\n",
Status);
256 SIZE_T SourceSectionSize = 0;
309 DPRINT1(
"NtCreateSection failed: %x, %S\n",
Status, SourceFileName);
325 DPRINT1(
"NtMapViewOfSection failed: %x, %S\n",
Status, SourceFileName);
432 DPRINT1(
"NtWriteFile failed: %x:%x, iosb: %p src: %p, size: %x\n",
526 if (RenameInfo ==
NULL)
561 DPRINT1(
"Forcing copy, renaming not supported by FSD\n");
599 IN ULONG NumberOfPathComponents,
609 while (NumberOfPathComponents--)
615 cchPathLen =
min(cchPathSize,
wcslen(PathBuffer));
616 if (cchPathLen >= cchPathSize)
646 IN ULONG NumberOfPathComponents,
654 NumberOfPathComponents,
662 IN ULONG NumberOfPathComponents,
671 va_start(PathComponentsList, NumberOfPathComponents);
673 NumberOfPathComponents,
675 va_end(PathComponentsList);
684 IN ULONG NumberOfPathComponents,
695 va_start(PathComponentsList, NumberOfPathComponents);
697 NumberOfPathComponents,
699 va_end(PathComponentsList);
738 DPRINT(
"Failed to open %s '%wZ', Status 0x%08lx\n",
777 ULONG DiskNumber, PartNumber;
789 DPRINT1(
"'%S' : Not a possible hard disk device.\n", NtPath);
798 DPRINT1(
"'%S' : expected a number! Not a regular hard disk device.\n",
Path);
806 DPRINT1(
"'%S' : expected a path separator!\n",
Path);
812 DPRINT1(
"The path only specified a hard disk (and nothing else, like a partition...), so we stop there.\n");
821 DPRINT1(
"'%S' : unexpected format!\n", NtPath);
840 DPRINT1(
"'%S' : expected a path separator!\n",
Path);
845 *pPartNumber = PartNumber;
849 *pDiskNumber = DiskNumber;
885 *SectionHandle =
NULL;
911 DPRINT(
"NtQueryInformationFile() failed (Status %lx)\n",
Status);
917 if (
FileInfo.EndOfFile.HighPart != 0)
963 *SectionHandle =
NULL;
984 DPRINT1(
"UnMapFile: NtUnmapViewOfSection(0x%p) failed with Status 0x%08lx\n",
991 DPRINT1(
"UnMapFile: NtClose(0x%p) failed with Status 0x%08lx\n",
#define FILE_GENERIC_READ
IN PUNICODE_STRING IN POBJECT_ATTRIBUTES ObjectAttributes
#define FILE_SEQUENTIAL_ONLY
NTSTATUS NTAPI NtUnmapViewOfSection(IN HANDLE ProcessHandle, IN PVOID BaseAddress)
#define STATUS_INSUFFICIENT_RESOURCES
#define STATUS_NOT_SAME_DEVICE
NTSTATUS NTAPI NtCreateSection(OUT PHANDLE SectionHandle, IN ACCESS_MASK DesiredAccess, IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL, IN PLARGE_INTEGER MaximumSize OPTIONAL, IN ULONG SectionPageProtection OPTIONAL, IN ULONG AllocationAttributes, IN HANDLE FileHandle OPTIONAL)
#define OBJ_CASE_INSENSITIVE
#define MOVEFILE_REPLACE_EXISTING
BOOLEAN DoesPathExist(IN HANDLE RootDirectory OPTIONAL, IN PCWSTR PathName, IN BOOLEAN IsDirectory)
#define STATUS_INVALID_PARAMETER
BOOLEAN UnMapFile(IN HANDLE SectionHandle, IN PVOID BaseAddress)
#define FILE_DIRECTORY_FILE
BOOLEAN DoesFileExist_2(IN PCWSTR PathName OPTIONAL, IN PCWSTR FileName)
NTSTATUS SetupDeleteFile(IN PCWSTR FileName, IN BOOLEAN ForceDelete)
#define MOVEFILE_COPY_ALLOWED
_Must_inspect_result_ _In_ PFSRTL_PER_STREAM_CONTEXT Ptr
NTSYSAPI NTSTATUS NTAPI NtQueryInformationFile(IN HANDLE hFile, OUT PIO_STATUS_BLOCK pIoStatusBlock, OUT PVOID FileInformationBuffer, IN ULONG FileInformationBufferLength, IN FILE_INFORMATION_CLASS FileInfoClass)
BOOLEAN NTAPI RtlFreeHeap(IN PVOID HeapHandle, IN ULONG Flags, IN PVOID HeapBase)
NTSTATUS SetupCopyFile(IN PCWSTR SourceFileName, IN PCWSTR DestinationFileName, IN BOOLEAN FailIfExists)
_Check_return_ _CRTIMP int __cdecl _wcsnicmp(_In_reads_or_z_(_MaxCount) const wchar_t *_Str1, _In_reads_or_z_(_MaxCount) const wchar_t *_Str2, _In_ size_t _MaxCount)
static HANDLE DirectoryHandle
static OUT PIO_STATUS_BLOCK OUT PVOID FileInformation
IN PVOID IN PVOID IN USHORT IN USHORT Size
NTSTATUS ConcatPaths(IN OUT PWSTR PathBuffer, IN SIZE_T cchPathSize, IN ULONG NumberOfPathComponents, IN ...)
_Check_return_ unsigned long __cdecl wcstoul(_In_z_ const wchar_t *_Str, _Out_opt_ _Deref_post_z_ wchar_t **_EndPtr, _In_ int _Radix)
NTSTATUS CombinePathsV(OUT PWSTR PathBuffer, IN SIZE_T cchPathSize, IN ULONG NumberOfPathComponents, IN va_list PathComponentsList)
#define FILE_WRITE_ATTRIBUTES
_In_ ACCESS_MASK _In_opt_ POBJECT_ATTRIBUTES _In_opt_ PLARGE_INTEGER _In_ ULONG SectionPageProtection
return STATUS_NOT_IMPLEMENTED
#define FILE_NO_INTERMEDIATE_BUFFERING
NTSTATUS SetupMoveFile(IN PCWSTR ExistingFileName, IN PCWSTR NewFileName, IN ULONG Flags)
#define MOVEFILE_WRITE_THROUGH
#define OBJ_NAME_PATH_SEPARATOR
NTSTATUS SetupCreateDirectory(IN PCWSTR PathName)
NTSTATUS NTAPI NtMapViewOfSection(IN HANDLE SectionHandle, IN HANDLE ProcessHandle, IN OUT PVOID *BaseAddress, IN ULONG_PTR ZeroBits, IN SIZE_T CommitSize, IN OUT PLARGE_INTEGER SectionOffset OPTIONAL, IN OUT PSIZE_T ViewSize, IN SECTION_INHERIT InheritDisposition, IN ULONG AllocationType, IN ULONG Protect)
#define FILE_WRITE_THROUGH
#define FILE_OVERWRITE_IF
#define DoesFileExist(RootDirectory, FileName)
NTSTATUS ConcatPathsV(IN OUT PWSTR PathBuffer, IN SIZE_T cchPathSize, IN ULONG NumberOfPathComponents, IN va_list PathComponentsList)
#define SECTION_MAP_WRITE
#define NtCurrentProcess()
#define FILE_ATTRIBUTE_DIRECTORY
PVOID NTAPI RtlAllocateHeap(IN PVOID HeapHandle, IN ULONG Flags, IN SIZE_T Size)
NTSYSAPI NTSTATUS NTAPI NtOpenFile(OUT PHANDLE phFile, IN ACCESS_MASK DesiredAccess, IN POBJECT_ATTRIBUTES ObjectAttributes, OUT PIO_STATUS_BLOCK pIoStatusBlock, IN ULONG ShareMode, IN ULONG OpenMode)
BOOLEAN NtPathToDiskPartComponents(IN PCWSTR NtPath, OUT PULONG pDiskNumber, OUT PULONG pPartNumber, OUT PCWSTR *PathComponent OPTIONAL)
_In_ HANDLE _Outptr_result_bytebuffer_ ViewSize PVOID * BaseAddress
#define FILE_LIST_DIRECTORY
_Must_inspect_result_ _In_ ULONG Flags
NTSTATUS NTAPI NtCreateFile(OUT PHANDLE FileHandle, IN ACCESS_MASK DesiredAccess, IN POBJECT_ATTRIBUTES ObjectAttributes, OUT PIO_STATUS_BLOCK IoStatusBlock, IN PLARGE_INTEGER AllocationSize OPTIONAL, IN ULONG FileAttributes, IN ULONG ShareAccess, IN ULONG CreateDisposition, IN ULONG CreateOptions, IN PVOID EaBuffer OPTIONAL, IN ULONG EaLength)
#define NT_SUCCESS(StatCode)
NTSTRSAFEAPI RtlStringCchCatW(_Inout_updates_(cchDest) _Always_(_Post_z_) NTSTRSAFE_PWSTR pszDest, _In_ size_t cchDest, _In_ NTSTRSAFE_PCWSTR pszSrc)
NTSYSAPI VOID NTAPI RtlFreeUnicodeString(PUNICODE_STRING UnicodeString)
#define STATUS_ACCESS_DENIED
NTSTATUS NTAPI NtClose(IN HANDLE Handle)
struct _LARGE_INTEGER::@2249 u
#define FILE_READ_ATTRIBUTES
NTSYSAPI BOOLEAN NTAPI RtlCreateUnicodeString(PUNICODE_STRING DestinationString, PCWSTR SourceString)
#define DoesDirExist(RootDirectory, DirName)
#define FILE_ATTRIBUTE_NORMAL
_CRTIMP wchar_t *__cdecl wcscpy(_Out_writes_z_(_String_length_(_Source)+1) wchar_t *_Dest, _In_z_ const wchar_t *_Source)
#define FILE_SHARE_DELETE
_In_ PSCSI_REQUEST_BLOCK _Out_ NTSTATUS _Inout_ BOOLEAN * Retry
_Must_inspect_result_ _In_ PFLT_INSTANCE _Out_ PBOOLEAN IsDirectory
NTSYSAPI NTSTATUS NTAPI NtWriteFile(IN HANDLE hFile, IN HANDLE hEvent OPTIONAL, IN PIO_APC_ROUTINE IoApcRoutine OPTIONAL, IN PVOID IoApcContext OPTIONAL, OUT PIO_STATUS_BLOCK pIoStatusBlock, IN PVOID WriteBuffer, IN ULONG WriteBufferLength, IN PLARGE_INTEGER FileOffset OPTIONAL, IN PULONG LockOperationKey OPTIONAL)
#define FILE_NON_DIRECTORY_FILE
_Must_inspect_result_ _Out_ PLARGE_INTEGER FileSize
#define FILE_GENERIC_WRITE
struct _FileName FileName
PRTL_UNICODE_STRING_BUFFER Path
#define STATUS_BUFFER_OVERFLOW
__kernel_entry _Inout_ _Inout_ PSIZE_T RegionSize
static NTSTATUS SetupCreateSingleDirectory(IN PCWSTR DirectoryName)
#define FILE_OPEN_FOR_BACKUP_INTENT
static OUT PIO_STATUS_BLOCK IoStatusBlock
_CRTIMP size_t __cdecl wcslen(_In_z_ const wchar_t *_Str)
#define FileStandardInformation
#define FILE_SYNCHRONOUS_IO_NONALERT
_In_ HANDLE _Outptr_result_bytebuffer_ ViewSize PVOID _In_ ULONG_PTR _In_ SIZE_T _Inout_opt_ PLARGE_INTEGER _Inout_ PSIZE_T ViewSize
#define STANDARD_RIGHTS_REQUIRED
NTSYSAPI VOID NTAPI RtlInitUnicodeString(PUNICODE_STRING DestinationString, PCWSTR SourceString)
#define RtlZeroMemory(Destination, Length)
#define InitializeObjectAttributes(p, n, a, r, s)
#define RtlCopyMemory(Destination, Source, Length)
NTSTATUS OpenAndMapFile(IN HANDLE RootDirectory OPTIONAL, IN PCWSTR PathNameToFile, OUT PHANDLE FileHandle, OUT PHANDLE SectionHandle, OUT PVOID *BaseAddress, OUT PULONG FileSize OPTIONAL, IN BOOLEAN ReadWriteAccess)
NTSTATUS CombinePaths(OUT PWSTR PathBuffer, IN SIZE_T cchPathSize, IN ULONG NumberOfPathComponents, IN ...)
NTSYSAPI NTSTATUS NTAPI NtSetInformationFile(IN HANDLE hFile, OUT PIO_STATUS_BLOCK pIoStatusBlock, IN PVOID FileInformationBuffer, IN ULONG FileInformationBufferLength, IN FILE_INFORMATION_CLASS FileInfoClass)
IN PDCB IN PCCB IN VBO IN OUT PULONG OUT PDIRENT OUT PBCB OUT PVBO ByteOffset
PULONG MinorVersion OPTIONAL