Zhiyi Zhang <zzhang(a)codeweavers.com> writes:
+/****************************************************************************** + * D3DKMTOpenAdapterFromGdiDisplayName [GDI32.@] + */ +NTSTATUS WINAPI D3DKMTOpenAdapterFromGdiDisplayName( D3DKMT_OPENADAPTERFROMGDIDISPLAYNAME *desc ) +{ + static const WCHAR display1W[] = {'\\','\\','.','\\','D','I','S','P','L','A','Y','1',0}; + static D3DKMT_HANDLE handle_start = 0; + struct d3dkmt_adapter *adapter; + + TRACE("(%p) semi-stub\n", desc); + + if (!desc) + return STATUS_UNSUCCESSFUL; + + /* FIXME: Support multiple monitors */ + if (lstrcmpiW( desc->DeviceName, display1W )) + { + FIXME("%s is unsupported\n", wine_dbgstr_w( desc->DeviceName )); + return STATUS_UNSUCCESSFUL; + } + + adapter = heap_alloc( sizeof( *adapter ) ); + if (!adapter) + return STATUS_NO_MEMORY; + + /* D3DKMT_HANDLE is UINT, so we can't use pointer as handle */ + adapter->handle = ++handle_start;
You should use interlocked functions, or do that inside the critical section. -- Alexandre Julliard julliard(a)winehq.org