Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/taviso/loadlibrary.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorrichard <richard.withnell@bmce-networks.com>2018-01-16 03:25:41 +0300
committerrichard <richard.withnell@bmce-networks.com>2018-01-16 03:25:41 +0300
commit40cea3bbb47b608b55705b25f305267803082cc2 (patch)
tree5255c734b8c31c7d515c0c7873ad79cde553c63a
parentcb44e53dd32460c41bdeb3d20a88cfe871d477f6 (diff)
Add CreateFileA stub
-rw-r--r--peloader/winapi/Files.c43
1 files changed, 43 insertions, 0 deletions
diff --git a/peloader/winapi/Files.c b/peloader/winapi/Files.c
index 7182345..1b4c392 100644
--- a/peloader/winapi/Files.c
+++ b/peloader/winapi/Files.c
@@ -71,6 +71,48 @@ enum {
TRUNCATE_EXISTING = 5
};
+static HANDLE WINAPI CreateFileA(PCHAR lpFileName, DWORD dwDesiredAccess, DWORD dwShareMode, PVOID lpSecurityAttributes, DWORD dwCreationDisposition, DWORD dwFlagsAndAttributes, HANDLE hTemplateFile)
+{
+ FILE *FileHandle;
+
+ DebugLog("%p [%s], %#x, %#x, %p, %#x, %#x, %p", lpFileName, lpFileName, dwDesiredAccess, dwShareMode, lpSecurityAttributes, dwCreationDisposition, dwFlagsAndAttributes, hTemplateFile);
+
+ // Translate path seperator.
+ while (strchr(lpFileName, '\\'))
+ *strchr(lpFileName, '\\') = '/';
+
+ // I'm just going to tolower() everything.
+ for (char *t = lpFileName; *t; t++)
+ *t = tolower(*t);
+
+ switch (dwCreationDisposition) {
+ case OPEN_EXISTING:
+ FileHandle = fopen(lpFileName, "r");
+ break;
+ case CREATE_ALWAYS:
+ FileHandle = fopen("/dev/null", "w");
+ break;
+ // This is the disposition used by CreateTempFile().
+ case CREATE_NEW:
+ if (strstr(lpFileName, "/faketemp/")) {
+ FileHandle = fopen(lpFileName, "w");
+ // Unlink it immediately so it's cleaned up on exit.
+ unlink(lpFileName);
+ } else {
+ FileHandle = fopen("/dev/null", "w");
+ }
+ break;
+ default:
+ abort();
+ }
+
+ DebugLog("%s => %p", lpFileName, FileHandle);
+
+ SetLastError(ERROR_FILE_NOT_FOUND);
+ return FileHandle ? FileHandle : INVALID_HANDLE_VALUE;
+}
+
+
static HANDLE WINAPI CreateFileW(PWCHAR lpFileName, DWORD dwDesiredAccess, DWORD dwShareMode, PVOID lpSecurityAttributes, DWORD dwCreationDisposition, DWORD dwFlagsAndAttributes, HANDLE hTemplateFile)
{
FILE *FileHandle;
@@ -304,6 +346,7 @@ DECLARE_CRT_EXPORT("GetFileVersionInfoExW", GetFileVersionInfoExW);
DECLARE_CRT_EXPORT("GetFileVersionInfoSizeExW", GetFileVersionInfoSizeExW);
DECLARE_CRT_EXPORT("GetFileAttributesW", GetFileAttributesW);
DECLARE_CRT_EXPORT("GetFileAttributesExW", GetFileAttributesExW);
+DECLARE_CRT_EXPORT("CreateFileA", CreateFileA);
DECLARE_CRT_EXPORT("CreateFileW", CreateFileW);
DECLARE_CRT_EXPORT("SetFilePointer", SetFilePointer);
DECLARE_CRT_EXPORT("SetFilePointerEx", SetFilePointerEx);