forked from Dniel97/segatools
hooklib/path.c: add support for FindFirstFile{A,W}
This commit is contained in:
parent
e62957c4d5
commit
03c7954ada
@ -45,6 +45,14 @@ static HANDLE WINAPI hook_CreateFileW(
|
|||||||
uint32_t dwFlagsAndAttributes,
|
uint32_t dwFlagsAndAttributes,
|
||||||
HANDLE hTemplateFile);
|
HANDLE hTemplateFile);
|
||||||
|
|
||||||
|
static HANDLE WINAPI hook_FindFirstFileA(
|
||||||
|
const char *lpFileName,
|
||||||
|
LPWIN32_FIND_DATAA lpFindFileData);
|
||||||
|
|
||||||
|
static HANDLE WINAPI hook_FindFirstFileW(
|
||||||
|
const wchar_t *lpFileName,
|
||||||
|
LPWIN32_FIND_DATAW lpFindFileData);
|
||||||
|
|
||||||
static HANDLE WINAPI hook_FindFirstFileExA(
|
static HANDLE WINAPI hook_FindFirstFileExA(
|
||||||
const char *lpFileName,
|
const char *lpFileName,
|
||||||
FINDEX_INFO_LEVELS fInfoLevelId,
|
FINDEX_INFO_LEVELS fInfoLevelId,
|
||||||
@ -103,6 +111,14 @@ static HANDLE (WINAPI *next_CreateFileW)(
|
|||||||
uint32_t dwFlagsAndAttributes,
|
uint32_t dwFlagsAndAttributes,
|
||||||
HANDLE hTemplateFile);
|
HANDLE hTemplateFile);
|
||||||
|
|
||||||
|
static HANDLE (WINAPI *next_FindFirstFileA)(
|
||||||
|
const char *lpFileName,
|
||||||
|
LPWIN32_FIND_DATAA lpFindFileData);
|
||||||
|
|
||||||
|
static HANDLE (WINAPI *next_FindFirstFileW)(
|
||||||
|
const wchar_t *lpFileName,
|
||||||
|
LPWIN32_FIND_DATAW lpFindFileData);
|
||||||
|
|
||||||
static HANDLE (WINAPI *next_FindFirstFileExA)(
|
static HANDLE (WINAPI *next_FindFirstFileExA)(
|
||||||
const char *lpFileName,
|
const char *lpFileName,
|
||||||
FINDEX_INFO_LEVELS fInfoLevelId,
|
FINDEX_INFO_LEVELS fInfoLevelId,
|
||||||
@ -152,6 +168,14 @@ static const struct hook_symbol path_hook_syms[] = {
|
|||||||
.name = "CreateFileW",
|
.name = "CreateFileW",
|
||||||
.patch = hook_CreateFileW,
|
.patch = hook_CreateFileW,
|
||||||
.link = (void **) &next_CreateFileW,
|
.link = (void **) &next_CreateFileW,
|
||||||
|
}, {
|
||||||
|
.name = "FindFirstFileA",
|
||||||
|
.patch = hook_FindFirstFileA,
|
||||||
|
.link = (void **) &next_FindFirstFileA,
|
||||||
|
}, {
|
||||||
|
.name = "FindFirstFileW",
|
||||||
|
.patch = hook_FindFirstFileW,
|
||||||
|
.link = (void **) &next_FindFirstFileW,
|
||||||
}, {
|
}, {
|
||||||
.name = "FindFirstFileExA",
|
.name = "FindFirstFileExA",
|
||||||
.patch = hook_FindFirstFileExA,
|
.patch = hook_FindFirstFileExA,
|
||||||
@ -480,6 +504,48 @@ static HANDLE WINAPI hook_CreateFileW(
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static HANDLE WINAPI hook_FindFirstFileA(
|
||||||
|
const char *lpFileName,
|
||||||
|
LPWIN32_FIND_DATAA lpFindFileData)
|
||||||
|
{
|
||||||
|
char *trans;
|
||||||
|
HANDLE result;
|
||||||
|
BOOL ok;
|
||||||
|
|
||||||
|
ok = path_transform_a(&trans, lpFileName);
|
||||||
|
|
||||||
|
if (!ok) {
|
||||||
|
return INVALID_HANDLE_VALUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
result = next_FindFirstFileA(trans ? trans : lpFileName, lpFindFileData);
|
||||||
|
|
||||||
|
free(trans);
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
static HANDLE WINAPI hook_FindFirstFileW(
|
||||||
|
const wchar_t *lpFileName,
|
||||||
|
LPWIN32_FIND_DATAW lpFindFileData)
|
||||||
|
{
|
||||||
|
wchar_t *trans;
|
||||||
|
HANDLE result;
|
||||||
|
BOOL ok;
|
||||||
|
|
||||||
|
ok = path_transform_w(&trans, lpFileName);
|
||||||
|
|
||||||
|
if (!ok) {
|
||||||
|
return INVALID_HANDLE_VALUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
result = next_FindFirstFileW(trans ? trans : lpFileName, lpFindFileData);
|
||||||
|
|
||||||
|
free(trans);
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
static HANDLE WINAPI hook_FindFirstFileExA(
|
static HANDLE WINAPI hook_FindFirstFileExA(
|
||||||
const char *lpFileName,
|
const char *lpFileName,
|
||||||
FINDEX_INFO_LEVELS fInfoLevelId,
|
FINDEX_INFO_LEVELS fInfoLevelId,
|
||||||
|
Loading…
Reference in New Issue
Block a user