<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<id>tag:old.nabble.com,2006:forum-927</id>
	<title>Nabble - Wine - Patches</title>
	<updated>2009-12-09T03:01:28Z</updated>
	<link rel="self" type="application/atom+xml" href="http://old.nabble.com/Wine---Patches-f927.xml" />
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Wine---Patches-f927.html" />
	<subtitle type="html"></subtitle>
	
<entry>
	<id>tag:old.nabble.com,2006:post-26708556</id>
	<title>[PATCH 2/2] dsound: Add support for loading openal, try X</title>
	<published>2009-12-09T03:01:28Z</published>
	<updated>2009-12-09T03:01:28Z</updated>
	<author>
		<name>Maarten Lankhorst</name>
	</author>
	<content type="html">---
&lt;br&gt;&amp;nbsp;configure.ac &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; 15 ++-
&lt;br&gt;&amp;nbsp;dlls/dsound/Makefile.in &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; &amp;nbsp;1 +
&lt;br&gt;&amp;nbsp;dlls/dsound/dsound_main.c &amp;nbsp; &amp;nbsp;| &amp;nbsp;242 ++++++++++++++++++++++++++++++++++++++++++
&lt;br&gt;&amp;nbsp;dlls/dsound/dsound_private.h | &amp;nbsp;217 +++++++++++++++++++++++++++++++++++++-
&lt;br&gt;&amp;nbsp;dlls/openal32/Makefile.in &amp;nbsp; &amp;nbsp;| &amp;nbsp; &amp;nbsp;2 +-
&lt;br&gt;&amp;nbsp;include/config.h.in &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; &amp;nbsp;6 +
&lt;br&gt;&amp;nbsp;6 files changed, 475 insertions(+), 8 deletions(-)
&lt;br&gt;&lt;br&gt;diff --git a/configure.ac b/configure.ac
&lt;br&gt;index e5ff544..d93e1d4 100644
&lt;br&gt;--- a/configure.ac
&lt;br&gt;+++ b/configure.ac
&lt;br&gt;@@ -633,8 +633,9 @@ case $host_os in
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;fi
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;if test &amp;quot;$ac_cv_header_OpenAL_al_h&amp;quot; = &amp;quot;yes&amp;quot;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;then
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;AC_SUBST(LIBOPENAL,&amp;quot;-framework OpenAL&amp;quot;)
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ac_cv_lib_openal_alGetSource3i=yes
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;AC_SUBST(FRAMEWORK_OPENAL,&amp;quot;-framework OpenAL&amp;quot;)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;AC_DEFINE_UNQUOTED(HAVE_OPENAL,1,[Define to 1 if OpenAL is available])
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ac_cv_lib_openal=yes
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;fi
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;if test &amp;quot;$ac_cv_header_IOKit_hid_IOHIDLib_h&amp;quot; = &amp;quot;yes&amp;quot;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;then
&lt;br&gt;@@ -1432,11 +1433,13 @@ test &amp;quot;x$ac_cv_lib_mpg123_mpg123_feed&amp;quot; = xyes || enable_winemp3_acm=${enable_wine
&lt;br&gt;&amp;nbsp;dnl **** Check for OpenAL 1.1 ****
&lt;br&gt;&amp;nbsp;if test &amp;quot;$ac_cv_header_AL_al_h&amp;quot; = &amp;quot;yes&amp;quot;
&lt;br&gt;&amp;nbsp;then
&lt;br&gt;- &amp;nbsp; &amp;nbsp;AC_CHECK_LIB(openal,alGetSource3i,[AC_SUBST(LIBOPENAL,&amp;quot;-lopenal&amp;quot;)])
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;WINE_CHECK_SONAME(openal,alGetSource3i,[AC_SUBST(LIBOPENAL,&amp;quot;-lopenal&amp;quot;)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ac_cv_lib_openal=yes
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;AC_DEFINE_UNQUOTED(HAVE_OPENAL,1,[Define to 1 if OpenAL is available])],,)
&lt;br&gt;&amp;nbsp;fi
&lt;br&gt;-WINE_NOTICE_WITH(openal,[test &amp;quot;x$ac_cv_lib_openal_alGetSource3i&amp;quot; != xyes],
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; [libopenal ${notice_platform}development files not found (or too old), OpenAL won't be supported.])
&lt;br&gt;-test &amp;quot;x$ac_cv_lib_openal_alGetSource3i&amp;quot; = xyes || enable_openal32=${enable_openal32:-no}
&lt;br&gt;+WINE_NOTICE_WITH(openal,[test &amp;quot;x$ac_cv_lib_openal&amp;quot; != xyes],
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; [libopenal ${notice_platform}development files not found (or too old), OpenAL won't be supported, and DirectSound will not be available.])
&lt;br&gt;+test &amp;quot;x$ac_cv_lib_openal&amp;quot; = xyes || enable_openal32=${enable_openal32:-no}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;dnl **** Check for libkstat ****
&lt;br&gt;&amp;nbsp;if test &amp;quot;$ac_cv_header_kstat_h&amp;quot; = &amp;quot;yes&amp;quot;
&lt;br&gt;diff --git a/dlls/dsound/Makefile.in b/dlls/dsound/Makefile.in
&lt;br&gt;index bbac7f9..34e4c7f 100644
&lt;br&gt;--- a/dlls/dsound/Makefile.in
&lt;br&gt;+++ b/dlls/dsound/Makefile.in
&lt;br&gt;@@ -5,6 +5,7 @@ VPATH &amp;nbsp; &amp;nbsp; = @srcdir@
&lt;br&gt;&amp;nbsp;MODULE &amp;nbsp; &amp;nbsp;= dsound.dll
&lt;br&gt;&amp;nbsp;IMPORTLIB = dsound
&lt;br&gt;&amp;nbsp;IMPORTS &amp;nbsp; = dxguid uuid winmm ole32 advapi32 kernel32 ntdll
&lt;br&gt;+EXTRALIBS = @FRAMEWORK_OPENAL@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;C_SRCS = \
&lt;br&gt;&amp;nbsp;	buffer.c \
&lt;br&gt;diff --git a/dlls/dsound/dsound_main.c b/dlls/dsound/dsound_main.c
&lt;br&gt;index 3fcabdb..71047d8 100644
&lt;br&gt;--- a/dlls/dsound/dsound_main.c
&lt;br&gt;+++ b/dlls/dsound/dsound_main.c
&lt;br&gt;@@ -32,7 +32,10 @@
&lt;br&gt;&amp;nbsp; * &amp;nbsp; &amp;nbsp; &amp;nbsp;Remove DS_HEL_FRAGS and use mixer fragment length for it
&lt;br&gt;&amp;nbsp; */
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+#include &amp;quot;config.h&amp;quot;
&lt;br&gt;+#include &amp;quot;wine/port.h&amp;quot;
&lt;br&gt;&amp;nbsp;#include &amp;lt;stdarg.h&amp;gt;
&lt;br&gt;+#include &amp;quot;wine/library.h&amp;quot;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;#define COBJMACROS
&lt;br&gt;&amp;nbsp;#define NONAMELESSSTRUCT
&lt;br&gt;@@ -61,6 +64,238 @@ DirectSoundDevice*	DSOUND_renderer[MAXWAVEDRIVERS];
&lt;br&gt;&amp;nbsp;GUID DSOUND_renderer_guid = { 0xbd6dd71a,0x3deb,0x11d1, {0xb1,0x71,0x00,0xc0,0x4f,0xc2,0x00,0x00} };
&lt;br&gt;&amp;nbsp;GUID DSOUND_capture_guid = { 0xbd6dd71b,0x3deb,0x11d1, {0xb1,0x71,0x00,0xc0,0x4f,0xc2,0x00,0x00} };
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+#ifdef HAVE_OPENAL
&lt;br&gt;+
&lt;br&gt;+static CRITICAL_SECTION_DEBUG openal_crst_debug =
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;0, 0, &amp;openal_crst,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;{ &amp;openal_crst_debug.ProcessLocksList,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;openal_crst_debug.ProcessLocksList },
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;0, 0, { (DWORD_PTR)(__FILE__ &amp;quot;: openal_crst_debug&amp;quot;) }
&lt;br&gt;+};
&lt;br&gt;+CRITICAL_SECTION openal_crst = { &amp;openal_crst_debug, -1, 0, 0, 0, 0 };
&lt;br&gt;+
&lt;br&gt;+static void *openal_handle = RTLD_DEFAULT;
&lt;br&gt;+int openal_loaded = 0;
&lt;br&gt;+#ifdef SONAME_LIBOPENAL
&lt;br&gt;+LPALCCREATECONTEXT palcCreateContext = NULL;
&lt;br&gt;+LPALCMAKECONTEXTCURRENT palcMakeContextCurrent = NULL;
&lt;br&gt;+LPALCPROCESSCONTEXT palcProcessContext = NULL;
&lt;br&gt;+LPALCSUSPENDCONTEXT palcSuspendContext = NULL;
&lt;br&gt;+LPALCDESTROYCONTEXT palcDestroyContext = NULL;
&lt;br&gt;+LPALCGETCURRENTCONTEXT palcGetCurrentContext = NULL;
&lt;br&gt;+LPALCGETCONTEXTSDEVICE palcGetContextsDevice = NULL;
&lt;br&gt;+LPALCOPENDEVICE palcOpenDevice = NULL;
&lt;br&gt;+LPALCCLOSEDEVICE palcCloseDevice = NULL;
&lt;br&gt;+LPALCGETERROR palcGetError = NULL;
&lt;br&gt;+LPALCISEXTENSIONPRESENT palcIsExtensionPresent = NULL;
&lt;br&gt;+LPALCGETPROCADDRESS palcGetProcAddress = NULL;
&lt;br&gt;+LPALCGETENUMVALUE palcGetEnumValue = NULL;
&lt;br&gt;+LPALCGETSTRING palcGetString = NULL;
&lt;br&gt;+LPALCGETINTEGERV palcGetIntegerv = NULL;
&lt;br&gt;+LPALCCAPTUREOPENDEVICE palcCaptureOpenDevice = NULL;
&lt;br&gt;+LPALCCAPTURECLOSEDEVICE palcCaptureCloseDevice = NULL;
&lt;br&gt;+LPALCCAPTURESTART palcCaptureStart = NULL;
&lt;br&gt;+LPALCCAPTURESTOP palcCaptureStop = NULL;
&lt;br&gt;+LPALCCAPTURESAMPLES palcCaptureSamples = NULL;
&lt;br&gt;+LPALENABLE palEnable = NULL;
&lt;br&gt;+LPALDISABLE palDisable = NULL;
&lt;br&gt;+LPALISENABLED palIsEnabled = NULL;
&lt;br&gt;+LPALGETSTRING palGetString = NULL;
&lt;br&gt;+LPALGETBOOLEANV palGetBooleanv = NULL;
&lt;br&gt;+LPALGETINTEGERV palGetIntegerv = NULL;
&lt;br&gt;+LPALGETFLOATV palGetFloatv = NULL;
&lt;br&gt;+LPALGETDOUBLEV palGetDoublev = NULL;
&lt;br&gt;+LPALGETBOOLEAN palGetBoolean = NULL;
&lt;br&gt;+LPALGETINTEGER palGetInteger = NULL;
&lt;br&gt;+LPALGETFLOAT palGetFloat = NULL;
&lt;br&gt;+LPALGETDOUBLE palGetDouble = NULL;
&lt;br&gt;+LPALGETERROR palGetError = NULL;
&lt;br&gt;+LPALISEXTENSIONPRESENT palIsExtensionPresent = NULL;
&lt;br&gt;+LPALGETPROCADDRESS palGetProcAddress = NULL;
&lt;br&gt;+LPALGETENUMVALUE palGetEnumValue = NULL;
&lt;br&gt;+LPALLISTENERF palListenerf = NULL;
&lt;br&gt;+LPALLISTENER3F palListener3f = NULL;
&lt;br&gt;+LPALLISTENERFV palListenerfv = NULL;
&lt;br&gt;+LPALLISTENERI palListeneri = NULL;
&lt;br&gt;+LPALLISTENER3I palListener3i = NULL;
&lt;br&gt;+LPALLISTENERIV palListeneriv = NULL;
&lt;br&gt;+LPALGETLISTENERF palGetListenerf = NULL;
&lt;br&gt;+LPALGETLISTENER3F palGetListener3f = NULL;
&lt;br&gt;+LPALGETLISTENERFV palGetListenerfv = NULL;
&lt;br&gt;+LPALGETLISTENERI palGetListeneri = NULL;
&lt;br&gt;+LPALGETLISTENER3I palGetListener3i = NULL;
&lt;br&gt;+LPALGETLISTENERIV palGetListeneriv = NULL;
&lt;br&gt;+LPALGENSOURCES palGenSources = NULL;
&lt;br&gt;+LPALDELETESOURCES palDeleteSources = NULL;
&lt;br&gt;+LPALISSOURCE palIsSource = NULL;
&lt;br&gt;+LPALSOURCEF palSourcef = NULL;
&lt;br&gt;+LPALSOURCE3F palSource3f = NULL;
&lt;br&gt;+LPALSOURCEFV palSourcefv = NULL;
&lt;br&gt;+LPALSOURCEI palSourcei = NULL;
&lt;br&gt;+LPALSOURCE3I palSource3i = NULL;
&lt;br&gt;+LPALSOURCEIV palSourceiv = NULL;
&lt;br&gt;+LPALGETSOURCEF palGetSourcef = NULL;
&lt;br&gt;+LPALGETSOURCE3F palGetSource3f = NULL;
&lt;br&gt;+LPALGETSOURCEFV palGetSourcefv = NULL;
&lt;br&gt;+LPALGETSOURCEI palGetSourcei = NULL;
&lt;br&gt;+LPALGETSOURCE3I palGetSource3i = NULL;
&lt;br&gt;+LPALGETSOURCEIV palGetSourceiv = NULL;
&lt;br&gt;+LPALSOURCEPLAYV palSourcePlayv = NULL;
&lt;br&gt;+LPALSOURCESTOPV palSourceStopv = NULL;
&lt;br&gt;+LPALSOURCEREWINDV palSourceRewindv = NULL;
&lt;br&gt;+LPALSOURCEPAUSEV palSourcePausev = NULL;
&lt;br&gt;+LPALSOURCEPLAY palSourcePlay = NULL;
&lt;br&gt;+LPALSOURCESTOP palSourceStop = NULL;
&lt;br&gt;+LPALSOURCEREWIND palSourceRewind = NULL;
&lt;br&gt;+LPALSOURCEPAUSE palSourcePause = NULL;
&lt;br&gt;+LPALSOURCEQUEUEBUFFERS palSourceQueueBuffers = NULL;
&lt;br&gt;+LPALSOURCEUNQUEUEBUFFERS palSourceUnqueueBuffers = NULL;
&lt;br&gt;+LPALGENBUFFERS palGenBuffers = NULL;
&lt;br&gt;+LPALDELETEBUFFERS palDeleteBuffers = NULL;
&lt;br&gt;+LPALISBUFFER palIsBuffer = NULL;
&lt;br&gt;+LPALBUFFERF palBufferf = NULL;
&lt;br&gt;+LPALBUFFER3F palBuffer3f = NULL;
&lt;br&gt;+LPALBUFFERFV palBufferfv = NULL;
&lt;br&gt;+LPALBUFFERI palBufferi = NULL;
&lt;br&gt;+LPALBUFFER3I palBuffer3i = NULL;
&lt;br&gt;+LPALBUFFERIV palBufferiv = NULL;
&lt;br&gt;+LPALGETBUFFERF palGetBufferf = NULL;
&lt;br&gt;+LPALGETBUFFER3F palGetBuffer3f = NULL;
&lt;br&gt;+LPALGETBUFFERFV palGetBufferfv = NULL;
&lt;br&gt;+LPALGETBUFFERI palGetBufferi = NULL;
&lt;br&gt;+LPALGETBUFFER3I palGetBuffer3i = NULL;
&lt;br&gt;+LPALGETBUFFERIV palGetBufferiv = NULL;
&lt;br&gt;+LPALBUFFERDATA palBufferData = NULL;
&lt;br&gt;+LPALDOPPLERFACTOR palDopplerFactor = NULL;
&lt;br&gt;+LPALDOPPLERVELOCITY palDopplerVelocity = NULL;
&lt;br&gt;+LPALDISTANCEMODEL palDistanceModel = NULL;
&lt;br&gt;+LPALSPEEDOFSOUND palSpeedOfSound = NULL;
&lt;br&gt;+#endif
&lt;br&gt;+
&lt;br&gt;+static void load_libopenal(void)
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;DWORD failed = 0;
&lt;br&gt;+
&lt;br&gt;+#ifdef SONAME_LIBOPENAL
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;char error[128];
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;openal_handle = wine_dlopen(SONAME_LIBOPENAL, RTLD_NOW, error, sizeof(error));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (!openal_handle)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ERR(&amp;quot;Couldn't load &amp;quot; SONAME_LIBOPENAL &amp;quot;: %s\n&amp;quot;, error);
&lt;br&gt;+#define LOAD_FUNCPTR(f) \
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if((p##f = wine_dlsym(openal_handle, #f, NULL, 0)) == NULL) { \
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ERR(&amp;quot;Couldn't lookup %s in libopenal\n&amp;quot;, #f); \
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;failed = 1; \
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;LOAD_FUNCPTR(alcCreateContext);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;LOAD_FUNCPTR(alcMakeContextCurrent);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;LOAD_FUNCPTR(alcProcessContext);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;LOAD_FUNCPTR(alcSuspendContext);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;LOAD_FUNCPTR(alcDestroyContext);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;LOAD_FUNCPTR(alcGetCurrentContext);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;LOAD_FUNCPTR(alcGetContextsDevice);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;LOAD_FUNCPTR(alcOpenDevice);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;LOAD_FUNCPTR(alcCloseDevice);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;LOAD_FUNCPTR(alcGetError);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;LOAD_FUNCPTR(alcIsExtensionPresent);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;LOAD_FUNCPTR(alcGetProcAddress);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;LOAD_FUNCPTR(alcGetEnumValue);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;LOAD_FUNCPTR(alcGetString);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;LOAD_FUNCPTR(alcGetIntegerv);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;LOAD_FUNCPTR(alcCaptureOpenDevice);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;LOAD_FUNCPTR(alcCaptureCloseDevice);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;LOAD_FUNCPTR(alcCaptureStart);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;LOAD_FUNCPTR(alcCaptureStop);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;LOAD_FUNCPTR(alcCaptureSamples);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;LOAD_FUNCPTR(alEnable);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;LOAD_FUNCPTR(alDisable);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;LOAD_FUNCPTR(alIsEnabled);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;LOAD_FUNCPTR(alGetString);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;LOAD_FUNCPTR(alGetBooleanv);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;LOAD_FUNCPTR(alGetIntegerv);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;LOAD_FUNCPTR(alGetFloatv);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;LOAD_FUNCPTR(alGetDoublev);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;LOAD_FUNCPTR(alGetBoolean);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;LOAD_FUNCPTR(alGetInteger);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;LOAD_FUNCPTR(alGetFloat);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;LOAD_FUNCPTR(alGetDouble);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;LOAD_FUNCPTR(alGetError);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;LOAD_FUNCPTR(alIsExtensionPresent);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;LOAD_FUNCPTR(alGetProcAddress);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;LOAD_FUNCPTR(alGetEnumValue);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;LOAD_FUNCPTR(alListenerf);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;LOAD_FUNCPTR(alListener3f);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;LOAD_FUNCPTR(alListenerfv);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;LOAD_FUNCPTR(alListeneri);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;LOAD_FUNCPTR(alListener3i);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;LOAD_FUNCPTR(alListeneriv);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;LOAD_FUNCPTR(alGetListenerf);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;LOAD_FUNCPTR(alGetListener3f);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;LOAD_FUNCPTR(alGetListenerfv);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;LOAD_FUNCPTR(alGetListeneri);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;LOAD_FUNCPTR(alGetListener3i);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;LOAD_FUNCPTR(alGetListeneriv);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;LOAD_FUNCPTR(alGenSources);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;LOAD_FUNCPTR(alDeleteSources);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;LOAD_FUNCPTR(alIsSource);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;LOAD_FUNCPTR(alSourcef);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;LOAD_FUNCPTR(alSource3f);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;LOAD_FUNCPTR(alSourcefv);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;LOAD_FUNCPTR(alSourcei);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;LOAD_FUNCPTR(alSource3i);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;LOAD_FUNCPTR(alSourceiv);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;LOAD_FUNCPTR(alGetSourcef);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;LOAD_FUNCPTR(alGetSource3f);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;LOAD_FUNCPTR(alGetSourcefv);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;LOAD_FUNCPTR(alGetSourcei);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;LOAD_FUNCPTR(alGetSource3i);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;LOAD_FUNCPTR(alGetSourceiv);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;LOAD_FUNCPTR(alSourcePlayv);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;LOAD_FUNCPTR(alSourceStopv);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;LOAD_FUNCPTR(alSourceRewindv);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;LOAD_FUNCPTR(alSourcePausev);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;LOAD_FUNCPTR(alSourcePlay);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;LOAD_FUNCPTR(alSourceStop);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;LOAD_FUNCPTR(alSourceRewind);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;LOAD_FUNCPTR(alSourcePause);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;LOAD_FUNCPTR(alSourceQueueBuffers);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;LOAD_FUNCPTR(alSourceUnqueueBuffers);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;LOAD_FUNCPTR(alGenBuffers);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;LOAD_FUNCPTR(alDeleteBuffers);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;LOAD_FUNCPTR(alIsBuffer);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;LOAD_FUNCPTR(alBufferf);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;LOAD_FUNCPTR(alBuffer3f);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;LOAD_FUNCPTR(alBufferfv);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;LOAD_FUNCPTR(alBufferi);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;LOAD_FUNCPTR(alBuffer3i);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;LOAD_FUNCPTR(alBufferiv);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;LOAD_FUNCPTR(alGetBufferf);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;LOAD_FUNCPTR(alGetBuffer3f);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;LOAD_FUNCPTR(alGetBufferfv);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;LOAD_FUNCPTR(alGetBufferi);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;LOAD_FUNCPTR(alGetBuffer3i);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;LOAD_FUNCPTR(alGetBufferiv);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;LOAD_FUNCPTR(alBufferData);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;LOAD_FUNCPTR(alDopplerFactor);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;LOAD_FUNCPTR(alDopplerVelocity);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;LOAD_FUNCPTR(alDistanceModel);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;LOAD_FUNCPTR(alSpeedOfSound);
&lt;br&gt;+#undef LOAD_FUNCPTR
&lt;br&gt;+#endif
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (failed)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;WARN(&amp;quot;Unloading openal\n&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (openal_handle != RTLD_DEFAULT)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;wine_dlclose(openal_handle, NULL, 0);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;openal_handle = NULL;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;else
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;openal_loaded = 1;
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+#endif /*HAVE_OPENAL*/
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;HRESULT mmErr(UINT err)
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp;	switch(err) {
&lt;br&gt;@@ -665,6 +900,9 @@ BOOL WINAPI DllMain(HINSTANCE hInstDLL, DWORD fdwReason, LPVOID lpvReserved)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;switch (fdwReason) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;case DLL_PROCESS_ATTACH:
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;TRACE(&amp;quot;DLL_PROCESS_ATTACH\n&amp;quot;);
&lt;br&gt;+#ifdef HAVE_OPENAL
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;load_libopenal();
&lt;br&gt;+#endif /*HAVE_OPENAL*/
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for (i = 0; i &amp;lt; MAXWAVEDRIVERS; i++) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;DSOUND_renderer[i] = NULL;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;DSOUND_capture[i] = NULL;
&lt;br&gt;@@ -675,6 +913,10 @@ BOOL WINAPI DllMain(HINSTANCE hInstDLL, DWORD fdwReason, LPVOID lpvReserved)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;break;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;case DLL_PROCESS_DETACH:
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;TRACE(&amp;quot;DLL_PROCESS_DETACH\n&amp;quot;);
&lt;br&gt;+#ifdef SONAME_LIBOPENAL
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (openal_handle)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;wine_dlclose(openal_handle, NULL, 0);
&lt;br&gt;+#endif /*SONAME_LIBOPENAL*/
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;break;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;default:
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;TRACE(&amp;quot;UNKNOWN REASON\n&amp;quot;);
&lt;br&gt;diff --git a/dlls/dsound/dsound_private.h b/dlls/dsound/dsound_private.h
&lt;br&gt;index 33c2f98..daa509d 100644
&lt;br&gt;--- a/dlls/dsound/dsound_private.h
&lt;br&gt;+++ b/dlls/dsound/dsound_private.h
&lt;br&gt;@@ -22,8 +22,223 @@
&lt;br&gt;&amp;nbsp;/* Linux does not support better timing than 10ms */
&lt;br&gt;&amp;nbsp;#define DS_TIME_RES 2 &amp;nbsp;/* Resolution of multimedia timer */
&lt;br&gt;&amp;nbsp;#define DS_TIME_DEL 10 &amp;nbsp;/* Delay of multimedia timer callback, and duration of HEL fragment */
&lt;br&gt;-
&lt;br&gt;+/* Default refresh count, can be overridden */
&lt;br&gt;+#define FAKE_REFRESH_COUNT (1000/DS_TIME_DEL/2)
&lt;br&gt;+ 
&lt;br&gt;&amp;nbsp;#include &amp;quot;wine/list.h&amp;quot;
&lt;br&gt;+ 
&lt;br&gt;+#ifdef HAVE_OPENAL
&lt;br&gt;+
&lt;br&gt;+#ifdef HAVE_AL_AL_H
&lt;br&gt;+#include &amp;lt;AL/al.h&amp;gt;
&lt;br&gt;+#include &amp;lt;AL/alc.h&amp;gt;
&lt;br&gt;+#elif defined(HAVE_OPENAL_AL_H)
&lt;br&gt;+#include &amp;lt;OpenAL/al.h&amp;gt;
&lt;br&gt;+#include &amp;lt;OpenAL/alc.h&amp;gt;
&lt;br&gt;+#else
&lt;br&gt;+#error No OpenAL headers found?
&lt;br&gt;+#endif
&lt;br&gt;+
&lt;br&gt;+/* All openal functions */
&lt;br&gt;+extern int openal_loaded;
&lt;br&gt;+#ifdef SONAME_LIBOPENAL
&lt;br&gt;+extern LPALCCREATECONTEXT palcCreateContext;
&lt;br&gt;+extern LPALCMAKECONTEXTCURRENT palcMakeContextCurrent;
&lt;br&gt;+extern LPALCPROCESSCONTEXT palcProcessContext;
&lt;br&gt;+extern LPALCSUSPENDCONTEXT palcSuspendContext;
&lt;br&gt;+extern LPALCDESTROYCONTEXT palcDestroyContext;
&lt;br&gt;+extern LPALCGETCURRENTCONTEXT palcGetCurrentContext;
&lt;br&gt;+extern LPALCGETCONTEXTSDEVICE palcGetContextsDevice;
&lt;br&gt;+extern LPALCOPENDEVICE palcOpenDevice;
&lt;br&gt;+extern LPALCCLOSEDEVICE palcCloseDevice;
&lt;br&gt;+extern LPALCGETERROR palcGetError;
&lt;br&gt;+extern LPALCISEXTENSIONPRESENT palcIsExtensionPresent;
&lt;br&gt;+extern LPALCGETPROCADDRESS palcGetProcAddress;
&lt;br&gt;+extern LPALCGETENUMVALUE palcGetEnumValue;
&lt;br&gt;+extern LPALCGETSTRING palcGetString;
&lt;br&gt;+extern LPALCGETINTEGERV palcGetIntegerv;
&lt;br&gt;+extern LPALCCAPTUREOPENDEVICE palcCaptureOpenDevice;
&lt;br&gt;+extern LPALCCAPTURECLOSEDEVICE palcCaptureCloseDevice;
&lt;br&gt;+extern LPALCCAPTURESTART palcCaptureStart;
&lt;br&gt;+extern LPALCCAPTURESTOP palcCaptureStop;
&lt;br&gt;+extern LPALCCAPTURESAMPLES palcCaptureSamples;
&lt;br&gt;+extern LPALENABLE palEnable;
&lt;br&gt;+extern LPALDISABLE palDisable;
&lt;br&gt;+extern LPALISENABLED palIsEnabled;
&lt;br&gt;+extern LPALGETSTRING palGetString;
&lt;br&gt;+extern LPALGETBOOLEANV palGetBooleanv;
&lt;br&gt;+extern LPALGETINTEGERV palGetIntegerv;
&lt;br&gt;+extern LPALGETFLOATV palGetFloatv;
&lt;br&gt;+extern LPALGETDOUBLEV palGetDoublev;
&lt;br&gt;+extern LPALGETBOOLEAN palGetBoolean;
&lt;br&gt;+extern LPALGETINTEGER palGetInteger;
&lt;br&gt;+extern LPALGETFLOAT palGetFloat;
&lt;br&gt;+extern LPALGETDOUBLE palGetDouble;
&lt;br&gt;+extern LPALGETERROR palGetError;
&lt;br&gt;+extern LPALISEXTENSIONPRESENT palIsExtensionPresent;
&lt;br&gt;+extern LPALGETPROCADDRESS palGetProcAddress;
&lt;br&gt;+extern LPALGETENUMVALUE palGetEnumValue;
&lt;br&gt;+extern LPALLISTENERF palListenerf;
&lt;br&gt;+extern LPALLISTENER3F palListener3f;
&lt;br&gt;+extern LPALLISTENERFV palListenerfv;
&lt;br&gt;+extern LPALLISTENERI palListeneri;
&lt;br&gt;+extern LPALLISTENER3I palListener3i;
&lt;br&gt;+extern LPALLISTENERIV palListeneriv;
&lt;br&gt;+extern LPALGETLISTENERF palGetListenerf;
&lt;br&gt;+extern LPALGETLISTENER3F palGetListener3f;
&lt;br&gt;+extern LPALGETLISTENERFV palGetListenerfv;
&lt;br&gt;+extern LPALGETLISTENERI palGetListeneri;
&lt;br&gt;+extern LPALGETLISTENER3I palGetListener3i;
&lt;br&gt;+extern LPALGETLISTENERIV palGetListeneriv;
&lt;br&gt;+extern LPALGENSOURCES palGenSources;
&lt;br&gt;+extern LPALDELETESOURCES palDeleteSources;
&lt;br&gt;+extern LPALISSOURCE palIsSource;
&lt;br&gt;+extern LPALSOURCEF palSourcef;
&lt;br&gt;+extern LPALSOURCE3F palSource3f;
&lt;br&gt;+extern LPALSOURCEFV palSourcefv;
&lt;br&gt;+extern LPALSOURCEI palSourcei;
&lt;br&gt;+extern LPALSOURCE3I palSource3i;
&lt;br&gt;+extern LPALSOURCEIV palSourceiv;
&lt;br&gt;+extern LPALGETSOURCEF palGetSourcef;
&lt;br&gt;+extern LPALGETSOURCE3F palGetSource3f;
&lt;br&gt;+extern LPALGETSOURCEFV palGetSourcefv;
&lt;br&gt;+extern LPALGETSOURCEI palGetSourcei;
&lt;br&gt;+extern LPALGETSOURCE3I palGetSource3i;
&lt;br&gt;+extern LPALGETSOURCEIV palGetSourceiv;
&lt;br&gt;+extern LPALSOURCEPLAYV palSourcePlayv;
&lt;br&gt;+extern LPALSOURCESTOPV palSourceStopv;
&lt;br&gt;+extern LPALSOURCEREWINDV palSourceRewindv;
&lt;br&gt;+extern LPALSOURCEPAUSEV palSourcePausev;
&lt;br&gt;+extern LPALSOURCEPLAY palSourcePlay;
&lt;br&gt;+extern LPALSOURCESTOP palSourceStop;
&lt;br&gt;+extern LPALSOURCEREWIND palSourceRewind;
&lt;br&gt;+extern LPALSOURCEPAUSE palSourcePause;
&lt;br&gt;+extern LPALSOURCEQUEUEBUFFERS palSourceQueueBuffers;
&lt;br&gt;+extern LPALSOURCEUNQUEUEBUFFERS palSourceUnqueueBuffers;
&lt;br&gt;+extern LPALGENBUFFERS palGenBuffers;
&lt;br&gt;+extern LPALDELETEBUFFERS palDeleteBuffers;
&lt;br&gt;+extern LPALISBUFFER palIsBuffer;
&lt;br&gt;+extern LPALBUFFERF palBufferf;
&lt;br&gt;+extern LPALBUFFER3F palBuffer3f;
&lt;br&gt;+extern LPALBUFFERFV palBufferfv;
&lt;br&gt;+extern LPALBUFFERI palBufferi;
&lt;br&gt;+extern LPALBUFFER3I palBuffer3i;
&lt;br&gt;+extern LPALBUFFERIV palBufferiv;
&lt;br&gt;+extern LPALGETBUFFERF palGetBufferf;
&lt;br&gt;+extern LPALGETBUFFER3F palGetBuffer3f;
&lt;br&gt;+extern LPALGETBUFFERFV palGetBufferfv;
&lt;br&gt;+extern LPALGETBUFFERI palGetBufferi;
&lt;br&gt;+extern LPALGETBUFFER3I palGetBuffer3i;
&lt;br&gt;+extern LPALGETBUFFERIV palGetBufferiv;
&lt;br&gt;+extern LPALBUFFERDATA palBufferData;
&lt;br&gt;+extern LPALDOPPLERFACTOR palDopplerFactor;
&lt;br&gt;+extern LPALDOPPLERVELOCITY palDopplerVelocity;
&lt;br&gt;+extern LPALDISTANCEMODEL palDistanceModel;
&lt;br&gt;+extern LPALSPEEDOFSOUND palSpeedOfSound;
&lt;br&gt;+#else
&lt;br&gt;+#define palcCreateContext alcCreateContext
&lt;br&gt;+#define palcMakeContextCurrent alcMakeContextCurrent
&lt;br&gt;+#define palcProcessContext alcProcessContext
&lt;br&gt;+#define palcSuspendContext alcSuspendContext
&lt;br&gt;+#define palcDestroyContext alcDestroyContext
&lt;br&gt;+#define palcGetCurrentContext alcGetCurrentContext
&lt;br&gt;+#define palcGetContextsDevice alcGetContextsDevice
&lt;br&gt;+#define palcOpenDevice alcOpenDevice
&lt;br&gt;+#define palcCloseDevice alcCloseDevice
&lt;br&gt;+#define palcGetError alcGetError
&lt;br&gt;+#define palcIsExtensionPresent alcIsExtensionPresent
&lt;br&gt;+#define palcGetProcAddress alcGetProcAddress
&lt;br&gt;+#define palcGetEnumValue alcGetEnumValue
&lt;br&gt;+#define palcGetString alcGetString
&lt;br&gt;+#define palcGetIntegerv alcGetIntegerv
&lt;br&gt;+#define palcCaptureOpenDevice alcCaptureOpenDevice
&lt;br&gt;+#define palcCaptureCloseDevice alcCaptureCloseDevice
&lt;br&gt;+#define palcCaptureStart alcCaptureStart
&lt;br&gt;+#define palcCaptureStop alcCaptureStop
&lt;br&gt;+#define palcCaptureSamples alcCaptureSamples
&lt;br&gt;+#define palEnable alEnable
&lt;br&gt;+#define palDisable alDisable
&lt;br&gt;+#define palIsEnabled alIsEnabled
&lt;br&gt;+#define palGetString alGetString
&lt;br&gt;+#define palGetBooleanv alGetBooleanv
&lt;br&gt;+#define palGetIntegerv alGetIntegerv
&lt;br&gt;+#define palGetFloatv alGetFloatv
&lt;br&gt;+#define palGetDoublev alGetDoublev
&lt;br&gt;+#define palGetBoolean alGetBoolean
&lt;br&gt;+#define palGetInteger alGetInteger
&lt;br&gt;+#define palGetFloat alGetFloat
&lt;br&gt;+#define palGetDouble alGetDouble
&lt;br&gt;+#define palGetError alGetError
&lt;br&gt;+#define palIsExtensionPresent alIsExtensionPresent
&lt;br&gt;+#define palGetProcAddress alGetProcAddress
&lt;br&gt;+#define palGetEnumValue alGetEnumValue
&lt;br&gt;+#define palListenerf alListenerf
&lt;br&gt;+#define palListener3f alListener3f
&lt;br&gt;+#define palListenerfv alListenerfv
&lt;br&gt;+#define palListeneri alListeneri
&lt;br&gt;+#define palListener3i alListener3i
&lt;br&gt;+#define palListeneriv alListeneriv
&lt;br&gt;+#define palGetListenerf alGetListenerf
&lt;br&gt;+#define palGetListener3f alGetListener3f
&lt;br&gt;+#define palGetListenerfv alGetListenerfv
&lt;br&gt;+#define palGetListeneri alGetListeneri
&lt;br&gt;+#define palGetListener3i alGetListener3i
&lt;br&gt;+#define palGetListeneriv alGetListeneriv
&lt;br&gt;+#define palGenSources alGenSources
&lt;br&gt;+#define palDeleteSources alDeleteSources
&lt;br&gt;+#define palIsSource alIsSource
&lt;br&gt;+#define palSourcef alSourcef
&lt;br&gt;+#define palSource3f alSource3f
&lt;br&gt;+#define palSourcefv alSourcefv
&lt;br&gt;+#define palSourcei alSourcei
&lt;br&gt;+#define palSource3i alSource3i
&lt;br&gt;+#define palSourceiv alSourceiv
&lt;br&gt;+#define palGetSourcef alGetSourcef
&lt;br&gt;+#define palGetSource3f alGetSource3f
&lt;br&gt;+#define palGetSourcefv alGetSourcefv
&lt;br&gt;+#define palGetSourcei alGetSourcei
&lt;br&gt;+#define palGetSource3i alGetSource3i
&lt;br&gt;+#define palGetSourceiv alGetSourceiv
&lt;br&gt;+#define palSourcePlayv alSourcePlayv
&lt;br&gt;+#define palSourceStopv alSourceStopv
&lt;br&gt;+#define palSourceRewindv alSourceRewindv
&lt;br&gt;+#define palSourcePausev alSourcePausev
&lt;br&gt;+#define palSourcePlay alSourcePlay
&lt;br&gt;+#define palSourceStop alSourceStop
&lt;br&gt;+#define palSourceRewind alSourceRewind
&lt;br&gt;+#define palSourcePause alSourcePause
&lt;br&gt;+#define palSourceQueueBuffers alSourceQueueBuffers
&lt;br&gt;+#define palSourceUnqueueBuffers alSourceUnqueueBuffers
&lt;br&gt;+#define palGenBuffers alGenBuffers
&lt;br&gt;+#define palDeleteBuffers alDeleteBuffers
&lt;br&gt;+#define palIsBuffer alIsBuffer
&lt;br&gt;+#define palBufferf alBufferf
&lt;br&gt;+#define palBuffer3f alBuffer3f
&lt;br&gt;+#define palBufferfv alBufferfv
&lt;br&gt;+#define palBufferi alBufferi
&lt;br&gt;+#define palBuffer3i alBuffer3i
&lt;br&gt;+#define palBufferiv alBufferiv
&lt;br&gt;+#define palGetBufferf alGetBufferf
&lt;br&gt;+#define palGetBuffer3f alGetBuffer3f
&lt;br&gt;+#define palGetBufferfv alGetBufferfv
&lt;br&gt;+#define palGetBufferi alGetBufferi
&lt;br&gt;+#define palGetBuffer3i alGetBuffer3i
&lt;br&gt;+#define palGetBufferiv alGetBufferiv
&lt;br&gt;+#define palBufferData alBufferData
&lt;br&gt;+#define palDopplerFactor alDopplerFactor
&lt;br&gt;+#define palDopplerVelocity alDopplerVelocity
&lt;br&gt;+#define palDistanceModel alDistanceModel
&lt;br&gt;+#define palSpeedOfSound alSpeedOfSound
&lt;br&gt;+#endif
&lt;br&gt;+
&lt;br&gt;+#include &amp;lt;math.h&amp;gt;
&lt;br&gt;+#include &amp;quot;wingdi.h&amp;quot;
&lt;br&gt;+#include &amp;quot;mmreg.h&amp;quot;
&lt;br&gt;+
&lt;br&gt;+/* OpenAL only allows for 1 single access to the device at the same time */
&lt;br&gt;+extern CRITICAL_SECTION openal_crst;
&lt;br&gt;+
&lt;br&gt;+#endif
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;/* direct sound hardware acceleration levels */
&lt;br&gt;&amp;nbsp;#define DS_HW_ACCEL_FULL &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;0	/* default on Windows 98 */
&lt;br&gt;diff --git a/dlls/openal32/Makefile.in b/dlls/openal32/Makefile.in
&lt;br&gt;index b237706..9c2ac8f 100644
&lt;br&gt;--- a/dlls/openal32/Makefile.in
&lt;br&gt;+++ b/dlls/openal32/Makefile.in
&lt;br&gt;@@ -4,7 +4,7 @@ SRCDIR &amp;nbsp; &amp;nbsp;= @srcdir@
&lt;br&gt;&amp;nbsp;VPATH &amp;nbsp; &amp;nbsp; = @srcdir@
&lt;br&gt;&amp;nbsp;MODULE &amp;nbsp; &amp;nbsp;= openal32.dll
&lt;br&gt;&amp;nbsp;IMPORTS &amp;nbsp; = kernel32 ntdll
&lt;br&gt;-EXTRALIBS = @LIBOPENAL@
&lt;br&gt;+EXTRALIBS = @LIBOPENAL@ @FRAMEWORK_OPENAL@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;C_SRCS = \
&lt;br&gt;&amp;nbsp;	openal.c
&lt;br&gt;diff --git a/include/config.h.in b/include/config.h.in
&lt;br&gt;index 7a77d1f..cb4c61d 100644
&lt;br&gt;--- a/include/config.h.in
&lt;br&gt;+++ b/include/config.h.in
&lt;br&gt;@@ -558,6 +558,9 @@
&lt;br&gt;&amp;nbsp;/* Define if mkdir takes only one argument */
&lt;br&gt;&amp;nbsp;#undef HAVE_ONE_ARG_MKDIR
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+/* Define to 1 if OpenAL is available */
&lt;br&gt;+#undef HAVE_OPENAL
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;/* Define to 1 if you have the &amp;lt;OpenAL/al.h&amp;gt; header file. */
&lt;br&gt;&amp;nbsp;#undef HAVE_OPENAL_AL_H
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -1185,6 +1188,9 @@
&lt;br&gt;&amp;nbsp;/* Define to the soname of the libodbc library. */
&lt;br&gt;&amp;nbsp;#undef SONAME_LIBODBC
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+/* Define to the soname of the libopenal library. */
&lt;br&gt;+#undef SONAME_LIBOPENAL
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;/* Define to the soname of the libpng library. */
&lt;br&gt;&amp;nbsp;#undef SONAME_LIBPNG
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-- 
&lt;br&gt;1.6.5.3
&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-PATCH-1-2--dsound%3A-Only-initialize-1-guid-for-capture-and-renderer-tp26708487p26708556.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26708487</id>
	<title>[PATCH 1/2] dsound: Only initialize 1 guid for capture and renderer</title>
	<published>2009-12-09T03:01:27Z</published>
	<updated>2009-12-09T03:01:27Z</updated>
	<author>
		<name>Maarten Lankhorst</name>
	</author>
	<content type="html">---
&lt;br&gt;Since the guids are static anyway, the code can be simplified
&lt;br&gt;---
&lt;br&gt;&amp;nbsp;dlls/dsound/capture.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; 11 ++++-------
&lt;br&gt;&amp;nbsp;dlls/dsound/dsound.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; 10 ++++------
&lt;br&gt;&amp;nbsp;dlls/dsound/dsound_main.c &amp;nbsp; &amp;nbsp;| &amp;nbsp; 39 +++++++++++++++++++++------------------
&lt;br&gt;&amp;nbsp;dlls/dsound/dsound_private.h | &amp;nbsp; &amp;nbsp;5 ++---
&lt;br&gt;&amp;nbsp;dlls/dsound/propset.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; 14 ++++++++------
&lt;br&gt;&amp;nbsp;5 files changed, 39 insertions(+), 40 deletions(-)
&lt;br&gt;&lt;br&gt;diff --git a/dlls/dsound/capture.c b/dlls/dsound/capture.c
&lt;br&gt;index 26c86b8..f2a26bc 100644
&lt;br&gt;--- a/dlls/dsound/capture.c
&lt;br&gt;+++ b/dlls/dsound/capture.c
&lt;br&gt;@@ -1059,13 +1059,10 @@ static HRESULT DirectSoundCaptureDevice_Initialize(
&lt;br&gt;&amp;nbsp;	return DSERR_NODRIVER;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;/* enumerate WINMM audio devices and find the one we want */
&lt;br&gt;- &amp;nbsp; &amp;nbsp;for (wid=0; wid&amp;lt;widn; wid++) {
&lt;br&gt;-	if (IsEqualGUID( &amp;devGUID, &amp;DSOUND_capture_guids[wid]) ) {
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp;found = TRUE;
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp;break;
&lt;br&gt;-	}
&lt;br&gt;- &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;wid = devGUID.Data4[7];
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (!memcmp(&amp;devGUID, &amp;DSOUND_capture_guid, sizeof(GUID)-1)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;&amp; wid &amp;lt; widn)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;found = TRUE;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;if (found == FALSE) {
&lt;br&gt;&amp;nbsp;	WARN(&amp;quot;No device found matching given ID!\n&amp;quot;);
&lt;br&gt;diff --git a/dlls/dsound/dsound.c b/dlls/dsound/dsound.c
&lt;br&gt;index 83636c2..2a50329 100644
&lt;br&gt;--- a/dlls/dsound/dsound.c
&lt;br&gt;+++ b/dlls/dsound/dsound.c
&lt;br&gt;@@ -1373,12 +1373,10 @@ HRESULT DirectSoundDevice_Initialize(DirectSoundDevice ** ppDevice, LPCGUID lpcG
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return DSERR_NODRIVER;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;for (wod=0; wod&amp;lt;wodn; wod++) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (IsEqualGUID( &amp;devGUID, &amp;DSOUND_renderer_guids[wod])) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;found = TRUE;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;break;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;- &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;wod = devGUID.Data4[7];
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (!memcmp(&amp;devGUID, &amp;DSOUND_renderer_guid, sizeof(GUID)-1)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;&amp; wod &amp;lt; wodn)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;found = TRUE;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;if (found == FALSE) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;WARN(&amp;quot;No device found matching given ID!\n&amp;quot;);
&lt;br&gt;diff --git a/dlls/dsound/dsound_main.c b/dlls/dsound/dsound_main.c
&lt;br&gt;index bfb8708..3fcabdb 100644
&lt;br&gt;--- a/dlls/dsound/dsound_main.c
&lt;br&gt;+++ b/dlls/dsound/dsound_main.c
&lt;br&gt;@@ -58,8 +58,8 @@
&lt;br&gt;&amp;nbsp;WINE_DEFAULT_DEBUG_CHANNEL(dsound);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;DirectSoundDevice*	DSOUND_renderer[MAXWAVEDRIVERS];
&lt;br&gt;-GUID &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;DSOUND_renderer_guids[MAXWAVEDRIVERS];
&lt;br&gt;-GUID &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;DSOUND_capture_guids[MAXWAVEDRIVERS];
&lt;br&gt;+GUID DSOUND_renderer_guid = { 0xbd6dd71a,0x3deb,0x11d1, {0xb1,0x71,0x00,0xc0,0x4f,0xc2,0x00,0x00} };
&lt;br&gt;+GUID DSOUND_capture_guid = { 0xbd6dd71b,0x3deb,0x11d1, {0xb1,0x71,0x00,0xc0,0x4f,0xc2,0x00,0x00} };
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;HRESULT mmErr(UINT err)
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;@@ -253,17 +253,19 @@ HRESULT WINAPI GetDeviceID(LPCGUID pGuidSrc, LPGUID pGuidDest)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;if ( IsEqualGUID( &amp;DSDEVID_DefaultPlayback, pGuidSrc ) ||
&lt;br&gt;- &amp;nbsp; &amp;nbsp;	 IsEqualGUID( &amp;DSDEVID_DefaultVoicePlayback, pGuidSrc ) ) {
&lt;br&gt;-	*pGuidDest = DSOUND_renderer_guids[ds_default_playback];
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; IsEqualGUID( &amp;DSDEVID_DefaultVoicePlayback, pGuidSrc ) ) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;*pGuidDest = DSOUND_renderer_guid;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;pGuidDest-&amp;gt;Data4[7] = ds_default_playback;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;TRACE(&amp;quot;returns %s\n&amp;quot;, get_device_id(pGuidDest));
&lt;br&gt;-	return DS_OK;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return DS_OK;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;if ( IsEqualGUID( &amp;DSDEVID_DefaultCapture, pGuidSrc ) ||
&lt;br&gt;- &amp;nbsp; &amp;nbsp;	 IsEqualGUID( &amp;DSDEVID_DefaultVoiceCapture, pGuidSrc ) ) {
&lt;br&gt;-	*pGuidDest = DSOUND_capture_guids[ds_default_capture];
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; IsEqualGUID( &amp;DSDEVID_DefaultVoiceCapture, pGuidSrc ) ) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;*pGuidDest = DSOUND_capture_guid;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;pGuidDest-&amp;gt;Data4[7] = ds_default_capture;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;TRACE(&amp;quot;returns %s\n&amp;quot;, get_device_id(pGuidDest));
&lt;br&gt;-	return DS_OK;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return DS_OK;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;*pGuidDest = *pGuidSrc;
&lt;br&gt;@@ -355,8 +357,8 @@ HRESULT WINAPI DirectSoundEnumerateW(
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;if (devs &amp;gt; 0) {
&lt;br&gt;&amp;nbsp;	if (GetDeviceID(&amp;DSDEVID_DefaultPlayback, &amp;guid) == DS_OK) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;static const WCHAR empty[] = { 0 };
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp;for (wod = 0; wod &amp;lt; devs; ++wod) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (IsEqualGUID( &amp;guid, &amp;DSOUND_renderer_guids[wod] ) ) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;wod = guid.Data4[7];
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (wod &amp;lt; devs) { {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;err = mmErr(waveOutMessage(UlongToHandle(wod),DRV_QUERYDSOUNDDESC,(DWORD_PTR)&amp;desc,0));
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (err == DS_OK) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;TRACE(&amp;quot;calling lpDSEnumCallback(NULL,\&amp;quot;%s\&amp;quot;,\&amp;quot;%s\&amp;quot;,%p)\n&amp;quot;,
&lt;br&gt;@@ -374,13 +376,14 @@ HRESULT WINAPI DirectSoundEnumerateW(
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;for (wod = 0; wod &amp;lt; devs; ++wod) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;err = mmErr(waveOutMessage(UlongToHandle(wod),DRV_QUERYDSOUNDDESC,(DWORD_PTR)&amp;desc,0));
&lt;br&gt;&amp;nbsp;	if (err == DS_OK) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;guid.Data4[7] = wod;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;TRACE(&amp;quot;calling lpDSEnumCallback(%s,\&amp;quot;%s\&amp;quot;,\&amp;quot;%s\&amp;quot;,%p)\n&amp;quot;,
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;debugstr_guid(&amp;DSOUND_renderer_guids[wod]),desc.szDesc,desc.szDrvname,lpContext);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;debugstr_guid(&amp;guid),desc.szDesc,desc.szDrvname,lpContext);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;MultiByteToWideChar( CP_ACP, 0, desc.szDesc, -1,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; wDesc, sizeof(wDesc)/sizeof(WCHAR) );
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;MultiByteToWideChar( CP_ACP, 0, desc.szDrvname, -1,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; wName, sizeof(wName)/sizeof(WCHAR) );
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (lpDSEnumCallback(&amp;DSOUND_renderer_guids[wod], wDesc, wName, lpContext) == FALSE)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (lpDSEnumCallback(&amp;guid, wDesc, wName, lpContext) == FALSE)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return DS_OK;
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;@@ -452,8 +455,8 @@ DirectSoundCaptureEnumerateW(
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;devs = waveInGetNumDevs();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;if (devs &amp;gt; 0) {
&lt;br&gt;&amp;nbsp;	if (GetDeviceID(&amp;DSDEVID_DefaultCapture, &amp;guid) == DS_OK) {
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp;for (wid = 0; wid &amp;lt; devs; ++wid) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (IsEqualGUID( &amp;guid, &amp;DSOUND_capture_guids[wid] ) ) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;wid = guid.Data4[7];
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (wid &amp;lt; devs) { {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;err = mmErr(waveInMessage(UlongToHandle(wid),DRV_QUERYDSOUNDDESC,(DWORD_PTR)&amp;desc,0));
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (err == DS_OK) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;TRACE(&amp;quot;calling lpDSEnumCallback(NULL,\&amp;quot;%s\&amp;quot;,\&amp;quot;%s\&amp;quot;,%p)\n&amp;quot;,
&lt;br&gt;@@ -473,13 +476,14 @@ DirectSoundCaptureEnumerateW(
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;for (wid = 0; wid &amp;lt; devs; ++wid) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;err = mmErr(waveInMessage(UlongToHandle(wid),DRV_QUERYDSOUNDDESC,(DWORD_PTR)&amp;desc,0));
&lt;br&gt;&amp;nbsp;	if (err == DS_OK) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;guid.Data4[7] = wid;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;TRACE(&amp;quot;calling lpDSEnumCallback(%s,\&amp;quot;%s\&amp;quot;,\&amp;quot;%s\&amp;quot;,%p)\n&amp;quot;,
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;debugstr_guid(&amp;DSOUND_capture_guids[wid]),desc.szDesc,desc.szDrvname,lpContext);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;debugstr_guid(&amp;guid),desc.szDesc,desc.szDrvname,lpContext);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;MultiByteToWideChar( CP_ACP, 0, desc.szDesc, -1,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; wDesc, sizeof(wDesc)/sizeof(WCHAR) );
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;MultiByteToWideChar( CP_ACP, 0, desc.szDrvname, -1,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; wName, sizeof(wName)/sizeof(WCHAR) );
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (lpDSEnumCallback(&amp;DSOUND_capture_guids[wid], wDesc, wName, lpContext) == FALSE)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (lpDSEnumCallback(&amp;guid, wDesc, wName, lpContext) == FALSE)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return DS_OK;
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;@@ -664,8 +668,6 @@ BOOL WINAPI DllMain(HINSTANCE hInstDLL, DWORD fdwReason, LPVOID lpvReserved)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for (i = 0; i &amp;lt; MAXWAVEDRIVERS; i++) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;DSOUND_renderer[i] = NULL;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;DSOUND_capture[i] = NULL;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;INIT_GUID(DSOUND_renderer_guids[i], 0xbd6dd71a, 0x3deb, 0x11d1, 0xb1, 0x71, 0x00, 0xc0, 0x4f, 0xc2, 0x00, 0x00 + i);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;INIT_GUID(DSOUND_capture_guids[i], &amp;nbsp;0xbd6dd71b, 0x3deb, 0x11d1, 0xb1, 0x71, 0x00, 0xc0, 0x4f, 0xc2, 0x00, 0x00 + i);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;DisableThreadLibraryCalls(hInstDLL);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;/* Increase refcount on dsound by 1 */
&lt;br&gt;@@ -680,3 +682,4 @@ BOOL WINAPI DllMain(HINSTANCE hInstDLL, DWORD fdwReason, LPVOID lpvReserved)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;return TRUE;
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;diff --git a/dlls/dsound/dsound_private.h b/dlls/dsound/dsound_private.h
&lt;br&gt;index 1b25ddd..33c2f98 100644
&lt;br&gt;--- a/dlls/dsound/dsound_private.h
&lt;br&gt;+++ b/dlls/dsound/dsound_private.h
&lt;br&gt;@@ -414,10 +414,9 @@ HRESULT DSOUND_CaptureCreate8(REFIID riid, LPDIRECTSOUNDCAPTURE8 *ppDSC8);
&lt;br&gt;&amp;nbsp;#define DSOUND_FREQSHIFT (20)
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;extern DirectSoundDevice* DSOUND_renderer[MAXWAVEDRIVERS];
&lt;br&gt;-extern GUID DSOUND_renderer_guids[MAXWAVEDRIVERS];
&lt;br&gt;-
&lt;br&gt;&amp;nbsp;extern DirectSoundCaptureDevice * DSOUND_capture[MAXWAVEDRIVERS];
&lt;br&gt;-extern GUID DSOUND_capture_guids[MAXWAVEDRIVERS];
&lt;br&gt;+extern GUID DSOUND_capture_guid;
&lt;br&gt;+extern GUID DSOUND_renderer_guid;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;HRESULT mmErr(UINT err);
&lt;br&gt;&amp;nbsp;void setup_dsound_options(void);
&lt;br&gt;diff --git a/dlls/dsound/propset.c b/dlls/dsound/propset.c
&lt;br&gt;index fb9f280..cef31a1 100644
&lt;br&gt;--- a/dlls/dsound/propset.c
&lt;br&gt;+++ b/dlls/dsound/propset.c
&lt;br&gt;@@ -116,7 +116,8 @@ static HRESULT DSPROPERTY_WaveDeviceMappingW(
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;res = waveOutGetDevCapsW(wod, &amp;capsW, sizeof(capsW));
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (res == MMSYSERR_NOERROR) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (lstrcmpW(capsW.szPname, ppd-&amp;gt;DeviceName) == 0) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ppd-&amp;gt;DeviceId = DSOUND_renderer_guids[wod];
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ppd-&amp;gt;DeviceId = DSOUND_renderer_guid;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ppd-&amp;gt;DeviceId.Data4[7] = wod;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;hr = DS_OK;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;TRACE(&amp;quot;found %s for %s\n&amp;quot;, debugstr_guid(&amp;ppd-&amp;gt;DeviceId),
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;debugstr_w(ppd-&amp;gt;DeviceName));
&lt;br&gt;@@ -135,7 +136,8 @@ static HRESULT DSPROPERTY_WaveDeviceMappingW(
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;res = waveInGetDevCapsW(wid, &amp;capsW, sizeof(capsW));
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (res == MMSYSERR_NOERROR) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (lstrcmpW(capsW.szPname, ppd-&amp;gt;DeviceName) == 0) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ppd-&amp;gt;DeviceId = DSOUND_capture_guids[wid];
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ppd-&amp;gt;DeviceId = DSOUND_capture_guid;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ppd-&amp;gt;DeviceId.Data4[7] = wid;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;hr = DS_OK;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;TRACE(&amp;quot;found %s for %s\n&amp;quot;, debugstr_guid(&amp;ppd-&amp;gt;DeviceId),
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;debugstr_w(ppd-&amp;gt;DeviceName));
&lt;br&gt;@@ -220,13 +222,13 @@ static HRESULT DSPROPERTY_DescriptionW(
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;wodn = waveOutGetNumDevs();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;widn = waveInGetNumDevs();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;wid = wod = dev_guid.Data4[7];
&lt;br&gt;- &amp;nbsp; &amp;nbsp;if (!memcmp(&amp;dev_guid, &amp;DSOUND_renderer_guids[0], sizeof(GUID)-1)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (!memcmp(&amp;dev_guid, &amp;DSOUND_renderer_guid, sizeof(GUID)-1)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;&amp; wod &amp;lt; wodn)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;{
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ppd-&amp;gt;DataFlow = DIRECTSOUNDDEVICE_DATAFLOW_RENDER;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ppd-&amp;gt;WaveDeviceId = wod;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;- &amp;nbsp; &amp;nbsp;else if (!memcmp(&amp;dev_guid, &amp;DSOUND_capture_guids[0], sizeof(GUID)-1)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;else if (!memcmp(&amp;dev_guid, &amp;DSOUND_capture_guid, sizeof(GUID)-1)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;&amp; wid &amp;lt; widn)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;{
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ppd-&amp;gt;DataFlow = DIRECTSOUNDDEVICE_DATAFLOW_CAPTURE;
&lt;br&gt;@@ -306,7 +308,7 @@ static HRESULT DSPROPERTY_EnumerateW(
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;wodn = waveOutGetNumDevs();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;widn = waveInGetNumDevs();
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;data.DeviceId = DSOUND_renderer_guids[0];
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;data.DeviceId = DSOUND_renderer_guid;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;for (i = 0; i &amp;lt; wodn; ++i)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;{
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;HRESULT hr;
&lt;br&gt;@@ -324,7 +326,7 @@ static HRESULT DSPROPERTY_EnumerateW(
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return S_OK;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;data.DeviceId = DSOUND_capture_guids[0];
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;data.DeviceId = DSOUND_capture_guid;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;for (i = 0; i &amp;lt; widn; ++i)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;{
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;HRESULT hr;
&lt;br&gt;-- 
&lt;br&gt;1.6.5.3
&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-PATCH-1-2--dsound%3A-Only-initialize-1-guid-for-capture-and-renderer-tp26708487p26708487.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26708378</id>
	<title>[PATCH 5/5] wined3d: Only disable blending for offscreen targets.</title>
	<published>2009-12-09T02:51:19Z</published>
	<updated>2009-12-09T02:51:19Z</updated>
	<author>
		<name>Henri Verbeet-2</name>
	</author>
	<content type="html">---
&lt;br&gt;&amp;nbsp;dlls/wined3d/state.c | &amp;nbsp; &amp;nbsp;3 ++-
&lt;br&gt;&amp;nbsp;1 files changed, 2 insertions(+), 1 deletions(-)
&lt;br&gt;&lt;br&gt;diff --git a/dlls/wined3d/state.c b/dlls/wined3d/state.c
&lt;br&gt;index 6df6e54..716ec48 100644
&lt;br&gt;--- a/dlls/wined3d/state.c
&lt;br&gt;+++ b/dlls/wined3d/state.c
&lt;br&gt;@@ -252,7 +252,8 @@ static void state_blend(DWORD state, IWineD3DStateBlockImpl *stateblock, struct
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;/* Disable blending in all cases even without pixelshaders. With blending on we could face a big performance penalty.
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; * The d3d9 visual test confirms the behavior. */
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (!(target-&amp;gt;resource.format_desc-&amp;gt;Flags &amp; WINED3DFMT_FLAG_POSTPIXELSHADER_BLENDING))
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (context-&amp;gt;render_offscreen
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;&amp; !(target-&amp;gt;resource.format_desc-&amp;gt;Flags &amp; WINED3DFMT_FLAG_POSTPIXELSHADER_BLENDING))
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;glDisable(GL_BLEND);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;checkGLcall(&amp;quot;glDisable GL_BLEND&amp;quot;);
&lt;br&gt;-- 
&lt;br&gt;1.6.4.4
&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-PATCH-5-5--wined3d%3A-Only-disable-blending-for-offscreen-targets.-tp26708378p26708378.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26708383</id>
	<title>[PATCH 4/5] wined3d: Remove unused GetDevice() implementations.</title>
	<published>2009-12-09T02:51:18Z</published>
	<updated>2009-12-09T02:51:18Z</updated>
	<author>
		<name>Henri Verbeet-2</name>
	</author>
	<content type="html">---
&lt;br&gt;&amp;nbsp;dlls/wined3d/buffer.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; &amp;nbsp;6 ------
&lt;br&gt;&amp;nbsp;dlls/wined3d/cubetexture.c &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; &amp;nbsp;5 -----
&lt;br&gt;&amp;nbsp;dlls/wined3d/pixelshader.c &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; 10 ----------
&lt;br&gt;&amp;nbsp;dlls/wined3d/query.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; 12 ------------
&lt;br&gt;&amp;nbsp;dlls/wined3d/resource.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; &amp;nbsp;9 ---------
&lt;br&gt;&amp;nbsp;dlls/wined3d/stateblock.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; 11 -----------
&lt;br&gt;&amp;nbsp;dlls/wined3d/surface.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; &amp;nbsp;1 -
&lt;br&gt;&amp;nbsp;dlls/wined3d/surface_base.c &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; &amp;nbsp;4 ----
&lt;br&gt;&amp;nbsp;dlls/wined3d/surface_gdi.c &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; &amp;nbsp;1 -
&lt;br&gt;&amp;nbsp;dlls/wined3d/texture.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; &amp;nbsp;5 -----
&lt;br&gt;&amp;nbsp;dlls/wined3d/vertexdeclaration.c | &amp;nbsp; 11 -----------
&lt;br&gt;&amp;nbsp;dlls/wined3d/vertexshader.c &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; &amp;nbsp;9 ---------
&lt;br&gt;&amp;nbsp;dlls/wined3d/volume.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; &amp;nbsp;5 -----
&lt;br&gt;&amp;nbsp;dlls/wined3d/volumetexture.c &amp;nbsp; &amp;nbsp; | &amp;nbsp; &amp;nbsp;5 -----
&lt;br&gt;&amp;nbsp;dlls/wined3d/wined3d_private.h &amp;nbsp; | &amp;nbsp; &amp;nbsp;2 --
&lt;br&gt;&amp;nbsp;include/wine/wined3d.idl &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; 15 ---------------
&lt;br&gt;&amp;nbsp;16 files changed, 0 insertions(+), 111 deletions(-)
&lt;br&gt;&lt;br&gt;diff --git a/dlls/wined3d/buffer.c b/dlls/wined3d/buffer.c
&lt;br&gt;index 24b58a5..fa79340 100644
&lt;br&gt;--- a/dlls/wined3d/buffer.c
&lt;br&gt;+++ b/dlls/wined3d/buffer.c
&lt;br&gt;@@ -657,11 +657,6 @@ static HRESULT STDMETHODCALLTYPE buffer_GetParent(IWineD3DBuffer *iface, IUnknow
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;/* IWineD3DResource methods */
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-static HRESULT STDMETHODCALLTYPE buffer_GetDevice(IWineD3DBuffer *iface, IWineD3DDevice **device)
&lt;br&gt;-{
&lt;br&gt;- &amp;nbsp; &amp;nbsp;return resource_get_device((IWineD3DResource *)iface, device);
&lt;br&gt;-}
&lt;br&gt;-
&lt;br&gt;&amp;nbsp;static HRESULT STDMETHODCALLTYPE buffer_SetPrivateData(IWineD3DBuffer *iface,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;REFGUID guid, const void *data, DWORD data_size, DWORD flags)
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;@@ -1064,7 +1059,6 @@ static const struct IWineD3DBufferVtbl wined3d_buffer_vtbl =
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;/* IWineD3DBase methods */
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;buffer_GetParent,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;/* IWineD3DResource methods */
&lt;br&gt;- &amp;nbsp; &amp;nbsp;buffer_GetDevice,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;buffer_SetPrivateData,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;buffer_GetPrivateData,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;buffer_FreePrivateData,
&lt;br&gt;diff --git a/dlls/wined3d/cubetexture.c b/dlls/wined3d/cubetexture.c
&lt;br&gt;index f22845b..8d257aa 100644
&lt;br&gt;--- a/dlls/wined3d/cubetexture.c
&lt;br&gt;+++ b/dlls/wined3d/cubetexture.c
&lt;br&gt;@@ -183,10 +183,6 @@ static ULONG WINAPI IWineD3DCubeTextureImpl_Release(IWineD3DCubeTexture *iface)
&lt;br&gt;&amp;nbsp;/* ****************************************************
&lt;br&gt;&amp;nbsp; &amp;nbsp; IWineD3DCubeTexture IWineD3DResource parts follow
&lt;br&gt;&amp;nbsp; &amp;nbsp; **************************************************** */
&lt;br&gt;-static HRESULT WINAPI IWineD3DCubeTextureImpl_GetDevice(IWineD3DCubeTexture *iface, IWineD3DDevice** ppDevice) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp;return resource_get_device((IWineD3DResource *)iface, ppDevice);
&lt;br&gt;-}
&lt;br&gt;-
&lt;br&gt;&amp;nbsp;static HRESULT WINAPI IWineD3DCubeTextureImpl_SetPrivateData(IWineD3DCubeTexture *iface, REFGUID refguid, CONST void* pData, DWORD SizeOfData, DWORD Flags) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;return resource_set_private_data((IWineD3DResource *)iface, refguid, pData, SizeOfData, Flags);
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;@@ -404,7 +400,6 @@ static const IWineD3DCubeTextureVtbl IWineD3DCubeTexture_Vtbl =
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;IWineD3DCubeTextureImpl_Release,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;/* IWineD3DResource */
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;IWineD3DCubeTextureImpl_GetParent,
&lt;br&gt;- &amp;nbsp; &amp;nbsp;IWineD3DCubeTextureImpl_GetDevice,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;IWineD3DCubeTextureImpl_SetPrivateData,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;IWineD3DCubeTextureImpl_GetPrivateData,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;IWineD3DCubeTextureImpl_FreePrivateData,
&lt;br&gt;diff --git a/dlls/wined3d/pixelshader.c b/dlls/wined3d/pixelshader.c
&lt;br&gt;index d156498..a531f09 100644
&lt;br&gt;--- a/dlls/wined3d/pixelshader.c
&lt;br&gt;+++ b/dlls/wined3d/pixelshader.c
&lt;br&gt;@@ -90,15 +90,6 @@ static HRESULT &amp;nbsp;WINAPI IWineD3DPixelShaderImpl_GetParent(IWineD3DPixelShader *if
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;return WINED3D_OK;
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-static HRESULT &amp;nbsp;WINAPI IWineD3DPixelShaderImpl_GetDevice(IWineD3DPixelShader* iface, IWineD3DDevice **pDevice){
&lt;br&gt;- &amp;nbsp; &amp;nbsp;IWineD3DPixelShaderImpl *This = (IWineD3DPixelShaderImpl *)iface;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;IWineD3DDevice_AddRef(This-&amp;gt;baseShader.device);
&lt;br&gt;- &amp;nbsp; &amp;nbsp;*pDevice = This-&amp;gt;baseShader.device;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;TRACE(&amp;quot;(%p) returning %p\n&amp;quot;, This, *pDevice);
&lt;br&gt;- &amp;nbsp; &amp;nbsp;return WINED3D_OK;
&lt;br&gt;-}
&lt;br&gt;-
&lt;br&gt;-
&lt;br&gt;&amp;nbsp;static HRESULT &amp;nbsp;WINAPI IWineD3DPixelShaderImpl_GetFunction(IWineD3DPixelShader* impl, VOID* pData, UINT* pSizeOfData) {
&lt;br&gt;&amp;nbsp; &amp;nbsp;IWineD3DPixelShaderImpl *This = (IWineD3DPixelShaderImpl *)impl;
&lt;br&gt;&amp;nbsp; &amp;nbsp;TRACE(&amp;quot;(%p) : pData(%p), pSizeOfData(%p)\n&amp;quot;, This, pData, pSizeOfData);
&lt;br&gt;@@ -353,7 +344,6 @@ static const IWineD3DPixelShaderVtbl IWineD3DPixelShader_Vtbl =
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;/*** IWineD3DBase methods ***/
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;IWineD3DPixelShaderImpl_GetParent,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;/*** IWineD3DBaseShader methods ***/
&lt;br&gt;- &amp;nbsp; &amp;nbsp;IWineD3DPixelShaderImpl_GetDevice,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;IWineD3DPixelShaderImpl_GetFunction
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;/*** IWineD3DPixelShader methods ***/
&lt;br&gt;&amp;nbsp;};
&lt;br&gt;diff --git a/dlls/wined3d/query.c b/dlls/wined3d/query.c
&lt;br&gt;index 76f519d..ff4021d 100644
&lt;br&gt;--- a/dlls/wined3d/query.c
&lt;br&gt;+++ b/dlls/wined3d/query.c
&lt;br&gt;@@ -98,15 +98,6 @@ static HRESULT &amp;nbsp;WINAPI IWineD3DQueryImpl_GetParent(IWineD3DQuery *iface, IUnknow
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;return WINED3D_OK;
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-static HRESULT &amp;nbsp;WINAPI IWineD3DQueryImpl_GetDevice(IWineD3DQuery* iface, IWineD3DDevice **pDevice){
&lt;br&gt;- &amp;nbsp; &amp;nbsp;IWineD3DQueryImpl *This = (IWineD3DQueryImpl *)iface;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;IWineD3DDevice_AddRef((IWineD3DDevice *)This-&amp;gt;wineD3DDevice);
&lt;br&gt;- &amp;nbsp; &amp;nbsp;*pDevice = (IWineD3DDevice *)This-&amp;gt;wineD3DDevice;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;TRACE(&amp;quot;(%p) returning %p\n&amp;quot;, This, *pDevice);
&lt;br&gt;- &amp;nbsp; &amp;nbsp;return WINED3D_OK;
&lt;br&gt;-}
&lt;br&gt;-
&lt;br&gt;-
&lt;br&gt;&amp;nbsp;static HRESULT &amp;nbsp;WINAPI IWineD3DQueryImpl_GetData(IWineD3DQuery* iface, void* pData, DWORD dwSize, DWORD dwGetDataFlags){
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;IWineD3DQueryImpl *This = (IWineD3DQueryImpl *)iface;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;HRESULT res = S_OK;
&lt;br&gt;@@ -640,7 +631,6 @@ const IWineD3DQueryVtbl IWineD3DQuery_Vtbl =
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;IWineD3DQueryImpl_Release,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; /*** IWineD3Dquery methods ***/
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;IWineD3DQueryImpl_GetParent,
&lt;br&gt;- &amp;nbsp; &amp;nbsp;IWineD3DQueryImpl_GetDevice,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;IWineD3DQueryImpl_GetData,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;IWineD3DQueryImpl_GetDataSize,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;IWineD3DQueryImpl_GetType,
&lt;br&gt;@@ -655,7 +645,6 @@ const IWineD3DQueryVtbl IWineD3DEventQuery_Vtbl =
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;IWineD3DQueryImpl_Release,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;/*** IWineD3Dquery methods ***/
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;IWineD3DQueryImpl_GetParent,
&lt;br&gt;- &amp;nbsp; &amp;nbsp;IWineD3DQueryImpl_GetDevice,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;IWineD3DEventQueryImpl_GetData,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;IWineD3DEventQueryImpl_GetDataSize,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;IWineD3DQueryImpl_GetType,
&lt;br&gt;@@ -670,7 +659,6 @@ const IWineD3DQueryVtbl IWineD3DOcclusionQuery_Vtbl =
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;IWineD3DQueryImpl_Release,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;/*** IWineD3Dquery methods ***/
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;IWineD3DQueryImpl_GetParent,
&lt;br&gt;- &amp;nbsp; &amp;nbsp;IWineD3DQueryImpl_GetDevice,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;IWineD3DOcclusionQueryImpl_GetData,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;IWineD3DOcclusionQueryImpl_GetDataSize,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;IWineD3DQueryImpl_GetType,
&lt;br&gt;diff --git a/dlls/wined3d/resource.c b/dlls/wined3d/resource.c
&lt;br&gt;index ea61c59..629d59e 100644
&lt;br&gt;--- a/dlls/wined3d/resource.c
&lt;br&gt;+++ b/dlls/wined3d/resource.c
&lt;br&gt;@@ -105,15 +105,6 @@ void resource_cleanup(IWineD3DResource *iface)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;if (This-&amp;gt;resource.wineD3DDevice) device_resource_released(This-&amp;gt;resource.wineD3DDevice, iface);
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-HRESULT resource_get_device(IWineD3DResource *iface, IWineD3DDevice** ppDevice)
&lt;br&gt;-{
&lt;br&gt;- &amp;nbsp; &amp;nbsp;IWineD3DResourceImpl *This = (IWineD3DResourceImpl *)iface;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;TRACE(&amp;quot;(%p) : returning %p\n&amp;quot;, This, This-&amp;gt;resource.wineD3DDevice);
&lt;br&gt;- &amp;nbsp; &amp;nbsp;*ppDevice = (IWineD3DDevice *) This-&amp;gt;resource.wineD3DDevice;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;IWineD3DDevice_AddRef(*ppDevice);
&lt;br&gt;- &amp;nbsp; &amp;nbsp;return WINED3D_OK;
&lt;br&gt;-}
&lt;br&gt;-
&lt;br&gt;&amp;nbsp;static PrivateData* resource_find_private_data(IWineD3DResourceImpl *This, REFGUID tag)
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;PrivateData *data;
&lt;br&gt;diff --git a/dlls/wined3d/stateblock.c b/dlls/wined3d/stateblock.c
&lt;br&gt;index b3cae54..8abe70e 100644
&lt;br&gt;--- a/dlls/wined3d/stateblock.c
&lt;br&gt;+++ b/dlls/wined3d/stateblock.c
&lt;br&gt;@@ -535,16 +535,6 @@ static ULONG &amp;nbsp;WINAPI IWineD3DStateBlockImpl_Release(IWineD3DStateBlock *iface) {
&lt;br&gt;&amp;nbsp;/**********************************************************
&lt;br&gt;&amp;nbsp; * IWineD3DStateBlockImpl parts follows
&lt;br&gt;&amp;nbsp; **********************************************************/
&lt;br&gt;-static HRESULT &amp;nbsp;WINAPI IWineD3DStateBlockImpl_GetDevice(IWineD3DStateBlock *iface, IWineD3DDevice** ppDevice){
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp; &amp;nbsp;IWineD3DStateBlockImpl *This &amp;nbsp; = (IWineD3DStateBlockImpl *)iface;
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp; &amp;nbsp;*ppDevice = (IWineD3DDevice*)This-&amp;gt;wineD3DDevice;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;IWineD3DDevice_AddRef(*ppDevice);
&lt;br&gt;- &amp;nbsp; &amp;nbsp;return WINED3D_OK;
&lt;br&gt;-
&lt;br&gt;-}
&lt;br&gt;-
&lt;br&gt;&amp;nbsp;static void record_lights(IWineD3DStateBlockImpl *This, const IWineD3DStateBlockImpl *targetStateBlock)
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;UINT i;
&lt;br&gt;@@ -1321,7 +1311,6 @@ static const IWineD3DStateBlockVtbl IWineD3DStateBlock_Vtbl =
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;IWineD3DStateBlockImpl_AddRef,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;IWineD3DStateBlockImpl_Release,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;/* IWineD3DStateBlock */
&lt;br&gt;- &amp;nbsp; &amp;nbsp;IWineD3DStateBlockImpl_GetDevice,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;IWineD3DStateBlockImpl_Capture,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;IWineD3DStateBlockImpl_Apply,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;IWineD3DStateBlockImpl_InitStartupStateBlock
&lt;br&gt;diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c
&lt;br&gt;index ed4e9aa..141eaaf 100644
&lt;br&gt;--- a/dlls/wined3d/surface.c
&lt;br&gt;+++ b/dlls/wined3d/surface.c
&lt;br&gt;@@ -5154,7 +5154,6 @@ const IWineD3DSurfaceVtbl IWineD3DSurface_Vtbl =
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;IWineD3DSurfaceImpl_Release,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;/* IWineD3DResource */
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;IWineD3DBaseSurfaceImpl_GetParent,
&lt;br&gt;- &amp;nbsp; &amp;nbsp;IWineD3DBaseSurfaceImpl_GetDevice,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;IWineD3DBaseSurfaceImpl_SetPrivateData,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;IWineD3DBaseSurfaceImpl_GetPrivateData,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;IWineD3DBaseSurfaceImpl_FreePrivateData,
&lt;br&gt;diff --git a/dlls/wined3d/surface_base.c b/dlls/wined3d/surface_base.c
&lt;br&gt;index ca715f5..98fe372 100644
&lt;br&gt;--- a/dlls/wined3d/surface_base.c
&lt;br&gt;+++ b/dlls/wined3d/surface_base.c
&lt;br&gt;@@ -117,10 +117,6 @@ ULONG WINAPI IWineD3DBaseSurfaceImpl_AddRef(IWineD3DSurface *iface) {
&lt;br&gt;&amp;nbsp;/* ****************************************************
&lt;br&gt;&amp;nbsp; &amp;nbsp; IWineD3DSurface IWineD3DResource parts follow
&lt;br&gt;&amp;nbsp; &amp;nbsp; **************************************************** */
&lt;br&gt;-HRESULT WINAPI IWineD3DBaseSurfaceImpl_GetDevice(IWineD3DSurface *iface, IWineD3DDevice** ppDevice) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp;return resource_get_device((IWineD3DResource *)iface, ppDevice);
&lt;br&gt;-}
&lt;br&gt;-
&lt;br&gt;&amp;nbsp;HRESULT WINAPI IWineD3DBaseSurfaceImpl_SetPrivateData(IWineD3DSurface *iface, REFGUID refguid, CONST void* pData, DWORD SizeOfData, DWORD Flags) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;return resource_set_private_data((IWineD3DResource *)iface, refguid, pData, SizeOfData, Flags);
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;diff --git a/dlls/wined3d/surface_gdi.c b/dlls/wined3d/surface_gdi.c
&lt;br&gt;index 7867008..350be43 100644
&lt;br&gt;--- a/dlls/wined3d/surface_gdi.c
&lt;br&gt;+++ b/dlls/wined3d/surface_gdi.c
&lt;br&gt;@@ -646,7 +646,6 @@ const IWineD3DSurfaceVtbl IWineGDISurface_Vtbl =
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;IWineGDISurfaceImpl_Release,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;/* IWineD3DResource */
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;IWineD3DBaseSurfaceImpl_GetParent,
&lt;br&gt;- &amp;nbsp; &amp;nbsp;IWineD3DBaseSurfaceImpl_GetDevice,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;IWineD3DBaseSurfaceImpl_SetPrivateData,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;IWineD3DBaseSurfaceImpl_GetPrivateData,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;IWineD3DBaseSurfaceImpl_FreePrivateData,
&lt;br&gt;diff --git a/dlls/wined3d/texture.c b/dlls/wined3d/texture.c
&lt;br&gt;index b568005..ffc27e2 100644
&lt;br&gt;--- a/dlls/wined3d/texture.c
&lt;br&gt;+++ b/dlls/wined3d/texture.c
&lt;br&gt;@@ -171,10 +171,6 @@ static ULONG WINAPI IWineD3DTextureImpl_Release(IWineD3DTexture *iface) {
&lt;br&gt;&amp;nbsp;/* ****************************************************
&lt;br&gt;&amp;nbsp; &amp;nbsp; IWineD3DTexture IWineD3DResource parts follow
&lt;br&gt;&amp;nbsp; &amp;nbsp; **************************************************** */
&lt;br&gt;-static HRESULT WINAPI IWineD3DTextureImpl_GetDevice(IWineD3DTexture *iface, IWineD3DDevice** ppDevice) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp;return resource_get_device((IWineD3DResource *)iface, ppDevice);
&lt;br&gt;-}
&lt;br&gt;-
&lt;br&gt;&amp;nbsp;static HRESULT WINAPI IWineD3DTextureImpl_SetPrivateData(IWineD3DTexture *iface, REFGUID refguid, CONST void* pData, DWORD SizeOfData, DWORD Flags) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;return resource_set_private_data((IWineD3DResource *)iface, refguid, pData, SizeOfData, Flags);
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;@@ -405,7 +401,6 @@ static const IWineD3DTextureVtbl IWineD3DTexture_Vtbl =
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;IWineD3DTextureImpl_Release,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;/* IWineD3DResource */
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;IWineD3DTextureImpl_GetParent,
&lt;br&gt;- &amp;nbsp; &amp;nbsp;IWineD3DTextureImpl_GetDevice,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;IWineD3DTextureImpl_SetPrivateData,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;IWineD3DTextureImpl_GetPrivateData,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;IWineD3DTextureImpl_FreePrivateData,
&lt;br&gt;diff --git a/dlls/wined3d/vertexdeclaration.c b/dlls/wined3d/vertexdeclaration.c
&lt;br&gt;index 88b3f27..58df345 100644
&lt;br&gt;--- a/dlls/wined3d/vertexdeclaration.c
&lt;br&gt;+++ b/dlls/wined3d/vertexdeclaration.c
&lt;br&gt;@@ -88,16 +88,6 @@ static HRESULT WINAPI IWineD3DVertexDeclarationImpl_GetParent(IWineD3DVertexDecl
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;return WINED3D_OK;
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-static HRESULT WINAPI IWineD3DVertexDeclarationImpl_GetDevice(IWineD3DVertexDeclaration *iface, IWineD3DDevice** ppDevice) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp;IWineD3DVertexDeclarationImpl *This = (IWineD3DVertexDeclarationImpl *)iface;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;TRACE(&amp;quot;(%p) : returning %p\n&amp;quot;, This, This-&amp;gt;wineD3DDevice);
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp; &amp;nbsp;*ppDevice = (IWineD3DDevice *) This-&amp;gt;wineD3DDevice;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;IWineD3DDevice_AddRef(*ppDevice);
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp; &amp;nbsp;return WINED3D_OK;
&lt;br&gt;-}
&lt;br&gt;-
&lt;br&gt;&amp;nbsp;static BOOL declaration_element_valid_ffp(const WINED3DVERTEXELEMENT *element)
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;switch(element-&amp;gt;usage)
&lt;br&gt;@@ -194,7 +184,6 @@ static const IWineD3DVertexDeclarationVtbl IWineD3DVertexDeclaration_Vtbl =
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;IWineD3DVertexDeclarationImpl_Release,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;/* IWineD3DVertexDeclaration */
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;IWineD3DVertexDeclarationImpl_GetParent,
&lt;br&gt;- &amp;nbsp; &amp;nbsp;IWineD3DVertexDeclarationImpl_GetDevice,
&lt;br&gt;&amp;nbsp;};
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;HRESULT vertexdeclaration_init(IWineD3DVertexDeclarationImpl *declaration, IWineD3DDeviceImpl *device,
&lt;br&gt;diff --git a/dlls/wined3d/vertexshader.c b/dlls/wined3d/vertexshader.c
&lt;br&gt;index 63d8c9b..f08fd06 100644
&lt;br&gt;--- a/dlls/wined3d/vertexshader.c
&lt;br&gt;+++ b/dlls/wined3d/vertexshader.c
&lt;br&gt;@@ -194,14 +194,6 @@ static HRESULT WINAPI IWineD3DVertexShaderImpl_GetParent(IWineD3DVertexShader *i
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;return WINED3D_OK;
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-static HRESULT WINAPI IWineD3DVertexShaderImpl_GetDevice(IWineD3DVertexShader* iface, IWineD3DDevice **pDevice){
&lt;br&gt;- &amp;nbsp; &amp;nbsp;IWineD3DVertexShaderImpl *This = (IWineD3DVertexShaderImpl *)iface;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;IWineD3DDevice_AddRef(This-&amp;gt;baseShader.device);
&lt;br&gt;- &amp;nbsp; &amp;nbsp;*pDevice = This-&amp;gt;baseShader.device;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;TRACE(&amp;quot;(%p) returning %p\n&amp;quot;, This, *pDevice);
&lt;br&gt;- &amp;nbsp; &amp;nbsp;return WINED3D_OK;
&lt;br&gt;-}
&lt;br&gt;-
&lt;br&gt;&amp;nbsp;static HRESULT WINAPI IWineD3DVertexShaderImpl_GetFunction(IWineD3DVertexShader* impl, VOID* pData, UINT* pSizeOfData) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;IWineD3DVertexShaderImpl *This = (IWineD3DVertexShaderImpl *)impl;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;TRACE(&amp;quot;(%p) : pData(%p), pSizeOfData(%p)\n&amp;quot;, This, pData, pSizeOfData);
&lt;br&gt;@@ -348,7 +340,6 @@ static const IWineD3DVertexShaderVtbl IWineD3DVertexShader_Vtbl =
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;/*** IWineD3DBase methods ***/
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;IWineD3DVertexShaderImpl_GetParent,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;/*** IWineD3DBaseShader methods ***/
&lt;br&gt;- &amp;nbsp; &amp;nbsp;IWineD3DVertexShaderImpl_GetDevice,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;IWineD3DVertexShaderImpl_GetFunction,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;/*** IWineD3DVertexShader methods ***/
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;IWIneD3DVertexShaderImpl_SetLocalConstantsF
&lt;br&gt;diff --git a/dlls/wined3d/volume.c b/dlls/wined3d/volume.c
&lt;br&gt;index 5a80cb6..bb6c676 100644
&lt;br&gt;--- a/dlls/wined3d/volume.c
&lt;br&gt;+++ b/dlls/wined3d/volume.c
&lt;br&gt;@@ -138,10 +138,6 @@ static HRESULT WINAPI IWineD3DVolumeImpl_GetParent(IWineD3DVolume *iface, IUnkno
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;return resource_get_parent((IWineD3DResource *)iface, pParent);
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-static HRESULT WINAPI IWineD3DVolumeImpl_GetDevice(IWineD3DVolume *iface, IWineD3DDevice** ppDevice) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp;return resource_get_device((IWineD3DResource *)iface, ppDevice);
&lt;br&gt;-}
&lt;br&gt;-
&lt;br&gt;&amp;nbsp;static HRESULT WINAPI IWineD3DVolumeImpl_SetPrivateData(IWineD3DVolume *iface, REFGUID refguid, CONST void* pData, DWORD SizeOfData, DWORD Flags) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;return resource_set_private_data((IWineD3DResource *)iface, refguid, pData, SizeOfData, Flags);
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;@@ -361,7 +357,6 @@ static const IWineD3DVolumeVtbl IWineD3DVolume_Vtbl =
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;IWineD3DVolumeImpl_Release,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;/* IWineD3DResource */
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;IWineD3DVolumeImpl_GetParent,
&lt;br&gt;- &amp;nbsp; &amp;nbsp;IWineD3DVolumeImpl_GetDevice,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;IWineD3DVolumeImpl_SetPrivateData,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;IWineD3DVolumeImpl_GetPrivateData,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;IWineD3DVolumeImpl_FreePrivateData,
&lt;br&gt;diff --git a/dlls/wined3d/volumetexture.c b/dlls/wined3d/volumetexture.c
&lt;br&gt;index 4cea3a0..26aacad 100644
&lt;br&gt;--- a/dlls/wined3d/volumetexture.c
&lt;br&gt;+++ b/dlls/wined3d/volumetexture.c
&lt;br&gt;@@ -139,10 +139,6 @@ static ULONG WINAPI IWineD3DVolumeTextureImpl_Release(IWineD3DVolumeTexture *ifa
&lt;br&gt;&amp;nbsp;/* ****************************************************
&lt;br&gt;&amp;nbsp; &amp;nbsp; IWineD3DVolumeTexture IWineD3DResource parts follow
&lt;br&gt;&amp;nbsp; &amp;nbsp; **************************************************** */
&lt;br&gt;-static HRESULT WINAPI IWineD3DVolumeTextureImpl_GetDevice(IWineD3DVolumeTexture *iface, IWineD3DDevice** ppDevice) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp;return resource_get_device((IWineD3DResource *)iface, ppDevice);
&lt;br&gt;-}
&lt;br&gt;-
&lt;br&gt;&amp;nbsp;static HRESULT WINAPI IWineD3DVolumeTextureImpl_SetPrivateData(IWineD3DVolumeTexture *iface, REFGUID refguid, CONST void* pData, DWORD SizeOfData, DWORD Flags) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;return resource_set_private_data((IWineD3DResource *)iface, refguid, pData, SizeOfData, Flags);
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;@@ -322,7 +318,6 @@ static const IWineD3DVolumeTextureVtbl IWineD3DVolumeTexture_Vtbl =
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;IWineD3DVolumeTextureImpl_Release,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;/* resource */
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;IWineD3DVolumeTextureImpl_GetParent,
&lt;br&gt;- &amp;nbsp; &amp;nbsp;IWineD3DVolumeTextureImpl_GetDevice,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;IWineD3DVolumeTextureImpl_SetPrivateData,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;IWineD3DVolumeTextureImpl_GetPrivateData,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;IWineD3DVolumeTextureImpl_FreePrivateData,
&lt;br&gt;diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h
&lt;br&gt;index 34f9f33..b5e61b6 100644
&lt;br&gt;--- a/dlls/wined3d/wined3d_private.h
&lt;br&gt;+++ b/dlls/wined3d/wined3d_private.h
&lt;br&gt;@@ -1653,7 +1653,6 @@ typedef struct IWineD3DResourceImpl
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;void resource_cleanup(IWineD3DResource *iface) DECLSPEC_HIDDEN;
&lt;br&gt;&amp;nbsp;HRESULT resource_free_private_data(IWineD3DResource *iface, REFGUID guid) DECLSPEC_HIDDEN;
&lt;br&gt;-HRESULT resource_get_device(IWineD3DResource *iface, IWineD3DDevice **device) DECLSPEC_HIDDEN;
&lt;br&gt;&amp;nbsp;HRESULT resource_get_parent(IWineD3DResource *iface, IUnknown **parent) DECLSPEC_HIDDEN;
&lt;br&gt;&amp;nbsp;DWORD resource_get_priority(IWineD3DResource *iface) DECLSPEC_HIDDEN;
&lt;br&gt;&amp;nbsp;HRESULT resource_get_private_data(IWineD3DResource *iface, REFGUID guid,
&lt;br&gt;@@ -1974,7 +1973,6 @@ HRESULT WINAPI IWineD3DBaseSurfaceImpl_QueryInterface(IWineD3DSurface *iface,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;REFIID riid, LPVOID *ppobj) DECLSPEC_HIDDEN;
&lt;br&gt;&amp;nbsp;ULONG WINAPI IWineD3DBaseSurfaceImpl_AddRef(IWineD3DSurface *iface) DECLSPEC_HIDDEN;
&lt;br&gt;&amp;nbsp;HRESULT WINAPI IWineD3DBaseSurfaceImpl_GetParent(IWineD3DSurface *iface, IUnknown **pParent) DECLSPEC_HIDDEN;
&lt;br&gt;-HRESULT WINAPI IWineD3DBaseSurfaceImpl_GetDevice(IWineD3DSurface *iface, IWineD3DDevice** ppDevice) DECLSPEC_HIDDEN;
&lt;br&gt;&amp;nbsp;HRESULT WINAPI IWineD3DBaseSurfaceImpl_SetPrivateData(IWineD3DSurface *iface,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;REFGUID refguid, const void *pData, DWORD SizeOfData, DWORD Flags) DECLSPEC_HIDDEN;
&lt;br&gt;&amp;nbsp;HRESULT WINAPI IWineD3DBaseSurfaceImpl_GetPrivateData(IWineD3DSurface *iface,
&lt;br&gt;diff --git a/include/wine/wined3d.idl b/include/wine/wined3d.idl
&lt;br&gt;index 8bcc2a8..27267c2 100644
&lt;br&gt;--- a/include/wine/wined3d.idl
&lt;br&gt;+++ b/include/wine/wined3d.idl
&lt;br&gt;@@ -2327,9 +2327,6 @@ interface IWineD3D : IWineD3DBase
&lt;br&gt;&amp;nbsp;]
&lt;br&gt;&amp;nbsp;interface IWineD3DResource : IWineD3DBase
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;- &amp;nbsp; &amp;nbsp;HRESULT GetDevice(
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;[out] IWineD3DDevice **device
&lt;br&gt;- &amp;nbsp; &amp;nbsp;);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;HRESULT SetPrivateData(
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;[in] REFGUID guid,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;[in] const void *data,
&lt;br&gt;@@ -2715,9 +2712,6 @@ interface IWineD3DVolumeTexture : IWineD3DBaseTexture
&lt;br&gt;&amp;nbsp;]
&lt;br&gt;&amp;nbsp;interface IWineD3DVertexDeclaration : IWineD3DBase
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;- &amp;nbsp; &amp;nbsp;HRESULT GetDevice(
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;[out] IWineD3DDevice **device
&lt;br&gt;- &amp;nbsp; &amp;nbsp;);
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;[
&lt;br&gt;@@ -2727,9 +2721,6 @@ interface IWineD3DVertexDeclaration : IWineD3DBase
&lt;br&gt;&amp;nbsp;]
&lt;br&gt;&amp;nbsp;interface IWineD3DStateBlock : IUnknown
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;- &amp;nbsp; &amp;nbsp;HRESULT GetDevice(
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;[out] IWineD3DDevice **device
&lt;br&gt;- &amp;nbsp; &amp;nbsp;);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;HRESULT Capture(
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;HRESULT Apply(
&lt;br&gt;@@ -2745,9 +2736,6 @@ interface IWineD3DStateBlock : IUnknown
&lt;br&gt;&amp;nbsp;]
&lt;br&gt;&amp;nbsp;interface IWineD3DQuery : IWineD3DBase
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;- &amp;nbsp; &amp;nbsp;HRESULT GetDevice(
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;[out] IWineD3DDevice **device
&lt;br&gt;- &amp;nbsp; &amp;nbsp;);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;HRESULT GetData(
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;[out] void *data,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;[in] DWORD data_size,
&lt;br&gt;@@ -2837,9 +2825,6 @@ interface IWineD3DBuffer : IWineD3DResource
&lt;br&gt;&amp;nbsp;]
&lt;br&gt;&amp;nbsp;interface IWineD3DBaseShader : IWineD3DBase
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;- &amp;nbsp; &amp;nbsp;HRESULT GetDevice(
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;[out] IWineD3DDevice **device
&lt;br&gt;- &amp;nbsp; &amp;nbsp;);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;HRESULT GetFunction(
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;[out] void *data,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;[in, out] UINT *data_size
&lt;br&gt;-- 
&lt;br&gt;1.6.4.4
&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-PATCH-4-5--wined3d%3A-Remove-unused-GetDevice%28%29-implementations.-tp26708383p26708383.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26708374</id>
	<title>[PATCH 3/5] d3d9: Forward the volume's GetDevice() to the texture instead of the wined3d volume.</title>
	<published>2009-12-09T02:51:17Z</published>
	<updated>2009-12-09T02:51:17Z</updated>
	<author>
		<name>Henri Verbeet-2</name>
	</author>
	<content type="html">---
&lt;br&gt;&amp;nbsp;dlls/d3d9/volume.c | &amp;nbsp; 23 +++++++++++++----------
&lt;br&gt;&amp;nbsp;1 files changed, 13 insertions(+), 10 deletions(-)
&lt;br&gt;&lt;br&gt;diff --git a/dlls/d3d9/volume.c b/dlls/d3d9/volume.c
&lt;br&gt;index 0d83ce1..baa286b 100644
&lt;br&gt;--- a/dlls/d3d9/volume.c
&lt;br&gt;+++ b/dlls/d3d9/volume.c
&lt;br&gt;@@ -94,21 +94,24 @@ static ULONG WINAPI IDirect3DVolume9Impl_Release(LPDIRECT3DVOLUME9 iface) {
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;/* IDirect3DVolume9 Interface follow: */
&lt;br&gt;-static HRESULT WINAPI IDirect3DVolume9Impl_GetDevice(LPDIRECT3DVOLUME9 iface, IDirect3DDevice9** ppDevice) {
&lt;br&gt;+static HRESULT WINAPI IDirect3DVolume9Impl_GetDevice(IDirect3DVolume9 *iface, IDirect3DDevice9 **device)
&lt;br&gt;+{
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;IDirect3DVolume9Impl *This = (IDirect3DVolume9Impl *)iface;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;IWineD3DDevice &amp;nbsp; &amp;nbsp; &amp;nbsp; *myDevice = NULL;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;IDirect3DResource9 *resource;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;HRESULT hr;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;TRACE(&amp;quot;iface %p, device %p.\n&amp;quot;, iface, ppDevice);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;TRACE(&amp;quot;iface %p, device %p.\n&amp;quot;, iface, device);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;wined3d_mutex_lock();
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp; &amp;nbsp;IWineD3DVolume_GetDevice(This-&amp;gt;wineD3DVolume, &amp;myDevice);
&lt;br&gt;- &amp;nbsp; &amp;nbsp;IWineD3DDevice_GetParent(myDevice, (IUnknown **)ppDevice);
&lt;br&gt;- &amp;nbsp; &amp;nbsp;IWineD3DDevice_Release(myDevice);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;hr = IUnknown_QueryInterface(This-&amp;gt;forwardReference, &amp;IID_IDirect3DResource9, (void **)&amp;resource);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (SUCCEEDED(hr))
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;hr = IDirect3DResource9_GetDevice(resource, device);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;IDirect3DResource9_Release(resource);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;wined3d_mutex_unlock();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;TRACE(&amp;quot;Returning device %p.\n&amp;quot;, *device);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;return D3D_OK;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return hr;
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;static HRESULT WINAPI IDirect3DVolume9Impl_SetPrivateData(LPDIRECT3DVOLUME9 iface, REFGUID refguid, CONST void* pData, DWORD SizeOfData, DWORD Flags) {
&lt;br&gt;-- 
&lt;br&gt;1.6.4.4
&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-PATCH-3-5--d3d9%3A-Forward-the-volume%27s-GetDevice%28%29-to-the-texture-instead-of-the-wined3d-volume.-tp26708374p26708374.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26708370</id>
	<title>[PATCH 2/5] d3d8: Forward the volume's GetDevice() to the texture instead of the wined3d volume.</title>
	<published>2009-12-09T02:51:16Z</published>
	<updated>2009-12-09T02:51:16Z</updated>
	<author>
		<name>Henri Verbeet-2</name>
	</author>
	<content type="html">---
&lt;br&gt;&amp;nbsp;dlls/d3d8/volume.c | &amp;nbsp; 23 ++++++++++++++---------
&lt;br&gt;&amp;nbsp;1 files changed, 14 insertions(+), 9 deletions(-)
&lt;br&gt;&lt;br&gt;diff --git a/dlls/d3d8/volume.c b/dlls/d3d8/volume.c
&lt;br&gt;index 8948997..8e8dc60 100644
&lt;br&gt;--- a/dlls/d3d8/volume.c
&lt;br&gt;+++ b/dlls/d3d8/volume.c
&lt;br&gt;@@ -94,19 +94,24 @@ static ULONG WINAPI IDirect3DVolume8Impl_Release(LPDIRECT3DVOLUME8 iface) {
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;/* IDirect3DVolume8 Interface follow: */
&lt;br&gt;-static HRESULT WINAPI IDirect3DVolume8Impl_GetDevice(LPDIRECT3DVOLUME8 iface, IDirect3DDevice8 **ppDevice) {
&lt;br&gt;+static HRESULT WINAPI IDirect3DVolume8Impl_GetDevice(IDirect3DVolume8 *iface, IDirect3DDevice8 **device)
&lt;br&gt;+{
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;IDirect3DVolume8Impl *This = (IDirect3DVolume8Impl *)iface;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;IWineD3DDevice &amp;nbsp; &amp;nbsp; &amp;nbsp; *myDevice = NULL;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;IDirect3DResource8 *resource;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;HRESULT hr;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;TRACE(&amp;quot;iface %p, device %p.\n&amp;quot;, iface, ppDevice);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;TRACE(&amp;quot;iface %p, device %p.\n&amp;quot;, iface, device);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;wined3d_mutex_lock();
&lt;br&gt;- &amp;nbsp; &amp;nbsp;IWineD3DVolume_GetDevice(This-&amp;gt;wineD3DVolume, &amp;myDevice);
&lt;br&gt;- &amp;nbsp; &amp;nbsp;IWineD3DDevice_GetParent(myDevice, (IUnknown **)ppDevice);
&lt;br&gt;- &amp;nbsp; &amp;nbsp;IWineD3DDevice_Release(myDevice);
&lt;br&gt;- &amp;nbsp; &amp;nbsp;wined3d_mutex_unlock();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;hr = IUnknown_QueryInterface(This-&amp;gt;forwardReference, &amp;IID_IDirect3DResource8, (void **)&amp;resource);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (SUCCEEDED(hr))
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;hr = IDirect3DResource8_GetDevice(resource, device);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;IDirect3DResource8_Release(resource);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;return D3D_OK;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;TRACE(&amp;quot;Returning device %p.\n&amp;quot;, *device);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return hr;
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;static HRESULT WINAPI IDirect3DVolume8Impl_SetPrivateData(LPDIRECT3DVOLUME8 iface, REFGUID refguid, CONST void *pData, DWORD SizeOfData, DWORD Flags) {
&lt;br&gt;-- 
&lt;br&gt;1.6.4.4
&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-PATCH-2-5--d3d8%3A-Forward-the-volume%27s-GetDevice%28%29-to-the-texture-instead-of-the-wined3d-volume.-tp26708370p26708370.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26708365</id>
	<title>[PATCH 1/5] wined3d: Remove a few redundant assignments.</title>
	<published>2009-12-09T02:51:15Z</published>
	<updated>2009-12-09T02:51:15Z</updated>
	<author>
		<name>Henri Verbeet-2</name>
	</author>
	<content type="html">---
&lt;br&gt;&amp;nbsp;dlls/wined3d/arb_program_shader.c | &amp;nbsp; &amp;nbsp;2 --
&lt;br&gt;&amp;nbsp;1 files changed, 0 insertions(+), 2 deletions(-)
&lt;br&gt;&lt;br&gt;diff --git a/dlls/wined3d/arb_program_shader.c b/dlls/wined3d/arb_program_shader.c
&lt;br&gt;index 6401407..42ed898 100644
&lt;br&gt;--- a/dlls/wined3d/arb_program_shader.c
&lt;br&gt;+++ b/dlls/wined3d/arb_program_shader.c
&lt;br&gt;@@ -5275,7 +5275,6 @@ static void state_texfactor_arbfp(DWORD state, IWineD3DStateBlockImpl *statebloc
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;if(device-&amp;gt;shader_backend == &amp;arb_program_shader_backend) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (use_ps(stateblock)) return;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;device = stateblock-&amp;gt;wineD3DDevice;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;context-&amp;gt;pshader_const_dirty[ARB_FFP_CONST_TFACTOR] = 1;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;device-&amp;gt;highest_dirty_ps_const = max(device-&amp;gt;highest_dirty_ps_const, ARB_FFP_CONST_TFACTOR + 1);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;@@ -5297,7 +5296,6 @@ static void state_arb_specularenable(DWORD state, IWineD3DStateBlockImpl *stateb
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;if(device-&amp;gt;shader_backend == &amp;arb_program_shader_backend) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (use_ps(stateblock)) return;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;device = stateblock-&amp;gt;wineD3DDevice;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;context-&amp;gt;pshader_const_dirty[ARB_FFP_CONST_SPECULAR_ENABLE] = 1;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;device-&amp;gt;highest_dirty_ps_const = max(device-&amp;gt;highest_dirty_ps_const, ARB_FFP_CONST_SPECULAR_ENABLE + 1);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;-- 
&lt;br&gt;1.6.4.4
&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-PATCH-1-5--wined3d%3A-Remove-a-few-redundant-assignments.-tp26708365p26708365.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26708313</id>
	<title>ntdll/tests: Free Unicode string before reuse.</title>
	<published>2009-12-09T02:45:49Z</published>
	<updated>2009-12-09T02:45:49Z</updated>
	<author>
		<name>Hans Leidekker-4</name>
	</author>
	<content type="html">Thanks Paul.
&lt;br&gt;---
&lt;br&gt;&amp;nbsp;dlls/ntdll/tests/file.c | &amp;nbsp; &amp;nbsp;2 +-
&lt;br&gt;&amp;nbsp;1 files changed, 1 insertions(+), 1 deletions(-)
&lt;br&gt;&lt;br&gt;diff --git a/dlls/ntdll/tests/file.c b/dlls/ntdll/tests/file.c
&lt;br&gt;index 7e8f101..9aade11 100644
&lt;br&gt;--- a/dlls/ntdll/tests/file.c
&lt;br&gt;+++ b/dlls/ntdll/tests/file.c
&lt;br&gt;@@ -254,6 +254,7 @@ static void open_file_test(void)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;status = pNtOpenFile( &amp;dir, GENERIC_READ, &amp;attr, &amp;io,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;FILE_SHARE_READ|FILE_SHARE_WRITE, FILE_DIRECTORY_FILE );
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;ok( !status, &amp;quot;open %s failed %x\n&amp;quot;, wine_dbgstr_w(nameW.Buffer), status );
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;pRtlFreeUnicodeString( &amp;nameW );
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;/* test opening system dir with RootDirectory set to windows dir */
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;GetSystemDirectoryW( path, MAX_PATH );
&lt;br&gt;@@ -337,7 +338,6 @@ static void open_file_test(void)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;CloseHandle( dir );
&lt;br&gt;- &amp;nbsp; &amp;nbsp;pRtlFreeUnicodeString( &amp;nameW );
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;static void delete_file_test(void)
&lt;br&gt;-- 
&lt;br&gt;1.6.3.3
&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/ntdll-tests%3A-Free-Unicode-string-before-reuse.-tp26708313p26708313.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26708167</id>
	<title>gdiplus/tests: Fix a matrix leak in test</title>
	<published>2009-12-09T02:34:50Z</published>
	<updated>2009-12-09T02:34:50Z</updated>
	<author>
		<name>Nikolay Sivov</name>
	</author>
	<content type="html">Fix a matrix leak in test (Valgrind)
&lt;br&gt;&lt;br /&gt; &lt;br /&gt;&lt;br&gt;&lt;div class=&quot;small&quot;&gt;&lt;br/&gt;&lt;img src=&quot;http://old.nabble.com/images/icon_attachment.gif&quot; &gt; &lt;strong&gt;0001-Fix-a-matrix-leak-in-test.diff&lt;/strong&gt; (800 bytes) &lt;a href=&quot;http://old.nabble.com/attachment/26708167/0/0001-Fix-a-matrix-leak-in-test.diff&quot; target=&quot;_top&quot;&gt;Download Attachment&lt;/a&gt;&lt;/div&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/gdiplus-tests%3A-Fix-a-matrix-leak-in-test-tp26708167p26708167.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26704229</id>
	<title>winedbg: Add spanish translation</title>
	<published>2009-12-08T18:30:45Z</published>
	<updated>2009-12-08T18:30:45Z</updated>
	<author>
		<name>Jaime Rave</name>
	</author>
	<content type="html">&lt;br clear=&quot;all&quot;&gt;&lt;br&gt;-- &lt;br&gt;Jaime Rave Torres&lt;br&gt;Ingeniero de Sistemas&lt;br&gt;Miembro de la Fundación de Software Libre de Colombia &lt;br&gt;&lt;a href=&quot;http://www.fslcol.org/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.fslcol.org/&lt;/a&gt;&lt;br&gt;&lt;a href=&quot;http://sobrelibertad.blogspot.com/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://sobrelibertad.blogspot.com/&lt;/a&gt;&lt;br&gt;
3003160361&lt;br&gt;
&lt;br /&gt;&lt;tt&gt;[0001-winedbg-Add-spanish-translation.patch]&lt;/tt&gt;&lt;br /&gt;&lt;hr align=&quot;left&quot; width=&quot;300&quot; /&gt;&lt;tt&gt;From f57f0404c180d076f27ee4461bbce463346c5b80 Mon Sep 17 00:00:00 2001
&lt;br&gt;From: Jaime Rave &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26704229&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;jaimerave@...&lt;/a&gt;&amp;gt;
&lt;br&gt;Date: Tue, 8 Dec 2009 21:28:56 -0500
&lt;br&gt;Subject: winedbg: Add spanish translation
&lt;br&gt;&lt;br&gt;---
&lt;br&gt;&amp;nbsp;programs/winedbg/Makefile.in | &amp;nbsp; &amp;nbsp;1 +
&lt;br&gt;&amp;nbsp;programs/winedbg/rsrc_Es.rc &amp;nbsp;| &amp;nbsp; 58 ++++++++++++++++++++++++++++++++++++++++++
&lt;br&gt;&amp;nbsp;2 files changed, 59 insertions(+), 0 deletions(-)
&lt;br&gt;&amp;nbsp;create mode 100644 programs/winedbg/rsrc_Es.rc
&lt;br&gt;&lt;br&gt;diff --git a/programs/winedbg/Makefile.in b/programs/winedbg/Makefile.in
&lt;br&gt;index f23298c..435c9e7 100644
&lt;br&gt;--- a/programs/winedbg/Makefile.in
&lt;br&gt;+++ b/programs/winedbg/Makefile.in
&lt;br&gt;@@ -33,6 +33,7 @@ C_SRCS = \
&lt;br&gt;&amp;nbsp;RC_SRCS = \
&lt;br&gt;&amp;nbsp;	rsrc_De.rc \
&lt;br&gt;&amp;nbsp;	rsrc_En.rc \
&lt;br&gt;+	rsrc_Es.rc \
&lt;br&gt;&amp;nbsp;	rsrc_Fr.rc \
&lt;br&gt;&amp;nbsp;	rsrc_Ko.rc \
&lt;br&gt;&amp;nbsp;	rsrc_Lt.rc \
&lt;br&gt;diff --git a/programs/winedbg/rsrc_Es.rc b/programs/winedbg/rsrc_Es.rc
&lt;br&gt;new file mode 100644
&lt;br&gt;index 0000000..f4f64cd
&lt;br&gt;--- /dev/null
&lt;br&gt;+++ b/programs/winedbg/rsrc_Es.rc
&lt;br&gt;@@ -0,0 +1,58 @@
&lt;br&gt;+/*
&lt;br&gt;+ * Spanish Language Support
&lt;br&gt;+ *
&lt;br&gt;+ * Copyright 2009 Jaime Rave
&lt;br&gt;+ *
&lt;br&gt;+ * This library is free software; you can redistribute it and/or
&lt;br&gt;+ * modify it under the terms of the GNU Lesser General Public
&lt;br&gt;+ * License as published by the Free Software Foundation; either
&lt;br&gt;+ * version 2.1 of the License, or (at your option) any later version.
&lt;br&gt;+ *
&lt;br&gt;+ * This library is distributed in the hope that it will be useful,
&lt;br&gt;+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
&lt;br&gt;+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. &amp;nbsp;See the GNU
&lt;br&gt;+ * Lesser General Public License for more details.
&lt;br&gt;+ *
&lt;br&gt;+ * You should have received a copy of the GNU Lesser General Public
&lt;br&gt;+ * License along with this library; if not, write to the Free Software
&lt;br&gt;+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
&lt;br&gt;+ */
&lt;br&gt;+
&lt;br&gt;+#include &amp;quot;resource.h&amp;quot;
&lt;br&gt;+
&lt;br&gt;+/* UTF-8 */
&lt;br&gt;+#pragma code_page(65001)
&lt;br&gt;+
&lt;br&gt;+LANGUAGE LANG_SPANISH, SUBLANG_DEFAULT
&lt;br&gt;+
&lt;br&gt;+IDM_DEBUG_POPUP MENU
&lt;br&gt;+BEGIN
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;POPUP &amp;quot;&amp;quot;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;BEGIN
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;MENUITEM &amp;quot;&amp;Depurar&amp;quot;, ID_DEBUG
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;END
&lt;br&gt;+END
&lt;br&gt;+
&lt;br&gt;+IDD_CRASH_DLG DIALOGEX 100, 100, 273, 175
&lt;br&gt;+STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU
&lt;br&gt;+CAPTION &amp;quot;Error del programa&amp;quot;
&lt;br&gt;+FONT 8, &amp;quot;Tahoma&amp;quot;
&lt;br&gt;+BEGIN
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;LTEXT &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;quot;&amp;quot;,IDC_STATIC_BG,0,0,273,52,WS_BORDER,0
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;LTEXT &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;quot;El programa %s ha encontrado un serio problema y necesita \
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;cerrarse. Nos disculpamos por los inconvenientes.&amp;quot;,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;IDC_STATIC_TXT1,27,10,224,30
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;LTEXT &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;quot;Esto puede ser causado por un problema en el programa o a una deficiencia en Wine. \
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Quizá quieras verificar en http://appdb.winehq.org consejos sobre cómo ejecutar \
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;esta aplicación.\n\n\
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Si este problema no esta presente en Windows y no ha sido reportado \
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;todavía, lo puedes reportar en http://bugs.winehq.org.&amp;quot;,IDC_STATIC_TXT2,27,60,224,100
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;DEFPUSHBUTTON &amp;nbsp; &amp;quot;Cerrar&amp;quot;, IDOK, 205, 151, 60, 16, WS_TABSTOP
&lt;br&gt;+END
&lt;br&gt;+
&lt;br&gt;+STRINGTABLE
&lt;br&gt;+BEGIN
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;IDS_AUTO_CAPTION &amp;nbsp; &amp;nbsp; &amp;quot;Caida del programa Wine&amp;quot;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;IDS_INVALID_PARAMS &amp;nbsp; &amp;quot;Errores internos - parámetros invalidos recibidos&amp;quot;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;IDS_UNIDENTIFIED &amp;nbsp; &amp;nbsp; &amp;quot;(no identificado)&amp;quot;
&lt;br&gt;+END
&lt;br&gt;-- 
&lt;br&gt;1.6.3.3
&lt;br&gt;&lt;br&gt;&lt;/tt&gt;&lt;hr align=&quot;left&quot; width=&quot;300&quot; /&gt;&lt;br /&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/winedbg%3A-Add-spanish-translation-tp26704229p26704229.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26704045</id>
	<title>[website] Added home spanish translation</title>
	<published>2009-12-08T18:05:24Z</published>
	<updated>2009-12-08T18:05:24Z</updated>
	<author>
		<name>Jaime Rave</name>
	</author>
	<content type="html">&lt;br clear=&quot;all&quot;&gt;&lt;br&gt;-- &lt;br&gt;Jaime Rave Torres&lt;br&gt;Ingeniero de Sistemas&lt;br&gt;Miembro de la Fundación de Software Libre de Colombia &lt;br&gt;&lt;a href=&quot;http://www.fslcol.org/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.fslcol.org/&lt;/a&gt;&lt;br&gt;&lt;a href=&quot;http://sobrelibertad.blogspot.com/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://sobrelibertad.blogspot.com/&lt;/a&gt;&lt;br&gt;
3003160361&lt;br&gt;
&lt;br /&gt;&lt;tt&gt;[0001-Added-home-spanish-translation.patch]&lt;/tt&gt;&lt;br /&gt;&lt;hr align=&quot;left&quot; width=&quot;300&quot; /&gt;&lt;tt&gt;From 2b09bc57162c4e0a979576a8cdd4e59b5b124c63 Mon Sep 17 00:00:00 2001
&lt;br&gt;From: Jaime Rave &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26704045&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;jaimerave@...&lt;/a&gt;&amp;gt;
&lt;br&gt;Date: Tue, 8 Dec 2009 20:59:36 -0500
&lt;br&gt;Subject: Added home spanish translation
&lt;br&gt;&lt;br&gt;---
&lt;br&gt;&amp;nbsp;templates/es/home.template | &amp;nbsp; 90 ++++++++++++++++++++++++++++++++++++++++++++
&lt;br&gt;&amp;nbsp;1 files changed, 90 insertions(+), 0 deletions(-)
&lt;br&gt;&amp;nbsp;create mode 100644 templates/es/home.template
&lt;br&gt;&lt;br&gt;diff --git a/templates/es/home.template b/templates/es/home.template
&lt;br&gt;new file mode 100644
&lt;br&gt;index 0000000..da2c31e
&lt;br&gt;--- /dev/null
&lt;br&gt;+++ b/templates/es/home.template
&lt;br&gt;@@ -0,0 +1,90 @@
&lt;br&gt;+&amp;lt;!--TITLE:[Run Windows applications on Linux, BSD, Solaris and Mac OS X]--&amp;gt;
&lt;br&gt;+&amp;lt;!--BLURB:[Run Windows applications on Linux, BSD, Solaris and Mac OS X.]--&amp;gt;
&lt;br&gt;+&amp;lt;!--STYLE:[content_nobox]--&amp;gt;
&lt;br&gt;+
&lt;br&gt;+&amp;lt;div id=&amp;quot;main_left&amp;quot;&amp;gt;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;&amp;lt;div class=&amp;quot;rbox&amp;quot;&amp;gt;
&lt;br&gt;+ &amp;nbsp;&amp;lt;b class=&amp;quot;rtop&amp;quot;&amp;gt;&amp;lt;b class=&amp;quot;r1&amp;quot;&amp;gt;&amp;lt;/b&amp;gt;&amp;lt;b class=&amp;quot;r2&amp;quot;&amp;gt;&amp;lt;/b&amp;gt;&amp;lt;b class=&amp;quot;r3&amp;quot;&amp;gt;&amp;lt;/b&amp;gt;&amp;lt;b class=&amp;quot;r4&amp;quot;&amp;gt;&amp;lt;/b&amp;gt;&amp;lt;/b&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;&amp;lt;div class=&amp;quot;content&amp;quot; style=&amp;quot;padding: 25px 10px 10px 60px; height: 445px; overflow: auto;&amp;quot;&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;ul class=&amp;quot;winehq_menu&amp;quot;&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;li class=&amp;quot;info&amp;quot; onClick=&amp;quot;document.location='{$root}/about/';&amp;quot;&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;div class=&amp;quot;title&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;{$root}/about/&amp;quot;&amp;gt;Acerca de&amp;lt;/a&amp;gt;&amp;lt;/div&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;div class=&amp;quot;subtitle&amp;quot;&amp;gt;Aprende sobre el proyecto Wine.&amp;lt;/div&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;/li&amp;gt;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;li class=&amp;quot;dl&amp;quot; onClick=&amp;quot;document.location='{$root}/download/';&amp;quot;&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;div class=&amp;quot;title&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;{$root}/download/&amp;quot;&amp;gt;Descarga&amp;lt;/a&amp;gt;&amp;lt;/div&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;div class=&amp;quot;subtitle&amp;quot;&amp;gt;Instala la última versión de Wine.&amp;lt;/div&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;/li&amp;gt;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;li class=&amp;quot;help&amp;quot; onClick=&amp;quot;document.location='{$root}/help/';&amp;quot;&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;div class=&amp;quot;title&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;{$root}/help/&amp;quot;&amp;gt;Soporte&amp;lt;/a&amp;gt;&amp;lt;/div&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;div class=&amp;quot;subtitle&amp;quot;&amp;gt;Obtén ayuda para usar Wine.&amp;lt;/div&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;/li&amp;gt;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;li class=&amp;quot;devel&amp;quot; onClick=&amp;quot;document.location='{$root}/devel/';&amp;quot;&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;div class=&amp;quot;title&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;{$root}/devel/&amp;quot;&amp;gt;Desarrollo&amp;lt;/a&amp;gt;&amp;lt;/div&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;div class=&amp;quot;subtitle&amp;quot;&amp;gt;Conviértete en un desarrollador de Wine.&amp;lt;/div&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;/li&amp;gt;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;li class=&amp;quot;donate&amp;quot; onClick=&amp;quot;document.donateForm.submit();&amp;quot;&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;form action=&amp;quot;https://www.paypal.com/cgi-bin/webscr&amp;quot; method=&amp;quot;post&amp;quot; name=&amp;quot;donateForm&amp;quot; style=&amp;quot;margin: 0; padding: 0;&amp;quot;&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;div class=&amp;quot;title&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;javascript:document.donateForm.submit();&amp;quot;&amp;gt;Dona&amp;lt;/a&amp;gt;&amp;lt;/div&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;cmd&amp;quot; value=&amp;quot;_xclick&amp;quot;&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;business&amp;quot; value=&amp;quot;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26704045&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;donate@...&lt;/a&gt;&amp;quot;&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;item_name&amp;quot; value=&amp;quot;Wine donation&amp;quot;&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;/form&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;div class=&amp;quot;subtitle&amp;quot;&amp;gt;Haz una donación al proyecto Wine.&amp;lt;/div&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;/li&amp;gt;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;/ul&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;&amp;lt;/div&amp;gt;
&lt;br&gt;+ &amp;nbsp;&amp;lt;b class=&amp;quot;rbottom&amp;quot;&amp;gt;&amp;lt;b class=&amp;quot;r4&amp;quot;&amp;gt;&amp;lt;/b&amp;gt;&amp;lt;b class=&amp;quot;r3&amp;quot;&amp;gt;&amp;lt;/b&amp;gt;&amp;lt;b class=&amp;quot;r2&amp;quot;&amp;gt;&amp;lt;/b&amp;gt;&amp;lt;b class=&amp;quot;r1&amp;quot;&amp;gt;&amp;lt;/b&amp;gt;&amp;lt;/b&amp;gt;
&lt;br&gt;+ &amp;nbsp;&amp;lt;/div&amp;gt;
&lt;br&gt;+
&lt;br&gt;+
&lt;br&gt;+&amp;lt;/div&amp;gt;
&lt;br&gt;+&amp;lt;div id=&amp;quot;main_right&amp;quot;&amp;gt;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;&amp;lt;div class=&amp;quot;rbox&amp;quot;&amp;gt;
&lt;br&gt;+ &amp;nbsp;&amp;lt;b class=&amp;quot;rtop&amp;quot;&amp;gt;&amp;lt;b class=&amp;quot;r1&amp;quot;&amp;gt;&amp;lt;/b&amp;gt;&amp;lt;b class=&amp;quot;r2&amp;quot;&amp;gt;&amp;lt;/b&amp;gt;&amp;lt;b class=&amp;quot;r3&amp;quot;&amp;gt;&amp;lt;/b&amp;gt;&amp;lt;b class=&amp;quot;r4&amp;quot;&amp;gt;&amp;lt;/b&amp;gt;&amp;lt;/b&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;&amp;lt;div class=&amp;quot;content&amp;quot; style=&amp;quot;padding: 5px 10px 5px 10px; height: 85px; overflow: auto;&amp;quot;&amp;gt;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;h3 class=&amp;quot;title&amp;quot; style=&amp;quot;margin: 0;&amp;quot;&amp;gt;Último lanzamiento&amp;lt;/h3&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;table style=&amp;quot;margin: 7px 0 0 15px; border-spacing: 0; border: 0;&amp;quot;&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Estable:&amp;lt;/td&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;td style=&amp;quot;padding-left: 15px; padding-bottom: 2px;&amp;quot;&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;b&amp;gt;&amp;lt;a href=&amp;quot;{$root}/announce/{$config_stable_release}&amp;quot;&amp;gt;Wine&amp;nbsp;{$config_stable_release}&amp;lt;/a&amp;gt;&amp;lt;/b&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;span class=&amp;quot;small&amp;quot;&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;(&amp;lt;a href=&amp;quot;http://source.winehq.org/git/wine.git?a=shortlog;h=refs/tags/wine-{$config_stable_release}&amp;quot;&amp;gt;shortlog&amp;lt;/a&amp;gt;)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;/span&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Desarrollo:&amp;lt;/td&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;td style=&amp;quot;padding-left: 15px;&amp;quot;&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;b&amp;gt;&amp;lt;a href=&amp;quot;{$root}/announce/{$config_master_release}&amp;quot;&amp;gt;Wine&amp;nbsp;{$config_master_release}&amp;lt;/a&amp;gt;&amp;lt;/b&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;span class=&amp;quot;small&amp;quot;&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;(&amp;lt;a href=&amp;quot;http://source.winehq.org/git/wine.git?a=shortlog;h=refs/tags/wine-{$config_master_release}&amp;quot;&amp;gt;shortlog&amp;lt;/a&amp;gt;)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;/span&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;/table&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;&amp;lt;/div&amp;gt;
&lt;br&gt;+ &amp;nbsp;&amp;lt;b class=&amp;quot;rbottom&amp;quot;&amp;gt;&amp;lt;b class=&amp;quot;r4&amp;quot;&amp;gt;&amp;lt;/b&amp;gt;&amp;lt;b class=&amp;quot;r3&amp;quot;&amp;gt;&amp;lt;/b&amp;gt;&amp;lt;b class=&amp;quot;r2&amp;quot;&amp;gt;&amp;lt;/b&amp;gt;&amp;lt;b class=&amp;quot;r1&amp;quot;&amp;gt;&amp;lt;/b&amp;gt;&amp;lt;/b&amp;gt;
&lt;br&gt;+ &amp;nbsp;&amp;lt;/div&amp;gt;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;&amp;lt;div class=&amp;quot;rbox&amp;quot; style=&amp;quot;margin-top: 15px;&amp;quot;&amp;gt;
&lt;br&gt;+ &amp;nbsp;&amp;lt;b class=&amp;quot;rtop&amp;quot;&amp;gt;&amp;lt;b class=&amp;quot;r1&amp;quot;&amp;gt;&amp;lt;/b&amp;gt;&amp;lt;b class=&amp;quot;r2&amp;quot;&amp;gt;&amp;lt;/b&amp;gt;&amp;lt;b class=&amp;quot;r3&amp;quot;&amp;gt;&amp;lt;/b&amp;gt;&amp;lt;b class=&amp;quot;r4&amp;quot;&amp;gt;&amp;lt;/b&amp;gt;&amp;lt;/b&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;&amp;lt;div class=&amp;quot;content&amp;quot; style=&amp;quot;padding: 10px; height: 340px; overflow: auto;&amp;quot;&amp;gt;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;h3 class=&amp;quot;title&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;{$root}/news/&amp;quot;&amp;gt;Noticias&amp;lt;/a&amp;gt;&amp;lt;/h3&amp;gt;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;!--EXEC:[news?n=10]--&amp;gt;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;{$root}/news/&amp;quot;&amp;gt;más noticias...&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;&amp;lt;/div&amp;gt;
&lt;br&gt;+ &amp;nbsp;&amp;lt;b class=&amp;quot;rbottom&amp;quot;&amp;gt;&amp;lt;b class=&amp;quot;r4&amp;quot;&amp;gt;&amp;lt;/b&amp;gt;&amp;lt;b class=&amp;quot;r3&amp;quot;&amp;gt;&amp;lt;/b&amp;gt;&amp;lt;b class=&amp;quot;r2&amp;quot;&amp;gt;&amp;lt;/b&amp;gt;&amp;lt;b class=&amp;quot;r1&amp;quot;&amp;gt;&amp;lt;/b&amp;gt;&amp;lt;/b&amp;gt;
&lt;br&gt;+ &amp;nbsp;&amp;lt;/div&amp;gt;
&lt;br&gt;+
&lt;br&gt;+&amp;lt;/div&amp;gt;
&lt;br&gt;+
&lt;br&gt;-- 
&lt;br&gt;1.6.3.3
&lt;br&gt;&lt;br&gt;&lt;/tt&gt;&lt;hr align=&quot;left&quot; width=&quot;300&quot; /&gt;&lt;br /&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-website--Added-home-spanish-translation-tp26704045p26704045.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26703527</id>
	<title>shdocvw: Implement refresh in webbbrowser.c</title>
	<published>2009-12-08T16:58:24Z</published>
	<updated>2009-12-08T16:58:24Z</updated>
	<author>
		<name>David Anderson-11</name>
	</author>
	<content type="html">&lt;br&gt;Implements WebBrowser_Refresh in shdocvw/webbrowser.c &amp;nbsp;.
&lt;br&gt;&lt;br&gt;Now a VB app with a 'refresh' button works, refreshing a web page
&lt;br&gt;displayed by gecko with the current web page (it used to crash the app
&lt;br&gt;because refresh returned an E_NOTIMPL).
&lt;br&gt;&lt;br&gt;Tested with linux winetest.exe.so on Ubuntu 9.10
&lt;br&gt;with ATI graphics card. &amp;nbsp; No new fails (retests are not 100% stable, but
&lt;br&gt;close to stable), I tested several times before and after the change.
&lt;br&gt;Fails are &amp;nbsp;like other linux-wine results shown on test.winehq.org.
&lt;br&gt;&lt;br&gt;DavidAnderson
&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br /&gt;From 10d0f6cfc9ef8e068654d3d86e5281ca5f564a8d Mon Sep 17 00:00:00 2001
&lt;br&gt;From: D &amp;lt;davea@ubuntu.(none)&amp;gt;
&lt;br&gt;Date: Tue, 8 Dec 2009 14:44:15 -0800
&lt;br&gt;Subject: Implements new Refresh code.
&lt;br&gt;&lt;br&gt;---
&lt;br&gt;&amp;nbsp;dlls/shdocvw/webbrowser.c | &amp;nbsp; 15 +++++++++++++--
&lt;br&gt;&amp;nbsp;1 files changed, 13 insertions(+), 2 deletions(-)
&lt;br&gt;&lt;br&gt;diff --git a/dlls/shdocvw/webbrowser.c b/dlls/shdocvw/webbrowser.c
&lt;br&gt;index 6c3c671..420aa34 100644
&lt;br&gt;--- a/dlls/shdocvw/webbrowser.c
&lt;br&gt;+++ b/dlls/shdocvw/webbrowser.c
&lt;br&gt;@@ -31,6 +31,8 @@ WINE_DEFAULT_DEBUG_CHANNEL(shdocvw);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;#define WEBBROWSER_THIS(iface) DEFINE_THIS(WebBrowser, WebBrowser2, iface)
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+static HRESULT WINAPI WebBrowser_get_LocationURL(IWebBrowser2 *iface, BSTR *LocationURL);
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;static HRESULT WINAPI WebBrowser_QueryInterface(IWebBrowser2 *iface, REFIID riid, LPVOID *ppv)
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;WebBrowser *This = WEBBROWSER_THIS(iface);
&lt;br&gt;@@ -279,8 +281,17 @@ static HRESULT WINAPI WebBrowser_Navigate(IWebBrowser2 *iface, BSTR szUrl,
&lt;br&gt;&amp;nbsp;static HRESULT WINAPI WebBrowser_Refresh(IWebBrowser2 *iface)
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;WebBrowser *This = WEBBROWSER_THIS(iface);
&lt;br&gt;- &amp;nbsp; &amp;nbsp;FIXME(&amp;quot;(%p)\n&amp;quot;, This);
&lt;br&gt;- &amp;nbsp; &amp;nbsp;return E_NOTIMPL;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;BSTR url;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;HRESULT res;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;TRACE(&amp;quot;(%p)\n&amp;quot;, This);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;res = WebBrowser_get_LocationURL(iface, &amp;url);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if( res != S_OK) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; FIXME(&amp;quot;(%p)-&amp;gt; ERROR calling WebBrowser_get_LocationURL\n&amp;quot;, This);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; return res;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;TRACE(&amp;quot;(%p)-&amp;gt;(%s )\n&amp;quot;, This, debugstr_w(url));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return navigate_url(&amp;This-&amp;gt;doc_host, url, NULL,NULL,NULL,NULL);
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;static HRESULT WINAPI WebBrowser_Refresh2(IWebBrowser2 *iface, VARIANT *Level)
&lt;br&gt;-- 
&lt;br&gt;1.6.3.3
&lt;br&gt;&lt;br&gt;&lt;br /&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/shdocvw%3A-Implement-refresh-in-webbbrowser.c-tp26703527p26703527.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26703149</id>
	<title>[PATCH 3/3] gdiplus: Add missing declaration for customlinecap.c.</title>
	<published>2009-12-08T16:08:46Z</published>
	<updated>2009-12-08T16:08:46Z</updated>
	<author>
		<name>Marcin Baczyński</name>
	</author>
	<content type="html">---
&lt;br&gt;&amp;nbsp;include/gdiplusflat.h | &amp;nbsp; &amp;nbsp;1 +
&lt;br&gt;&amp;nbsp;1 files changed, 1 insertions(+), 0 deletions(-)
&lt;br&gt;&lt;br&gt;diff --git a/include/gdiplusflat.h b/include/gdiplusflat.h
&lt;br&gt;index 5fc4ed5..cd97a70 100644
&lt;br&gt;--- a/include/gdiplusflat.h
&lt;br&gt;+++ b/include/gdiplusflat.h
&lt;br&gt;@@ -90,6 +90,7 @@ GpStatus WINGDIPAPI GdipSetCustomLineCapStrokeCaps(GpCustomLineCap*,GpLineCap,
&lt;br&gt;&amp;nbsp;GpStatus WINGDIPAPI GdipGetCustomLineCapStrokeJoin(GpCustomLineCap*,GpLineJoin*);
&lt;br&gt;&amp;nbsp;GpStatus WINGDIPAPI GdipSetCustomLineCapStrokeJoin(GpCustomLineCap*,GpLineJoin);
&lt;br&gt;&amp;nbsp;GpStatus WINGDIPAPI GdipGetCustomLineCapWidthScale(GpCustomLineCap*,REAL*);
&lt;br&gt;+GpStatus WINGDIPAPI GdipSetCustomLineCapWidthScale(GpCustomLineCap*,REAL);
&lt;br&gt;&amp;nbsp;GpStatus WINGDIPAPI GdipSetCustomLineCapBaseInset(GpCustomLineCap*,REAL);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;/* Font */
&lt;br&gt;-- 
&lt;br&gt;1.6.5.5
&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-PATCH-1-3--gdiplus%3A-Add-missing-declarations-for-gdiplus.c.-tp26703136p26703149.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26703145</id>
	<title>[PATCH 2/3] gdiplus: Add missing declarations for pen.c.</title>
	<published>2009-12-08T16:08:45Z</published>
	<updated>2009-12-08T16:08:45Z</updated>
	<author>
		<name>Marcin Baczyński</name>
	</author>
	<content type="html">---
&lt;br&gt;&amp;nbsp;include/gdiplusflat.h | &amp;nbsp; &amp;nbsp;2 ++
&lt;br&gt;&amp;nbsp;1 files changed, 2 insertions(+), 0 deletions(-)
&lt;br&gt;&lt;br&gt;diff --git a/include/gdiplusflat.h b/include/gdiplusflat.h
&lt;br&gt;index 7c4fa70..5fc4ed5 100644
&lt;br&gt;--- a/include/gdiplusflat.h
&lt;br&gt;+++ b/include/gdiplusflat.h
&lt;br&gt;@@ -594,6 +594,8 @@ GpStatus WINGDIPAPI GdipGetPenDashCount(GpPen*,INT*);
&lt;br&gt;&amp;nbsp;GpStatus WINGDIPAPI GdipGetPenDashOffset(GpPen*,REAL*);
&lt;br&gt;&amp;nbsp;GpStatus WINGDIPAPI GdipGetPenDashStyle(GpPen*,GpDashStyle*);
&lt;br&gt;&amp;nbsp;GpStatus WINGDIPAPI GdipGetPenMode(GpPen*,GpPenAlignment*);
&lt;br&gt;+GpStatus WINGDIPAPI GdipResetPenTransform(GpPen*);
&lt;br&gt;+GpStatus WINGDIPAPI GdipScalePenTransform(GpPen*,REAL,REAL,GpMatrixOrder);
&lt;br&gt;&amp;nbsp;GpStatus WINGDIPAPI GdipSetPenBrushFill(GpPen*,GpBrush*);
&lt;br&gt;&amp;nbsp;GpStatus WINGDIPAPI GdipSetPenColor(GpPen*,ARGB);
&lt;br&gt;&amp;nbsp;GpStatus WINGDIPAPI GdipSetPenCompoundArray(GpPen*,GDIPCONST REAL*,INT);
&lt;br&gt;-- 
&lt;br&gt;1.6.5.5
&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-PATCH-1-3--gdiplus%3A-Add-missing-declarations-for-gdiplus.c.-tp26703136p26703145.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26703136</id>
	<title>[PATCH 1/3] gdiplus: Add missing declarations for gdiplus.c.</title>
	<published>2009-12-08T16:08:44Z</published>
	<updated>2009-12-08T16:08:44Z</updated>
	<author>
		<name>Marcin Baczyński</name>
	</author>
	<content type="html">---
&lt;br&gt;&amp;nbsp;include/gdiplusflat.h | &amp;nbsp; &amp;nbsp;4 ++++
&lt;br&gt;&amp;nbsp;1 files changed, 4 insertions(+), 0 deletions(-)
&lt;br&gt;&lt;br&gt;diff --git a/include/gdiplusflat.h b/include/gdiplusflat.h
&lt;br&gt;index 4aed5d3..7c4fa70 100644
&lt;br&gt;--- a/include/gdiplusflat.h
&lt;br&gt;+++ b/include/gdiplusflat.h
&lt;br&gt;@@ -528,6 +528,10 @@ GpStatus WINGDIPAPI GdipGetMetafileHeaderFromMetafile(GpMetafile*,MetafileHeader
&lt;br&gt;&amp;nbsp;GpStatus WINGDIPAPI GdipGetMetafileHeaderFromStream(IStream*,MetafileHeader*);
&lt;br&gt;&amp;nbsp;GpStatus WINGDIPAPI GdipGetMetafileHeaderFromWmf(HMETAFILE,GDIPCONST WmfPlaceableFileHeader*,MetafileHeader*);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+/* Notification */
&lt;br&gt;+GpStatus WINAPI GdiplusNotificationHook(ULONG_PTR*);
&lt;br&gt;+void WINAPI GdiplusNotificationUnhook(ULONG_PTR);
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;/* PathGradientBrush */
&lt;br&gt;&amp;nbsp;GpStatus WINGDIPAPI GdipCreatePathGradient(GDIPCONST GpPointF*,INT,GpWrapMode,GpPathGradient**);
&lt;br&gt;&amp;nbsp;GpStatus WINGDIPAPI GdipCreatePathGradientI(GDIPCONST GpPoint*,INT,GpWrapMode,GpPathGradient**);
&lt;br&gt;-- 
&lt;br&gt;1.6.5.5
&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-PATCH-1-3--gdiplus%3A-Add-missing-declarations-for-gdiplus.c.-tp26703136p26703136.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26703044</id>
	<title>inetmib1(2/2): Copy an IP net row's physical address using a  type-specific helper function, rather than using a generic helper function  which made an invalid alignment assumption</title>
	<published>2009-12-08T15:53:06Z</published>
	<updated>2009-12-08T15:53:06Z</updated>
	<author>
		<name>Juan Lang-4</name>
	</author>
	<content type="html">--Juan
&lt;br&gt;&lt;br /&gt;&lt;tt&gt;[0017-Copy-an-IP-net-row-s-physical-address-using-a-type-s.patch]&lt;/tt&gt;&lt;br /&gt;&lt;hr align=&quot;left&quot; width=&quot;300&quot; /&gt;&lt;tt&gt;From c6ea18800779d3cd1c38d29ce37a10b4fe98ab88 Mon Sep 17 00:00:00 2001
&lt;br&gt;From: Juan Lang &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26703044&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;juan.lang@...&lt;/a&gt;&amp;gt;
&lt;br&gt;Date: Mon, 7 Dec 2009 13:37:29 -0800
&lt;br&gt;Subject: [PATCH] Copy an IP net row's physical address using a type-specific helper function, rather than using a generic helper function which made an invalid alignment assumption
&lt;br&gt;&lt;br&gt;---
&lt;br&gt;&amp;nbsp;dlls/inetmib1/main.c | &amp;nbsp; 19 ++++++++++---------
&lt;br&gt;&amp;nbsp;1 files changed, 10 insertions(+), 9 deletions(-)
&lt;br&gt;&lt;br&gt;diff --git a/dlls/inetmib1/main.c b/dlls/inetmib1/main.c
&lt;br&gt;index f11bc3b..9aef4d5 100644
&lt;br&gt;--- a/dlls/inetmib1/main.c
&lt;br&gt;+++ b/dlls/inetmib1/main.c
&lt;br&gt;@@ -50,14 +50,6 @@ static void setStringValue(AsnAny *value, BYTE type, DWORD len, BYTE *str)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;SnmpUtilAsnAnyCpy(value, &amp;strValue);
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-static DWORD copyLengthPrecededString(AsnAny *value, void *src)
&lt;br&gt;-{
&lt;br&gt;- &amp;nbsp; &amp;nbsp;DWORD len = *(DWORD *)src;
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp; &amp;nbsp;setStringValue(value, ASN_OCTETSTRING, len, (BYTE *)src + sizeof(DWORD));
&lt;br&gt;- &amp;nbsp; &amp;nbsp;return SNMP_ERRORSTATUS_NOERROR;
&lt;br&gt;-}
&lt;br&gt;-
&lt;br&gt;&amp;nbsp;typedef DWORD (*copyValueFunc)(AsnAny *value, void *src);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;struct structToAsnValue
&lt;br&gt;@@ -919,9 +911,18 @@ static BOOL mib2IpRouteQuery(BYTE bPduType, SnmpVarBind *pVarBind,
&lt;br&gt;&amp;nbsp;static UINT mib2IpNet[] = { 1,3,6,1,2,1,4,22,1 };
&lt;br&gt;&amp;nbsp;static PMIB_IPNETTABLE ipNetTable;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+static DWORD copyIpNetPhysAddr(AsnAny *value, void *src)
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;PMIB_IPNETROW row = (PMIB_IPNETROW)((BYTE *)src - FIELD_OFFSET(MIB_IPNETROW,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;dwPhysAddrLen));
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;setStringValue(value, ASN_OCTETSTRING, row-&amp;gt;dwPhysAddrLen, row-&amp;gt;bPhysAddr);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return SNMP_ERRORSTATUS_NOERROR;
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;static struct structToAsnValue mib2IpNetMap[] = {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;{ FIELD_OFFSET(MIB_IPNETROW, dwIndex), copyInt },
&lt;br&gt;- &amp;nbsp; &amp;nbsp;{ FIELD_OFFSET(MIB_IPNETROW, dwPhysAddrLen), copyLengthPrecededString },
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;{ FIELD_OFFSET(MIB_IPNETROW, dwPhysAddrLen), copyIpNetPhysAddr },
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;{ FIELD_OFFSET(MIB_IPNETROW, dwAddr), copyIpAddr },
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;{ FIELD_OFFSET(MIB_IPNETROW, dwType), copyInt },
&lt;br&gt;&amp;nbsp;};
&lt;br&gt;-- 
&lt;br&gt;1.5.2.2
&lt;br&gt;&lt;br&gt;&lt;/tt&gt;&lt;hr align=&quot;left&quot; width=&quot;300&quot; /&gt;&lt;br /&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/inetmib1%282-2%29%3A-Copy-an-IP-net-row%27s-physical-address-using-a--type-specific-helper-function%2C-rather-than-using-a-generic-helper-function--which-made-an-invalid-alignment-assumption-tp26703044p26703044.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26702988</id>
	<title>inetmib1(1/2): Return SNMP_ERRORSTATUS_NOSUCHNAME for an interface's  description if it has none</title>
	<published>2009-12-08T15:52:52Z</published>
	<updated>2009-12-08T15:52:52Z</updated>
	<author>
		<name>Juan Lang-4</name>
	</author>
	<content type="html">This little patch series gets rid of an alignment assumption that may
&lt;br&gt;not be valid on 64-bit.
&lt;br&gt;--Juan
&lt;br&gt;&lt;br /&gt;&lt;tt&gt;[0016-Return-SNMP_ERRORSTATUS_NOSUCHNAME-for-an-interface.patch]&lt;/tt&gt;&lt;br /&gt;&lt;hr align=&quot;left&quot; width=&quot;300&quot; /&gt;&lt;tt&gt;From 2c5b27b9d55696a8ebb6e8af23ad0d834de70e92 Mon Sep 17 00:00:00 2001
&lt;br&gt;From: Juan Lang &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26702988&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;juan.lang@...&lt;/a&gt;&amp;gt;
&lt;br&gt;Date: Mon, 7 Dec 2009 13:32:57 -0800
&lt;br&gt;Subject: [PATCH] Return SNMP_ERRORSTATUS_NOSUCHNAME for an interface's description if it has none
&lt;br&gt;&lt;br&gt;---
&lt;br&gt;&amp;nbsp;dlls/inetmib1/main.c | &amp;nbsp; 18 +++++++++++++++++-
&lt;br&gt;&amp;nbsp;1 files changed, 17 insertions(+), 1 deletions(-)
&lt;br&gt;&lt;br&gt;diff --git a/dlls/inetmib1/main.c b/dlls/inetmib1/main.c
&lt;br&gt;index 2a5f97a..f11bc3b 100644
&lt;br&gt;--- a/dlls/inetmib1/main.c
&lt;br&gt;+++ b/dlls/inetmib1/main.c
&lt;br&gt;@@ -553,6 +553,22 @@ static INT setOidWithItemAndInteger(AsnObjectIdentifier *dst,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;return ret;
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+static DWORD copyIfRowDescr(AsnAny *value, void *src)
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;PMIB_IFROW row = (PMIB_IFROW)((BYTE *)src -
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;FIELD_OFFSET(MIB_IFROW, dwDescrLen));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;DWORD ret;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (row-&amp;gt;dwDescrLen)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;setStringValue(value, ASN_OCTETSTRING, row-&amp;gt;dwDescrLen, row-&amp;gt;bDescr);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ret = SNMP_ERRORSTATUS_NOERROR;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;else
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ret = SNMP_ERRORSTATUS_NOSUCHNAME;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return ret;
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;static DWORD copyIfRowPhysAddr(AsnAny *value, void *src)
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;PMIB_IFROW row = (PMIB_IFROW)((BYTE *)src -
&lt;br&gt;@@ -572,7 +588,7 @@ static DWORD copyIfRowPhysAddr(AsnAny *value, void *src)
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;static struct structToAsnValue mib2IfEntryMap[] = {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;{ FIELD_OFFSET(MIB_IFROW, dwIndex), copyInt },
&lt;br&gt;- &amp;nbsp; &amp;nbsp;{ FIELD_OFFSET(MIB_IFROW, dwDescrLen), copyLengthPrecededString },
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;{ FIELD_OFFSET(MIB_IFROW, dwDescrLen), copyIfRowDescr },
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;{ FIELD_OFFSET(MIB_IFROW, dwType), copyInt },
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;{ FIELD_OFFSET(MIB_IFROW, dwMtu), copyInt },
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;{ FIELD_OFFSET(MIB_IFROW, dwSpeed), copyInt },
&lt;br&gt;-- 
&lt;br&gt;1.5.2.2
&lt;br&gt;&lt;br&gt;&lt;/tt&gt;&lt;hr align=&quot;left&quot; width=&quot;300&quot; /&gt;&lt;br /&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/inetmib1%281-2%29%3A-Return-SNMP_ERRORSTATUS_NOSUCHNAME-for-an-interface%27s--description-if-it-has-none-tp26702988p26702988.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26702432</id>
	<title>[PATCH] dbghelp: Add a missing NULL check (Coverity)</title>
	<published>2009-12-08T15:01:29Z</published>
	<updated>2009-12-08T15:01:29Z</updated>
	<author>
		<name>Bugzilla from marcus@jet.franken.de</name>
	</author>
	<content type="html">Hi,
&lt;br&gt;&lt;br&gt;all other functions check the return value of process_find_by_handle,
&lt;br&gt;so this function should do it too.
&lt;br&gt;&lt;br&gt;Ciao, Marcus
&lt;br&gt;---
&lt;br&gt;&amp;nbsp;dlls/dbghelp/symbol.c | &amp;nbsp; &amp;nbsp;1 +
&lt;br&gt;&amp;nbsp;1 files changed, 1 insertions(+), 0 deletions(-)
&lt;br&gt;&lt;br&gt;diff --git a/dlls/dbghelp/symbol.c b/dlls/dbghelp/symbol.c
&lt;br&gt;index c322a62..c266ce2 100644
&lt;br&gt;--- a/dlls/dbghelp/symbol.c
&lt;br&gt;+++ b/dlls/dbghelp/symbol.c
&lt;br&gt;@@ -1034,6 +1034,7 @@ static BOOL sym_enum(HANDLE hProcess, ULONG64 BaseOfDll, PCSTR Mask,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;regex_t &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; mod_regex, sym_regex;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;pair.pcs = process_find_by_handle(hProcess);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (!pair.pcs) return FALSE;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;if (BaseOfDll == 0)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;{
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;/* do local variables ? */
&lt;br&gt;-- 
&lt;br&gt;1.5.6
&lt;br&gt;&lt;br&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-PATCH--dbghelp%3A-Add-a-missing-NULL-check-%28Coverity%29-tp26702432p26702432.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26702288</id>
	<title>wininet: Correctly handle dwContentRead for gzip encoded requests.</title>
	<published>2009-12-08T14:51:46Z</published>
	<updated>2009-12-08T14:51:46Z</updated>
	<author>
		<name>Jacek Caban-2</name>
	</author>
	<content type="html">---
&lt;br&gt;&amp;nbsp; dlls/wininet/http.c | &amp;nbsp; &amp;nbsp;3 ++-
&lt;br&gt;&amp;nbsp; 1 files changed, 2 insertions(+), 1 deletions(-)
&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br /&gt;diff --git a/dlls/wininet/http.c b/dlls/wininet/http.c
&lt;br&gt;index 6123c5f..824a282 100644
&lt;br&gt;--- a/dlls/wininet/http.c
&lt;br&gt;+++ b/dlls/wininet/http.c
&lt;br&gt;@@ -1967,6 +1967,7 @@ static DWORD read_gzip_data(http_request_t *req, BYTE *buf, int size, BOOL sync,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;zstream-&amp;gt;avail_out = size-read;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;zres = inflate(zstream, Z_FULL_FLUSH);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;read = size - zstream-&amp;gt;avail_out;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;req-&amp;gt;dwContentRead += req-&amp;gt;read_size-zstream-&amp;gt;avail_in;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;remove_data(req, req-&amp;gt;read_size-zstream-&amp;gt;avail_in);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if(zres == Z_STREAM_END) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;TRACE(&amp;quot;end of data\n&amp;quot;);
&lt;br&gt;@@ -2086,9 +2087,9 @@ static DWORD HTTPREQ_Read(http_request_t *req, void *buffer, DWORD size, DWORD *
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;finished_reading = !bytes_read &amp;&amp; req-&amp;gt;dwContentRead == req-&amp;gt;dwContentLength;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;req-&amp;gt;dwContentRead += bytes_read;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;done:
&lt;br&gt;- &amp;nbsp; &amp;nbsp;req-&amp;gt;dwContentRead += bytes_read;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;*read = bytes_read;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;TRACE( &amp;quot;retrieved %u bytes (%u/%u)\n&amp;quot;, bytes_read, req-&amp;gt;dwContentRead, req-&amp;gt;dwContentLength );
&lt;br&gt;&lt;br&gt;&lt;br /&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/wininet%3A-Correctly-handle-dwContentRead-for-gzip-encoded-requests.-tp26702288p26702288.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26701360</id>
	<title>winhttp/tests: Only free a certificate context if retrieving it  succeeded</title>
	<published>2009-12-08T13:44:40Z</published>
	<updated>2009-12-08T13:44:40Z</updated>
	<author>
		<name>Juan Lang-4</name>
	</author>
	<content type="html">Fixes a crash if a test fails, see e.g.
&lt;br&gt;&lt;a href=&quot;http://test.winehq.org/data/578881f600e20fbef51df2fdebc5ea641de6f24f/wine_ae-ub910-x64/winhttp:winhttp.html&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://test.winehq.org/data/578881f600e20fbef51df2fdebc5ea641de6f24f/wine_ae-ub910-x64/winhttp:winhttp.html&lt;/a&gt;&lt;br&gt;--Juan
&lt;br&gt;&lt;br /&gt;&lt;tt&gt;[0015-Only-free-a-certificate-context-if-retrieving-it-suc.patch]&lt;/tt&gt;&lt;br /&gt;&lt;hr align=&quot;left&quot; width=&quot;300&quot; /&gt;&lt;tt&gt;From ed39146a0065ecc736c74f26a9dfd6dde443994a Mon Sep 17 00:00:00 2001
&lt;br&gt;From: Juan Lang &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26701360&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;juan.lang@...&lt;/a&gt;&amp;gt;
&lt;br&gt;Date: Tue, 8 Dec 2009 13:43:49 -0800
&lt;br&gt;Subject: [PATCH] Only free a certificate context if retrieving it succeeded
&lt;br&gt;&lt;br&gt;---
&lt;br&gt;&amp;nbsp;dlls/winhttp/tests/winhttp.c | &amp;nbsp; &amp;nbsp;3 ++-
&lt;br&gt;&amp;nbsp;1 files changed, 2 insertions(+), 1 deletions(-)
&lt;br&gt;&lt;br&gt;diff --git a/dlls/winhttp/tests/winhttp.c b/dlls/winhttp/tests/winhttp.c
&lt;br&gt;index 2810fbb..342dde2 100644
&lt;br&gt;--- a/dlls/winhttp/tests/winhttp.c
&lt;br&gt;+++ b/dlls/winhttp/tests/winhttp.c
&lt;br&gt;@@ -787,7 +787,8 @@ static void test_secure_connection(void)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;size = sizeof(cert);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;ret = WinHttpQueryOption(req, WINHTTP_OPTION_SERVER_CERT_CONTEXT, &amp;cert, &amp;size );
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;ok(ret, &amp;quot;failed to retrieve certificate context %u\n&amp;quot;, GetLastError());
&lt;br&gt;- &amp;nbsp; &amp;nbsp;CertFreeCertificateContext(cert);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (ret)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;CertFreeCertificateContext(cert);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;size = sizeof(bitness);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;ret = WinHttpQueryOption(req, WINHTTP_OPTION_SECURITY_KEY_BITNESS, &amp;bitness, &amp;size );
&lt;br&gt;-- 
&lt;br&gt;1.5.2.2
&lt;br&gt;&lt;br&gt;&lt;/tt&gt;&lt;hr align=&quot;left&quot; width=&quot;300&quot; /&gt;&lt;br /&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/winhttp-tests%3A-Only-free-a-certificate-context-if-retrieving-it--succeeded-tp26701360p26701360.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26701216</id>
	<title>rsaenh(2/2): Free a verify context's keys when it's destroyed</title>
	<published>2009-12-08T13:34:49Z</published>
	<updated>2009-12-08T13:34:49Z</updated>
	<author>
		<name>Juan Lang-4</name>
	</author>
	<content type="html">Fixes a memory leak.
&lt;br&gt;--Juan
&lt;br&gt;&lt;br /&gt;&lt;tt&gt;[0014-Free-a-verify-context-s-keys-when-it-s-destroyed.patch]&lt;/tt&gt;&lt;br /&gt;&lt;hr align=&quot;left&quot; width=&quot;300&quot; /&gt;&lt;tt&gt;From 70de333a405bffd3e67eaa8944b64c7b102909fa Mon Sep 17 00:00:00 2001
&lt;br&gt;From: Juan Lang &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26701216&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;juan.lang@...&lt;/a&gt;&amp;gt;
&lt;br&gt;Date: Tue, 8 Dec 2009 13:32:19 -0800
&lt;br&gt;Subject: [PATCH] Free a verify context's keys when it's destroyed
&lt;br&gt;&lt;br&gt;---
&lt;br&gt;&amp;nbsp;dlls/rsaenh/rsaenh.c | &amp;nbsp; &amp;nbsp;2 ++
&lt;br&gt;&amp;nbsp;1 files changed, 2 insertions(+), 0 deletions(-)
&lt;br&gt;&lt;br&gt;diff --git a/dlls/rsaenh/rsaenh.c b/dlls/rsaenh/rsaenh.c
&lt;br&gt;index 2ccbf5c..5c2b8b0 100644
&lt;br&gt;--- a/dlls/rsaenh/rsaenh.c
&lt;br&gt;+++ b/dlls/rsaenh/rsaenh.c
&lt;br&gt;@@ -1219,6 +1219,8 @@ static void destroy_key_container(OBJECTHDR *pObjectHdr)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;store_key_container_permissions(pKeyContainer);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;release_key_container_keys(pKeyContainer);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;else
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;release_key_container_keys(pKeyContainer);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;HeapFree( GetProcessHeap(), 0, pKeyContainer );
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-- 
&lt;br&gt;1.5.2.2
&lt;br&gt;&lt;br&gt;&lt;/tt&gt;&lt;hr align=&quot;left&quot; width=&quot;300&quot; /&gt;&lt;br /&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/rsaenh%282-2%29%3A-Free-a-verify-context%27s-keys-when-it%27s-destroyed-tp26701216p26701216.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26701212</id>
	<title>rsaenh(1/2): Use helper function to release and install a key into a  crypt provider</title>
	<published>2009-12-08T13:34:17Z</published>
	<updated>2009-12-08T13:34:17Z</updated>
	<author>
		<name>Juan Lang-4</name>
	</author>
	<content type="html">No-op, just makes CPGenKey more similar to the import functions.
&lt;br&gt;--Juan
&lt;br&gt;&lt;br /&gt;&lt;tt&gt;[0013-Use-helper-function-to-release-and-install-a-key-int.patch]&lt;/tt&gt;&lt;br /&gt;&lt;hr align=&quot;left&quot; width=&quot;300&quot; /&gt;&lt;tt&gt;From 27afa220f83e476a80c9e9856a3a868870dff143 Mon Sep 17 00:00:00 2001
&lt;br&gt;From: Juan Lang &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26701212&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;juan.lang@...&lt;/a&gt;&amp;gt;
&lt;br&gt;Date: Tue, 8 Dec 2009 13:17:59 -0800
&lt;br&gt;Subject: [PATCH] Use helper function to release and install a key into a crypt provider
&lt;br&gt;&lt;br&gt;---
&lt;br&gt;&amp;nbsp;dlls/rsaenh/rsaenh.c | &amp;nbsp; 12 ++++++------
&lt;br&gt;&amp;nbsp;1 files changed, 6 insertions(+), 6 deletions(-)
&lt;br&gt;&lt;br&gt;diff --git a/dlls/rsaenh/rsaenh.c b/dlls/rsaenh/rsaenh.c
&lt;br&gt;index 0228696..2ccbf5c 100644
&lt;br&gt;--- a/dlls/rsaenh/rsaenh.c
&lt;br&gt;+++ b/dlls/rsaenh/rsaenh.c
&lt;br&gt;@@ -3065,9 +3065,9 @@ BOOL WINAPI RSAENH_CPGenKey(HCRYPTPROV hProv, ALG_ID Algid, DWORD dwFlags, HCRYP
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (pCryptKey) { 
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;new_key_impl(pCryptKey-&amp;gt;aiAlgid, &amp;pCryptKey-&amp;gt;context, pCryptKey-&amp;gt;dwKeyLen);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;setup_key(pCryptKey);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;RSAENH_CPDestroyKey(hProv, pKeyContainer-&amp;gt;hSignatureKeyPair);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;copy_handle(&amp;handle_table, *phKey, RSAENH_MAGIC_KEY,
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;pKeyContainer-&amp;gt;hSignatureKeyPair);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;release_and_install_key(hProv, *phKey,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;pKeyContainer-&amp;gt;hSignatureKeyPair,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;FALSE);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;break;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -3077,9 +3077,9 @@ BOOL WINAPI RSAENH_CPGenKey(HCRYPTPROV hProv, ALG_ID Algid, DWORD dwFlags, HCRYP
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (pCryptKey) { 
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;new_key_impl(pCryptKey-&amp;gt;aiAlgid, &amp;pCryptKey-&amp;gt;context, pCryptKey-&amp;gt;dwKeyLen);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;setup_key(pCryptKey);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;RSAENH_CPDestroyKey(hProv, pKeyContainer-&amp;gt;hKeyExchangeKeyPair);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;copy_handle(&amp;handle_table, *phKey, RSAENH_MAGIC_KEY,
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;pKeyContainer-&amp;gt;hKeyExchangeKeyPair);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;release_and_install_key(hProv, *phKey,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;pKeyContainer-&amp;gt;hKeyExchangeKeyPair,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;FALSE);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;break;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;-- 
&lt;br&gt;1.5.2.2
&lt;br&gt;&lt;br&gt;&lt;/tt&gt;&lt;hr align=&quot;left&quot; width=&quot;300&quot; /&gt;&lt;br /&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/rsaenh%281-2%29%3A-Use-helper-function-to-release-and-install-a-key-into-a--crypt-provider-tp26701212p26701212.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26699610</id>
	<title>[5/5] ole32: Add an attribute to StorageBaseImpl to track its reverted status.</title>
	<published>2009-12-08T11:46:37Z</published>
	<updated>2009-12-08T11:46:37Z</updated>
	<author>
		<name>Vincent Povirk-3</name>
	</author>
	<content type="html">&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 3.2//EN&quot;&gt;
&lt;HTML&gt;
&lt;HEAD&gt;
&lt;META HTTP-EQUIV=&quot;Content-Type&quot; CONTENT=&quot;text/html; charset=iso-8859-1&quot;&gt;
&lt;META NAME=&quot;Generator&quot; CONTENT=&quot;MS Exchange Server version 6.5.7638.1&quot;&gt;
&lt;TITLE&gt;[5/5] ole32: Add an attribute to StorageBaseImpl to track its reverted status.&lt;/TITLE&gt;
&lt;/HEAD&gt;
&lt;BODY&gt;
&lt;!-- Converted from text/plain format --&gt;
&lt;BR&gt;
&lt;BR&gt;

&lt;/BODY&gt;
&lt;/HTML&gt;&lt;br /&gt;From b7c11588bb485d61a91b1ced3001a2d8fe23168a Mon Sep 17 00:00:00 2001
&lt;br&gt;From: Vincent Povirk &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26699610&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;vincent@...&lt;/a&gt;&amp;gt;
&lt;br&gt;Date: Mon, 30 Nov 2009 17:07:37 -0600
&lt;br&gt;Subject: [PATCH 5/5] ole32: Add an attribute to StorageBaseImpl to track its reverted status.
&lt;br&gt;&lt;br&gt;---
&lt;br&gt;&amp;nbsp;dlls/ole32/storage32.c | &amp;nbsp; 28 ++++++++++++++++++----------
&lt;br&gt;&amp;nbsp;dlls/ole32/storage32.h | &amp;nbsp; &amp;nbsp;5 +++++
&lt;br&gt;&amp;nbsp;2 files changed, 23 insertions(+), 10 deletions(-)
&lt;br&gt;&lt;br&gt;diff --git a/dlls/ole32/storage32.c b/dlls/ole32/storage32.c
&lt;br&gt;index c39915e..266d677 100644
&lt;br&gt;--- a/dlls/ole32/storage32.c
&lt;br&gt;+++ b/dlls/ole32/storage32.c
&lt;br&gt;@@ -425,7 +425,7 @@ static HRESULT WINAPI StorageBaseImpl_OpenStream(
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;goto end;
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp;if (!This-&amp;gt;ancestorStorage)
&lt;br&gt;+ &amp;nbsp;if (This-&amp;gt;reverted)
&lt;br&gt;&amp;nbsp; &amp;nbsp;{
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;res = STG_E_REVERTED;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;goto end;
&lt;br&gt;@@ -553,7 +553,7 @@ static HRESULT WINAPI StorageBaseImpl_OpenStorage(
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;goto end;
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp;if (!This-&amp;gt;ancestorStorage)
&lt;br&gt;+ &amp;nbsp;if (This-&amp;gt;reverted)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;return STG_E_REVERTED;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;/*
&lt;br&gt;@@ -638,7 +638,7 @@ static HRESULT WINAPI StorageBaseImpl_EnumElements(
&lt;br&gt;&amp;nbsp; &amp;nbsp;if ( (This==0) || (ppenum==0))
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;return E_INVALIDARG;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp;if (!This-&amp;gt;ancestorStorage)
&lt;br&gt;+ &amp;nbsp;if (This-&amp;gt;reverted)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;return STG_E_REVERTED;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;newEnum = IEnumSTATSTGImpl_Construct(
&lt;br&gt;@@ -682,7 +682,7 @@ static HRESULT WINAPI StorageBaseImpl_Stat(
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;goto end;
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp;if (!This-&amp;gt;ancestorStorage)
&lt;br&gt;+ &amp;nbsp;if (This-&amp;gt;reverted)
&lt;br&gt;&amp;nbsp; &amp;nbsp;{
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;res = STG_E_REVERTED;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;goto end;
&lt;br&gt;@@ -733,7 +733,7 @@ static HRESULT WINAPI StorageBaseImpl_RenameElement(
&lt;br&gt;&amp;nbsp; &amp;nbsp;TRACE(&amp;quot;(%p, %s, %s)\n&amp;quot;,
&lt;br&gt;&amp;nbsp;	iface, debugstr_w(pwcsOldName), debugstr_w(pwcsNewName));
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp;if (!This-&amp;gt;ancestorStorage)
&lt;br&gt;+ &amp;nbsp;if (This-&amp;gt;reverted)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;return STG_E_REVERTED;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;currentEntryRef = findElement(This-&amp;gt;ancestorStorage,
&lt;br&gt;@@ -830,7 +830,7 @@ static HRESULT WINAPI StorageBaseImpl_CreateStream(
&lt;br&gt;&amp;nbsp; &amp;nbsp;if (STGM_SHARE_MODE(grfMode) != STGM_SHARE_EXCLUSIVE) 
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;return STG_E_INVALIDFLAG;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp;if (!This-&amp;gt;ancestorStorage)
&lt;br&gt;+ &amp;nbsp;if (This-&amp;gt;reverted)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;return STG_E_REVERTED;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;/*
&lt;br&gt;@@ -959,7 +959,7 @@ static HRESULT WINAPI StorageBaseImpl_SetClass(
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;TRACE(&amp;quot;(%p, %p)\n&amp;quot;, iface, clsid);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp;if (!This-&amp;gt;ancestorStorage)
&lt;br&gt;+ &amp;nbsp;if (This-&amp;gt;reverted)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;return STG_E_REVERTED;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;hRes = StorageBaseImpl_ReadDirEntry(This,
&lt;br&gt;@@ -1028,7 +1028,7 @@ static HRESULT WINAPI StorageBaseImpl_CreateStorage(
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;return STG_E_INVALIDFLAG;
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp;if (!This-&amp;gt;ancestorStorage)
&lt;br&gt;+ &amp;nbsp;if (This-&amp;gt;reverted)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;return STG_E_REVERTED;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;/*
&lt;br&gt;@@ -1772,7 +1772,7 @@ static HRESULT WINAPI StorageBaseImpl_DestroyElement(
&lt;br&gt;&amp;nbsp; &amp;nbsp;if (pwcsName==NULL)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;return STG_E_INVALIDPOINTER;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp;if (!This-&amp;gt;ancestorStorage)
&lt;br&gt;+ &amp;nbsp;if (This-&amp;gt;reverted)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;return STG_E_REVERTED;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;if ( STGM_ACCESS_MODE( This-&amp;gt;openFlags ) == STGM_READ )
&lt;br&gt;@@ -2173,7 +2173,7 @@ static HRESULT WINAPI StorageBaseImpl_SetStateBits(
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp; &amp;nbsp;StorageBaseImpl* const This = (StorageBaseImpl*)iface;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp;if (!This-&amp;gt;ancestorStorage)
&lt;br&gt;+ &amp;nbsp;if (This-&amp;gt;reverted)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;return STG_E_REVERTED;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;This-&amp;gt;stateBits = (This-&amp;gt;stateBits &amp; ~grfMask) | (grfStateBits &amp; grfMask);
&lt;br&gt;@@ -2465,6 +2465,8 @@ static HRESULT StorageImpl_Construct(
&lt;br&gt;&amp;nbsp; &amp;nbsp; */
&lt;br&gt;&amp;nbsp; &amp;nbsp;This-&amp;gt;base.ancestorStorage = This;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+ &amp;nbsp;This-&amp;gt;base.reverted = 0;
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp;This-&amp;gt;hFile = hFile;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;if(pwcsName) {
&lt;br&gt;@@ -3826,6 +3828,10 @@ static void StorageInternalImpl_Invalidate( StorageInternalImpl *This )
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;This-&amp;gt;base.ancestorStorage = NULL;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;This-&amp;gt;base.reverted = 1;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;This-&amp;gt;parentStorage = NULL;
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;StorageBaseImpl_DeleteAll(&amp;This-&amp;gt;base);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;list_remove(&amp;This-&amp;gt;ParentListEntry);
&lt;br&gt;@@ -4387,6 +4393,8 @@ static StorageInternalImpl* StorageInternalImpl_Construct(
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; */
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;newStorage-&amp;gt;base.ancestorStorage = parentStorage-&amp;gt;ancestorStorage;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;newStorage-&amp;gt;base.reverted = 0;
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;newStorage-&amp;gt;parentStorage = parentStorage;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;/*
&lt;br&gt;diff --git a/dlls/ole32/storage32.h b/dlls/ole32/storage32.h
&lt;br&gt;index ba4288d..ff526bf 100644
&lt;br&gt;--- a/dlls/ole32/storage32.h
&lt;br&gt;+++ b/dlls/ole32/storage32.h
&lt;br&gt;@@ -219,6 +219,11 @@ struct StorageBaseImpl
&lt;br&gt;&amp;nbsp; &amp;nbsp;StorageImpl* ancestorStorage;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;/*
&lt;br&gt;+ &amp;nbsp; * TRUE if this object has been invalidated
&lt;br&gt;+ &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;int reverted;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/*
&lt;br&gt;&amp;nbsp; &amp;nbsp; * Index of the directory entry of this storage
&lt;br&gt;&amp;nbsp; &amp;nbsp; */
&lt;br&gt;&amp;nbsp; &amp;nbsp;DirRef storageDirEntry;
&lt;br&gt;-- 
&lt;br&gt;1.6.3.3
&lt;br&gt;&lt;br&gt;&lt;br /&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-5-5--ole32%3A-Add-an-attribute-to-StorageBaseImpl-to-track-its-reverted-status.-tp26699610p26699610.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26699606</id>
	<title>[4/5] ole32: Store the parent of internal storage objects.</title>
	<published>2009-12-08T11:46:03Z</published>
	<updated>2009-12-08T11:46:03Z</updated>
	<author>
		<name>Vincent Povirk-3</name>
	</author>
	<content type="html">&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 3.2//EN&quot;&gt;
&lt;HTML&gt;
&lt;HEAD&gt;
&lt;META HTTP-EQUIV=&quot;Content-Type&quot; CONTENT=&quot;text/html; charset=iso-8859-1&quot;&gt;
&lt;META NAME=&quot;Generator&quot; CONTENT=&quot;MS Exchange Server version 6.5.7638.1&quot;&gt;
&lt;TITLE&gt;[4/5] ole32: Store the parent of internal storage objects.&lt;/TITLE&gt;
&lt;/HEAD&gt;
&lt;BODY&gt;
&lt;!-- Converted from text/plain format --&gt;
&lt;BR&gt;
&lt;BR&gt;

&lt;/BODY&gt;
&lt;/HTML&gt;&lt;br /&gt;From 416d12b8268b585319df94d1e33b27be27e3b761 Mon Sep 17 00:00:00 2001
&lt;br&gt;From: Vincent Povirk &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26699606&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;vincent@...&lt;/a&gt;&amp;gt;
&lt;br&gt;Date: Mon, 30 Nov 2009 17:02:52 -0600
&lt;br&gt;Subject: [PATCH 4/5] ole32: Store the parent of internal storage objects.
&lt;br&gt;&lt;br&gt;---
&lt;br&gt;&amp;nbsp;dlls/ole32/storage32.c | &amp;nbsp; 40 +++++++++++++++++++++++++++++-----------
&lt;br&gt;&amp;nbsp;1 files changed, 29 insertions(+), 11 deletions(-)
&lt;br&gt;&lt;br&gt;diff --git a/dlls/ole32/storage32.c b/dlls/ole32/storage32.c
&lt;br&gt;index 9652077..c39915e 100644
&lt;br&gt;--- a/dlls/ole32/storage32.c
&lt;br&gt;+++ b/dlls/ole32/storage32.c
&lt;br&gt;@@ -82,11 +82,13 @@ struct StorageInternalImpl
&lt;br&gt;&amp;nbsp; &amp;nbsp; * Entry in the parent's stream tracking list
&lt;br&gt;&amp;nbsp; &amp;nbsp; */
&lt;br&gt;&amp;nbsp; &amp;nbsp;struct list ParentListEntry;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;StorageBaseImpl *parentStorage;
&lt;br&gt;&amp;nbsp;};
&lt;br&gt;&amp;nbsp;typedef struct StorageInternalImpl StorageInternalImpl;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;/* Method definitions for the Storage32InternalImpl class. */
&lt;br&gt;-static StorageInternalImpl* StorageInternalImpl_Construct(StorageImpl* ancestorStorage,
&lt;br&gt;+static StorageInternalImpl* StorageInternalImpl_Construct(StorageBaseImpl* parentStorage,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;DWORD openFlags, DirRef storageDirEntry);
&lt;br&gt;&amp;nbsp;static void StorageImpl_Destroy(StorageBaseImpl* iface);
&lt;br&gt;&amp;nbsp;static BOOL StorageImpl_ReadBigBlock(StorageImpl* This, ULONG blockIndex, void* buffer);
&lt;br&gt;@@ -585,7 +587,7 @@ static HRESULT WINAPI StorageBaseImpl_OpenStorage(
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;newStorage = StorageInternalImpl_Construct(
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; This-&amp;gt;ancestorStorage,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; This,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; grfMode,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; storageEntryRef);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -3842,49 +3844,63 @@ static void StorageInternalImpl_Destroy( StorageBaseImpl *iface)
&lt;br&gt;&amp;nbsp;static HRESULT StorageInternalImpl_CreateDirEntry(StorageBaseImpl *base,
&lt;br&gt;&amp;nbsp; &amp;nbsp;const DirEntry *newData, DirRef *index)
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;- &amp;nbsp;return StorageBaseImpl_CreateDirEntry(&amp;base-&amp;gt;ancestorStorage-&amp;gt;base,
&lt;br&gt;+ &amp;nbsp;StorageInternalImpl* This = (StorageInternalImpl*) base;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;return StorageBaseImpl_CreateDirEntry(This-&amp;gt;parentStorage,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;newData, index);
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;static HRESULT StorageInternalImpl_WriteDirEntry(StorageBaseImpl *base,
&lt;br&gt;&amp;nbsp; &amp;nbsp;DirRef index, const DirEntry *data)
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;- &amp;nbsp;return StorageBaseImpl_WriteDirEntry(&amp;base-&amp;gt;ancestorStorage-&amp;gt;base,
&lt;br&gt;+ &amp;nbsp;StorageInternalImpl* This = (StorageInternalImpl*) base;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;return StorageBaseImpl_WriteDirEntry(This-&amp;gt;parentStorage,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;index, data);
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;static HRESULT StorageInternalImpl_ReadDirEntry(StorageBaseImpl *base,
&lt;br&gt;&amp;nbsp; &amp;nbsp;DirRef index, DirEntry *data)
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;- &amp;nbsp;return StorageBaseImpl_ReadDirEntry(&amp;base-&amp;gt;ancestorStorage-&amp;gt;base,
&lt;br&gt;+ &amp;nbsp;StorageInternalImpl* This = (StorageInternalImpl*) base;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;return StorageBaseImpl_ReadDirEntry(This-&amp;gt;parentStorage,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;index, data);
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;static HRESULT StorageInternalImpl_DestroyDirEntry(StorageBaseImpl *base,
&lt;br&gt;&amp;nbsp; &amp;nbsp;DirRef index)
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;- &amp;nbsp;return StorageBaseImpl_DestroyDirEntry(&amp;base-&amp;gt;ancestorStorage-&amp;gt;base,
&lt;br&gt;+ &amp;nbsp;StorageInternalImpl* This = (StorageInternalImpl*) base;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;return StorageBaseImpl_DestroyDirEntry(This-&amp;gt;parentStorage,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;index);
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;static HRESULT StorageInternalImpl_StreamReadAt(StorageBaseImpl *base,
&lt;br&gt;&amp;nbsp; &amp;nbsp;DirRef index, ULARGE_INTEGER offset, ULONG size, void *buffer, ULONG *bytesRead)
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;- &amp;nbsp;return StorageBaseImpl_StreamReadAt(&amp;base-&amp;gt;ancestorStorage-&amp;gt;base,
&lt;br&gt;+ &amp;nbsp;StorageInternalImpl* This = (StorageInternalImpl*) base;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;return StorageBaseImpl_StreamReadAt(This-&amp;gt;parentStorage,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;index, offset, size, buffer, bytesRead);
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;static HRESULT StorageInternalImpl_StreamWriteAt(StorageBaseImpl *base,
&lt;br&gt;&amp;nbsp; &amp;nbsp;DirRef index, ULARGE_INTEGER offset, ULONG size, const void *buffer, ULONG *bytesWritten)
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;- &amp;nbsp;return StorageBaseImpl_StreamWriteAt(&amp;base-&amp;gt;ancestorStorage-&amp;gt;base,
&lt;br&gt;+ &amp;nbsp;StorageInternalImpl* This = (StorageInternalImpl*) base;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;return StorageBaseImpl_StreamWriteAt(This-&amp;gt;parentStorage,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;index, offset, size, buffer, bytesWritten);
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;static HRESULT StorageInternalImpl_StreamSetSize(StorageBaseImpl *base,
&lt;br&gt;&amp;nbsp; &amp;nbsp;DirRef index, ULARGE_INTEGER newsize)
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;- &amp;nbsp;return StorageBaseImpl_StreamSetSize(&amp;base-&amp;gt;ancestorStorage-&amp;gt;base,
&lt;br&gt;+ &amp;nbsp;StorageInternalImpl* This = (StorageInternalImpl*) base;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;return StorageBaseImpl_StreamSetSize(This-&amp;gt;parentStorage,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;index, newsize);
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -4345,7 +4361,7 @@ static const StorageBaseImplVtbl StorageInternalImpl_BaseVtbl =
&lt;br&gt;&amp;nbsp;*/
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;static StorageInternalImpl* StorageInternalImpl_Construct(
&lt;br&gt;- &amp;nbsp;StorageImpl* ancestorStorage,
&lt;br&gt;+ &amp;nbsp;StorageBaseImpl* parentStorage,
&lt;br&gt;&amp;nbsp; &amp;nbsp;DWORD &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;openFlags,
&lt;br&gt;&amp;nbsp; &amp;nbsp;DirRef &amp;nbsp; &amp;nbsp; &amp;nbsp; storageDirEntry)
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;@@ -4369,7 +4385,9 @@ static StorageInternalImpl* StorageInternalImpl_Construct(
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;/*
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; * Keep the ancestor storage pointer but do not nail a reference to it.
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; */
&lt;br&gt;- &amp;nbsp; &amp;nbsp;newStorage-&amp;gt;base.ancestorStorage = ancestorStorage;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;newStorage-&amp;gt;base.ancestorStorage = parentStorage-&amp;gt;ancestorStorage;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;newStorage-&amp;gt;parentStorage = parentStorage;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;/*
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; * Keep a reference to the directory entry of this storage
&lt;br&gt;-- 
&lt;br&gt;1.6.3.3
&lt;br&gt;&lt;br&gt;&lt;br /&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-4-5--ole32%3A-Store-the-parent-of-internal-storage-objects.-tp26699606p26699606.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26699602</id>
	<title>[3/5] ole32: Don't track the stream size in storage stream objects.</title>
	<published>2009-12-08T11:45:44Z</published>
	<updated>2009-12-08T11:45:44Z</updated>
	<author>
		<name>Vincent Povirk-3</name>
	</author>
	<content type="html">&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 3.2//EN&quot;&gt;
&lt;HTML&gt;
&lt;HEAD&gt;
&lt;META HTTP-EQUIV=&quot;Content-Type&quot; CONTENT=&quot;text/html; charset=iso-8859-1&quot;&gt;
&lt;META NAME=&quot;Generator&quot; CONTENT=&quot;MS Exchange Server version 6.5.7638.1&quot;&gt;
&lt;TITLE&gt;[3/5] ole32: Don't track the stream size in storage stream objects.&lt;/TITLE&gt;
&lt;/HEAD&gt;
&lt;BODY&gt;
&lt;!-- Converted from text/plain format --&gt;
&lt;BR&gt;
&lt;BR&gt;

&lt;/BODY&gt;
&lt;/HTML&gt;&lt;br /&gt;From bc8c8c5955c908c0126457048972886bcf64a588 Mon Sep 17 00:00:00 2001
&lt;br&gt;From: Vincent Povirk &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26699602&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;vincent@...&lt;/a&gt;&amp;gt;
&lt;br&gt;Date: Mon, 30 Nov 2009 15:40:53 -0600
&lt;br&gt;Subject: [PATCH 3/5] ole32: Don't track the stream size in storage stream objects.
&lt;br&gt;&lt;br&gt;We can't do this safely when there are multiple objects for a single stream.
&lt;br&gt;---
&lt;br&gt;&amp;nbsp;dlls/ole32/stg_stream.c | &amp;nbsp;128 ++---------------------------------------------
&lt;br&gt;&amp;nbsp;dlls/ole32/storage32.c &amp;nbsp;| &amp;nbsp; 14 ++++--
&lt;br&gt;&amp;nbsp;dlls/ole32/storage32.h &amp;nbsp;| &amp;nbsp; 16 +-----
&lt;br&gt;&amp;nbsp;3 files changed, 17 insertions(+), 141 deletions(-)
&lt;br&gt;&lt;br&gt;diff --git a/dlls/ole32/stg_stream.c b/dlls/ole32/stg_stream.c
&lt;br&gt;index 00a61a2..bfecbc7 100644
&lt;br&gt;--- a/dlls/ole32/stg_stream.c
&lt;br&gt;+++ b/dlls/ole32/stg_stream.c
&lt;br&gt;@@ -75,21 +75,6 @@ static void StgStreamImpl_Destroy(StgStreamImpl* This)
&lt;br&gt;&amp;nbsp; &amp;nbsp;This-&amp;gt;parentStorage = 0;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;/*
&lt;br&gt;- &amp;nbsp; * Make sure we clean-up the block chain stream objects that we were using.
&lt;br&gt;- &amp;nbsp; */
&lt;br&gt;- &amp;nbsp;if (This-&amp;gt;bigBlockChain != 0)
&lt;br&gt;- &amp;nbsp;{
&lt;br&gt;- &amp;nbsp; &amp;nbsp;BlockChainStream_Destroy(This-&amp;gt;bigBlockChain);
&lt;br&gt;- &amp;nbsp; &amp;nbsp;This-&amp;gt;bigBlockChain = 0;
&lt;br&gt;- &amp;nbsp;}
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp;if (This-&amp;gt;smallBlockChain != 0)
&lt;br&gt;- &amp;nbsp;{
&lt;br&gt;- &amp;nbsp; &amp;nbsp;SmallBlockChainStream_Destroy(This-&amp;gt;smallBlockChain);
&lt;br&gt;- &amp;nbsp; &amp;nbsp;This-&amp;gt;smallBlockChain = 0;
&lt;br&gt;- &amp;nbsp;}
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp;/*
&lt;br&gt;&amp;nbsp; &amp;nbsp; * Finally, free the memory used-up by the class.
&lt;br&gt;&amp;nbsp; &amp;nbsp; */
&lt;br&gt;&amp;nbsp; &amp;nbsp;HeapFree(GetProcessHeap(), 0, This);
&lt;br&gt;@@ -180,73 +165,6 @@ static ULONG WINAPI StgStreamImpl_Release(
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;/***
&lt;br&gt;- * This method will open the block chain pointed by the directory entry
&lt;br&gt;- * that describes the stream.
&lt;br&gt;- * If the stream's size is null, no chain is opened.
&lt;br&gt;- */
&lt;br&gt;-static void StgStreamImpl_OpenBlockChain(
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;StgStreamImpl* This)
&lt;br&gt;-{
&lt;br&gt;- &amp;nbsp;DirEntry &amp;nbsp; &amp;nbsp; currentEntry;
&lt;br&gt;- &amp;nbsp;HRESULT &amp;nbsp; &amp;nbsp; &amp;nbsp;hr;
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp;/*
&lt;br&gt;- &amp;nbsp; * Make sure no old object is left over.
&lt;br&gt;- &amp;nbsp; */
&lt;br&gt;- &amp;nbsp;if (This-&amp;gt;smallBlockChain != 0)
&lt;br&gt;- &amp;nbsp;{
&lt;br&gt;- &amp;nbsp; &amp;nbsp;SmallBlockChainStream_Destroy(This-&amp;gt;smallBlockChain);
&lt;br&gt;- &amp;nbsp; &amp;nbsp;This-&amp;gt;smallBlockChain = 0;
&lt;br&gt;- &amp;nbsp;}
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp;if (This-&amp;gt;bigBlockChain != 0)
&lt;br&gt;- &amp;nbsp;{
&lt;br&gt;- &amp;nbsp; &amp;nbsp;BlockChainStream_Destroy(This-&amp;gt;bigBlockChain);
&lt;br&gt;- &amp;nbsp; &amp;nbsp;This-&amp;gt;bigBlockChain = 0;
&lt;br&gt;- &amp;nbsp;}
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp;/*
&lt;br&gt;- &amp;nbsp; * Read the information from the directory entry.
&lt;br&gt;- &amp;nbsp; */
&lt;br&gt;- &amp;nbsp;hr = StorageBaseImpl_ReadDirEntry(This-&amp;gt;parentStorage,
&lt;br&gt;-					 &amp;nbsp; &amp;nbsp; This-&amp;gt;dirEntry,
&lt;br&gt;-					 &amp;nbsp; &amp;nbsp; &amp;currentEntry);
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp;if (SUCCEEDED(hr))
&lt;br&gt;- &amp;nbsp;{
&lt;br&gt;- &amp;nbsp; &amp;nbsp;This-&amp;gt;streamSize = currentEntry.size;
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp; &amp;nbsp;/*
&lt;br&gt;- &amp;nbsp; &amp;nbsp; * This code supports only streams that are &amp;lt;32 bits in size.
&lt;br&gt;- &amp;nbsp; &amp;nbsp; */
&lt;br&gt;- &amp;nbsp; &amp;nbsp;assert(This-&amp;gt;streamSize.u.HighPart == 0);
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp; &amp;nbsp;if(currentEntry.startingBlock == BLOCK_END_OF_CHAIN)
&lt;br&gt;- &amp;nbsp; &amp;nbsp;{
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;assert( (This-&amp;gt;streamSize.u.HighPart == 0) &amp;&amp; (This-&amp;gt;streamSize.u.LowPart == 0) );
&lt;br&gt;- &amp;nbsp; &amp;nbsp;}
&lt;br&gt;- &amp;nbsp; &amp;nbsp;else
&lt;br&gt;- &amp;nbsp; &amp;nbsp;{
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;if ( (This-&amp;gt;streamSize.u.HighPart == 0) &amp;&amp;
&lt;br&gt;-	 &amp;nbsp; (This-&amp;gt;streamSize.u.LowPart &amp;lt; LIMIT_TO_USE_SMALL_BLOCK) )
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;{
&lt;br&gt;-	This-&amp;gt;smallBlockChain = SmallBlockChainStream_Construct(
&lt;br&gt;-								This-&amp;gt;parentStorage-&amp;gt;ancestorStorage,
&lt;br&gt;-								NULL,
&lt;br&gt;-								This-&amp;gt;dirEntry);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;else
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;{
&lt;br&gt;-	This-&amp;gt;bigBlockChain = BlockChainStream_Construct(
&lt;br&gt;-							 This-&amp;gt;parentStorage-&amp;gt;ancestorStorage,
&lt;br&gt;-							 NULL,
&lt;br&gt;-							 This-&amp;gt;dirEntry);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;- &amp;nbsp; &amp;nbsp;}
&lt;br&gt;- &amp;nbsp;}
&lt;br&gt;-}
&lt;br&gt;-
&lt;br&gt;-/***
&lt;br&gt;&amp;nbsp; * This method is part of the ISequentialStream interface.
&lt;br&gt;&amp;nbsp; *
&lt;br&gt;&amp;nbsp; * It reads a block of information from the stream at the current
&lt;br&gt;@@ -319,7 +237,6 @@ static HRESULT WINAPI StgStreamImpl_Write(
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp; &amp;nbsp;StgStreamImpl* const This=(StgStreamImpl*)iface;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp;ULARGE_INTEGER newSize;
&lt;br&gt;&amp;nbsp; &amp;nbsp;ULONG bytesWritten = 0;
&lt;br&gt;&amp;nbsp; &amp;nbsp;HRESULT res;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -365,22 +282,6 @@ static HRESULT WINAPI StgStreamImpl_Write(
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;TRACE(&amp;quot;&amp;lt;-- S_OK, written 0\n&amp;quot;);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;return S_OK;
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;- &amp;nbsp;else
&lt;br&gt;- &amp;nbsp;{
&lt;br&gt;- &amp;nbsp; &amp;nbsp;newSize.u.HighPart = 0;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;newSize.u.LowPart = This-&amp;gt;currentPosition.u.LowPart + cb;
&lt;br&gt;- &amp;nbsp;}
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp;/*
&lt;br&gt;- &amp;nbsp; * Verify if we need to grow the stream
&lt;br&gt;- &amp;nbsp; */
&lt;br&gt;- &amp;nbsp;if (newSize.u.LowPart &amp;gt; This-&amp;gt;streamSize.u.LowPart)
&lt;br&gt;- &amp;nbsp;{
&lt;br&gt;- &amp;nbsp; &amp;nbsp;/* grow stream */
&lt;br&gt;- &amp;nbsp; &amp;nbsp;res = IStream_SetSize(iface, newSize);
&lt;br&gt;- &amp;nbsp; &amp;nbsp;if (FAILED(res))
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;return res;
&lt;br&gt;- &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;res = StorageBaseImpl_StreamWriteAt(This-&amp;gt;parentStorage,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;This-&amp;gt;dirEntry,
&lt;br&gt;@@ -415,6 +316,8 @@ static HRESULT WINAPI StgStreamImpl_Seek(
&lt;br&gt;&amp;nbsp; &amp;nbsp;StgStreamImpl* const This=(StgStreamImpl*)iface;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;ULARGE_INTEGER newPosition;
&lt;br&gt;+ &amp;nbsp;DirEntry currentEntry;
&lt;br&gt;+ &amp;nbsp;HRESULT hr;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;TRACE(&amp;quot;(%p, %d, %d, %p)\n&amp;quot;,
&lt;br&gt;&amp;nbsp;	iface, dlibMove.u.LowPart, dwOrigin, plibNewPosition);
&lt;br&gt;@@ -453,7 +356,9 @@ static HRESULT WINAPI StgStreamImpl_Seek(
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;*plibNewPosition = This-&amp;gt;currentPosition;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;break;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;case STREAM_SEEK_END:
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;*plibNewPosition = This-&amp;gt;streamSize;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;hr = StorageBaseImpl_ReadDirEntry(This-&amp;gt;parentStorage, This-&amp;gt;dirEntry, &amp;currentEntry);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;if (FAILED(hr)) return hr;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;*plibNewPosition = currentEntry.size;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;break;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;default:
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;WARN(&amp;quot;invalid dwOrigin %d\n&amp;quot;, dwOrigin);
&lt;br&gt;@@ -511,16 +416,7 @@ static HRESULT WINAPI StgStreamImpl_SetSize(
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;return STG_E_ACCESSDENIED;
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp;if (This-&amp;gt;streamSize.u.LowPart == libNewSize.u.LowPart)
&lt;br&gt;- &amp;nbsp; &amp;nbsp;return S_OK;
&lt;br&gt;-
&lt;br&gt;&amp;nbsp; &amp;nbsp;hr = StorageBaseImpl_StreamSetSize(This-&amp;gt;parentStorage, This-&amp;gt;dirEntry, libNewSize);
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp;if (SUCCEEDED(hr))
&lt;br&gt;- &amp;nbsp;{
&lt;br&gt;- &amp;nbsp; &amp;nbsp;This-&amp;gt;streamSize = libNewSize;
&lt;br&gt;- &amp;nbsp;}
&lt;br&gt;-
&lt;br&gt;&amp;nbsp; &amp;nbsp;return hr;
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -853,20 +749,6 @@ StgStreamImpl* StgStreamImpl_Construct(
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;newStream-&amp;gt;currentPosition.u.HighPart = 0;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;newStream-&amp;gt;currentPosition.u.LowPart = 0;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;/*
&lt;br&gt;- &amp;nbsp; &amp;nbsp; * Initialize the rest of the data.
&lt;br&gt;- &amp;nbsp; &amp;nbsp; */
&lt;br&gt;- &amp;nbsp; &amp;nbsp;newStream-&amp;gt;streamSize.u.HighPart = 0;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;newStream-&amp;gt;streamSize.u.LowPart &amp;nbsp;= 0;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;newStream-&amp;gt;bigBlockChain &amp;nbsp; &amp;nbsp; &amp;nbsp; = 0;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;newStream-&amp;gt;smallBlockChain &amp;nbsp; &amp;nbsp; = 0;
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp; &amp;nbsp;/*
&lt;br&gt;- &amp;nbsp; &amp;nbsp; * Read the size from the directory entry and determine if the blocks forming
&lt;br&gt;- &amp;nbsp; &amp;nbsp; * this stream are large or small.
&lt;br&gt;- &amp;nbsp; &amp;nbsp; */
&lt;br&gt;- &amp;nbsp; &amp;nbsp;StgStreamImpl_OpenBlockChain(newStream);
&lt;br&gt;-
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;/* add us to the storage's list of active streams */
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;StorageBaseImpl_AddStream(parentStorage, newStream);
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;diff --git a/dlls/ole32/storage32.c b/dlls/ole32/storage32.c
&lt;br&gt;index ec38adb..9652077 100644
&lt;br&gt;--- a/dlls/ole32/storage32.c
&lt;br&gt;+++ b/dlls/ole32/storage32.c
&lt;br&gt;@@ -2339,16 +2339,22 @@ static HRESULT StorageImpl_StreamWriteAt(StorageBaseImpl *base, DirRef index,
&lt;br&gt;&amp;nbsp; &amp;nbsp;StorageImpl *This = (StorageImpl*)base;
&lt;br&gt;&amp;nbsp; &amp;nbsp;DirEntry data;
&lt;br&gt;&amp;nbsp; &amp;nbsp;HRESULT hr;
&lt;br&gt;+ &amp;nbsp;ULARGE_INTEGER newSize;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;hr = StorageImpl_ReadDirEntry(This, index, &amp;data);
&lt;br&gt;&amp;nbsp; &amp;nbsp;if (FAILED(hr)) return hr;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp;/* FIXME: Enlarge the stream first if necessary. */
&lt;br&gt;+ &amp;nbsp;/* Grow the stream if necessary */
&lt;br&gt;+ &amp;nbsp;newSize.QuadPart = 0;
&lt;br&gt;+ &amp;nbsp;newSize.QuadPart = offset.QuadPart + size;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp;if (data.size.QuadPart == 0)
&lt;br&gt;+ &amp;nbsp;if (newSize.QuadPart &amp;gt; data.size.QuadPart)
&lt;br&gt;&amp;nbsp; &amp;nbsp;{
&lt;br&gt;- &amp;nbsp; &amp;nbsp;/* This shouldn't happen for now, because the stream object will set the size. */
&lt;br&gt;- &amp;nbsp; &amp;nbsp;assert(FALSE);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;hr = StorageImpl_StreamSetSize(base, index, newSize);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (FAILED(hr))
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;return hr;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;data.size = newSize;
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;if (data.size.QuadPart &amp;lt; LIMIT_TO_USE_SMALL_BLOCK)
&lt;br&gt;diff --git a/dlls/ole32/storage32.h b/dlls/ole32/storage32.h
&lt;br&gt;index 53cb76a..ba4288d 100644
&lt;br&gt;--- a/dlls/ole32/storage32.h
&lt;br&gt;+++ b/dlls/ole32/storage32.h
&lt;br&gt;@@ -293,7 +293,8 @@ static inline HRESULT StorageBaseImpl_StreamReadAt(StorageBaseImpl *This,
&lt;br&gt;&amp;nbsp; &amp;nbsp;return This-&amp;gt;baseVtbl-&amp;gt;StreamReadAt(This, index, offset, size, buffer, bytesRead);
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-/* Write size bytes to this directory entry's stream at the given offset. */
&lt;br&gt;+/* Write size bytes to this directory entry's stream at the given offset,
&lt;br&gt;+ * growing the stream if necessary. */
&lt;br&gt;&amp;nbsp;static inline HRESULT StorageBaseImpl_StreamWriteAt(StorageBaseImpl *This,
&lt;br&gt;&amp;nbsp; &amp;nbsp;DirRef index, ULARGE_INTEGER offset, ULONG size, const void *buffer, ULONG *bytesWritten)
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;@@ -431,22 +432,9 @@ struct StgStreamImpl
&lt;br&gt;&amp;nbsp; &amp;nbsp;DirRef &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; dirEntry;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;/*
&lt;br&gt;- &amp;nbsp; * Helper variable that contains the size of the stream
&lt;br&gt;- &amp;nbsp; */
&lt;br&gt;- &amp;nbsp;ULARGE_INTEGER &amp;nbsp; &amp;nbsp; streamSize;
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp;/*
&lt;br&gt;&amp;nbsp; &amp;nbsp; * This is the current position of the cursor in the stream
&lt;br&gt;&amp;nbsp; &amp;nbsp; */
&lt;br&gt;&amp;nbsp; &amp;nbsp;ULARGE_INTEGER &amp;nbsp; &amp;nbsp; currentPosition;
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp;/*
&lt;br&gt;- &amp;nbsp; * The information in the stream is represented by a chain of small blocks
&lt;br&gt;- &amp;nbsp; * or a chain of large blocks. Depending on the case, one of the two
&lt;br&gt;- &amp;nbsp; * following variables points to that information.
&lt;br&gt;- &amp;nbsp; */
&lt;br&gt;- &amp;nbsp;BlockChainStream* &amp;nbsp; &amp;nbsp; &amp;nbsp;bigBlockChain;
&lt;br&gt;- &amp;nbsp;SmallBlockChainStream* smallBlockChain;
&lt;br&gt;&amp;nbsp;};
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;/*
&lt;br&gt;-- 
&lt;br&gt;1.6.3.3
&lt;br&gt;&lt;br&gt;&lt;br /&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-3-5--ole32%3A-Don%27t-track-the-stream-size-in-storage-stream-objects.-tp26699602p26699602.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26699592</id>
	<title>[2/5] ole32: Use the storage vtable to resize streams.</title>
	<published>2009-12-08T11:45:25Z</published>
	<updated>2009-12-08T11:45:25Z</updated>
	<author>
		<name>Vincent Povirk-3</name>
	</author>
	<content type="html">&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 3.2//EN&quot;&gt;
&lt;HTML&gt;
&lt;HEAD&gt;
&lt;META HTTP-EQUIV=&quot;Content-Type&quot; CONTENT=&quot;text/html; charset=iso-8859-1&quot;&gt;
&lt;META NAME=&quot;Generator&quot; CONTENT=&quot;MS Exchange Server version 6.5.7638.1&quot;&gt;
&lt;TITLE&gt;[2/5] ole32: Use the storage vtable to resize streams.&lt;/TITLE&gt;
&lt;/HEAD&gt;
&lt;BODY&gt;
&lt;!-- Converted from text/plain format --&gt;
&lt;BR&gt;
&lt;BR&gt;

&lt;/BODY&gt;
&lt;/HTML&gt;&lt;br /&gt;From 98133dfd6d7e0a04463aea0a184565490a035504 Mon Sep 17 00:00:00 2001
&lt;br&gt;From: Vincent Povirk &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26699592&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;vincent@...&lt;/a&gt;&amp;gt;
&lt;br&gt;Date: Mon, 30 Nov 2009 15:05:41 -0600
&lt;br&gt;Subject: [PATCH 2/5] ole32: Use the storage vtable to resize streams.
&lt;br&gt;&lt;br&gt;---
&lt;br&gt;&amp;nbsp;dlls/ole32/stg_stream.c | &amp;nbsp; 89 +----------------------------------------
&lt;br&gt;&amp;nbsp;dlls/ole32/storage32.c &amp;nbsp;| &amp;nbsp;100 ++++++++++++++++++++++++++++++++++++++++++++++-
&lt;br&gt;&amp;nbsp;dlls/ole32/storage32.h &amp;nbsp;| &amp;nbsp; &amp;nbsp;7 +++
&lt;br&gt;&amp;nbsp;3 files changed, 108 insertions(+), 88 deletions(-)
&lt;br&gt;&lt;br&gt;diff --git a/dlls/ole32/stg_stream.c b/dlls/ole32/stg_stream.c
&lt;br&gt;index e02a3f5..00a61a2 100644
&lt;br&gt;--- a/dlls/ole32/stg_stream.c
&lt;br&gt;+++ b/dlls/ole32/stg_stream.c
&lt;br&gt;@@ -483,7 +483,6 @@ static HRESULT WINAPI StgStreamImpl_SetSize(
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp; &amp;nbsp;StgStreamImpl* const This=(StgStreamImpl*)iface;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp;DirEntry &amp;nbsp; &amp;nbsp; currentEntry;
&lt;br&gt;&amp;nbsp; &amp;nbsp;HRESULT &amp;nbsp; &amp;nbsp; &amp;nbsp;hr;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;TRACE(&amp;quot;(%p, %d)\n&amp;quot;, iface, libNewSize.u.LowPart);
&lt;br&gt;@@ -512,99 +511,17 @@ static HRESULT WINAPI StgStreamImpl_SetSize(
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;return STG_E_ACCESSDENIED;
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp;/* In simple mode keep the stream size above the small block limit */
&lt;br&gt;- &amp;nbsp;if (This-&amp;gt;parentStorage-&amp;gt;openFlags &amp; STGM_SIMPLE)
&lt;br&gt;- &amp;nbsp; &amp;nbsp;libNewSize.u.LowPart = max(libNewSize.u.LowPart, LIMIT_TO_USE_SMALL_BLOCK);
&lt;br&gt;-
&lt;br&gt;&amp;nbsp; &amp;nbsp;if (This-&amp;gt;streamSize.u.LowPart == libNewSize.u.LowPart)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;return S_OK;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp;/*
&lt;br&gt;- &amp;nbsp; * This will happen if we're creating a stream
&lt;br&gt;- &amp;nbsp; */
&lt;br&gt;- &amp;nbsp;if ((This-&amp;gt;smallBlockChain == 0) &amp;&amp; (This-&amp;gt;bigBlockChain == 0))
&lt;br&gt;- &amp;nbsp;{
&lt;br&gt;- &amp;nbsp; &amp;nbsp;if (libNewSize.u.LowPart &amp;lt; LIMIT_TO_USE_SMALL_BLOCK)
&lt;br&gt;- &amp;nbsp; &amp;nbsp;{
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;This-&amp;gt;smallBlockChain = SmallBlockChainStream_Construct(
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;This-&amp;gt;parentStorage-&amp;gt;ancestorStorage,
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;NULL,
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;This-&amp;gt;dirEntry);
&lt;br&gt;- &amp;nbsp; &amp;nbsp;}
&lt;br&gt;- &amp;nbsp; &amp;nbsp;else
&lt;br&gt;- &amp;nbsp; &amp;nbsp;{
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;This-&amp;gt;bigBlockChain = BlockChainStream_Construct(
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;This-&amp;gt;parentStorage-&amp;gt;ancestorStorage,
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;NULL,
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;This-&amp;gt;dirEntry);
&lt;br&gt;- &amp;nbsp; &amp;nbsp;}
&lt;br&gt;- &amp;nbsp;}
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp;/*
&lt;br&gt;- &amp;nbsp; * Read this stream's size to see if it's small blocks or big blocks
&lt;br&gt;- &amp;nbsp; */
&lt;br&gt;- &amp;nbsp;StorageBaseImpl_ReadDirEntry(This-&amp;gt;parentStorage,
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; This-&amp;gt;dirEntry,
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;currentEntry);
&lt;br&gt;- &amp;nbsp;/*
&lt;br&gt;- &amp;nbsp; * Determine if we have to switch from small to big blocks or vice versa
&lt;br&gt;- &amp;nbsp; */
&lt;br&gt;- &amp;nbsp;if ( (This-&amp;gt;smallBlockChain!=0) &amp;&amp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; (currentEntry.size.u.LowPart &amp;lt; LIMIT_TO_USE_SMALL_BLOCK) )
&lt;br&gt;- &amp;nbsp;{
&lt;br&gt;- &amp;nbsp; &amp;nbsp;if (libNewSize.u.LowPart &amp;gt;= LIMIT_TO_USE_SMALL_BLOCK)
&lt;br&gt;- &amp;nbsp; &amp;nbsp;{
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;/*
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; * Transform the small block chain into a big block chain
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; */
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;This-&amp;gt;bigBlockChain = Storage32Impl_SmallBlocksToBigBlocks(
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;This-&amp;gt;parentStorage-&amp;gt;ancestorStorage,
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;This-&amp;gt;smallBlockChain);
&lt;br&gt;- &amp;nbsp; &amp;nbsp;}
&lt;br&gt;- &amp;nbsp;}
&lt;br&gt;- &amp;nbsp;else if ( (This-&amp;gt;bigBlockChain!=0) &amp;&amp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;(currentEntry.size.u.LowPart &amp;gt;= LIMIT_TO_USE_SMALL_BLOCK) )
&lt;br&gt;- &amp;nbsp;{
&lt;br&gt;- &amp;nbsp; &amp;nbsp;if (libNewSize.u.LowPart &amp;lt; LIMIT_TO_USE_SMALL_BLOCK)
&lt;br&gt;- &amp;nbsp; &amp;nbsp;{
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;/*
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; * Transform the big block chain into a small block chain
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; */
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;This-&amp;gt;smallBlockChain = Storage32Impl_BigBlocksToSmallBlocks(
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;This-&amp;gt;parentStorage-&amp;gt;ancestorStorage,
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;This-&amp;gt;bigBlockChain);
&lt;br&gt;- &amp;nbsp; &amp;nbsp;}
&lt;br&gt;- &amp;nbsp;}
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp;if (This-&amp;gt;smallBlockChain!=0)
&lt;br&gt;- &amp;nbsp;{
&lt;br&gt;- &amp;nbsp; &amp;nbsp;SmallBlockChainStream_SetSize(This-&amp;gt;smallBlockChain, libNewSize);
&lt;br&gt;- &amp;nbsp;}
&lt;br&gt;- &amp;nbsp;else
&lt;br&gt;- &amp;nbsp;{
&lt;br&gt;- &amp;nbsp; &amp;nbsp;BlockChainStream_SetSize(This-&amp;gt;bigBlockChain, libNewSize);
&lt;br&gt;- &amp;nbsp;}
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp;/*
&lt;br&gt;- &amp;nbsp; * Write the new information about this stream to the directory entry
&lt;br&gt;- &amp;nbsp; */
&lt;br&gt;- &amp;nbsp;hr = StorageBaseImpl_ReadDirEntry(This-&amp;gt;parentStorage,
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; This-&amp;gt;dirEntry,
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;currentEntry);
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp;currentEntry.size.u.HighPart = libNewSize.u.HighPart;
&lt;br&gt;- &amp;nbsp;currentEntry.size.u.LowPart = libNewSize.u.LowPart;
&lt;br&gt;+ &amp;nbsp;hr = StorageBaseImpl_StreamSetSize(This-&amp;gt;parentStorage, This-&amp;gt;dirEntry, libNewSize);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;if (SUCCEEDED(hr))
&lt;br&gt;&amp;nbsp; &amp;nbsp;{
&lt;br&gt;- &amp;nbsp; &amp;nbsp;StorageBaseImpl_WriteDirEntry(This-&amp;gt;parentStorage,
&lt;br&gt;-				This-&amp;gt;dirEntry,
&lt;br&gt;-				&amp;currentEntry);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;This-&amp;gt;streamSize = libNewSize;
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp;This-&amp;gt;streamSize = libNewSize;
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp;return S_OK;
&lt;br&gt;+ &amp;nbsp;return hr;
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;/***
&lt;br&gt;diff --git a/dlls/ole32/storage32.c b/dlls/ole32/storage32.c
&lt;br&gt;index f34dadd..ec38adb 100644
&lt;br&gt;--- a/dlls/ole32/storage32.c
&lt;br&gt;+++ b/dlls/ole32/storage32.c
&lt;br&gt;@@ -2246,6 +2246,93 @@ static HRESULT StorageImpl_StreamReadAt(StorageBaseImpl *base, DirRef index,
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+static HRESULT StorageImpl_StreamSetSize(StorageBaseImpl *base, DirRef index,
&lt;br&gt;+ &amp;nbsp;ULARGE_INTEGER newsize)
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp;StorageImpl *This = (StorageImpl*)base;
&lt;br&gt;+ &amp;nbsp;DirEntry data;
&lt;br&gt;+ &amp;nbsp;HRESULT hr;
&lt;br&gt;+ &amp;nbsp;SmallBlockChainStream *smallblock=NULL;
&lt;br&gt;+ &amp;nbsp;BlockChainStream *bigblock=NULL;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;hr = StorageImpl_ReadDirEntry(This, index, &amp;data);
&lt;br&gt;+ &amp;nbsp;if (FAILED(hr)) return hr;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/* In simple mode keep the stream size above the small block limit */
&lt;br&gt;+ &amp;nbsp;if (This-&amp;gt;base.openFlags &amp; STGM_SIMPLE)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;newsize.QuadPart = max(newsize.QuadPart, LIMIT_TO_USE_SMALL_BLOCK);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;if (data.size.QuadPart == newsize.QuadPart)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return S_OK;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/* Create a block chain object of the appropriate type */
&lt;br&gt;+ &amp;nbsp;if (data.size.QuadPart == 0)
&lt;br&gt;+ &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (newsize.QuadPart &amp;lt; LIMIT_TO_USE_SMALL_BLOCK)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;smallblock = SmallBlockChainStream_Construct(This, NULL, index);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;if (!smallblock) return E_OUTOFMEMORY;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;else
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;bigblock = BlockChainStream_Construct(This, NULL, index);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;if (!bigblock) return E_OUTOFMEMORY;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp;else if (data.size.QuadPart &amp;lt; LIMIT_TO_USE_SMALL_BLOCK)
&lt;br&gt;+ &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;smallblock = SmallBlockChainStream_Construct(This, NULL, index);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (!smallblock) return E_OUTOFMEMORY;
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp;else
&lt;br&gt;+ &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;bigblock = BlockChainStream_Construct(This, NULL, index);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (!bigblock) return E_OUTOFMEMORY;
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/* Change the block chain type if necessary. */
&lt;br&gt;+ &amp;nbsp;if (smallblock &amp;&amp; newsize.QuadPart &amp;gt;= LIMIT_TO_USE_SMALL_BLOCK)
&lt;br&gt;+ &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;bigblock = Storage32Impl_SmallBlocksToBigBlocks(This, &amp;smallblock);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (!bigblock)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;SmallBlockChainStream_Destroy(smallblock);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;return E_FAIL;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp;else if (bigblock &amp;&amp; newsize.QuadPart &amp;lt; LIMIT_TO_USE_SMALL_BLOCK)
&lt;br&gt;+ &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;smallblock = Storage32Impl_BigBlocksToSmallBlocks(This, &amp;bigblock);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (!smallblock)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;BlockChainStream_Destroy(bigblock);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;return E_FAIL;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/* Set the size of the block chain. */
&lt;br&gt;+ &amp;nbsp;if (smallblock)
&lt;br&gt;+ &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;SmallBlockChainStream_SetSize(smallblock, newsize);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;SmallBlockChainStream_Destroy(smallblock);
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp;else
&lt;br&gt;+ &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;BlockChainStream_SetSize(bigblock, newsize);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;BlockChainStream_Destroy(bigblock);
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/* Set the size in the directory entry. */
&lt;br&gt;+ &amp;nbsp;hr = StorageImpl_ReadDirEntry(This, index, &amp;data);
&lt;br&gt;+ &amp;nbsp;if (SUCCEEDED(hr))
&lt;br&gt;+ &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;data.size = newsize;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;hr = StorageImpl_WriteDirEntry(This, index, &amp;data);
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp;return hr;
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;static HRESULT StorageImpl_StreamWriteAt(StorageBaseImpl *base, DirRef index,
&lt;br&gt;&amp;nbsp; &amp;nbsp;ULARGE_INTEGER offset, ULONG size, const void *buffer, ULONG *bytesWritten)
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;@@ -2325,7 +2412,8 @@ static const StorageBaseImplVtbl StorageImpl_BaseVtbl =
&lt;br&gt;&amp;nbsp; &amp;nbsp;StorageImpl_BaseReadDirEntry,
&lt;br&gt;&amp;nbsp; &amp;nbsp;StorageImpl_DestroyDirEntry,
&lt;br&gt;&amp;nbsp; &amp;nbsp;StorageImpl_StreamReadAt,
&lt;br&gt;- &amp;nbsp;StorageImpl_StreamWriteAt
&lt;br&gt;+ &amp;nbsp;StorageImpl_StreamWriteAt,
&lt;br&gt;+ &amp;nbsp;StorageImpl_StreamSetSize
&lt;br&gt;&amp;nbsp;};
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;static HRESULT StorageImpl_Construct(
&lt;br&gt;@@ -3787,6 +3875,13 @@ static HRESULT StorageInternalImpl_StreamWriteAt(StorageBaseImpl *base,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;index, offset, size, buffer, bytesWritten);
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+static HRESULT StorageInternalImpl_StreamSetSize(StorageBaseImpl *base,
&lt;br&gt;+ &amp;nbsp;DirRef index, ULARGE_INTEGER newsize)
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp;return StorageBaseImpl_StreamSetSize(&amp;base-&amp;gt;ancestorStorage-&amp;gt;base,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;index, newsize);
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;/******************************************************************************
&lt;br&gt;&amp;nbsp;**
&lt;br&gt;&amp;nbsp;** Storage32InternalImpl_Commit
&lt;br&gt;@@ -4235,7 +4330,8 @@ static const StorageBaseImplVtbl StorageInternalImpl_BaseVtbl =
&lt;br&gt;&amp;nbsp; &amp;nbsp;StorageInternalImpl_ReadDirEntry,
&lt;br&gt;&amp;nbsp; &amp;nbsp;StorageInternalImpl_DestroyDirEntry,
&lt;br&gt;&amp;nbsp; &amp;nbsp;StorageInternalImpl_StreamReadAt,
&lt;br&gt;- &amp;nbsp;StorageInternalImpl_StreamWriteAt
&lt;br&gt;+ &amp;nbsp;StorageInternalImpl_StreamWriteAt,
&lt;br&gt;+ &amp;nbsp;StorageInternalImpl_StreamSetSize
&lt;br&gt;&amp;nbsp;};
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;/******************************************************************************
&lt;br&gt;diff --git a/dlls/ole32/storage32.h b/dlls/ole32/storage32.h
&lt;br&gt;index ef8c894..53cb76a 100644
&lt;br&gt;--- a/dlls/ole32/storage32.h
&lt;br&gt;+++ b/dlls/ole32/storage32.h
&lt;br&gt;@@ -254,6 +254,7 @@ struct StorageBaseImplVtbl {
&lt;br&gt;&amp;nbsp; &amp;nbsp;HRESULT (*DestroyDirEntry)(StorageBaseImpl*,DirRef);
&lt;br&gt;&amp;nbsp; &amp;nbsp;HRESULT (*StreamReadAt)(StorageBaseImpl*,DirRef,ULARGE_INTEGER,ULONG,void*,ULONG*);
&lt;br&gt;&amp;nbsp; &amp;nbsp;HRESULT (*StreamWriteAt)(StorageBaseImpl*,DirRef,ULARGE_INTEGER,ULONG,const void*,ULONG*);
&lt;br&gt;+ &amp;nbsp;HRESULT (*StreamSetSize)(StorageBaseImpl*,DirRef,ULARGE_INTEGER);
&lt;br&gt;&amp;nbsp;};
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;static inline void StorageBaseImpl_Destroy(StorageBaseImpl *This)
&lt;br&gt;@@ -299,6 +300,12 @@ static inline HRESULT StorageBaseImpl_StreamWriteAt(StorageBaseImpl *This,
&lt;br&gt;&amp;nbsp; &amp;nbsp;return This-&amp;gt;baseVtbl-&amp;gt;StreamWriteAt(This, index, offset, size, buffer, bytesWritten);
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+static inline HRESULT StorageBaseImpl_StreamSetSize(StorageBaseImpl *This,
&lt;br&gt;+ &amp;nbsp;DirRef index, ULARGE_INTEGER newsize)
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp;return This-&amp;gt;baseVtbl-&amp;gt;StreamSetSize(This, index, newsize);
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;/****************************************************************************
&lt;br&gt;&amp;nbsp; * StorageBaseImpl stream list handlers
&lt;br&gt;&amp;nbsp; */
&lt;br&gt;-- 
&lt;br&gt;1.6.3.3
&lt;br&gt;&lt;br&gt;&lt;br /&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-2-5--ole32%3A-Use-the-storage-vtable-to-resize-streams.-tp26699592p26699592.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26699587</id>
	<title>[1/5] ole32: Use the storage vtable to write to streams.</title>
	<published>2009-12-08T11:44:28Z</published>
	<updated>2009-12-08T11:44:28Z</updated>
	<author>
		<name>Vincent Povirk-3</name>
	</author>
	<content type="html">&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 3.2//EN&quot;&gt;
&lt;HTML&gt;
&lt;HEAD&gt;
&lt;META HTTP-EQUIV=&quot;Content-Type&quot; CONTENT=&quot;text/html; charset=iso-8859-1&quot;&gt;
&lt;META NAME=&quot;Generator&quot; CONTENT=&quot;MS Exchange Server version 6.5.7638.1&quot;&gt;
&lt;TITLE&gt;[1/5] ole32: Use the storage vtable to write to streams.&lt;/TITLE&gt;
&lt;/HEAD&gt;
&lt;BODY&gt;
&lt;!-- Converted from text/plain format --&gt;
&lt;BR&gt;
&lt;BR&gt;

&lt;/BODY&gt;
&lt;/HTML&gt;&lt;br /&gt;From 4598622ebfa23468c6d3d2afab444fbec9afec94 Mon Sep 17 00:00:00 2001
&lt;br&gt;From: Vincent Povirk &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26699587&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;vincent@...&lt;/a&gt;&amp;gt;
&lt;br&gt;Date: Mon, 30 Nov 2009 11:38:45 -0600
&lt;br&gt;Subject: [PATCH 1/5] ole32: Use the storage vtable to write to streams.
&lt;br&gt;&lt;br&gt;---
&lt;br&gt;&amp;nbsp;dlls/ole32/stg_stream.c | &amp;nbsp; 34 ++++----------------------
&lt;br&gt;&amp;nbsp;dlls/ole32/storage32.c &amp;nbsp;| &amp;nbsp; 59 +++++++++++++++++++++++++++++++++++++++++++++-
&lt;br&gt;&amp;nbsp;dlls/ole32/storage32.h &amp;nbsp;| &amp;nbsp; &amp;nbsp;8 ++++++
&lt;br&gt;&amp;nbsp;3 files changed, 71 insertions(+), 30 deletions(-)
&lt;br&gt;&lt;br&gt;diff --git a/dlls/ole32/stg_stream.c b/dlls/ole32/stg_stream.c
&lt;br&gt;index 0888180..e02a3f5 100644
&lt;br&gt;--- a/dlls/ole32/stg_stream.c
&lt;br&gt;+++ b/dlls/ole32/stg_stream.c
&lt;br&gt;@@ -382,34 +382,12 @@ static HRESULT WINAPI StgStreamImpl_Write(
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return res;
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp;/*
&lt;br&gt;- &amp;nbsp; * Depending on the type of chain that was opened when the stream was constructed,
&lt;br&gt;- &amp;nbsp; * we delegate the work to the method that readwrites to the block chains.
&lt;br&gt;- &amp;nbsp; */
&lt;br&gt;- &amp;nbsp;if (This-&amp;gt;smallBlockChain!=0)
&lt;br&gt;- &amp;nbsp;{
&lt;br&gt;- &amp;nbsp; &amp;nbsp;res = SmallBlockChainStream_WriteAt(This-&amp;gt;smallBlockChain,
&lt;br&gt;-				 &amp;nbsp;This-&amp;gt;currentPosition,
&lt;br&gt;-				 &amp;nbsp;cb,
&lt;br&gt;-				 &amp;nbsp;pv,
&lt;br&gt;-				 &amp;nbsp;pcbWritten);
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp;}
&lt;br&gt;- &amp;nbsp;else if (This-&amp;gt;bigBlockChain!=0)
&lt;br&gt;- &amp;nbsp;{
&lt;br&gt;- &amp;nbsp; &amp;nbsp;res = BlockChainStream_WriteAt(This-&amp;gt;bigBlockChain,
&lt;br&gt;-			 &amp;nbsp; &amp;nbsp; This-&amp;gt;currentPosition,
&lt;br&gt;-			 &amp;nbsp; &amp;nbsp; cb,
&lt;br&gt;-			 &amp;nbsp; &amp;nbsp; pv,
&lt;br&gt;-			 &amp;nbsp; &amp;nbsp; pcbWritten);
&lt;br&gt;- &amp;nbsp;}
&lt;br&gt;- &amp;nbsp;else
&lt;br&gt;- &amp;nbsp;{
&lt;br&gt;- &amp;nbsp; &amp;nbsp;/* this should never happen because the IStream_SetSize call above will
&lt;br&gt;- &amp;nbsp; &amp;nbsp; * make sure a big or small block chain is created */
&lt;br&gt;- &amp;nbsp; &amp;nbsp;assert(FALSE);
&lt;br&gt;- &amp;nbsp; &amp;nbsp;res = 0;
&lt;br&gt;- &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp;res = StorageBaseImpl_StreamWriteAt(This-&amp;gt;parentStorage,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;This-&amp;gt;dirEntry,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;This-&amp;gt;currentPosition,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;cb,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;pv,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;pcbWritten);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;/*
&lt;br&gt;&amp;nbsp; &amp;nbsp; * Advance the position pointer for the number of positions written.
&lt;br&gt;diff --git a/dlls/ole32/storage32.c b/dlls/ole32/storage32.c
&lt;br&gt;index 0e5861d..f34dadd 100644
&lt;br&gt;--- a/dlls/ole32/storage32.c
&lt;br&gt;+++ b/dlls/ole32/storage32.c
&lt;br&gt;@@ -2246,6 +2246,52 @@ static HRESULT StorageImpl_StreamReadAt(StorageBaseImpl *base, DirRef index,
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+static HRESULT StorageImpl_StreamWriteAt(StorageBaseImpl *base, DirRef index,
&lt;br&gt;+ &amp;nbsp;ULARGE_INTEGER offset, ULONG size, const void *buffer, ULONG *bytesWritten)
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp;StorageImpl *This = (StorageImpl*)base;
&lt;br&gt;+ &amp;nbsp;DirEntry data;
&lt;br&gt;+ &amp;nbsp;HRESULT hr;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;hr = StorageImpl_ReadDirEntry(This, index, &amp;data);
&lt;br&gt;+ &amp;nbsp;if (FAILED(hr)) return hr;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/* FIXME: Enlarge the stream first if necessary. */
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;if (data.size.QuadPart == 0)
&lt;br&gt;+ &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;/* This shouldn't happen for now, because the stream object will set the size. */
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;assert(FALSE);
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;if (data.size.QuadPart &amp;lt; LIMIT_TO_USE_SMALL_BLOCK)
&lt;br&gt;+ &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;SmallBlockChainStream *stream;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;stream = SmallBlockChainStream_Construct(This, NULL, index);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (!stream) return E_OUTOFMEMORY;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;hr = SmallBlockChainStream_WriteAt(stream, offset, size, buffer, bytesWritten);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;SmallBlockChainStream_Destroy(stream);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return hr;
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp;else
&lt;br&gt;+ &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;BlockChainStream *stream;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;stream = BlockChainStream_Construct(This, NULL, index);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (!stream) return E_OUTOFMEMORY;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;hr = BlockChainStream_WriteAt(stream, offset, size, buffer, bytesWritten);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;BlockChainStream_Destroy(stream);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return hr;
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;/*
&lt;br&gt;&amp;nbsp; * Virtual function table for the IStorage32Impl class.
&lt;br&gt;&amp;nbsp; */
&lt;br&gt;@@ -2278,7 +2324,8 @@ static const StorageBaseImplVtbl StorageImpl_BaseVtbl =
&lt;br&gt;&amp;nbsp; &amp;nbsp;StorageImpl_BaseWriteDirEntry,
&lt;br&gt;&amp;nbsp; &amp;nbsp;StorageImpl_BaseReadDirEntry,
&lt;br&gt;&amp;nbsp; &amp;nbsp;StorageImpl_DestroyDirEntry,
&lt;br&gt;- &amp;nbsp;StorageImpl_StreamReadAt
&lt;br&gt;+ &amp;nbsp;StorageImpl_StreamReadAt,
&lt;br&gt;+ &amp;nbsp;StorageImpl_StreamWriteAt
&lt;br&gt;&amp;nbsp;};
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;static HRESULT StorageImpl_Construct(
&lt;br&gt;@@ -3733,6 +3780,13 @@ static HRESULT StorageInternalImpl_StreamReadAt(StorageBaseImpl *base,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;index, offset, size, buffer, bytesRead);
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+static HRESULT StorageInternalImpl_StreamWriteAt(StorageBaseImpl *base,
&lt;br&gt;+ &amp;nbsp;DirRef index, ULARGE_INTEGER offset, ULONG size, const void *buffer, ULONG *bytesWritten)
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp;return StorageBaseImpl_StreamWriteAt(&amp;base-&amp;gt;ancestorStorage-&amp;gt;base,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;index, offset, size, buffer, bytesWritten);
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;/******************************************************************************
&lt;br&gt;&amp;nbsp;**
&lt;br&gt;&amp;nbsp;** Storage32InternalImpl_Commit
&lt;br&gt;@@ -4180,7 +4234,8 @@ static const StorageBaseImplVtbl StorageInternalImpl_BaseVtbl =
&lt;br&gt;&amp;nbsp; &amp;nbsp;StorageInternalImpl_WriteDirEntry,
&lt;br&gt;&amp;nbsp; &amp;nbsp;StorageInternalImpl_ReadDirEntry,
&lt;br&gt;&amp;nbsp; &amp;nbsp;StorageInternalImpl_DestroyDirEntry,
&lt;br&gt;- &amp;nbsp;StorageInternalImpl_StreamReadAt
&lt;br&gt;+ &amp;nbsp;StorageInternalImpl_StreamReadAt,
&lt;br&gt;+ &amp;nbsp;StorageInternalImpl_StreamWriteAt
&lt;br&gt;&amp;nbsp;};
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;/******************************************************************************
&lt;br&gt;diff --git a/dlls/ole32/storage32.h b/dlls/ole32/storage32.h
&lt;br&gt;index 24070d1..ef8c894 100644
&lt;br&gt;--- a/dlls/ole32/storage32.h
&lt;br&gt;+++ b/dlls/ole32/storage32.h
&lt;br&gt;@@ -253,6 +253,7 @@ struct StorageBaseImplVtbl {
&lt;br&gt;&amp;nbsp; &amp;nbsp;HRESULT (*ReadDirEntry)(StorageBaseImpl*,DirRef,DirEntry*);
&lt;br&gt;&amp;nbsp; &amp;nbsp;HRESULT (*DestroyDirEntry)(StorageBaseImpl*,DirRef);
&lt;br&gt;&amp;nbsp; &amp;nbsp;HRESULT (*StreamReadAt)(StorageBaseImpl*,DirRef,ULARGE_INTEGER,ULONG,void*,ULONG*);
&lt;br&gt;+ &amp;nbsp;HRESULT (*StreamWriteAt)(StorageBaseImpl*,DirRef,ULARGE_INTEGER,ULONG,const void*,ULONG*);
&lt;br&gt;&amp;nbsp;};
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;static inline void StorageBaseImpl_Destroy(StorageBaseImpl *This)
&lt;br&gt;@@ -291,6 +292,13 @@ static inline HRESULT StorageBaseImpl_StreamReadAt(StorageBaseImpl *This,
&lt;br&gt;&amp;nbsp; &amp;nbsp;return This-&amp;gt;baseVtbl-&amp;gt;StreamReadAt(This, index, offset, size, buffer, bytesRead);
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+/* Write size bytes to this directory entry's stream at the given offset. */
&lt;br&gt;+static inline HRESULT StorageBaseImpl_StreamWriteAt(StorageBaseImpl *This,
&lt;br&gt;+ &amp;nbsp;DirRef index, ULARGE_INTEGER offset, ULONG size, const void *buffer, ULONG *bytesWritten)
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp;return This-&amp;gt;baseVtbl-&amp;gt;StreamWriteAt(This, index, offset, size, buffer, bytesWritten);
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;/****************************************************************************
&lt;br&gt;&amp;nbsp; * StorageBaseImpl stream list handlers
&lt;br&gt;&amp;nbsp; */
&lt;br&gt;-- 
&lt;br&gt;1.6.3.3
&lt;br&gt;&lt;br&gt;&lt;br /&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-1-5--ole32%3A-Use-the-storage-vtable-to-write-to-streams.-tp26699587p26699587.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26699524</id>
	<title>rsaenh/tests: Fix memory leak</title>
	<published>2009-12-08T11:41:01Z</published>
	<updated>2009-12-08T11:41:01Z</updated>
	<author>
		<name>Juan Lang-4</name>
	</author>
	<content type="html">--Juan
&lt;br&gt;&lt;br /&gt;&lt;tt&gt;[0012-Fix-memory-leak.patch]&lt;/tt&gt;&lt;br /&gt;&lt;hr align=&quot;left&quot; width=&quot;300&quot; /&gt;&lt;tt&gt;From 3876073c5ce919f0ee758c9b2b0869cef5b5f141 Mon Sep 17 00:00:00 2001
&lt;br&gt;From: Juan Lang &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26699524&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;juan.lang@...&lt;/a&gt;&amp;gt;
&lt;br&gt;Date: Tue, 8 Dec 2009 11:40:37 -0800
&lt;br&gt;Subject: [PATCH] Fix memory leak
&lt;br&gt;&lt;br&gt;---
&lt;br&gt;&amp;nbsp;dlls/rsaenh/tests/rsaenh.c | &amp;nbsp; &amp;nbsp;2 +-
&lt;br&gt;&amp;nbsp;1 files changed, 1 insertions(+), 1 deletions(-)
&lt;br&gt;&lt;br&gt;diff --git a/dlls/rsaenh/tests/rsaenh.c b/dlls/rsaenh/tests/rsaenh.c
&lt;br&gt;index 2c7ca0e..83ec872 100644
&lt;br&gt;--- a/dlls/rsaenh/tests/rsaenh.c
&lt;br&gt;+++ b/dlls/rsaenh/tests/rsaenh.c
&lt;br&gt;@@ -2355,9 +2355,9 @@ static void test_null_provider(void)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;CryptDestroyKey(key);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;result = CryptGetUserKey(prov, AT_KEYEXCHANGE, &amp;key);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;ok(result, &amp;quot;CryptGetUserKey with AT_KEYEXCHANGE failed: %08x\n&amp;quot;, GetLastError());
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;CryptDestroyKey(key);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;result = CryptGetUserKey(prov, AT_SIGNATURE, &amp;key);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;ok(!result, &amp;quot;expected CryptGetUserKey to fail\n&amp;quot;);
&lt;br&gt;- &amp;nbsp; &amp;nbsp;CryptDestroyKey(key);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;CryptReleaseContext(prov, 0);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;CryptAcquireContext(&amp;prov, szContainer, NULL, PROV_RSA_FULL,
&lt;br&gt;-- 
&lt;br&gt;1.5.2.2
&lt;br&gt;&lt;br&gt;&lt;/tt&gt;&lt;hr align=&quot;left&quot; width=&quot;300&quot; /&gt;&lt;br /&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/rsaenh-tests%3A-Fix-memory-leak-tp26699524p26699524.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26699312</id>
	<title>wineserver: Use existing file permissions as base for applying ACLs, change mapping logic</title>
	<published>2009-12-08T11:26:55Z</published>
	<updated>2009-12-08T11:26:55Z</updated>
	<author>
		<name>Paul Chitescu</name>
	</author>
	<content type="html">Changelog:
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; wineserver: Use existing file permissions as base for applying ACLs, change 
&lt;br&gt;mapping logic.
&lt;br&gt;&lt;br&gt;ACLs are applied over existing permissions. An ACCESS_ALLOWED_ACE by itself 
&lt;br&gt;will never reduce permissions.
&lt;br&gt;&lt;br&gt;Group permissions are handled together with user and other to avoid weird 
&lt;br&gt;situations.
&lt;br&gt;&lt;br&gt;Access vs. ownership logic is changed to not cause illogical POSIX 
&lt;br&gt;permissions:
&lt;br&gt;- Allow owner: sets only owner bits (as before)
&lt;br&gt;- Allow world: sets all permissions (as before)
&lt;br&gt;- Deny user: resets permissions for all (wouldn't make sense a ---??????)
&lt;br&gt;- Deny world: resets only group and other permissions, don't touch user
&lt;br&gt;- Null ACL sets rwxrwxrwx not rwx???rwx
&lt;br&gt;&lt;br&gt;This should fix bug #20643 and several other &amp;quot;Access Denied&amp;quot; related bugs.
&lt;br&gt;&lt;br&gt;&lt;br /&gt;&lt;tt&gt;[wineserver_fix_file_acl.patch]&lt;/tt&gt;&lt;br /&gt;&lt;hr align=&quot;left&quot; width=&quot;300&quot; /&gt;&lt;tt&gt;--- ./server/change.c	8 Dec 2009 17:37:35 -0000	1.73
&lt;br&gt;+++ ./server/change.c	8 Dec 2009 19:07:08 -0000
&lt;br&gt;@@ -373,8 +373,8 @@ static int dir_set_sd( struct object *ob
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;if (set_info &amp; DACL_SECURITY_INFORMATION)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;{
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;/* keep the bits that we don't map to access rights in the ACL */
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;mode = st.st_mode &amp; (S_ISUID|S_ISGID|S_ISVTX|S_IRWXG);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;mode |= sd_to_mode( sd, owner );
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;mode = st.st_mode &amp; (S_ISUID|S_ISGID|S_ISVTX);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;mode |= sd_to_mode( sd, owner, st.st_mode &amp; (S_IRWXU|S_IRWXG|S_IRWXO) );
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (((st.st_mode ^ mode) &amp; (S_IRWXU|S_IRWXG|S_IRWXO)) &amp;&amp; fchmod( unix_fd, mode ) == -1)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{
&lt;br&gt;--- ./server/file.c	8 Dec 2009 17:37:35 -0000	1.145
&lt;br&gt;+++ ./server/file.c	8 Dec 2009 19:07:08 -0000
&lt;br&gt;@@ -190,7 +190,7 @@ static struct object *create_file( struc
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;const SID *owner = sd_get_owner( sd );
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (!owner)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;owner = token_get_user( current-&amp;gt;process-&amp;gt;token );
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;mode = sd_to_mode( sd, owner );
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;mode = sd_to_mode( sd, owner, 0 );
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;else
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;mode = (attrs &amp; FILE_ATTRIBUTE_READONLY) ? 0444 : 0666;
&lt;br&gt;@@ -441,9 +441,8 @@ static struct security_descriptor *file_
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;return sd;
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-mode_t sd_to_mode( const struct security_descriptor *sd, const SID *owner )
&lt;br&gt;+mode_t sd_to_mode( const struct security_descriptor *sd, const SID *owner, mode_t new_mode )
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;- &amp;nbsp; &amp;nbsp;mode_t new_mode = 0;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;mode_t denied_mode = 0;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;int present;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;const ACL *dacl = sd_get_dacl( sd, &amp;present );
&lt;br&gt;@@ -468,21 +467,21 @@ mode_t sd_to_mode( const struct security
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;unsigned int access = generic_file_map_access( ad_ace-&amp;gt;Mask );
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (access &amp; FILE_READ_DATA)
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;denied_mode |= S_IRUSR|S_IRGRP|S_IROTH;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;denied_mode |= S_IRGRP|S_IROTH;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (access &amp; FILE_WRITE_DATA)
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;denied_mode |= S_IWUSR|S_IWGRP|S_IWOTH;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;denied_mode |= S_IWGRP|S_IWOTH;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (access &amp; FILE_EXECUTE)
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;denied_mode |= S_IXUSR|S_IXGRP|S_IXOTH;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;denied_mode |= S_IXGRP|S_IXOTH;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;else if (security_equal_sid( sid, owner ))
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;unsigned int access = generic_file_map_access( ad_ace-&amp;gt;Mask );
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (access &amp; FILE_READ_DATA)
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;denied_mode |= S_IRUSR;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;denied_mode |= S_IRUSR|S_IRGRP|S_IROTH;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (access &amp; FILE_WRITE_DATA)
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;denied_mode |= S_IWUSR;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;denied_mode |= S_IWUSR|S_IWGRP|S_IWOTH;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (access &amp; FILE_EXECUTE)
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;denied_mode |= S_IXUSR;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;denied_mode |= S_IXUSR|S_IXGRP|S_IXOTH;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;break;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;case ACCESS_ALLOWED_ACE_TYPE:
&lt;br&gt;@@ -514,7 +513,7 @@ mode_t sd_to_mode( const struct security
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;else
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;/* no ACL means full access rights to anyone */
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;new_mode = S_IRWXU | S_IRWXO;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;new_mode = S_IRWXU | S_IRWXG | S_IRWXO;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;return new_mode &amp; ~denied_mode;
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;@@ -557,8 +556,8 @@ static int file_set_sd( struct object *o
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;if (set_info &amp; DACL_SECURITY_INFORMATION)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;{
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;/* keep the bits that we don't map to access rights in the ACL */
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;mode = st.st_mode &amp; (S_ISUID|S_ISGID|S_ISVTX|S_IRWXG);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;mode |= sd_to_mode( sd, owner );
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;mode = st.st_mode &amp; (S_ISUID|S_ISGID|S_ISVTX);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;mode |= sd_to_mode( sd, owner, st.st_mode &amp; (S_IRWXU|S_IRWXG|S_IRWXO) );
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (((st.st_mode ^ mode) &amp; (S_IRWXU|S_IRWXG|S_IRWXO)) &amp;&amp; fchmod( unix_fd, mode ) == -1)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{
&lt;br&gt;--- ./server/file.h	2 Dec 2009 16:37:03 -0000	1.81
&lt;br&gt;+++ ./server/file.h	8 Dec 2009 19:07:08 -0000
&lt;br&gt;@@ -118,7 +118,7 @@ extern struct file *create_file_for_fd( 
&lt;br&gt;&amp;nbsp;extern struct file *grab_file_unless_removable( struct file *file );
&lt;br&gt;&amp;nbsp;extern void file_set_error(void);
&lt;br&gt;&amp;nbsp;extern struct security_descriptor *mode_to_sd( mode_t mode, const SID *user, const SID *group );
&lt;br&gt;-extern mode_t sd_to_mode( const struct security_descriptor *sd, const SID *owner );
&lt;br&gt;+extern mode_t sd_to_mode( const struct security_descriptor *sd, const SID *owner, mode_t new_mode );
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;/* change notification functions */
&lt;br&gt;&lt;/tt&gt;&lt;hr align=&quot;left&quot; width=&quot;300&quot; /&gt;&lt;br /&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/wineserver%3A-Use-existing-file-permissions-as-base-for-applying-ACLs%2C-change-mapping-logic-tp26699312p26699312.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26698364</id>
	<title>crypt32: Compare CRL's authority key identifier against the  certificate's subject key identifier property, which also decodes the  certificate's extension if necessary</title>
	<published>2009-12-08T10:23:43Z</published>
	<updated>2009-12-08T10:23:43Z</updated>
	<author>
		<name>Juan Lang-4</name>
	</author>
	<content type="html">--Juan
&lt;br&gt;&lt;br /&gt;&lt;tt&gt;[0011-Compare-CRL-s-authority-key-identifier-against-the-c.patch]&lt;/tt&gt;&lt;br /&gt;&lt;hr align=&quot;left&quot; width=&quot;300&quot; /&gt;&lt;tt&gt;From 6afc6a227bae58004b6afb119877846e5d7a379a Mon Sep 17 00:00:00 2001
&lt;br&gt;From: Juan Lang &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26698364&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;juan.lang@...&lt;/a&gt;&amp;gt;
&lt;br&gt;Date: Tue, 8 Dec 2009 10:18:27 -0800
&lt;br&gt;Subject: [PATCH] Compare CRL's authority key identifier against the certificate's subject key identifier property, which also decodes the certificate's extension if necessary
&lt;br&gt;&lt;br&gt;---
&lt;br&gt;&amp;nbsp;dlls/crypt32/crl.c | &amp;nbsp; 21 ++++++++++++++-------
&lt;br&gt;&amp;nbsp;1 files changed, 14 insertions(+), 7 deletions(-)
&lt;br&gt;&lt;br&gt;diff --git a/dlls/crypt32/crl.c b/dlls/crypt32/crl.c
&lt;br&gt;index a24e6ad..72180c5 100644
&lt;br&gt;--- a/dlls/crypt32/crl.c
&lt;br&gt;+++ b/dlls/crypt32/crl.c
&lt;br&gt;@@ -167,14 +167,21 @@ static BOOL compare_crl_issued_by(PCCRL_CONTEXT pCrlContext, DWORD dwType,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;else if (info-&amp;gt;KeyId.cbData)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if ((ext = CertFindExtension(
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; szOID_SUBJECT_KEY_IDENTIFIER,
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; issuer-&amp;gt;pCertInfo-&amp;gt;cExtension,
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; issuer-&amp;gt;pCertInfo-&amp;gt;rgExtension)))
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;DWORD size;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ret = CertGetCertificateContextProperty(issuer,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; CERT_KEY_IDENTIFIER_PROP_ID, NULL, &amp;size);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (ret &amp;&amp; size == info-&amp;gt;KeyId.cbData)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (info-&amp;gt;KeyId.cbData == ext-&amp;gt;Value.cbData)
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ret = !memcmp(info-&amp;gt;KeyId.pbData,
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ext-&amp;gt;Value.pbData, info-&amp;gt;KeyId.cbData);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;LPBYTE buf = CryptMemAlloc(size);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (buf)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;CertGetCertificateContextProperty(issuer,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; CERT_KEY_IDENTIFIER_PROP_ID, buf, &amp;size);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ret = !memcmp(buf, info-&amp;gt;KeyId.pbData, size);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;CryptMemFree(buf);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;else
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ret = FALSE;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;-- 
&lt;br&gt;1.5.2.2
&lt;br&gt;&lt;br&gt;&lt;/tt&gt;&lt;hr align=&quot;left&quot; width=&quot;300&quot; /&gt;&lt;br /&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/crypt32%3A-Compare-CRL%27s-authority-key-identifier-against-the--certificate%27s-subject-key-identifier-property%2C-which-also-decodes-the--certificate%27s-extension-if-necessary-tp26698364p26698364.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26697804</id>
	<title>winhttp: Fix test error when run as non-administrator (try 2)</title>
	<published>2009-12-08T09:49:32Z</published>
	<updated>2009-12-08T09:49:32Z</updated>
	<author>
		<name>Juan Lang-4</name>
	</author>
	<content type="html">This version uses skip() when GetLastError() == ERROR_ACCESS_DENIED,
&lt;br&gt;as Paul Vriens suggested.
&lt;br&gt;--Juan
&lt;br&gt;&lt;br /&gt;&lt;tt&gt;[0010-Fix-test-error-when-run-as-non-administrator.patch]&lt;/tt&gt;&lt;br /&gt;&lt;hr align=&quot;left&quot; width=&quot;300&quot; /&gt;&lt;tt&gt;From bac44aa70ab2e0fc21a4be752d9628817d3f3190 Mon Sep 17 00:00:00 2001
&lt;br&gt;From: Juan Lang &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26697804&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;juan.lang@...&lt;/a&gt;&amp;gt;
&lt;br&gt;Date: Tue, 8 Dec 2009 09:47:08 -0800
&lt;br&gt;Subject: [PATCH] Fix test error when run as non-administrator
&lt;br&gt;&lt;br&gt;---
&lt;br&gt;&amp;nbsp;dlls/winhttp/tests/winhttp.c | &amp;nbsp; 13 ++++++++++---
&lt;br&gt;&amp;nbsp;1 files changed, 10 insertions(+), 3 deletions(-)
&lt;br&gt;&lt;br&gt;diff --git a/dlls/winhttp/tests/winhttp.c b/dlls/winhttp/tests/winhttp.c
&lt;br&gt;index fe9bb05..2810fbb 100644
&lt;br&gt;--- a/dlls/winhttp/tests/winhttp.c
&lt;br&gt;+++ b/dlls/winhttp/tests/winhttp.c
&lt;br&gt;@@ -1000,9 +1000,16 @@ static void test_set_default_proxy_config(void)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;info.lpszProxy = normalString;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;SetLastError(0xdeadbeef);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;ret = WinHttpSetDefaultProxyConfiguration(&amp;info);
&lt;br&gt;- &amp;nbsp; &amp;nbsp;ok(ret, &amp;quot;WinHttpSetDefaultProxyConfiguration failed: %d\n&amp;quot;, GetLastError());
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp; &amp;nbsp;set_default_proxy_reg_value( saved_proxy_settings, len, type );
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (ret)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ok(ret, &amp;quot;always true\n&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;set_default_proxy_reg_value( saved_proxy_settings, len, type );
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;else if (GetLastError() == ERROR_ACCESS_DENIED)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;skip(&amp;quot;couldn't set default proxy configuration: access denied\n&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;else
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ok(ret, &amp;quot;WinHttpSetDefaultProxyConfiguration failed: %d\n&amp;quot;,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; GetLastError());
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;START_TEST (winhttp)
&lt;br&gt;-- 
&lt;br&gt;1.5.2.2
&lt;br&gt;&lt;br&gt;&lt;/tt&gt;&lt;hr align=&quot;left&quot; width=&quot;300&quot; /&gt;&lt;br /&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/winhttp%3A-Fix-test-error-when-run-as-non-administrator-%28try-2%29-tp26697804p26697804.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26697686</id>
	<title>wininet(2/2): Fix an apparent typo</title>
	<published>2009-12-08T09:42:16Z</published>
	<updated>2009-12-08T09:42:16Z</updated>
	<author>
		<name>Juan Lang-4</name>
	</author>
	<content type="html">I'm pretty sure this is what was intended: &amp;nbsp;rather than logging the
&lt;br&gt;same value in hex and decimal, the decimal variant is the result of
&lt;br&gt;masking off flags to yield the requested datum.
&lt;br&gt;--Juan
&lt;br&gt;&lt;br /&gt;&lt;tt&gt;[0009-Fix-an-apparent-typo.patch]&lt;/tt&gt;&lt;br /&gt;&lt;hr align=&quot;left&quot; width=&quot;300&quot; /&gt;&lt;tt&gt;From 3cf794eeccbeca3a4da55f8041d3efec159fecdc Mon Sep 17 00:00:00 2001
&lt;br&gt;From: Juan Lang &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26697686&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;juan.lang@...&lt;/a&gt;&amp;gt;
&lt;br&gt;Date: Fri, 4 Dec 2009 14:39:37 -0800
&lt;br&gt;Subject: [PATCH] Fix an apparent typo
&lt;br&gt;&lt;br&gt;---
&lt;br&gt;&amp;nbsp;dlls/wininet/http.c | &amp;nbsp; &amp;nbsp;2 +-
&lt;br&gt;&amp;nbsp;1 files changed, 1 insertions(+), 1 deletions(-)
&lt;br&gt;&lt;br&gt;diff --git a/dlls/wininet/http.c b/dlls/wininet/http.c
&lt;br&gt;index 1f7dcfd..b75986f 100644
&lt;br&gt;--- a/dlls/wininet/http.c
&lt;br&gt;+++ b/dlls/wininet/http.c
&lt;br&gt;@@ -2953,7 +2953,7 @@ BOOL WINAPI HttpQueryInfoW(HINTERNET hHttpRequest, DWORD dwInfoLevel,
&lt;br&gt;&amp;nbsp;	DWORD info = dwInfoLevel &amp; HTTP_QUERY_HEADER_MASK;
&lt;br&gt;&amp;nbsp;	DWORD i;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-	TRACE(&amp;quot;(%p, 0x%08x)--&amp;gt; %d\n&amp;quot;, hHttpRequest, dwInfoLevel, dwInfoLevel);
&lt;br&gt;+	TRACE(&amp;quot;(%p, 0x%08x)--&amp;gt; %d\n&amp;quot;, hHttpRequest, dwInfoLevel, info);
&lt;br&gt;&amp;nbsp;	TRACE(&amp;quot; &amp;nbsp;Attribute:&amp;quot;);
&lt;br&gt;&amp;nbsp;	for (i = 0; i &amp;lt; (sizeof(query_flags) / sizeof(query_flags[0])); i++) {
&lt;br&gt;&amp;nbsp;	 &amp;nbsp; &amp;nbsp;if (query_flags[i].val == info) {
&lt;br&gt;-- 
&lt;br&gt;1.5.2.2
&lt;br&gt;&lt;br&gt;&lt;/tt&gt;&lt;hr align=&quot;left&quot; width=&quot;300&quot; /&gt;&lt;br /&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/wininet%282-2%29%3A-Fix-an-apparent-typo-tp26697686p26697686.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26697659</id>
	<title>wininet(1/2): Trace more parameters to HTTP_GetCustomHeaderIndex</title>
	<published>2009-12-08T09:40:38Z</published>
	<updated>2009-12-08T09:40:38Z</updated>
	<author>
		<name>Juan Lang-4</name>
	</author>
	<content type="html">These couple of patches just improve the traces for HttpQueryInfoW.
&lt;br&gt;--Juan
&lt;br&gt;&lt;br /&gt;&lt;tt&gt;[0008-Trace-more-parameters-to-HTTP_GetCustomHeaderIndex.patch]&lt;/tt&gt;&lt;br /&gt;&lt;hr align=&quot;left&quot; width=&quot;300&quot; /&gt;&lt;tt&gt;From 2656b0e034c64fa52e9831727b925a8a1d097999 Mon Sep 17 00:00:00 2001
&lt;br&gt;From: Juan Lang &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26697659&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;juan.lang@...&lt;/a&gt;&amp;gt;
&lt;br&gt;Date: Fri, 4 Dec 2009 14:37:46 -0800
&lt;br&gt;Subject: [PATCH] Trace more parameters to HTTP_GetCustomHeaderIndex
&lt;br&gt;&lt;br&gt;---
&lt;br&gt;&amp;nbsp;dlls/wininet/http.c | &amp;nbsp; &amp;nbsp;2 +-
&lt;br&gt;&amp;nbsp;1 files changed, 1 insertions(+), 1 deletions(-)
&lt;br&gt;&lt;br&gt;diff --git a/dlls/wininet/http.c b/dlls/wininet/http.c
&lt;br&gt;index 6123c5f..1f7dcfd 100644
&lt;br&gt;--- a/dlls/wininet/http.c
&lt;br&gt;+++ b/dlls/wininet/http.c
&lt;br&gt;@@ -4797,7 +4797,7 @@ static INT HTTP_GetCustomHeaderIndex(http_request_t *lpwhr, LPCWSTR lpszField,
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;DWORD index;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;TRACE(&amp;quot;%s\n&amp;quot;, debugstr_w(lpszField));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;TRACE(&amp;quot;%s, %d, %d\n&amp;quot;, debugstr_w(lpszField), requested_index, request_only);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;for (index = 0; index &amp;lt; lpwhr-&amp;gt;nCustHeaders; index++)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;{
&lt;br&gt;-- 
&lt;br&gt;1.5.2.2
&lt;br&gt;&lt;br&gt;&lt;/tt&gt;&lt;hr align=&quot;left&quot; width=&quot;300&quot; /&gt;&lt;br /&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/wininet%281-2%29%3A-Trace-more-parameters-to-HTTP_GetCustomHeaderIndex-tp26697659p26697659.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26696910</id>
	<title>[PATCH 7/7] dsound: Clean up DSPROPERTY_Description1</title>
	<published>2009-12-08T08:43:42Z</published>
	<updated>2009-12-08T08:43:42Z</updated>
	<author>
		<name>Maarten Lankhorst</name>
	</author>
	<content type="html">---
&lt;br&gt;&amp;nbsp;dlls/dsound/propset.c | &amp;nbsp;206 ++++++-------------------------------------------
&lt;br&gt;&amp;nbsp;1 files changed, 25 insertions(+), 181 deletions(-)
&lt;br&gt;&lt;br&gt;diff --git a/dlls/dsound/propset.c b/dlls/dsound/propset.c
&lt;br&gt;index 9b3fc51..fb9f280 100644
&lt;br&gt;--- a/dlls/dsound/propset.c
&lt;br&gt;+++ b/dlls/dsound/propset.c
&lt;br&gt;@@ -186,187 +186,6 @@ static HRESULT DSPROPERTY_WaveDeviceMappingA(
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;return hr;
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-
&lt;br&gt;-static HRESULT DSPROPERTY_Description1(
&lt;br&gt;- &amp;nbsp; &amp;nbsp;LPVOID pPropData,
&lt;br&gt;- &amp;nbsp; &amp;nbsp;ULONG cbPropData,
&lt;br&gt;- &amp;nbsp; &amp;nbsp;PULONG pcbReturned )
&lt;br&gt;-{
&lt;br&gt;- &amp;nbsp; &amp;nbsp;HRESULT err;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;GUID dev_guid;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;PDSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_1_DATA ppd;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;TRACE(&amp;quot;(pPropData=%p,cbPropData=%d,pcbReturned=%p)\n&amp;quot;,
&lt;br&gt;-	pPropData,cbPropData,pcbReturned);
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp; &amp;nbsp;ppd = (PDSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_1_DATA) pPropData;
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp; &amp;nbsp;if (!ppd) {
&lt;br&gt;-	WARN(&amp;quot;invalid parameter: pPropData\n&amp;quot;);
&lt;br&gt;-	return DSERR_INVALIDPARAM;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;}
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp; &amp;nbsp;TRACE(&amp;quot;DeviceId=%s\n&amp;quot;,debugstr_guid(&amp;ppd-&amp;gt;DeviceId));
&lt;br&gt;- &amp;nbsp; &amp;nbsp;if ( IsEqualGUID( &amp;ppd-&amp;gt;DeviceId , &amp;GUID_NULL) ) {
&lt;br&gt;-	/* default device of type specified by ppd-&amp;gt;DataFlow */
&lt;br&gt;-	if (ppd-&amp;gt;DataFlow == DIRECTSOUNDDEVICE_DATAFLOW_CAPTURE) {
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp;TRACE(&amp;quot;DataFlow=DIRECTSOUNDDEVICE_DATAFLOW_CAPTURE\n&amp;quot;);
&lt;br&gt;-	} else if (ppd-&amp;gt;DataFlow == DIRECTSOUNDDEVICE_DATAFLOW_RENDER) {
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp;TRACE(&amp;quot;DataFlow=DIRECTSOUNDDEVICE_DATAFLOW_RENDER\n&amp;quot;);
&lt;br&gt;-	} else {
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp;TRACE(&amp;quot;DataFlow=Unknown(%d)\n&amp;quot;, ppd-&amp;gt;DataFlow);
&lt;br&gt;-	}
&lt;br&gt;-	FIXME(&amp;quot;(pPropData=%p,cbPropData=%d,pcbReturned=%p) GUID_NULL not implemented!\n&amp;quot;,
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp; &amp;nbsp;pPropData,cbPropData,pcbReturned);
&lt;br&gt;-	return E_PROP_ID_UNSUPPORTED;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;}
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp; &amp;nbsp;ppd-&amp;gt;Type = DIRECTSOUNDDEVICE_TYPE_EMULATED;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;GetDeviceID(&amp;ppd-&amp;gt;DeviceId, &amp;dev_guid);
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp; &amp;nbsp;if ( IsEqualGUID( &amp;ppd-&amp;gt;DeviceId, &amp;DSDEVID_DefaultPlayback) ||
&lt;br&gt;-	 IsEqualGUID( &amp;ppd-&amp;gt;DeviceId, &amp;DSDEVID_DefaultVoicePlayback) ) {
&lt;br&gt;-	ULONG wod;
&lt;br&gt;-	unsigned int wodn;
&lt;br&gt;-	TRACE(&amp;quot;DataFlow=DIRECTSOUNDDEVICE_DATAFLOW_RENDER\n&amp;quot;);
&lt;br&gt;-	ppd-&amp;gt;DataFlow = DIRECTSOUNDDEVICE_DATAFLOW_RENDER;
&lt;br&gt;-	wodn = waveOutGetNumDevs();
&lt;br&gt;-	for (wod = 0; wod &amp;lt; wodn; wod++) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (IsEqualGUID( &amp;dev_guid, &amp;DSOUND_renderer_guids[wod] ) ) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;DSDRIVERDESC desc;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ppd-&amp;gt;WaveDeviceId = wod;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ppd-&amp;gt;Devnode = wod;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;err = mmErr(waveOutMessage(UlongToHandle(wod),DRV_QUERYDSOUNDDESC,(DWORD_PTR)&amp;desc,0));
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (err == DS_OK) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;PIDSDRIVER drv = NULL;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;lstrcpynA(ppd-&amp;gt;DescriptionA, desc.szDesc, sizeof(ppd-&amp;gt;DescriptionA));
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;lstrcpynA(ppd-&amp;gt;ModuleA, desc.szDrvname, sizeof(ppd-&amp;gt;ModuleA));
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;MultiByteToWideChar( CP_ACP, 0, desc.szDesc, -1, ppd-&amp;gt;DescriptionW, sizeof(ppd-&amp;gt;DescriptionW)/sizeof(WCHAR) );
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;MultiByteToWideChar( CP_ACP, 0, desc.szDrvname, -1, ppd-&amp;gt;ModuleW, sizeof(ppd-&amp;gt;ModuleW)/sizeof(WCHAR) );
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;err = mmErr(waveOutMessage(UlongToHandle(wod), DRV_QUERYDSOUNDIFACE, (DWORD_PTR)&amp;drv, 0));
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (err == DS_OK &amp;&amp; drv)
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ppd-&amp;gt;Type = DIRECTSOUNDDEVICE_TYPE_VXD;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;else
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;WARN(&amp;quot;waveOutMessage(DRV_QUERYDSOUNDIFACE) failed\n&amp;quot;);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;break;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} else {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;WARN(&amp;quot;waveOutMessage(DRV_QUERYDSOUNDDESC) failed\n&amp;quot;);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return E_PROP_ID_UNSUPPORTED;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;-	}
&lt;br&gt;- &amp;nbsp; &amp;nbsp;} else if ( IsEqualGUID( &amp;ppd-&amp;gt;DeviceId , &amp;DSDEVID_DefaultCapture) ||
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;IsEqualGUID( &amp;ppd-&amp;gt;DeviceId , &amp;DSDEVID_DefaultVoiceCapture) ) {
&lt;br&gt;-	ULONG wid;
&lt;br&gt;-	unsigned int widn;
&lt;br&gt;-	TRACE(&amp;quot;DataFlow=DIRECTSOUNDDEVICE_DATAFLOW_CAPTURE\n&amp;quot;);
&lt;br&gt;-	ppd-&amp;gt;DataFlow = DIRECTSOUNDDEVICE_DATAFLOW_CAPTURE;
&lt;br&gt;-	widn = waveInGetNumDevs();
&lt;br&gt;-	for (wid = 0; wid &amp;lt; widn; wid++) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (IsEqualGUID( &amp;dev_guid, &amp;DSOUND_capture_guids[wid] ) ) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;DSDRIVERDESC desc;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ppd-&amp;gt;WaveDeviceId = wid;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ppd-&amp;gt;Devnode = wid;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;err = mmErr(waveInMessage(UlongToHandle(wid),DRV_QUERYDSOUNDDESC,(DWORD_PTR)&amp;desc,0));
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (err == DS_OK) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;PIDSCDRIVER drv;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;lstrcpynA(ppd-&amp;gt;DescriptionA, desc.szDesc, sizeof(ppd-&amp;gt;DescriptionA));
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;lstrcpynA(ppd-&amp;gt;ModuleA, desc.szDrvname, sizeof(ppd-&amp;gt;ModuleA));
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;MultiByteToWideChar( CP_ACP, 0, desc.szDesc, -1, ppd-&amp;gt;DescriptionW, sizeof(ppd-&amp;gt;DescriptionW)/sizeof(WCHAR) );
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;MultiByteToWideChar( CP_ACP, 0, desc.szDrvname, -1, ppd-&amp;gt;ModuleW, sizeof(ppd-&amp;gt;ModuleW)/sizeof(WCHAR) );
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;err = mmErr(waveInMessage(UlongToHandle(wid),DRV_QUERYDSOUNDIFACE,(DWORD_PTR)&amp;drv,0));
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (err == DS_OK &amp;&amp; drv)
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ppd-&amp;gt;Type = DIRECTSOUNDDEVICE_TYPE_VXD;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;else
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;WARN(&amp;quot;waveInMessage(DRV_QUERYDSOUNDIFACE) failed\n&amp;quot;);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;break;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} else {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;WARN(&amp;quot;waveInMessage(DRV_QUERYDSOUNDDESC) failed\n&amp;quot;);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return E_PROP_ID_UNSUPPORTED;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;-	}
&lt;br&gt;- &amp;nbsp; &amp;nbsp;} else {
&lt;br&gt;-	BOOL found = FALSE;
&lt;br&gt;-	ULONG wod;
&lt;br&gt;-	unsigned int wodn;
&lt;br&gt;-	/* given specific device so try the render devices first */
&lt;br&gt;-	wodn = waveOutGetNumDevs();
&lt;br&gt;-	for (wod = 0; wod &amp;lt; wodn; wod++) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (IsEqualGUID( &amp;ppd-&amp;gt;DeviceId, &amp;DSOUND_renderer_guids[wod] ) ) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;DSDRIVERDESC desc;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;TRACE(&amp;quot;DataFlow=DIRECTSOUNDDEVICE_DATAFLOW_RENDER\n&amp;quot;);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ppd-&amp;gt;DataFlow = DIRECTSOUNDDEVICE_DATAFLOW_RENDER;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ppd-&amp;gt;WaveDeviceId = wod;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ppd-&amp;gt;Devnode = wod;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;err = mmErr(waveOutMessage(UlongToHandle(wod),DRV_QUERYDSOUNDDESC,(DWORD_PTR)&amp;desc,0));
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (err == DS_OK) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;PIDSDRIVER drv = NULL;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;lstrcpynA(ppd-&amp;gt;DescriptionA, desc.szDesc, sizeof(ppd-&amp;gt;DescriptionA));
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;lstrcpynA(ppd-&amp;gt;ModuleA, desc.szDrvname, sizeof(ppd-&amp;gt;ModuleA));
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;MultiByteToWideChar( CP_ACP, 0, desc.szDesc, -1, ppd-&amp;gt;DescriptionW, sizeof(ppd-&amp;gt;DescriptionW)/sizeof(WCHAR) );
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;MultiByteToWideChar( CP_ACP, 0, desc.szDrvname, -1, ppd-&amp;gt;ModuleW, sizeof(ppd-&amp;gt;ModuleW)/sizeof(WCHAR) );
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;err = mmErr(waveOutMessage(UlongToHandle(wod), DRV_QUERYDSOUNDIFACE, (DWORD_PTR)&amp;drv, 0));
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (err == DS_OK &amp;&amp; drv)
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ppd-&amp;gt;Type = DIRECTSOUNDDEVICE_TYPE_VXD;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;else
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;WARN(&amp;quot;waveOutMessage(DRV_QUERYDSOUNDIFACE) failed\n&amp;quot;);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;found = TRUE;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;break;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} else {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;WARN(&amp;quot;waveOutMessage(DRV_QUERYDSOUNDDESC) failed\n&amp;quot;);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return E_PROP_ID_UNSUPPORTED;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;-	}
&lt;br&gt;-
&lt;br&gt;-	if (found == FALSE) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ULONG wid;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;unsigned int widn;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;/* given specific device so try the capture devices next */
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;widn = waveInGetNumDevs();
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for (wid = 0; wid &amp;lt; widn; wid++) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (IsEqualGUID( &amp;ppd-&amp;gt;DeviceId, &amp;DSOUND_capture_guids[wid] ) ) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;DSDRIVERDESC desc;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;TRACE(&amp;quot;DataFlow=DIRECTSOUNDDEVICE_DATAFLOW_CAPTURE\n&amp;quot;);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ppd-&amp;gt;DataFlow = DIRECTSOUNDDEVICE_DATAFLOW_CAPTURE;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ppd-&amp;gt;WaveDeviceId = wid;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ppd-&amp;gt;Devnode = wid;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;err = mmErr(waveInMessage(UlongToHandle(wid),DRV_QUERYDSOUNDDESC,(DWORD_PTR)&amp;desc,0));
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (err == DS_OK) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;PIDSDRIVER drv = NULL;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;lstrcpynA(ppd-&amp;gt;DescriptionA, desc.szDesc, sizeof(ppd-&amp;gt;DescriptionA));
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;lstrcpynA(ppd-&amp;gt;ModuleA, desc.szDrvname, sizeof(ppd-&amp;gt;ModuleA));
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;MultiByteToWideChar( CP_ACP, 0, desc.szDesc, -1, ppd-&amp;gt;DescriptionW, sizeof(ppd-&amp;gt;DescriptionW)/sizeof(WCHAR) );
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;MultiByteToWideChar( CP_ACP, 0, desc.szDrvname, -1, ppd-&amp;gt;ModuleW, sizeof(ppd-&amp;gt;ModuleW)/sizeof(WCHAR) );
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;err = mmErr(waveInMessage(UlongToHandle(wid), DRV_QUERYDSOUNDIFACE, (DWORD_PTR)&amp;drv, 0));
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (err == DS_OK &amp;&amp; drv)
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ppd-&amp;gt;Type = DIRECTSOUNDDEVICE_TYPE_VXD;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;else
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;WARN(&amp;quot;waveInMessage(DRV_QUERYDSOUNDIFACE) failed\n&amp;quot;);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;found = TRUE;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;break;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} else {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;WARN(&amp;quot;waveInMessage(DRV_QUERYDSOUNDDESC) failed\n&amp;quot;);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return E_PROP_ID_UNSUPPORTED;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (found == FALSE) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;WARN(&amp;quot;device not found\n&amp;quot;);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return E_PROP_ID_UNSUPPORTED;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;-	}
&lt;br&gt;- &amp;nbsp; &amp;nbsp;}
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp; &amp;nbsp;if (pcbReturned) {
&lt;br&gt;-	*pcbReturned = cbPropData;
&lt;br&gt;-	TRACE(&amp;quot;*pcbReturned=%d\n&amp;quot;, *pcbReturned);
&lt;br&gt;- &amp;nbsp; &amp;nbsp;}
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp; &amp;nbsp;return S_OK;
&lt;br&gt;-}
&lt;br&gt;-
&lt;br&gt;&amp;nbsp;static HRESULT DSPROPERTY_DescriptionW(
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;LPVOID pPropData,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;ULONG cbPropData,
&lt;br&gt;@@ -648,6 +467,31 @@ static HRESULT DSPROPERTY_DescriptionA(
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;return hr;
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+static HRESULT DSPROPERTY_Description1(
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;LPVOID pPropData,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;ULONG cbPropData,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;PULONG pcbReturned)
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;DSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_W_DATA data;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;DSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_1_DATA *ppd = pPropData;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;HRESULT hr;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (pcbReturned)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;*pcbReturned = sizeof(*ppd);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (!pPropData)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return S_OK;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;data.DeviceId = ppd-&amp;gt;DeviceId;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;data.DataFlow = ppd-&amp;gt;DataFlow;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;hr = DSPROPERTY_DescriptionW(&amp;data, sizeof(data), NULL);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (FAILED(hr))
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return hr;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;DSPROPERTY_descWto1(&amp;data, ppd);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;HeapFree(GetProcessHeap(), 0, data.Module);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;HeapFree(GetProcessHeap(), 0, data.Interface);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return hr;
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;static HRESULT WINAPI IKsPrivatePropertySetImpl_Get(
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;LPKSPROPERTYSET iface,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;REFGUID guidPropSet,
&lt;br&gt;-- 
&lt;br&gt;1.6.5.3
&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-PATCH-1-7--dsound%3A-Implement-DSPROPERTY_WaveDeviceMappingA-on-top-of-*W-tp26696824p26696910.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26696904</id>
	<title>[PATCH 6/7] dsound: Clean up DSPROPERTY_DescriptionA</title>
	<published>2009-12-08T08:43:41Z</published>
	<updated>2009-12-08T08:43:41Z</updated>
	<author>
		<name>Maarten Lankhorst</name>
	</author>
	<content type="html">---
&lt;br&gt;&amp;nbsp;dlls/dsound/propset.c | &amp;nbsp;265 +++++--------------------------------------------
&lt;br&gt;&amp;nbsp;1 files changed, 25 insertions(+), 240 deletions(-)
&lt;br&gt;&lt;br&gt;diff --git a/dlls/dsound/propset.c b/dlls/dsound/propset.c
&lt;br&gt;index 1b6e7ce..9b3fc51 100644
&lt;br&gt;--- a/dlls/dsound/propset.c
&lt;br&gt;+++ b/dlls/dsound/propset.c
&lt;br&gt;@@ -367,246 +367,6 @@ static HRESULT DSPROPERTY_Description1(
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;return S_OK;
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-static HRESULT DSPROPERTY_DescriptionA(
&lt;br&gt;- &amp;nbsp; &amp;nbsp;LPVOID pPropData,
&lt;br&gt;- &amp;nbsp; &amp;nbsp;ULONG cbPropData,
&lt;br&gt;- &amp;nbsp; &amp;nbsp;PULONG pcbReturned )
&lt;br&gt;-{
&lt;br&gt;- &amp;nbsp; &amp;nbsp;PDSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_A_DATA ppd = pPropData;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;HRESULT err;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;GUID dev_guid;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;TRACE(&amp;quot;(pPropData=%p,cbPropData=%d,pcbReturned=%p)\n&amp;quot;,
&lt;br&gt;-	 &amp;nbsp;pPropData,cbPropData,pcbReturned);
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp; &amp;nbsp;TRACE(&amp;quot;DeviceId=%s\n&amp;quot;,debugstr_guid(&amp;ppd-&amp;gt;DeviceId));
&lt;br&gt;- &amp;nbsp; &amp;nbsp;if ( IsEqualGUID( &amp;ppd-&amp;gt;DeviceId , &amp;GUID_NULL) ) {
&lt;br&gt;-	/* default device of type specified by ppd-&amp;gt;DataFlow */
&lt;br&gt;-	if (ppd-&amp;gt;DataFlow == DIRECTSOUNDDEVICE_DATAFLOW_CAPTURE) {
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp;TRACE(&amp;quot;DataFlow=DIRECTSOUNDDEVICE_DATAFLOW_CAPTURE\n&amp;quot;);
&lt;br&gt;-	} else if (ppd-&amp;gt;DataFlow == DIRECTSOUNDDEVICE_DATAFLOW_RENDER) {
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp;TRACE(&amp;quot;DataFlow=DIRECTSOUNDDEVICE_DATAFLOW_RENDER\n&amp;quot;);
&lt;br&gt;-	} else {
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp;TRACE(&amp;quot;DataFlow=Unknown(%d)\n&amp;quot;, ppd-&amp;gt;DataFlow);
&lt;br&gt;-	}
&lt;br&gt;-	FIXME(&amp;quot;(pPropData=%p,cbPropData=%d,pcbReturned=%p) GUID_NULL not implemented!\n&amp;quot;,
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp; &amp;nbsp;pPropData,cbPropData,pcbReturned);
&lt;br&gt;-	return E_PROP_ID_UNSUPPORTED;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;}
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp; &amp;nbsp;ppd-&amp;gt;Type = DIRECTSOUNDDEVICE_TYPE_EMULATED;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;GetDeviceID(&amp;ppd-&amp;gt;DeviceId, &amp;dev_guid);
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp; &amp;nbsp;if ( IsEqualGUID( &amp;ppd-&amp;gt;DeviceId , &amp;DSDEVID_DefaultPlayback) ||
&lt;br&gt;-	 IsEqualGUID( &amp;ppd-&amp;gt;DeviceId , &amp;DSDEVID_DefaultVoicePlayback) ) {
&lt;br&gt;-	ULONG wod;
&lt;br&gt;-	unsigned int wodn;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (IsEqualGUID( &amp;ppd-&amp;gt;DeviceId , &amp;DSDEVID_DefaultPlayback) )
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;TRACE(&amp;quot;DSDEVID_DefaultPlayback\n&amp;quot;);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;else
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;TRACE(&amp;quot;DSDEVID_DefaultVoicePlayback\n&amp;quot;);
&lt;br&gt;-	ppd-&amp;gt;DataFlow = DIRECTSOUNDDEVICE_DATAFLOW_RENDER;
&lt;br&gt;-	wodn = waveOutGetNumDevs();
&lt;br&gt;-	for (wod = 0; wod &amp;lt; wodn; wod++) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (IsEqualGUID( &amp;dev_guid, &amp;DSOUND_renderer_guids[wod] ) ) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;DSDRIVERDESC desc;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ppd-&amp;gt;WaveDeviceId = wod;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;err = mmErr(waveOutMessage(UlongToHandle(wod),DRV_QUERYDSOUNDDESC,(DWORD_PTR)&amp;desc,0));
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (err == DS_OK) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;PIDSDRIVER drv = NULL;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;/* FIXME: this is a memory leak */
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;CHAR * szDescription = HeapAlloc(GetProcessHeap(),0,strlen(desc.szDesc) + 1);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;CHAR * szModule = HeapAlloc(GetProcessHeap(),0,strlen(desc.szDrvname) + 1);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;CHAR * szInterface = HeapAlloc(GetProcessHeap(),0,strlen(&amp;quot;Interface&amp;quot;) + 1);
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (szDescription &amp;&amp; szModule &amp;&amp; szInterface) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;strcpy(szDescription, desc.szDesc);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;strcpy(szModule, desc.szDrvname);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;strcpy(szInterface, &amp;quot;Interface&amp;quot;);
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ppd-&amp;gt;Description = szDescription;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ppd-&amp;gt;Module = szModule;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ppd-&amp;gt;Interface = szInterface;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;err = mmErr(waveOutMessage(UlongToHandle(wod), DRV_QUERYDSOUNDIFACE, (DWORD_PTR)&amp;drv, 0));
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (err == DS_OK &amp;&amp; drv)
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ppd-&amp;gt;Type = DIRECTSOUNDDEVICE_TYPE_VXD;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;else
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;WARN(&amp;quot;waveOutMessage(DRV_QUERYDSOUNDIFACE) failed\n&amp;quot;);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;break;
&lt;br&gt;-		 &amp;nbsp; &amp;nbsp;} else {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;WARN(&amp;quot;no memory\n&amp;quot;);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;HeapFree(GetProcessHeap(), 0, szDescription);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;HeapFree(GetProcessHeap(), 0, szModule);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;HeapFree(GetProcessHeap(), 0, szInterface);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return E_OUTOFMEMORY;
&lt;br&gt;-		 &amp;nbsp; &amp;nbsp;}
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} else {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;WARN(&amp;quot;waveOutMessage(DRV_QUERYDSOUNDDESC) failed\n&amp;quot;);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return E_PROP_ID_UNSUPPORTED;
&lt;br&gt;-		}
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;-	}
&lt;br&gt;- &amp;nbsp; &amp;nbsp;} else if (IsEqualGUID( &amp;ppd-&amp;gt;DeviceId , &amp;DSDEVID_DefaultCapture) ||
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp; &amp;nbsp; IsEqualGUID( &amp;ppd-&amp;gt;DeviceId , &amp;DSDEVID_DefaultVoiceCapture) ) {
&lt;br&gt;-	ULONG wid;
&lt;br&gt;-	unsigned int widn;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (IsEqualGUID( &amp;ppd-&amp;gt;DeviceId , &amp;DSDEVID_DefaultCapture) )
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;TRACE(&amp;quot;DSDEVID_DefaultCapture\n&amp;quot;);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;else
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;TRACE(&amp;quot;DSDEVID_DefaultVoiceCapture\n&amp;quot;);
&lt;br&gt;-	ppd-&amp;gt;DataFlow = DIRECTSOUNDDEVICE_DATAFLOW_CAPTURE;
&lt;br&gt;-	widn = waveInGetNumDevs();
&lt;br&gt;-	for (wid = 0; wid &amp;lt; widn; wid++) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (IsEqualGUID( &amp;dev_guid, &amp;DSOUND_capture_guids[wid] ) ) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;DSDRIVERDESC desc;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ppd-&amp;gt;WaveDeviceId = wid;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;err = mmErr(waveInMessage(UlongToHandle(wid),DRV_QUERYDSOUNDDESC,(DWORD_PTR)&amp;desc,0));
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (err == DS_OK) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;PIDSCDRIVER drv;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;/* FIXME: this is a memory leak */
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;CHAR * szDescription = HeapAlloc(GetProcessHeap(),0,strlen(desc.szDesc) + 1);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;CHAR * szModule = HeapAlloc(GetProcessHeap(),0,strlen(desc.szDrvname) + 1);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;CHAR * szInterface = HeapAlloc(GetProcessHeap(),0,strlen(&amp;quot;Interface&amp;quot;) + 1);
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (szDescription &amp;&amp; szModule &amp;&amp; szInterface) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;strcpy(szDescription, desc.szDesc);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;strcpy(szModule, desc.szDrvname);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;strcpy(szInterface, &amp;quot;Interface&amp;quot;);
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ppd-&amp;gt;Description = szDescription;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ppd-&amp;gt;Module = szModule;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ppd-&amp;gt;Interface = szInterface;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;err = mmErr(waveInMessage(UlongToHandle(wid),DRV_QUERYDSOUNDIFACE,(DWORD_PTR)&amp;drv,0));
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (err == DS_OK &amp;&amp; drv)
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ppd-&amp;gt;Type = DIRECTSOUNDDEVICE_TYPE_VXD;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;else
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;WARN(&amp;quot;waveInMessage(DRV_QUERYDSOUNDIFACE) failed\n&amp;quot;);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;break;
&lt;br&gt;-		 &amp;nbsp; &amp;nbsp;} else {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;WARN(&amp;quot;no memory\n&amp;quot;);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;HeapFree(GetProcessHeap(), 0, szDescription);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;HeapFree(GetProcessHeap(), 0, szModule);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;HeapFree(GetProcessHeap(), 0, szInterface);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return E_OUTOFMEMORY;
&lt;br&gt;-		 &amp;nbsp; &amp;nbsp;}
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} else {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;WARN(&amp;quot;waveInMessage(DRV_QUERYDSOUNDDESC) failed\n&amp;quot;);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return E_PROP_ID_UNSUPPORTED;
&lt;br&gt;-		}
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;-	}
&lt;br&gt;- &amp;nbsp; &amp;nbsp;} else {
&lt;br&gt;-	BOOL found = FALSE;
&lt;br&gt;-	ULONG wod;
&lt;br&gt;-	unsigned int wodn;
&lt;br&gt;-	/* given specific device so try the render devices first */
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;TRACE(&amp;quot;Checking renderer devices\n&amp;quot;);
&lt;br&gt;-	wodn = waveOutGetNumDevs();
&lt;br&gt;-	for (wod = 0; wod &amp;lt; wodn; wod++) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (IsEqualGUID( &amp;ppd-&amp;gt;DeviceId, &amp;DSOUND_renderer_guids[wod] ) ) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;DSDRIVERDESC desc;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;TRACE(&amp;quot;DSOUND_renderer_guids[%d]\n&amp;quot;, wod);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ppd-&amp;gt;DataFlow = DIRECTSOUNDDEVICE_DATAFLOW_RENDER;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ppd-&amp;gt;WaveDeviceId = wod;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;err = mmErr(waveOutMessage(UlongToHandle(wod),DRV_QUERYDSOUNDDESC,(DWORD_PTR)&amp;desc,0));
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (err == DS_OK) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;PIDSDRIVER drv = NULL;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;/* FIXME: this is a memory leak */
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;CHAR * szDescription = HeapAlloc(GetProcessHeap(),0,strlen(desc.szDesc) + 1);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;CHAR * szModule = HeapAlloc(GetProcessHeap(),0,strlen(desc.szDrvname) + 1);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;CHAR * szInterface = HeapAlloc(GetProcessHeap(),0,strlen(&amp;quot;Interface&amp;quot;) + 1);
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (szDescription &amp;&amp; szModule &amp;&amp; szInterface) {
&lt;br&gt;-			strcpy(szDescription, desc.szDesc);
&lt;br&gt;-			strcpy(szModule, desc.szDrvname);
&lt;br&gt;-			strcpy(szInterface, &amp;quot;Interface&amp;quot;);
&lt;br&gt;-
&lt;br&gt;-			ppd-&amp;gt;Description = szDescription;
&lt;br&gt;-			ppd-&amp;gt;Module = szModule;
&lt;br&gt;-			ppd-&amp;gt;Interface = szInterface;
&lt;br&gt;-			err = mmErr(waveOutMessage(UlongToHandle(wod), DRV_QUERYDSOUNDIFACE, (DWORD_PTR)&amp;drv, 0));
&lt;br&gt;-			if (err == DS_OK &amp;&amp; drv)
&lt;br&gt;-				ppd-&amp;gt;Type = DIRECTSOUNDDEVICE_TYPE_VXD;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;else
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;WARN(&amp;quot;waveOutMessage(DRV_QUERYDSOUNDIFACE) failed\n&amp;quot;);
&lt;br&gt;-			found = TRUE;
&lt;br&gt;-			break;
&lt;br&gt;-		 &amp;nbsp; &amp;nbsp;} else {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;WARN(&amp;quot;no memory\n&amp;quot;);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;HeapFree(GetProcessHeap(), 0, szDescription);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;HeapFree(GetProcessHeap(), 0, szModule);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;HeapFree(GetProcessHeap(), 0, szInterface);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return E_OUTOFMEMORY;
&lt;br&gt;-		 &amp;nbsp; &amp;nbsp;}
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} else {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;WARN(&amp;quot;waveOutMessage(DRV_QUERYDSOUNDDESC) failed\n&amp;quot;);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return E_PROP_ID_UNSUPPORTED;
&lt;br&gt;-		}
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (found == FALSE) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ULONG wid;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;unsigned int widn;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;TRACE(&amp;quot;Checking capture devices\n&amp;quot;);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ppd-&amp;gt;DataFlow = DIRECTSOUNDDEVICE_DATAFLOW_CAPTURE;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;widn = waveInGetNumDevs();
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for (wid = 0; wid &amp;lt; widn; wid++) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (IsEqualGUID( &amp;ppd-&amp;gt;DeviceId, &amp;DSOUND_capture_guids[wid] ) ) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;DSDRIVERDESC desc;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;TRACE(&amp;quot;DSOUND_capture_guids[%d]\n&amp;quot;, wid);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ppd-&amp;gt;WaveDeviceId = wid;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;err = mmErr(waveInMessage(UlongToHandle(wid),DRV_QUERYDSOUNDDESC,(DWORD_PTR)&amp;desc,0));
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (err == DS_OK) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;PIDSCDRIVER drv;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;/* FIXME: this is a memory leak */
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;CHAR * szDescription = HeapAlloc(GetProcessHeap(),0,strlen(desc.szDesc) + 1);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;CHAR * szModule = HeapAlloc(GetProcessHeap(),0,strlen(desc.szDrvname) + 1);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;CHAR * szInterface = HeapAlloc(GetProcessHeap(),0,strlen(&amp;quot;Interface&amp;quot;) + 1);
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (szDescription &amp;&amp; szModule &amp;&amp; szInterface) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;strcpy(szDescription, desc.szDesc);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;strcpy(szModule, desc.szDrvname);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;strcpy(szInterface, &amp;quot;Interface&amp;quot;);
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ppd-&amp;gt;Description = szDescription;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ppd-&amp;gt;Module = szModule;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ppd-&amp;gt;Interface = szInterface;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;err = mmErr(waveInMessage(UlongToHandle(wid),DRV_QUERYDSOUNDIFACE,(DWORD_PTR)&amp;drv,0));
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (err == DS_OK &amp;&amp; drv)
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ppd-&amp;gt;Type = DIRECTSOUNDDEVICE_TYPE_VXD;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;else
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;WARN(&amp;quot;waveInMessage(DRV_QUERYDSOUNDIFACE) failed\n&amp;quot;);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;found = TRUE;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;break;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} else {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;WARN(&amp;quot;no memory\n&amp;quot;);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;HeapFree(GetProcessHeap(), 0, szDescription);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;HeapFree(GetProcessHeap(), 0, szModule);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;HeapFree(GetProcessHeap(), 0, szInterface);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return E_OUTOFMEMORY;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} else {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;WARN(&amp;quot;waveInMessage(DRV_QUERYDSOUNDDESC) failed\n&amp;quot;);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return E_PROP_ID_UNSUPPORTED;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;-	}
&lt;br&gt;-
&lt;br&gt;-	if (found == FALSE) {
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp;WARN(&amp;quot;device not found\n&amp;quot;);
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp;return E_PROP_ID_UNSUPPORTED;
&lt;br&gt;-	}
&lt;br&gt;- &amp;nbsp; &amp;nbsp;}
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp; &amp;nbsp;if (pcbReturned) {
&lt;br&gt;-	*pcbReturned = cbPropData;
&lt;br&gt;-	TRACE(&amp;quot;*pcbReturned=%d\n&amp;quot;, *pcbReturned);
&lt;br&gt;- &amp;nbsp; &amp;nbsp;}
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp; &amp;nbsp;return S_OK;
&lt;br&gt;-}
&lt;br&gt;-
&lt;br&gt;&amp;nbsp;static HRESULT DSPROPERTY_DescriptionW(
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;LPVOID pPropData,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;ULONG cbPropData,
&lt;br&gt;@@ -863,6 +623,31 @@ static HRESULT DSPROPERTY_Enumerate1(
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;return DSPROPERTY_EnumerateW(&amp;data, cbPropData, pcbReturned);
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+static HRESULT DSPROPERTY_DescriptionA(
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;LPVOID pPropData,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;ULONG cbPropData,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;PULONG pcbReturned)
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;DSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_W_DATA data;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;DSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_A_DATA *ppd = pPropData;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;HRESULT hr;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (pcbReturned)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;*pcbReturned = sizeof(*ppd);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (!pPropData)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return S_OK;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;data.DeviceId = ppd-&amp;gt;DeviceId;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;data.DataFlow = ppd-&amp;gt;DataFlow;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;hr = DSPROPERTY_DescriptionW(&amp;data, sizeof(data), NULL);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (FAILED(hr))
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return hr;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;DSPROPERTY_descWtoA(&amp;data, ppd);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;HeapFree(GetProcessHeap(), 0, data.Module);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;HeapFree(GetProcessHeap(), 0, data.Interface);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return hr;
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;static HRESULT WINAPI IKsPrivatePropertySetImpl_Get(
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;LPKSPROPERTYSET iface,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;REFGUID guidPropSet,
&lt;br&gt;-- 
&lt;br&gt;1.6.5.3
&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-PATCH-1-7--dsound%3A-Implement-DSPROPERTY_WaveDeviceMappingA-on-top-of-*W-tp26696824p26696904.html" />
</entry>

</feed>
