na grundsätzlich geht das schon, da der hash (binär) der key ist und wir danach sortieren und suchen können. die länge die übergeben wird bei IsFake wird in der tat nicht verwendet. die richtige dateigröße der geprüften datei wird allerdings durchaus richtig erkannt, wenn man die änderungen wie oben geschrieben macht. also meine aktuelle vermutung wieso das funktioniert ist etwa so:
wir übergeben bsearch einen pointer zum hash array im speicher und in CmpFakeByHash_Lenght zwingen wir dann den pointer zum array in einen pointer zum struct, wobei wir dadurch auch gleich noch m_nFileSize in besagtem struct haben. wieso das funktioniert versteh ich aber auch nicht, da ich immer dachte, dass membervariablen einer klassen instanz durchaus wild im speicher verteilt liegen könnten. anscheinend ist es aber nicht so, so dass man aufeinanderfolgende, aber unabhängige membervariablen durchaus auf diese weise in ein struct zwingen kann.
naja, da mir nichts besseres einfällt werde ich das wohl als fix benutzen (müssen).
edit: on topic: immo wäre eine verbindung von webservice und fakes.dat sinnvoll. man kann über webservice reporten und abfragen und zusätzlich auf die .dat zurückgreifen um die server resourcen zu schonen durch unendlich viele einzelne anfragen. außerdem ist es komfortabler.