From: Davide Beatrici git@davidebeatrici.dev
--- dlls/wineoss.drv/oss.c | 69 ++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 67 insertions(+), 2 deletions(-)
diff --git a/dlls/wineoss.drv/oss.c b/dlls/wineoss.drv/oss.c index 097e048d03b..1e839c57f5f 100644 --- a/dlls/wineoss.drv/oss.c +++ b/dlls/wineoss.drv/oss.c @@ -1478,6 +1478,15 @@ static NTSTATUS oss_is_started(void *args) return oss_unlock_result(stream, ¶ms->result, stream->playing ? S_OK : S_FALSE); }
+static NTSTATUS oss_get_prop_value(void *args) +{ + struct get_prop_value_params *params = args; + + params->result = E_NOTIMPL; + + return STATUS_SUCCESS; +} + /* Aux driver */
static unsigned int num_aux; @@ -1724,7 +1733,7 @@ unixlib_entry_t __wine_unix_call_funcs[] = oss_set_event_handle, oss_test_connect, oss_is_started, - oss_not_implemented, + oss_get_prop_value, oss_not_implemented, oss_midi_release, oss_midi_out_message, @@ -2109,6 +2118,62 @@ static NTSTATUS oss_wow64_set_event_handle(void *args) return STATUS_SUCCESS; }
+static NTSTATUS oss_wow64_get_prop_value(void *args) +{ + struct propvariant32 + { + WORD vt; + WORD pad1, pad2, pad3; + union + { + ULONG ulVal; + PTR32 ptr; + ULARGE_INTEGER uhVal; + }; + } *value32; + struct + { + PTR32 device; + EDataFlow flow; + PTR32 guid; + PTR32 prop; + HRESULT result; + PTR32 value; + PTR32 buffer; /* caller allocated buffer to hold value's strings */ + PTR32 buffer_size; + } *params32 = args; + PROPVARIANT value; + struct get_prop_value_params params = + { + .device = ULongToPtr(params32->device), + .flow = params32->flow, + .guid = ULongToPtr(params32->guid), + .prop = ULongToPtr(params32->prop), + .value = &value, + .buffer = ULongToPtr(params32->buffer), + .buffer_size = ULongToPtr(params32->buffer_size) + }; + oss_get_prop_value(¶ms); + params32->result = params.result; + if (SUCCEEDED(params.result)) + { + value32 = UlongToPtr(params32->value); + value32->vt = value.vt; + switch (value.vt) + { + case VT_UI4: + value32->ulVal = value.ulVal; + break; + case VT_LPWSTR: + value32->ptr = params32->buffer; + break; + default: + FIXME("Unhandled vt %04x\n", value.vt); + } + } + return STATUS_SUCCESS; +} + static NTSTATUS oss_wow64_aux_message(void *args) { struct @@ -2161,7 +2226,7 @@ unixlib_entry_t __wine_unix_call_wow64_funcs[] = oss_wow64_set_event_handle, oss_wow64_test_connect, oss_is_started, - oss_not_implemented, + oss_wow64_get_prop_value, oss_not_implemented, oss_midi_release, oss_wow64_midi_out_message,