From: Zhiyi Zhang zzhang@codeweavers.com
--- dlls/gdi32/tests/driver.c | 5 ++--- dlls/win32u/d3dkmt.c | 25 ++++++++++++++++++++++--- 2 files changed, 24 insertions(+), 6 deletions(-)
diff --git a/dlls/gdi32/tests/driver.c b/dlls/gdi32/tests/driver.c index 59c98f38c8e..29bbb5aef26 100644 --- a/dlls/gdi32/tests/driver.c +++ b/dlls/gdi32/tests/driver.c @@ -1168,21 +1168,20 @@ static void test_D3DKMTQueryAdapterInfo(void) query_adapter_info.pPrivateDriverData = NULL; query_adapter_info.PrivateDriverDataSize = tests[i].size; status = pD3DKMTQueryAdapterInfo(&query_adapter_info); - todo_wine ok(status == STATUS_INVALID_PARAMETER, "Got unexpected return code %#lx.\n", status);
/* Insufficient buffer size */ query_adapter_info.pPrivateDriverData = buffer; query_adapter_info.PrivateDriverDataSize = tests[i].size - 1; status = pD3DKMTQueryAdapterInfo(&query_adapter_info); - todo_wine + todo_wine_if(tests[i].type != KMTQAITYPE_CHECKDRIVERUPDATESTATUS) ok(status == STATUS_INVALID_PARAMETER, "Got unexpected return code %#lx.\n", status);
/* Normal */ query_adapter_info.pPrivateDriverData = buffer; query_adapter_info.PrivateDriverDataSize = tests[i].size; status = pD3DKMTQueryAdapterInfo(&query_adapter_info); - todo_wine + todo_wine_if(tests[i].type != KMTQAITYPE_CHECKDRIVERUPDATESTATUS) ok(status == STATUS_SUCCESS, "Got unexpected return code %#lx.\n", status); if (status != STATUS_SUCCESS) { diff --git a/dlls/win32u/d3dkmt.c b/dlls/win32u/d3dkmt.c index 24a668a85b4..8b43c6ba04a 100644 --- a/dlls/win32u/d3dkmt.c +++ b/dlls/win32u/d3dkmt.c @@ -333,10 +333,29 @@ NTSTATUS WINAPI NtGdiDdDDIDestroyDevice( const D3DKMT_DESTROYDEVICE *desc ) */ NTSTATUS WINAPI NtGdiDdDDIQueryAdapterInfo( D3DKMT_QUERYADAPTERINFO *desc ) { - if (!desc) return STATUS_INVALID_PARAMETER; + TRACE( "(%p).\n", desc );
- FIXME( "desc %p, type %d stub\n", desc, desc->Type ); - return STATUS_NOT_IMPLEMENTED; + if (!desc || !desc->hAdapter || !desc->pPrivateDriverData) + return STATUS_INVALID_PARAMETER; + + switch (desc->Type) + { + case KMTQAITYPE_CHECKDRIVERUPDATESTATUS: + { + BOOL *value = desc->pPrivateDriverData; + + if (desc->PrivateDriverDataSize < sizeof(*value)) + return STATUS_INVALID_PARAMETER; + + *value = FALSE; + return STATUS_SUCCESS; + } + default: + { + FIXME( "type %d not handled.\n", desc->Type ); + return STATUS_NOT_IMPLEMENTED; + } + } }
/******************************************************************************