205 lines
4.0 KiB
C
205 lines
4.0 KiB
C
#ifndef _PH_FILESTREAM_H
|
|
#define _PH_FILESTREAM_H
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
// Core flags (PhCreateFileStream2)
|
|
/** Indicates that the file stream object should not close the file handle upon deletion. */
|
|
#define PH_FILE_STREAM_HANDLE_UNOWNED 0x1
|
|
/**
|
|
* Indicates that the file stream object should not buffer I/O operations. Note that this does not
|
|
* prevent the operating system from buffering I/O.
|
|
*/
|
|
#define PH_FILE_STREAM_UNBUFFERED 0x2
|
|
/**
|
|
* Indicates that the file handle supports asynchronous operations. The file handle must not have
|
|
* been opened with FILE_SYNCHRONOUS_IO_ALERT or FILE_SYNCHRONOUS_IO_NONALERT.
|
|
*/
|
|
#define PH_FILE_STREAM_ASYNCHRONOUS 0x4
|
|
/**
|
|
* Indicates that the file stream object should maintain the file position and not use the file
|
|
* object's own file position.
|
|
*/
|
|
#define PH_FILE_STREAM_OWN_POSITION 0x8
|
|
|
|
// Higher-level flags (PhCreateFileStream)
|
|
#define PH_FILE_STREAM_APPEND 0x00010000
|
|
|
|
// Internal flags
|
|
/** Indicates that at least one write has been issued to the file handle. */
|
|
#define PH_FILE_STREAM_WRITTEN 0x80000000
|
|
|
|
// Seek
|
|
typedef enum _PH_SEEK_ORIGIN
|
|
{
|
|
SeekStart,
|
|
SeekCurrent,
|
|
SeekEnd
|
|
} PH_SEEK_ORIGIN;
|
|
|
|
typedef struct _PH_FILE_STREAM
|
|
{
|
|
HANDLE FileHandle;
|
|
ULONG Flags;
|
|
LARGE_INTEGER Position; // file object position, *not* the actual position
|
|
|
|
PVOID Buffer;
|
|
ULONG BufferLength;
|
|
|
|
ULONG ReadPosition; // read position in buffer
|
|
ULONG ReadLength; // how much available to read from buffer
|
|
ULONG WritePosition; // write position in buffer
|
|
} PH_FILE_STREAM, *PPH_FILE_STREAM;
|
|
|
|
extern PPH_OBJECT_TYPE PhFileStreamType;
|
|
|
|
BOOLEAN
|
|
NTAPI
|
|
PhFileStreamInitialization(
|
|
VOID
|
|
);
|
|
|
|
PHLIBAPI
|
|
NTSTATUS
|
|
NTAPI
|
|
PhCreateFileStream(
|
|
_Out_ PPH_FILE_STREAM *FileStream,
|
|
_In_ PWSTR FileName,
|
|
_In_ ACCESS_MASK DesiredAccess,
|
|
_In_ ULONG ShareMode,
|
|
_In_ ULONG CreateDisposition,
|
|
_In_ ULONG Flags
|
|
);
|
|
|
|
PHLIBAPI
|
|
NTSTATUS
|
|
NTAPI
|
|
PhCreateFileStream2(
|
|
_Out_ PPH_FILE_STREAM *FileStream,
|
|
_In_ HANDLE FileHandle,
|
|
_In_ ULONG Flags,
|
|
_In_ ULONG BufferLength
|
|
);
|
|
|
|
PHLIBAPI
|
|
VOID
|
|
NTAPI
|
|
PhVerifyFileStream(
|
|
_In_ PPH_FILE_STREAM FileStream
|
|
);
|
|
|
|
PHLIBAPI
|
|
NTSTATUS
|
|
NTAPI
|
|
PhReadFileStream(
|
|
_Inout_ PPH_FILE_STREAM FileStream,
|
|
_Out_writes_bytes_(Length) PVOID Buffer,
|
|
_In_ ULONG Length,
|
|
_Out_opt_ PULONG ReadLength
|
|
);
|
|
|
|
PHLIBAPI
|
|
NTSTATUS
|
|
NTAPI
|
|
PhWriteFileStream(
|
|
_Inout_ PPH_FILE_STREAM FileStream,
|
|
_In_reads_bytes_(Length) PVOID Buffer,
|
|
_In_ ULONG Length
|
|
);
|
|
|
|
PHLIBAPI
|
|
NTSTATUS
|
|
NTAPI
|
|
PhFlushFileStream(
|
|
_Inout_ PPH_FILE_STREAM FileStream,
|
|
_In_ BOOLEAN Full
|
|
);
|
|
|
|
PHLIBAPI
|
|
VOID
|
|
NTAPI
|
|
PhGetPositionFileStream(
|
|
_In_ PPH_FILE_STREAM FileStream,
|
|
_Out_ PLARGE_INTEGER Position
|
|
);
|
|
|
|
PHLIBAPI
|
|
NTSTATUS
|
|
NTAPI
|
|
PhSeekFileStream(
|
|
_Inout_ PPH_FILE_STREAM FileStream,
|
|
_In_ PLARGE_INTEGER Offset,
|
|
_In_ PH_SEEK_ORIGIN Origin
|
|
);
|
|
|
|
PHLIBAPI
|
|
NTSTATUS
|
|
NTAPI
|
|
PhLockFileStream(
|
|
_Inout_ PPH_FILE_STREAM FileStream,
|
|
_In_ PLARGE_INTEGER Position,
|
|
_In_ PLARGE_INTEGER Length,
|
|
_In_ BOOLEAN Wait,
|
|
_In_ BOOLEAN Shared
|
|
);
|
|
|
|
PHLIBAPI
|
|
NTSTATUS
|
|
NTAPI
|
|
PhUnlockFileStream(
|
|
_Inout_ PPH_FILE_STREAM FileStream,
|
|
_In_ PLARGE_INTEGER Position,
|
|
_In_ PLARGE_INTEGER Length
|
|
);
|
|
|
|
PHLIBAPI
|
|
NTSTATUS
|
|
NTAPI
|
|
PhWriteStringAsUtf8FileStream(
|
|
_Inout_ PPH_FILE_STREAM FileStream,
|
|
_In_ PPH_STRINGREF String
|
|
);
|
|
|
|
PHLIBAPI
|
|
NTSTATUS
|
|
NTAPI
|
|
PhWriteStringAsUtf8FileStream2(
|
|
_Inout_ PPH_FILE_STREAM FileStream,
|
|
_In_ PWSTR String
|
|
);
|
|
|
|
PHLIBAPI
|
|
NTSTATUS
|
|
NTAPI
|
|
PhWriteStringAsUtf8FileStreamEx(
|
|
_Inout_ PPH_FILE_STREAM FileStream,
|
|
_In_ PWSTR Buffer,
|
|
_In_ SIZE_T Length
|
|
);
|
|
|
|
PHLIBAPI
|
|
NTSTATUS
|
|
NTAPI
|
|
PhWriteStringFormatAsUtf8FileStream_V(
|
|
_Inout_ PPH_FILE_STREAM FileStream,
|
|
_In_ _Printf_format_string_ PWSTR Format,
|
|
_In_ va_list ArgPtr
|
|
);
|
|
|
|
PHLIBAPI
|
|
NTSTATUS
|
|
NTAPI
|
|
PhWriteStringFormatAsUtf8FileStream(
|
|
_Inout_ PPH_FILE_STREAM FileStream,
|
|
_In_ _Printf_format_string_ PWSTR Format,
|
|
...
|
|
);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif
|