Yay, Dplay work! A few suggestions though:
From patch 1: +static HRESULT WINAPI DPWSCB_GetCaps( LPDPSP_GETCAPSDATA data ) +{ + TRACE( "(%d,%p,0x%08x,%p)\n", + data->idPlayer, data->lpCaps, data->dwFlags, data->lpISP ); + return DP_OK; +} Is there any reason this one writes a TRACE instread of a FIXME? I noticed that patch 3 implements it, perhaps you missed this when separating the patches?
+static HRESULT WINAPI DPWSCB_Open( LPDPSP_OPENDATA data ) +{ + FIXME( "(%u,%p,%p,%u,0x%08x,0x%08x) stub\n", + data->bCreate, data->lpSPMessageHeader, data->lpISP, + data->bReturnStatus, data->dwOpenFlags, data->dwSessionFlags ); + return DP_OK; +} Why does it return DP_OK while most other stubs return an error?
Patch 2:
+ /* Initialize internal data */ + ZeroMemory( &dpwsData, sizeof(DPWS_DATA) ); I think memset(&dpwsData, 0, sizeof(DPWS_DATA)) is preferred over ZeroMemory.
Patch 3: Where do the values like dwMaxLocalPlayers = 65536 come from? Since most functions are still stubs its hard to see where it comes from? Does native dpwsockx have the same limits? (If it does, that's a solid reason for using the same limits)