mirror of
				https://github.com/winfsp/winfsp.git
				synced 2025-10-30 19:48:38 -05:00 
			
		
		
		
	tst: ntptfs: new passthrough file system
This commit is contained in:
		
							
								
								
									
										364
									
								
								tst/ntptfs/ptfs.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										364
									
								
								tst/ntptfs/ptfs.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,364 @@ | ||||
| /** | ||||
|  * @file ptfs.h | ||||
|  * | ||||
|  * @copyright 2015-2021 Bill Zissimopoulos | ||||
|  */ | ||||
| /* | ||||
|  * This file is part of WinFsp. | ||||
|  * | ||||
|  * You can redistribute it and/or modify it under the terms of the GNU | ||||
|  * General Public License version 3 as published by the Free Software | ||||
|  * Foundation. | ||||
|  * | ||||
|  * Licensees holding a valid commercial license may use this software | ||||
|  * in accordance with the commercial license agreement provided in | ||||
|  * conjunction with the software.  The terms and conditions of any such | ||||
|  * commercial license agreement shall govern, supersede, and render | ||||
|  * ineffective any application of the GPLv3 license to this software, | ||||
|  * notwithstanding of any reference thereto in the software or | ||||
|  * associated repository. | ||||
|  */ | ||||
|  | ||||
| #ifndef PTFS_H_INCLUDED | ||||
| #define PTFS_H_INCLUDED | ||||
|  | ||||
| #include <winfsp/winfsp.h> | ||||
| #include <strsafe.h> | ||||
|  | ||||
| #define PROGNAME                        "ptfs" | ||||
|  | ||||
| #define info(format, ...)               FspServiceLog(EVENTLOG_INFORMATION_TYPE, format, __VA_ARGS__) | ||||
| #define warn(format, ...)               FspServiceLog(EVENTLOG_WARNING_TYPE, format, __VA_ARGS__) | ||||
| #define fail(format, ...)               FspServiceLog(EVENTLOG_ERROR_TYPE, format, __VA_ARGS__) | ||||
|  | ||||
|  | ||||
| /* | ||||
|  * PTFS | ||||
|  */ | ||||
|  | ||||
| enum | ||||
| { | ||||
|     PtfsReparsePoints = 0x00000010, | ||||
|     PtfsNamedStreams = 0x00000040, | ||||
|     PtfsExtendedAttributes = 0x00000100, | ||||
|     PtfsFlushAndPurgeOnCleanup = 0x00004000, | ||||
|     PtfsAttributesMask = | ||||
|         PtfsReparsePoints | | ||||
|         PtfsNamedStreams | | ||||
|         PtfsExtendedAttributes | | ||||
|         PtfsFlushAndPurgeOnCleanup, | ||||
| }; | ||||
| typedef struct | ||||
| { | ||||
|     FSP_FILE_SYSTEM *FileSystem; | ||||
|     HANDLE RootHandle; | ||||
|     ULONG RootPrefixLength; | ||||
|     ULONG FsAttributes; | ||||
|     UINT64 AllocationUnit; | ||||
| } PTFS; | ||||
| NTSTATUS PtfsCreate( | ||||
|     PWSTR RootPath, | ||||
|     ULONG FileInfoTimeout, | ||||
|     ULONG FsAttributeMask, | ||||
|     PWSTR VolumePrefix, | ||||
|     PWSTR MountPoint, | ||||
|     UINT32 DebugFlags, | ||||
|     PTFS **PPtfs); | ||||
| VOID PtfsDelete(PTFS *Ptfs); | ||||
|  | ||||
|  | ||||
| /* | ||||
|  * Lower file system | ||||
|  */ | ||||
|  | ||||
| NTSTATUS LfsCreateFile( | ||||
|     PHANDLE PHandle, | ||||
|     ACCESS_MASK DesiredAccess, | ||||
|     HANDLE RootHandle, | ||||
|     PWSTR FileName, | ||||
|     PSECURITY_DESCRIPTOR SecurityDescriptor, | ||||
|     PLARGE_INTEGER AllocationSize, | ||||
|     ULONG FileAttributes, | ||||
|     ULONG CreateDisposition, | ||||
|     ULONG CreateOptions, | ||||
|     PVOID EaBuffer, | ||||
|     ULONG EaLength); | ||||
| NTSTATUS LfsOpenFile( | ||||
|     PHANDLE PHandle, | ||||
|     ACCESS_MASK DesiredAccess, | ||||
|     HANDLE RootHandle, | ||||
|     PWSTR FileName, | ||||
|     ULONG OpenOptions); | ||||
| NTSTATUS LfsGetFileInfo( | ||||
|     HANDLE Handle, | ||||
|     ULONG RootPrefixLength, | ||||
|     FSP_FSCTL_FILE_INFO *FileInfo); | ||||
| NTSTATUS LfsReadFile( | ||||
|     HANDLE Handle, | ||||
|     PVOID Buffer, | ||||
|     UINT64 Offset, | ||||
|     ULONG Length, | ||||
|     PULONG PBytesTransferred); | ||||
| NTSTATUS LfsWriteFile( | ||||
|     HANDLE Handle, | ||||
|     PVOID Buffer, | ||||
|     UINT64 Offset, | ||||
|     ULONG Length, | ||||
|     PULONG PBytesTransferred); | ||||
| NTSTATUS LfsQueryDirectoryFile( | ||||
|     HANDLE Handle, | ||||
|     PVOID Buffer, | ||||
|     ULONG Length, | ||||
|     FILE_INFORMATION_CLASS FileInformationClass, | ||||
|     BOOLEAN ReturnSingleEntry, | ||||
|     PWSTR FileName, | ||||
|     BOOLEAN RestartScan, | ||||
|     PULONG PBytesTransferred); | ||||
| NTSTATUS LfsFsControlFile( | ||||
|     HANDLE Handle, | ||||
|     ULONG FsControlCode, | ||||
|     PVOID InputBuffer, | ||||
|     ULONG InputBufferLength, | ||||
|     PVOID OutputBuffer, | ||||
|     ULONG OutputBufferLength, | ||||
|     PULONG PBytesTransferred); | ||||
|  | ||||
|  | ||||
| /* | ||||
|  * Missing NTDLL definitions | ||||
|  */ | ||||
|  | ||||
| typedef struct | ||||
| { | ||||
|     ACCESS_MASK AccessFlags; | ||||
| } FILE_ACCESS_INFORMATION; | ||||
| typedef struct | ||||
| { | ||||
|     ULONG AlignmentRequirement; | ||||
| } FILE_ALIGNMENT_INFORMATION; | ||||
| typedef struct | ||||
| { | ||||
|     LARGE_INTEGER AllocationSize; | ||||
| } FILE_ALLOCATION_INFORMATION; | ||||
| typedef struct | ||||
| { | ||||
|     ULONG FileAttributes; | ||||
|     ULONG ReparseTag; | ||||
| } FILE_ATTRIBUTE_TAG_INFORMATION; | ||||
| typedef struct | ||||
| { | ||||
|     LARGE_INTEGER CreationTime; | ||||
|     LARGE_INTEGER LastAccessTime; | ||||
|     LARGE_INTEGER LastWriteTime; | ||||
|     LARGE_INTEGER ChangeTime; | ||||
|     ULONG FileAttributes; | ||||
| } FILE_BASIC_INFORMATION; | ||||
| typedef struct | ||||
| { | ||||
|     BOOLEAN DeleteFile; | ||||
| } FILE_DISPOSITION_INFORMATION; | ||||
| typedef struct | ||||
| { | ||||
|     ULONG Flags; | ||||
| } FILE_DISPOSITION_INFORMATION_EX; | ||||
| typedef struct | ||||
| { | ||||
|     ULONG EaSize; | ||||
| } FILE_EA_INFORMATION; | ||||
| typedef struct | ||||
| { | ||||
|     LARGE_INTEGER EndOfFile; | ||||
| } FILE_END_OF_FILE_INFORMATION; | ||||
| typedef struct | ||||
| { | ||||
|     LARGE_INTEGER IndexNumber; | ||||
| } FILE_INTERNAL_INFORMATION; | ||||
| typedef struct | ||||
| { | ||||
|     ULONG Mode; | ||||
| } FILE_MODE_INFORMATION; | ||||
| typedef struct | ||||
| { | ||||
|     ULONG FileNameLength; | ||||
|     WCHAR FileName[1]; | ||||
| } FILE_NAME_INFORMATION; | ||||
| typedef struct | ||||
| { | ||||
|     LARGE_INTEGER CurrentByteOffset; | ||||
| } FILE_POSITION_INFORMATION; | ||||
| typedef struct | ||||
| { | ||||
|     union | ||||
|     { | ||||
|         BOOLEAN ReplaceIfExists; | ||||
|         ULONG Flags; | ||||
|     } DUMMYUNIONNAME; | ||||
|     HANDLE RootDirectory; | ||||
|     ULONG FileNameLength; | ||||
|     WCHAR FileName[1]; | ||||
| } FILE_RENAME_INFORMATION; | ||||
| typedef struct | ||||
| { | ||||
|     LARGE_INTEGER AllocationSize; | ||||
|     LARGE_INTEGER EndOfFile; | ||||
|     ULONG NumberOfLinks; | ||||
|     BOOLEAN DeletePending; | ||||
|     BOOLEAN Directory; | ||||
| } FILE_STANDARD_INFORMATION; | ||||
| typedef struct | ||||
| { | ||||
|     ULONG NextEntryOffset; | ||||
|     ULONG StreamNameLength; | ||||
|     LARGE_INTEGER StreamSize; | ||||
|     LARGE_INTEGER StreamAllocationSize; | ||||
|     WCHAR StreamName[1]; | ||||
| } FILE_STREAM_INFORMATION; | ||||
| typedef struct | ||||
| { | ||||
|     FILE_BASIC_INFORMATION BasicInformation; | ||||
|     FILE_STANDARD_INFORMATION StandardInformation; | ||||
|     FILE_INTERNAL_INFORMATION InternalInformation; | ||||
|     FILE_EA_INFORMATION EaInformation; | ||||
|     FILE_ACCESS_INFORMATION AccessInformation; | ||||
|     FILE_POSITION_INFORMATION PositionInformation; | ||||
|     FILE_MODE_INFORMATION ModeInformation; | ||||
|     FILE_ALIGNMENT_INFORMATION AlignmentInformation; | ||||
|     FILE_NAME_INFORMATION NameInformation; | ||||
| } FILE_ALL_INFORMATION; | ||||
|  | ||||
| typedef struct | ||||
| { | ||||
|     ULONG NextEntryOffset; | ||||
|     ULONG FileIndex; | ||||
|     LARGE_INTEGER CreationTime; | ||||
|     LARGE_INTEGER LastAccessTime; | ||||
|     LARGE_INTEGER LastWriteTime; | ||||
|     LARGE_INTEGER ChangeTime; | ||||
|     LARGE_INTEGER EndOfFile; | ||||
|     LARGE_INTEGER AllocationSize; | ||||
|     ULONG FileAttributes; | ||||
|     ULONG FileNameLength; | ||||
|     ULONG EaSize; | ||||
|     CCHAR ShortNameLength; | ||||
|     WCHAR ShortName[12]; | ||||
|     LARGE_INTEGER FileId; | ||||
|     WCHAR FileName[1]; | ||||
| } FILE_ID_BOTH_DIR_INFORMATION; | ||||
|  | ||||
| typedef struct | ||||
| { | ||||
|     ULONG FileSystemAttributes; | ||||
|     LONG MaximumComponentNameLength; | ||||
|     ULONG FileSystemNameLength; | ||||
|     WCHAR FileSystemName[1]; | ||||
| } FILE_FS_ATTRIBUTE_INFORMATION; | ||||
| typedef struct | ||||
| { | ||||
|     LARGE_INTEGER TotalAllocationUnits; | ||||
|     LARGE_INTEGER AvailableAllocationUnits; | ||||
|     ULONG SectorsPerAllocationUnit; | ||||
|     ULONG BytesPerSector; | ||||
| } FILE_FS_SIZE_INFORMATION; | ||||
|  | ||||
| NTSTATUS NTAPI NtFlushBuffersFile( | ||||
|     HANDLE FileHandle, | ||||
|     PIO_STATUS_BLOCK IoStatusBlock); | ||||
|  | ||||
| NTSTATUS NTAPI NtFsControlFile( | ||||
|     HANDLE FileHandle, | ||||
|     HANDLE Event, | ||||
|     PIO_APC_ROUTINE ApcRoutine, | ||||
|     PVOID ApcContext, | ||||
|     PIO_STATUS_BLOCK IoStatusBlock, | ||||
|     ULONG FsControlCode, | ||||
|     PVOID InputBuffer, | ||||
|     ULONG InputBufferLength, | ||||
|     PVOID OutputBuffer, | ||||
|     ULONG OutputBufferLength); | ||||
|  | ||||
| NTSTATUS NTAPI NtQueryEaFile( | ||||
|     HANDLE FileHandle, | ||||
|     PIO_STATUS_BLOCK IoStatusBlock, | ||||
|     PVOID Buffer, | ||||
|     ULONG Length, | ||||
|     BOOLEAN ReturnSingleEntry, | ||||
|     PVOID EaList, | ||||
|     ULONG EaListLength, | ||||
|     PULONG EaIndex, | ||||
|     BOOLEAN RestartScan); | ||||
|  | ||||
| NTSTATUS NTAPI NtQueryDirectoryFile( | ||||
|     HANDLE FileHandle, | ||||
|     HANDLE Event, | ||||
|     PIO_APC_ROUTINE ApcRoutine, | ||||
|     PVOID ApcContext, | ||||
|     PIO_STATUS_BLOCK IoStatusBlock, | ||||
|     PVOID FileInformation, | ||||
|     ULONG Length, | ||||
|     FILE_INFORMATION_CLASS FileInformationClass, | ||||
|     BOOLEAN ReturnSingleEntry, | ||||
|     PUNICODE_STRING FileName, | ||||
|     BOOLEAN RestartScan); | ||||
|  | ||||
| NTSTATUS NTAPI NtQueryInformationFile( | ||||
|     HANDLE FileHandle, | ||||
|     PIO_STATUS_BLOCK IoStatusBlock, | ||||
|     PVOID FileInformation, | ||||
|     ULONG Length, | ||||
|     FILE_INFORMATION_CLASS FileInformationClass); | ||||
|  | ||||
| NTSTATUS NTAPI NtQuerySecurityObject( | ||||
|     HANDLE Handle, | ||||
|     SECURITY_INFORMATION SecurityInformation, | ||||
|     PSECURITY_DESCRIPTOR SecurityDescriptor, | ||||
|     ULONG Length, | ||||
|     PULONG LengthNeeded); | ||||
|  | ||||
| NTSTATUS NTAPI NtQueryVolumeInformationFile( | ||||
|     HANDLE FileHandle, | ||||
|     PIO_STATUS_BLOCK IoStatusBlock, | ||||
|     PVOID FsInformation, | ||||
|     ULONG Length, | ||||
|     ULONG FsInformationClass); | ||||
|  | ||||
| NTSTATUS NTAPI NtReadFile( | ||||
|     HANDLE FileHandle, | ||||
|     HANDLE Event, | ||||
|     PIO_APC_ROUTINE ApcRoutine, | ||||
|     PVOID ApcContext, | ||||
|     PIO_STATUS_BLOCK IoStatusBlock, | ||||
|     PVOID Buffer, | ||||
|     ULONG Length, | ||||
|     PLARGE_INTEGER ByteOffset, | ||||
|     PULONG Key); | ||||
|  | ||||
| NTSTATUS NTAPI NtSetEaFile( | ||||
|     HANDLE FileHandle, | ||||
|     PIO_STATUS_BLOCK IoStatusBlock, | ||||
|     PVOID Buffer, | ||||
|     ULONG Length); | ||||
|  | ||||
| NTSTATUS NTAPI NtSetInformationFile( | ||||
|     HANDLE FileHandle, | ||||
|     PIO_STATUS_BLOCK IoStatusBlock, | ||||
|     PVOID FileInformation, | ||||
|     ULONG Length, | ||||
|     FILE_INFORMATION_CLASS FileInformationClass); | ||||
|  | ||||
| NTSTATUS NTAPI NtSetSecurityObject( | ||||
|     HANDLE Handle, | ||||
|     SECURITY_INFORMATION SecurityInformation, | ||||
|     PSECURITY_DESCRIPTOR SecurityDescriptor); | ||||
|  | ||||
| NTSTATUS NTAPI NtWriteFile( | ||||
|     HANDLE FileHandle, | ||||
|     HANDLE Event, | ||||
|     PIO_APC_ROUTINE ApcRoutine, | ||||
|     PVOID ApcContext, | ||||
|     PIO_STATUS_BLOCK IoStatusBlock, | ||||
|     PVOID Buffer, | ||||
|     ULONG Length, | ||||
|     PLARGE_INTEGER ByteOffset, | ||||
|     PULONG Key); | ||||
|  | ||||
| #endif | ||||
		Reference in New Issue
	
	Block a user