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