mirror of https://github.com/x64dbg/TitanEngine
94 lines
3.7 KiB
C++
94 lines
3.7 KiB
C++
#include "stdafx.h"
|
|
#include "definitions.h"
|
|
|
|
// TitanEngine.TranslateName.functions:
|
|
__declspec(dllexport) void* TITCALL TranslateNativeName(char* szNativeName)
|
|
{
|
|
|
|
LPVOID TranslatedName = VirtualAlloc(NULL, 0x1000, MEM_COMMIT, PAGE_READWRITE);
|
|
char szDeviceName[3] = "A:";
|
|
char szDeviceCOMName[5] = "COM0";
|
|
int CurrentDeviceLen;
|
|
|
|
while(szDeviceName[0] <= 0x5A)
|
|
{
|
|
RtlZeroMemory(TranslatedName, 0x1000);
|
|
if(QueryDosDeviceA(szDeviceName, (LPSTR)TranslatedName, 0x1000) > NULL)
|
|
{
|
|
CurrentDeviceLen = lstrlenA((LPSTR)TranslatedName);
|
|
lstrcatA((LPSTR)TranslatedName, (LPCSTR)(szNativeName + CurrentDeviceLen));
|
|
if(lstrcmpiA((LPCSTR)TranslatedName, szNativeName) == NULL)
|
|
{
|
|
RtlZeroMemory(TranslatedName, 0x1000);
|
|
lstrcatA((LPSTR)TranslatedName, szDeviceName);
|
|
lstrcatA((LPSTR)TranslatedName, (LPCSTR)(szNativeName + CurrentDeviceLen));
|
|
return(TranslatedName);
|
|
}
|
|
}
|
|
szDeviceName[0]++;
|
|
}
|
|
while(szDeviceCOMName[3] <= 0x39)
|
|
{
|
|
RtlZeroMemory(TranslatedName, 0x1000);
|
|
if(QueryDosDeviceA(szDeviceCOMName, (LPSTR)TranslatedName, 0x1000) > NULL)
|
|
{
|
|
CurrentDeviceLen = lstrlenA((LPSTR)TranslatedName);
|
|
lstrcatA((LPSTR)TranslatedName, (LPCSTR)(szNativeName + CurrentDeviceLen));
|
|
if(lstrcmpiA((LPCSTR)TranslatedName, szNativeName) == NULL)
|
|
{
|
|
RtlZeroMemory(TranslatedName, 0x1000);
|
|
lstrcatA((LPSTR)TranslatedName, szDeviceCOMName);
|
|
lstrcatA((LPSTR)TranslatedName, (LPCSTR)(szNativeName + CurrentDeviceLen));
|
|
return(TranslatedName);
|
|
}
|
|
}
|
|
szDeviceCOMName[3]++;
|
|
}
|
|
VirtualFree(TranslatedName, NULL, MEM_RELEASE);
|
|
return(NULL);
|
|
}
|
|
__declspec(dllexport) void* TITCALL TranslateNativeNameW(wchar_t* szNativeName)
|
|
{
|
|
|
|
LPVOID TranslatedName = VirtualAlloc(NULL, 0x1000, MEM_COMMIT, PAGE_READWRITE);
|
|
wchar_t szDeviceName[3] = L"A:";
|
|
wchar_t szDeviceCOMName[5] = L"COM0";
|
|
int CurrentDeviceLen;
|
|
|
|
while(szDeviceName[0] <= 0x5A)
|
|
{
|
|
RtlZeroMemory(TranslatedName, 0x1000);
|
|
if(QueryDosDeviceW(szDeviceName, (LPWSTR)TranslatedName, MAX_PATH * 2) > NULL)
|
|
{
|
|
CurrentDeviceLen = lstrlenW((LPWSTR)TranslatedName);
|
|
lstrcatW((LPWSTR)TranslatedName, (LPCWSTR)(szNativeName + CurrentDeviceLen));
|
|
if(lstrcmpiW((LPCWSTR)TranslatedName, szNativeName) == NULL)
|
|
{
|
|
RtlZeroMemory(TranslatedName, 0x1000);
|
|
lstrcatW((LPWSTR)TranslatedName, szDeviceName);
|
|
lstrcatW((LPWSTR)TranslatedName, (LPWSTR)(szNativeName + CurrentDeviceLen));
|
|
return(TranslatedName);
|
|
}
|
|
}
|
|
szDeviceName[0]++;
|
|
}
|
|
while(szDeviceCOMName[3] <= 0x39)
|
|
{
|
|
RtlZeroMemory(TranslatedName, 0x1000);
|
|
if(QueryDosDeviceW(szDeviceCOMName, (LPWSTR)TranslatedName, MAX_PATH * 2) > NULL)
|
|
{
|
|
CurrentDeviceLen = lstrlenW((LPWSTR)TranslatedName);
|
|
lstrcatW((LPWSTR)TranslatedName, (LPCWSTR)(szNativeName + CurrentDeviceLen));
|
|
if(lstrcmpiW((LPCWSTR)TranslatedName, szNativeName) == NULL)
|
|
{
|
|
RtlZeroMemory(TranslatedName, 0x1000);
|
|
lstrcatW((LPWSTR)TranslatedName, szDeviceCOMName);
|
|
lstrcatW((LPWSTR)TranslatedName, (LPWSTR)(szNativeName + CurrentDeviceLen));
|
|
return(TranslatedName);
|
|
}
|
|
}
|
|
szDeviceCOMName[3]++;
|
|
}
|
|
VirtualFree(TranslatedName, NULL, MEM_RELEASE);
|
|
return(NULL);
|
|
} |