I took a quick look at running 3DS Max v4 in Wine. It pretty quickly chokes when when feeding RegSetValueExA with a null pointer as the data for the key "NullFile". The appended hack will go around that. Unfortunately the executable dies later on: danae% wine 3dsmax.exe Line 193: Unrecognized input 'read=0x378-0x37a' Line 194: Unrecognized input 'write=0x378-0x37a' fixme:win32:PE_CreateModule Security directory ignored fixme:reg:RegSetValueExA (188,"NullFile" ...) data is null pointer (3ds4 hack) FIXME:pthread_rwlock_rdlock FIXME:pthread_rwlock_unlock FIXME:pthread_rwlock_rdlock FIXME:pthread_rwlock_unlock FIXME:pthread_rwlock_rdlock FIXME:pthread_rwlock_unlock FIXME:pthread_rwlock_rdlock FIXME:pthread_rwlock_unlock fixme:winsock:_get_sock_fd handle -1 is not a socket (GLE 6) MSG .0 fatal: getsockopt(SO_OPENTYPE) failed - Invalid handle wine: Unhandled exception, starting debugger... zsh: terminated wine 3dsmax.exe I doubt this helps anyone fix the problem, but it might save someone 10min if trying to get 3ds working later on. When I get some time I'll do a real report with the nessesary traces. -- Peter Bortas http://peter.bortas.org ----8<----------------------------------------- Index: dlls/advapi32/registry.c =================================================================== RCS file: /home/wine/wine/dlls/advapi32/registry.c,v retrieving revision 1.26 diff -u -u -r1.26 registry.c --- dlls/advapi32/registry.c 2001/07/19 00:39:09 1.26 +++ dlls/advapi32/registry.c 2001/11/14 14:10:04 @@ -667,6 +667,17 @@ WCHAR *dataW = NULL; NTSTATUS status; + if(!data) + { + FIXME("(%x,%s ...) data is null pointer (3ds4 hack)\n", + hkey,debugstr_a(name)); + /* No idea what it really should return or do . I found this one + in winerror.h, and it seemed apropriate. 3ds4 seems to ignore + it anyway. Just setting data to "" might be what the author + expected. */ + return ERROR_INVALID_DATA; + } + if (GetVersion() & 0x80000000) /* win95 */ { if (type == REG_SZ) count = strlen(data) + 1; ---8<----------------------------