Skip to content

Commit 7f03c3c

Browse files
author
Brian Kendall
committed
Improved logging
1 parent 08638d3 commit 7f03c3c

3 files changed

Lines changed: 48 additions & 46 deletions

File tree

dinput8/DirectInputModuleManager.h

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ class DirectInputModuleManager : NonCopyable
2424
ini.SetAllowEmptyValues(false);
2525
std::wstring inipath(L"devreorder.ini");
2626
SI_Error err = ini.LoadFile(inipath.c_str());
27+
LogSystem();
2728

2829
if (err < 0) {
2930
CheckCommonDirectory(&inipath, L"devreorder");
@@ -69,7 +70,7 @@ class DirectInputModuleManager : NonCopyable
6970
}
7071
else
7172
{
72-
PrintLog("Loaded \"%s\"", UTF16ToUTF8(loadedModulePath).c_str());
73+
PrintLog("devreorder: Loaded \"%s\"", UTF16ToUTF8(loadedModulePath).c_str());
7374
}
7475

7576
GetProcAddress("DirectInput8Create", &DirectInput8Create);
@@ -85,7 +86,7 @@ class DirectInputModuleManager : NonCopyable
8586
{
8687
std::string xinput_path;
8788
ModulePath(&xinput_path, m_module);
88-
PrintLog("Unloading %s", xinput_path.c_str());
89+
PrintLog("devreorder: Unloading %s", xinput_path.c_str());
8990
FreeLibrary(m_module);
9091
}
9192
}

dinput8/dinput8.cpp

Lines changed: 43 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -29,11 +29,15 @@ vector<wstring> loadAllKeysFromSectionOfIni(const wstring &section)
2929
if (err < 0) {
3030
CheckCommonDirectory(&inipath, L"devreorder");
3131
err = ini.LoadFile(inipath.c_str());
32-
}
3332

34-
if (err < 0) {
35-
PrintLog("Error: devreorder.ini file found");
36-
return result;
33+
if (err < 0) {
34+
PrintLog("devreorder error: devreorder.ini file found");
35+
return result;
36+
} else {
37+
PrintLog("devreorder: using system-wide devreorder.ini");
38+
}
39+
} else {
40+
PrintLog("devreorder: using program-specific devreorder.ini");
3741
}
3842

3943
CSimpleIniW::TNamesDepend keys;
@@ -78,18 +82,6 @@ vector<string> & sortedControllersA()
7882
return result;
7983
}
8084

81-
vector<string> & sortedControllers(const string &ignored)
82-
{
83-
(void)ignored;
84-
return sortedControllersA();
85-
}
86-
87-
vector<wstring> & sortedControllers(const wstring &ignored)
88-
{
89-
(void)ignored;
90-
return sortedControllersW();
91-
}
92-
9385
vector<wstring> & hiddenControllersW()
9486
{
9587
static vector<wstring> result;
@@ -121,18 +113,6 @@ vector<string> & hiddenControllersA()
121113
return result;
122114
}
123115

124-
vector<string> & hiddenControllers(const string &ignored)
125-
{
126-
(void)ignored;
127-
return hiddenControllersA();
128-
}
129-
130-
vector<wstring> & hiddenControllers(const wstring &ignored)
131-
{
132-
(void)ignored;
133-
return hiddenControllersW();
134-
}
135-
136116
template <class T>
137117
struct DeviceEnumData {
138118
list<T> nonsorted;
@@ -175,38 +155,56 @@ bool stringsAreEqual(const wstring &a, const WCHAR *b)
175155
return lstrcmpW((WCHAR *)trim(a).c_str(), (WCHAR *)trim(wstring(b)).c_str()) == 0;
176156
}
177157

178-
template <class DeviceType, class StringType>
179-
bool enumCallback(const DeviceType *deviceInstance, LPVOID userData)
158+
BOOL CALLBACK enumCallbackA(LPCDIDEVICEINSTANCEA deviceInstance, LPVOID userData)
180159
{
181-
DeviceEnumData<DeviceType> *enumData = (DeviceEnumData<DeviceType> *)userData;
182-
vector<StringType> &order = sortedControllers(StringType());
183-
vector<StringType> &hidden = hiddenControllers(StringType());
160+
DeviceEnumData<DIDEVICEINSTANCEA> *enumData = (DeviceEnumData<DIDEVICEINSTANCEA> *)userData;
161+
vector<string> &order = sortedControllersA();
162+
vector<string> &hidden = hiddenControllersA();
184163

185164
for (unsigned int i = 0; i < hidden.size(); ++i) {
186165
if (stringsAreEqual(hidden[i], deviceInstance->tszProductName)) {
166+
PrintLog("devreorder: product \"%s\" is hidden", deviceInstance->tszProductName);
187167
return DIENUM_CONTINUE;
188168
}
189169
}
190170

191171
for (unsigned int i = 0; i < order.size(); ++i) {
192172
if (stringsAreEqual(order[i], deviceInstance->tszProductName)) {
173+
PrintLog("devreorder: product \"%s\" is sorted up", deviceInstance->tszProductName);
193174
enumData->sorted[i].push_back(*deviceInstance);
194175
return DIENUM_CONTINUE;
195176
}
196177
}
197178

179+
PrintLog("devreorder: product \"%s\" is not sorted differently", deviceInstance->tszProductName);
198180
enumData->nonsorted.push_back(*deviceInstance);
199181
return DIENUM_CONTINUE;
200182
}
201183

202-
BOOL CALLBACK enumCallbackA(LPCDIDEVICEINSTANCEA deviceInstance, LPVOID userData)
203-
{
204-
return enumCallback<DIDEVICEINSTANCEA, string>(deviceInstance, userData);
205-
}
206-
207184
BOOL CALLBACK enumCallbackW(LPCDIDEVICEINSTANCEW deviceInstance, LPVOID userData)
208185
{
209-
return enumCallback<DIDEVICEINSTANCEW, wstring>(deviceInstance, userData);
186+
DeviceEnumData<DIDEVICEINSTANCEW> *enumData = (DeviceEnumData<DIDEVICEINSTANCEW> *)userData;
187+
vector<wstring> &order = sortedControllersW();
188+
vector<wstring> &hidden = hiddenControllersW();
189+
190+
for (unsigned int i = 0; i < hidden.size(); ++i) {
191+
if (stringsAreEqual(hidden[i], deviceInstance->tszProductName)) {
192+
PrintLog(L"devreorder: product \"%s\" is hidden", deviceInstance->tszProductName);
193+
return DIENUM_CONTINUE;
194+
}
195+
}
196+
197+
for (unsigned int i = 0; i < order.size(); ++i) {
198+
if (stringsAreEqual(order[i], deviceInstance->tszProductName)) {
199+
PrintLog(L"devreorder: product \"%s\" is sorted up", deviceInstance->tszProductName);
200+
enumData->sorted[i].push_back(*deviceInstance);
201+
return DIENUM_CONTINUE;
202+
}
203+
}
204+
205+
PrintLog(L"devreorder: product \"%s\" is not sorted differently", deviceInstance->tszProductName);
206+
enumData->nonsorted.push_back(*deviceInstance);
207+
return DIENUM_CONTINUE;
210208
}
211209

212210
HRESULT STDMETHODCALLTYPE HookEnumDevicesA(LPDIRECTINPUT8A This, DWORD dwDevType, LPDIENUMDEVICESCALLBACKA lpCallback, LPVOID pvRef, DWORD dwFlags)
@@ -216,6 +214,7 @@ HRESULT STDMETHODCALLTYPE HookEnumDevicesA(LPDIRECTINPUT8A This, DWORD dwDevType
216214

217215
enumData.sorted.resize(order.size());
218216

217+
PrintLog("devreorder: determining new sorting order for devices");
219218
HRESULT result = TrueEnumDevicesA(This, dwDevType, enumCallbackA, (LPVOID)&enumData, dwFlags);
220219

221220
if (result != DI_OK) {
@@ -246,6 +245,7 @@ HRESULT STDMETHODCALLTYPE HookEnumDevicesW(LPDIRECTINPUT8W This, DWORD dwDevType
246245

247246
enumData.sorted.resize(order.size());
248247

248+
PrintLog("devreorder: determining new sorting order for devices");
249249
HRESULT result = TrueEnumDevicesW(This, dwDevType, enumCallbackW, (LPVOID)&enumData, dwFlags);
250250

251251
if (result != DI_OK) {
@@ -277,7 +277,7 @@ void CreateHooks(REFIID riidltf, LPVOID *realDI)
277277

278278
if (pDIA)
279279
{
280-
PrintLog("DirectInput8Create - ANSI interface");
280+
PrintLog("devreorder: using ANSI interface");
281281
if (pDIA->lpVtbl->EnumDevices)
282282
{
283283
EnumDevicesA = pDIA->lpVtbl->EnumDevices;
@@ -292,7 +292,7 @@ void CreateHooks(REFIID riidltf, LPVOID *realDI)
292292

293293
if (pDIW)
294294
{
295-
PrintLog("DirectInput8Create - UNICODE interface");
295+
PrintLog("devreorder: using UNICODE interface");
296296
if (pDIW->lpVtbl->EnumDevices)
297297
{
298298
EnumDevicesW = pDIW->lpVtbl->EnumDevices;
@@ -305,7 +305,7 @@ void CreateHooks(REFIID riidltf, LPVOID *realDI)
305305

306306
extern "C" HRESULT WINAPI DirectInput8Create(HINSTANCE hinst, DWORD dwVersion, REFIID riidltf, LPVOID *ppvOut, LPUNKNOWN punkOuter)
307307
{
308-
OutputDebugString(L"devreorder: Calling hooked DirectInput8Create");
308+
PrintLog("devreorder: Calling hooked DirectInput8Create");
309309
HRESULT hr = DirectInputModuleManager::Get().DirectInput8Create(hinst, dwVersion, riidltf, ppvOut, punkOuter);
310310

311311
if (hr != DI_OK) return hr;
@@ -322,6 +322,7 @@ extern "C" HRESULT WINAPI DllCanUnloadNow(void)
322322

323323
extern "C" HRESULT WINAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID FAR* ppv)
324324
{
325+
PrintLog("devreorder: Calling hooked DllGetClassObject");
325326
IClassFactory *cf;
326327
HRESULT hr = DirectInputModuleManager::Get().DllGetClassObject(rclsid, riid, (void**)&cf);
327328

dinput8/dinput8.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,13 +27,13 @@ void IH_CreateHookF(LPVOID pTarget, LPVOID pDetour, N* ppOriginal, const char* p
2727
{
2828
if (*ppOriginal) return;
2929
MH_STATUS status = MH_CreateHook(pTarget, pDetour, reinterpret_cast<void**>(ppOriginal));
30-
PrintLog("CreateHook %s status %s", pTargetName, MH_StatusToString(status));
30+
PrintLog("devreorder: CreateHook %s status %s", pTargetName, MH_StatusToString(status));
3131
}
3232

3333
inline void IH_EnableHookF(LPVOID pTarget, const char* pTargetName)
3434
{
3535
MH_STATUS status = MH_EnableHook(pTarget);
36-
PrintLog("EnableHook %s status %s", pTargetName, MH_StatusToString(status));
36+
PrintLog("devreorder: EnableHook %s status %s", pTargetName, MH_StatusToString(status));
3737
}
3838

3939
#define IH_CreateHook(pTarget, pDetour, ppOrgiginal) IH_CreateHookF(pTarget, pDetour, ppOrgiginal, #pTarget)

0 commit comments

Comments
 (0)