3D Studio 4 notes

Peter Bortas peter at idonex.se
Wed Nov 14 09:43:32 CST 2001


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<----------------------------





More information about the wine-devel mailing list