@@ -29,11 +29,15 @@ vector<wstring> loadAllKeysFromSectionOfIni(const wstring §ion)
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-
9385vector<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-
136116template <class T >
137117struct 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-
207184BOOL 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
212210HRESULT 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
306306extern " 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
323323extern " 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
0 commit comments