| 2 | #include "FilesAPI.h" |
| 3 | |
| 4 | FilesAPI::FilesAPI( |
| 5 | LPCWSTR FilePath, |
| 6 | CREATE_FILE_TYPE Type, |
| 7 | ACCESS_MASK AccessMask, |
| 8 | ULONG ShareAccess |
| 9 | ) : hFile(NULL) { |
| 10 | |
| 11 | UNICODE_STRING Path; |
| 12 | RtlInitUnicodeString(&Path, FilePath); |
| 13 | |
| 14 | OBJECT_ATTRIBUTES ObjectAttributes; |
| 15 | InitializeObjectAttributes( |
| 16 | &ObjectAttributes, |
| 17 | &Path, |
| 18 | OBJ_CASE_INSENSITIVE | OBJ_KERNEL_HANDLE, |
| 19 | NULL, |
| 20 | NULL |
| 21 | ); |
| 22 | |
| 23 | IO_STATUS_BLOCK IoStatusBlock = {}; |
| 24 | LARGE_INTEGER AllocationSize = {}; |
| 25 | |
| 26 | ULONG CreateDisposition = FILE_OVERWRITE; |
| 27 | switch (Type) { |
| 28 | case fCreateEmpty: |
| 29 | CreateDisposition = FILE_OVERWRITE_IF; |
| 30 | break; |
| 31 | case fOpenExisting: |
| 32 | CreateDisposition = FILE_OPEN; |
| 33 | break; |
| 34 | case fOpenOrCreate: |
| 35 | CreateDisposition = FILE_OPEN_IF; |
| 36 | break; |
| 37 | } |
| 38 | |
| 39 | CreationStatus = ZwCreateFile( |
| 40 | &hFile, |
| 41 | AccessMask, |
| 42 | &ObjectAttributes, |
| 43 | &IoStatusBlock, |
| 44 | &AllocationSize, |
| 45 | FILE_ATTRIBUTE_NORMAL, |
| 46 | ShareAccess, |
| 47 | CreateDisposition, |
| 48 | FILE_NON_DIRECTORY_FILE | FILE_SYNCHRONOUS_IO_NONALERT, |
| 49 | NULL, |
| 50 | 0 |
| 51 | ); |
| 52 | } |
| 53 | |
| 54 | NTSTATUS FilesAPI::Read(OUT PVOID Buffer, ULONG Size, OPTIONAL UINT64 Offset) const { |
| 55 | IO_STATUS_BLOCK IoStatusBlock = {}; |
nothing calls this directly
no outgoing calls
no test coverage detected