File redirection improved for NESiCA
This commit is contained in:
parent
d7a478a6ab
commit
c8f2d34d36
@ -662,8 +662,49 @@ BOOL __stdcall CloseHandleWrap(HANDLE hObject)
|
|||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static char moveBuf[256];
|
||||||
|
LPCSTR ParseFileNamesA(LPCSTR lpFileName)
|
||||||
|
{
|
||||||
|
if (!strncmp(lpFileName, "D:", 2) || !strncmp(lpFileName, "d:", 2))
|
||||||
|
{
|
||||||
|
memset(moveBuf, 0, 256);
|
||||||
|
if(lpFileName[2] == '\\' || lpFileName[2] == '/')
|
||||||
|
{
|
||||||
|
sprintf(moveBuf, ".\\OpenParrot\\%s", lpFileName + 3);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// Magical Beat has d: WTF?
|
||||||
|
sprintf(moveBuf, ".\\OpenParrot\\%s", lpFileName + 2);
|
||||||
|
}
|
||||||
|
return moveBuf;
|
||||||
|
}
|
||||||
|
|
||||||
|
return lpFileName;
|
||||||
|
}
|
||||||
|
|
||||||
|
wchar_t moveBufW[256];
|
||||||
|
LPCWSTR ParseFileNamesW(LPCWSTR lpFileName)
|
||||||
|
{
|
||||||
|
if (!wcsncmp(lpFileName, L"D:", 2) || !wcsncmp(lpFileName, L"d:", 2))
|
||||||
|
{
|
||||||
|
memset(moveBuf, 0, 256);
|
||||||
|
if (lpFileName[2] == '\\' || lpFileName[2] == '/')
|
||||||
|
{
|
||||||
|
swprintf(moveBufW, L".\\OpenParrot\\%ls", lpFileName + 3);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// Magical Beat has d: WTF?
|
||||||
|
swprintf(moveBufW, L".\\OpenParrot\\%ls", lpFileName + 2);
|
||||||
|
}
|
||||||
|
return moveBufW;
|
||||||
|
}
|
||||||
|
|
||||||
|
return lpFileName;
|
||||||
|
}
|
||||||
|
|
||||||
DWORD priority = 0;
|
DWORD priority = 0;
|
||||||
char moveBuf[256];
|
|
||||||
HANDLE(__stdcall *g_origCreateFileA)(LPCSTR lpFileName,
|
HANDLE(__stdcall *g_origCreateFileA)(LPCSTR lpFileName,
|
||||||
DWORD dwDesiredAccess,
|
DWORD dwDesiredAccess,
|
||||||
DWORD dwShareMode,
|
DWORD dwShareMode,
|
||||||
@ -688,11 +729,7 @@ HANDLE __stdcall CreateFileAWrap(LPCSTR lpFileName,
|
|||||||
return hConnection;
|
return hConnection;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!strncmp(lpFileName, "D:\\", 3) || !strncmp(lpFileName, "D:/", 3) || !strncmp(lpFileName, "d:/", 3), !strncmp(lpFileName, "d:\\", 3))
|
return g_origCreateFileA(ParseFileNamesA(lpFileName),
|
||||||
{
|
|
||||||
memset(moveBuf, 0, 256);
|
|
||||||
sprintf(moveBuf, ".\\OpenParrot\\%s", lpFileName + 3);
|
|
||||||
return g_origCreateFileA(moveBuf,
|
|
||||||
dwDesiredAccess,
|
dwDesiredAccess,
|
||||||
dwShareMode,
|
dwShareMode,
|
||||||
lpSecurityAttributes,
|
lpSecurityAttributes,
|
||||||
@ -701,17 +738,6 @@ HANDLE __stdcall CreateFileAWrap(LPCSTR lpFileName,
|
|||||||
hTemplateFile);
|
hTemplateFile);
|
||||||
}
|
}
|
||||||
|
|
||||||
return g_origCreateFileA(lpFileName,
|
|
||||||
dwDesiredAccess,
|
|
||||||
dwShareMode,
|
|
||||||
lpSecurityAttributes,
|
|
||||||
dwCreationDisposition,
|
|
||||||
dwFlagsAndAttributes,
|
|
||||||
hTemplateFile);
|
|
||||||
}
|
|
||||||
|
|
||||||
wchar_t moveBufW[256];
|
|
||||||
|
|
||||||
HANDLE(__stdcall *g_origCreateFileW)(LPCWSTR lpFileName,
|
HANDLE(__stdcall *g_origCreateFileW)(LPCWSTR lpFileName,
|
||||||
DWORD dwDesiredAccess,
|
DWORD dwDesiredAccess,
|
||||||
DWORD dwShareMode,
|
DWORD dwShareMode,
|
||||||
@ -736,20 +762,7 @@ HANDLE __stdcall CreateFileWWrap(LPCWSTR lpFileName,
|
|||||||
return hConnection;
|
return hConnection;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!wcsncmp(lpFileName, L"D:\\", 3) || !wcsncmp(lpFileName, L"D:/", 3) || !wcsncmp(lpFileName, L"d:/", 3), !wcsncmp(lpFileName, L"d:\\", 3))
|
return g_origCreateFileW(ParseFileNamesW(lpFileName),
|
||||||
{
|
|
||||||
memset(moveBufW, 0, 256);
|
|
||||||
swprintf(moveBufW, L".\\OpenParrot\\%ls", lpFileName + 3);
|
|
||||||
return g_origCreateFileW(moveBufW,
|
|
||||||
dwDesiredAccess,
|
|
||||||
dwShareMode,
|
|
||||||
lpSecurityAttributes,
|
|
||||||
dwCreationDisposition,
|
|
||||||
dwFlagsAndAttributes,
|
|
||||||
hTemplateFile);
|
|
||||||
}
|
|
||||||
|
|
||||||
return g_origCreateFileW(lpFileName,
|
|
||||||
dwDesiredAccess,
|
dwDesiredAccess,
|
||||||
dwShareMode,
|
dwShareMode,
|
||||||
lpSecurityAttributes,
|
lpSecurityAttributes,
|
||||||
@ -761,31 +774,39 @@ HANDLE __stdcall CreateFileWWrap(LPCWSTR lpFileName,
|
|||||||
static DWORD(__stdcall *g_origGetFileAttributesA)(LPCSTR lpFileName);
|
static DWORD(__stdcall *g_origGetFileAttributesA)(LPCSTR lpFileName);
|
||||||
static DWORD __stdcall GetFileAttributesAWrap(LPCSTR lpFileName)
|
static DWORD __stdcall GetFileAttributesAWrap(LPCSTR lpFileName)
|
||||||
{
|
{
|
||||||
if (!strncmp(lpFileName, "D:\\", 3) || !strncmp(lpFileName, "D:/", 3) || !strncmp(lpFileName, "d:/", 3), !strncmp(lpFileName, "d:\\", 3))
|
return g_origGetFileAttributesA(ParseFileNamesA(lpFileName));
|
||||||
{
|
|
||||||
memset(moveBuf, 0, 256);
|
|
||||||
sprintf(moveBuf, ".\\OpenParrot\\%s", lpFileName + 3);
|
|
||||||
return g_origGetFileAttributesA(moveBuf);
|
|
||||||
}
|
|
||||||
return g_origGetFileAttributesA(lpFileName);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static DWORD(__stdcall *g_origGetFileAttributesW)(LPCWSTR lpFileName);
|
static DWORD(__stdcall *g_origGetFileAttributesW)(LPCWSTR lpFileName);
|
||||||
static DWORD __stdcall GetFileAttributesWWrap(LPCWSTR lpFileName)
|
static DWORD __stdcall GetFileAttributesWWrap(LPCWSTR lpFileName)
|
||||||
{
|
{
|
||||||
if (!wcsncmp(lpFileName, L"D:\\", 3) || !wcsncmp(lpFileName, L"D:/", 3) || !wcsncmp(lpFileName, L"d:/", 3), !wcsncmp(lpFileName, L"d:\\", 3))
|
return g_origGetFileAttributesW(ParseFileNamesW(lpFileName));
|
||||||
{
|
|
||||||
memset(moveBufW, 0, 256);
|
|
||||||
swprintf(moveBufW, L".\\OpenParrot\\%ls", lpFileName + 3);
|
|
||||||
return g_origGetFileAttributesW(moveBufW);
|
|
||||||
}
|
}
|
||||||
return g_origGetFileAttributesW(lpFileName);
|
|
||||||
|
static BOOL(__stdcall *g_origCreateDirectoryA)(LPCSTR lpPathName, LPSECURITY_ATTRIBUTES lpSecurityAttributes);
|
||||||
|
static BOOL __stdcall CreateDirectoryAWrap(
|
||||||
|
LPCSTR lpPathName,
|
||||||
|
LPSECURITY_ATTRIBUTES lpSecurityAttributes
|
||||||
|
)
|
||||||
|
{
|
||||||
|
return g_origCreateDirectoryA(ParseFileNamesA(lpPathName), lpSecurityAttributes);
|
||||||
|
}
|
||||||
|
|
||||||
|
static BOOL(__stdcall *g_origCreateDirectoryW)(LPCWSTR lpPathName, LPSECURITY_ATTRIBUTES lpSecurityAttributes);
|
||||||
|
static BOOL __stdcall CreateDirectoryWWrap(
|
||||||
|
LPCWSTR lpPathName,
|
||||||
|
LPSECURITY_ATTRIBUTES lpSecurityAttributes
|
||||||
|
)
|
||||||
|
{
|
||||||
|
return g_origCreateDirectoryW(ParseFileNamesW(lpPathName), lpSecurityAttributes);
|
||||||
}
|
}
|
||||||
|
|
||||||
void init_RfidEmu()
|
void init_RfidEmu()
|
||||||
{
|
{
|
||||||
MH_Initialize();
|
MH_Initialize();
|
||||||
CreateDirectoryA("OpenParrot", nullptr);
|
CreateDirectoryA("OpenParrot", nullptr);
|
||||||
|
MH_CreateHookApi(L"kernel32.dll", "CreateDirectoryA", CreateDirectoryAWrap, (void**)&g_origCreateDirectoryA);
|
||||||
|
MH_CreateHookApi(L"kernel32.dll", "CreateDirectoryW", CreateDirectoryWWrap, (void**)&g_origCreateDirectoryW);
|
||||||
MH_CreateHookApi(L"kernel32.dll", "GetFileAttributesA", GetFileAttributesAWrap, (void**)&g_origGetFileAttributesA);
|
MH_CreateHookApi(L"kernel32.dll", "GetFileAttributesA", GetFileAttributesAWrap, (void**)&g_origGetFileAttributesA);
|
||||||
MH_CreateHookApi(L"kernel32.dll", "GetFileAttributesW", GetFileAttributesWWrap, (void**)&g_origGetFileAttributesW);
|
MH_CreateHookApi(L"kernel32.dll", "GetFileAttributesW", GetFileAttributesWWrap, (void**)&g_origGetFileAttributesW);
|
||||||
MH_CreateHookApi(L"kernel32.dll", "CreateFileW", CreateFileWWrap, (void**)&g_origCreateFileW);
|
MH_CreateHookApi(L"kernel32.dll", "CreateFileW", CreateFileWWrap, (void**)&g_origCreateFileW);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user