http://bugs.winehq.org/show_bug.cgi?id=5322
truiken@gmail.com changed:
What |Removed |Added ---------------------------------------------------------------------------- Status|NEW |RESOLVED Resolution| |LATER
------- Additional Comments From truiken@gmail.com 2006-24-06 03:36 ------- I've looked *very* closely into this bug, and I've come to the conclusion that the VB/VC++ 6 installer is retarded. Here's exactly what happens:
1) With version set to Win2k and higher, the setup tries to obtain performance data from HKLM\Software\Microsoft\Windows NT\Current Version\Perflib\009. 009 should have two REG_MULTI_SZ values, Counters and Help. Win98 doesn't have this ability, so setting win98 doesn't crash the installer.
2) Installer calls RegOpenKeyEx on 009, which fails with ERROR_FILE_NOT_FOUND (we don't provide that key by default). goes to error case.
3) If 2 succeeds, the installer calls RegQueryValueEx on Counters. Fails unless you provide a string. goes to error case.
4) The installer reads for HKEY_PERFORMANCE_DATA, which we don't have implemented at all, so I can't hack around it. goes to error case.
5) every step before this succeeded, so HeapAlloc some variable on the stack. Note that HeapAlloc is never called before this case, and the variable is uninitialized if we don't get here.
error case: The installer calls RtlAllocateHeap on the uninitialized variable, we return NULL because "block 0x2 is not inside heap", installer proceeds to dereference the NULL pointer.
I'm tempted to mark this as invalid, but if the installer is expecting the performance data, then we should provide it. We'll have to implement performance counters...though I can't remember if that's provided by a separate dll, or the kernel. Marking as LATER.