mirror of
git://source.winehq.org/git/wine.git
synced 2024-11-05 18:01:34 +00:00
Fill provider with some empty containers.
This commit is contained in:
parent
32d5240178
commit
af983e4d86
2 changed files with 196 additions and 23 deletions
|
@ -108,27 +108,61 @@ HRESULT WINAPI IDxDiagContainerImpl_EnumChildContainerNames(PDXDIAGCONTAINER ifa
|
||||||
return E_INVALIDARG;
|
return E_INVALIDARG;
|
||||||
}
|
}
|
||||||
|
|
||||||
HRESULT WINAPI IDxDiagContainerImpl_GetChildContainer(PDXDIAGCONTAINER iface, LPCWSTR pwszContainer, IDxDiagContainer** ppInstance) {
|
HRESULT WINAPI IDxDiagContainerImpl_GetChildContainerInternal(PDXDIAGCONTAINER iface, LPCWSTR pwszContainer, IDxDiagContainer** ppInstance) {
|
||||||
IDxDiagContainerImpl *This = (IDxDiagContainerImpl *)iface;
|
IDxDiagContainerImpl *This = (IDxDiagContainerImpl *)iface;
|
||||||
IDxDiagContainerImpl_SubContainer* p = NULL;
|
IDxDiagContainerImpl_SubContainer* p = NULL;
|
||||||
|
|
||||||
|
p = This->subContainers;
|
||||||
|
while (NULL != p) {
|
||||||
|
if (0 == lstrcmpW(p->contName, pwszContainer)) {
|
||||||
|
*ppInstance = (PDXDIAGCONTAINER)p->pCont;
|
||||||
|
return S_OK;
|
||||||
|
}
|
||||||
|
p = p->next;
|
||||||
|
}
|
||||||
|
return E_INVALIDARG;
|
||||||
|
}
|
||||||
|
|
||||||
|
HRESULT WINAPI IDxDiagContainerImpl_GetChildContainer(PDXDIAGCONTAINER iface, LPCWSTR pwszContainer, IDxDiagContainer** ppInstance) {
|
||||||
|
IDxDiagContainerImpl *This = (IDxDiagContainerImpl *)iface;
|
||||||
|
IDxDiagContainer* pContainer = NULL;
|
||||||
|
LPWSTR tmp, orig_tmp;
|
||||||
|
INT tmp_len;
|
||||||
|
WCHAR* cur;
|
||||||
|
HRESULT hr = E_INVALIDARG;
|
||||||
|
|
||||||
FIXME("(%p, %s, %p)\n", iface, debugstr_w(pwszContainer), ppInstance);
|
FIXME("(%p, %s, %p)\n", iface, debugstr_w(pwszContainer), ppInstance);
|
||||||
|
|
||||||
if (NULL == ppInstance || NULL == pwszContainer) {
|
if (NULL == ppInstance || NULL == pwszContainer) {
|
||||||
return E_INVALIDARG;
|
return E_INVALIDARG;
|
||||||
}
|
}
|
||||||
|
|
||||||
p = This->subContainers;
|
pContainer = (PDXDIAGCONTAINER) This;
|
||||||
while (NULL != p) {
|
|
||||||
if (0 == lstrcmpW(p->contName, pwszContainer)) {
|
tmp_len = strlenW(pwszContainer) + 1;
|
||||||
IDxDiagContainerImpl_QueryInterface((PDXDIAGCONTAINER)p->pCont, &IID_IDxDiagContainer, (void**) ppInstance);
|
orig_tmp = tmp = HeapAlloc(GetProcessHeap(), 0, tmp_len * sizeof(WCHAR));
|
||||||
/*TRACE"(%p) returns %p\n", iface, *ppInstance);*/
|
if (NULL == tmp) return E_FAIL;
|
||||||
return S_OK;
|
lstrcpynW(tmp, pwszContainer, tmp_len);
|
||||||
}
|
|
||||||
p = p->next;
|
cur = strchrW(tmp, '.');
|
||||||
|
while (NULL != cur) {
|
||||||
|
*cur = '\0'; /* cut tmp string to '.' */
|
||||||
|
hr = IDxDiagContainerImpl_GetChildContainerInternal(pContainer, tmp, &pContainer);
|
||||||
|
if (!SUCCEEDED(hr) || NULL == pContainer)
|
||||||
|
goto on_error;
|
||||||
|
*cur++; /* go after '.' (just replaced by \0) */
|
||||||
|
tmp = cur;
|
||||||
|
cur = strchrW(tmp, '.');
|
||||||
}
|
}
|
||||||
|
|
||||||
return E_INVALIDARG;
|
hr = IDxDiagContainerImpl_GetChildContainerInternal(pContainer, tmp, ppInstance);
|
||||||
|
if (SUCCEEDED(hr)) {
|
||||||
|
IDxDiagContainerImpl_AddRef((PDXDIAGCONTAINER)*ppInstance);
|
||||||
|
}
|
||||||
|
|
||||||
|
on_error:
|
||||||
|
HeapFree(GetProcessHeap(), 0, orig_tmp);
|
||||||
|
return hr;
|
||||||
}
|
}
|
||||||
|
|
||||||
HRESULT WINAPI IDxDiagContainerImpl_GetNumberOfProps(PDXDIAGCONTAINER iface, DWORD* pdwCount) {
|
HRESULT WINAPI IDxDiagContainerImpl_GetNumberOfProps(PDXDIAGCONTAINER iface, DWORD* pdwCount) {
|
||||||
|
|
|
@ -127,32 +127,171 @@ HRESULT DXDiag_CreateDXDiagProvider(LPCLASSFACTORY iface, LPUNKNOWN punkOuter, R
|
||||||
provider->lpVtbl = &DxDiagProvider_Vtbl;
|
provider->lpVtbl = &DxDiagProvider_Vtbl;
|
||||||
provider->ref = 0; /* will be inited with QueryInterface */
|
provider->ref = 0; /* will be inited with QueryInterface */
|
||||||
return IDxDiagProviderImpl_QueryInterface ((PDXDIAGPROVIDER)provider, riid, ppobj);
|
return IDxDiagProviderImpl_QueryInterface ((PDXDIAGPROVIDER)provider, riid, ppobj);
|
||||||
}
|
}
|
||||||
|
|
||||||
HRESULT DXDiag_InitRootDXDiagContainer(IDxDiagContainer* pRootCont) {
|
HRESULT DXDiag_InitDXDiagSystemInfoContainer(IDxDiagContainer* pSubCont) {
|
||||||
static const WCHAR DxDiag_SystemInfo[] = {'D','x','D','i','a','g','_','S','y','s','t','e','m','I','n','f','o',0};
|
HRESULT hr = S_OK;
|
||||||
static const WCHAR dwDirectXVersionMajor[] = {'d','w','D','i','r','e','c','t','X','V','e','r','s','i','o','n','M','a','j','o','r',0};
|
static const WCHAR dwDirectXVersionMajor[] = {'d','w','D','i','r','e','c','t','X','V','e','r','s','i','o','n','M','a','j','o','r',0};
|
||||||
static const WCHAR dwDirectXVersionMinor[] = {'d','w','D','i','r','e','c','t','X','V','e','r','s','i','o','n','M','i','n','o','r',0};
|
static const WCHAR dwDirectXVersionMinor[] = {'d','w','D','i','r','e','c','t','X','V','e','r','s','i','o','n','M','i','n','o','r',0};
|
||||||
static const WCHAR szDirectXVersionLetter[] = {'s','z','D','i','r','e','c','t','X','V','e','r','s','i','o','n','L','e','t','t','e','r',0};
|
static const WCHAR szDirectXVersionLetter[] = {'s','z','D','i','r','e','c','t','X','V','e','r','s','i','o','n','L','e','t','t','e','r',0};
|
||||||
static const WCHAR szDirectXVersionLetter_v[] = {'c',0};
|
static const WCHAR szDirectXVersionLetter_v[] = {'c',0};
|
||||||
|
static const WCHAR bDebug[] = {'b','D','e','b','u','g',0};
|
||||||
IDxDiagContainer* pSubCont = NULL;
|
static const WCHAR szDirectXVersionEnglish[] = {'s','z','D','i','r','e','c','t','X','V','e','r','s','i','o','n','E','n','g','l','i','s','h',0};
|
||||||
|
static const WCHAR szDirectXVersionEnglish_v[] = {'4','.','0','9','.','0','0','0','0','.','0','9','0','4',0};
|
||||||
|
static const WCHAR szDirectXVersionLongEnglish[] = {'s','z','D','i','r','e','c','t','X','V','e','r','s','i','o','n','L','o','n','g','E','n','g','l','i','s','h',0};
|
||||||
|
static const WCHAR szDirectXVersionLongEnglish_v[] = {'=',' ','"','D','i','r','e','c','t','X',' ','9','.','0','c',' ','(','4','.','0','9','.','0','0','0','0','.','0','9','0','4',')',0};
|
||||||
|
/*static const WCHAR szDxDiagVersion[] = {'s','z','D','x','D','i','a','g','V','e','r','s','i','o','n',0};*/
|
||||||
|
/*szWindowsDir*/
|
||||||
|
/*szWindowsDir*/
|
||||||
|
/*"dwOSMajorVersion"*/
|
||||||
|
/*"dwOSMinorVersion"*/
|
||||||
|
/*"dwOSBuildNumber"*/
|
||||||
|
/*"dwOSPlatformID"*/
|
||||||
VARIANT v;
|
VARIANT v;
|
||||||
HRESULT hr = S_OK;
|
|
||||||
|
|
||||||
TRACE("(%p)\n", pRootCont);
|
|
||||||
|
|
||||||
hr = DXDiag_CreateDXDiagContainer(&IID_IDxDiagContainer, (void**) &pSubCont);
|
|
||||||
if (FAILED(hr)) {
|
|
||||||
return hr;
|
|
||||||
}
|
|
||||||
V_VT(&v) = VT_UI4; V_UI4(&v) = 9;
|
V_VT(&v) = VT_UI4; V_UI4(&v) = 9;
|
||||||
hr = IDxDiagContainerImpl_AddProp(pSubCont, dwDirectXVersionMajor, &v);
|
hr = IDxDiagContainerImpl_AddProp(pSubCont, dwDirectXVersionMajor, &v);
|
||||||
V_VT(&v) = VT_UI4; V_UI4(&v) = 0;
|
V_VT(&v) = VT_UI4; V_UI4(&v) = 0;
|
||||||
hr = IDxDiagContainerImpl_AddProp(pSubCont, dwDirectXVersionMinor, &v);
|
hr = IDxDiagContainerImpl_AddProp(pSubCont, dwDirectXVersionMinor, &v);
|
||||||
V_VT(&v) = VT_BSTR; V_BSTR(&v) = SysAllocString(szDirectXVersionLetter_v);
|
V_VT(&v) = VT_BSTR; V_BSTR(&v) = SysAllocString(szDirectXVersionLetter_v);
|
||||||
hr = IDxDiagContainerImpl_AddProp(pSubCont, szDirectXVersionLetter, &v);
|
hr = IDxDiagContainerImpl_AddProp(pSubCont, szDirectXVersionLetter, &v);
|
||||||
|
V_VT(&v) = VT_BSTR; V_BSTR(&v) = SysAllocString(szDirectXVersionEnglish_v);
|
||||||
|
hr = IDxDiagContainerImpl_AddProp(pSubCont, szDirectXVersionEnglish, &v);
|
||||||
|
V_VT(&v) = VT_BSTR; V_BSTR(&v) = SysAllocString(szDirectXVersionLongEnglish);
|
||||||
|
hr = IDxDiagContainerImpl_AddProp(pSubCont, szDirectXVersionLongEnglish_v, &v);
|
||||||
|
V_VT(&v) = VT_BOOL; V_BOOL(&v) = FALSE;
|
||||||
|
hr = IDxDiagContainerImpl_AddProp(pSubCont, bDebug, &v);
|
||||||
|
|
||||||
|
return hr;
|
||||||
|
}
|
||||||
|
|
||||||
|
HRESULT DXDiag_InitDXDiagSystemDevicesContainer(IDxDiagContainer* pSubCont) {
|
||||||
|
HRESULT hr = S_OK;
|
||||||
|
/*
|
||||||
|
static const WCHAR szDescription[] = {'s','z','D','e','s','c','r','i','p','t','i','o','n',0};
|
||||||
|
static const WCHAR szDeviceID[] = {'s','z','D','e','v','i','c','e','I','D',0};
|
||||||
|
VARIANT v;
|
||||||
|
IDxDiagContainer* pDeviceSubCont = NULL;
|
||||||
|
|
||||||
|
hr = DXDiag_CreateDXDiagContainer(&IID_IDxDiagContainer, (void**) &pDeviceSubCont);
|
||||||
|
if (FAILED(hr)) { return hr; }
|
||||||
|
V_VT(pvarProp) = VT_BSTR;
|
||||||
|
V_BSTR(pvarProp) = SysAllocString(property->psz);
|
||||||
|
hr = IDxDiagContainerImpl_AddProp(pDeviceSubCont, szDescription, &v);
|
||||||
|
V_VT(pvarProp) = VT_BSTR;
|
||||||
|
V_BSTR(pvarProp) = SysAllocString(property->psz);
|
||||||
|
hr = IDxDiagContainerImpl_AddProp(pDeviceSubCont, szDeviceID, &v);
|
||||||
|
|
||||||
|
hr = IDxDiagContainerImpl_AddChildContainer(pSubCont, "", pDeviceSubCont);
|
||||||
|
*/
|
||||||
|
return hr;
|
||||||
|
}
|
||||||
|
|
||||||
|
HRESULT DXDiag_InitDXDiagLogicalDisksContainer(IDxDiagContainer* pSubCont) {
|
||||||
|
HRESULT hr = S_OK;
|
||||||
|
/*
|
||||||
|
static const WCHAR szDriveLetter[] = {'s','z','D','r','i','v','e','L','e','t','t','e','r',0};
|
||||||
|
static const WCHAR szFreeSpace[] = {'s','z','F','r','e','e','S','p','a','c','e',0};
|
||||||
|
static const WCHAR szMaxSpace[] = {'s','z','M','a','x','S','p','a','c','e',0};
|
||||||
|
static const WCHAR szFileSystem[] = {'s','z','F','i','l','e','S','y','s','t','e','m',0};
|
||||||
|
static const WCHAR szModel[] = {'s','z','M','o','d','e','l',0};
|
||||||
|
static const WCHAR szPNPDeviceID[] = {'s','z','P','N','P','D','e','v','i','c','e','I','D',0};
|
||||||
|
static const WCHAR dwHardDriveIndex[] = {'d','w','H','a','r','d','D','r','i','v','e','I','n','d','e','x',0};
|
||||||
|
VARIANT v;
|
||||||
|
IDxDiagContainer* pDiskSubCont = NULL;
|
||||||
|
|
||||||
|
hr = DXDiag_CreateDXDiagContainer(&IID_IDxDiagContainer, (void**) &pDiskSubCont);
|
||||||
|
if (FAILED(hr)) { return hr; }
|
||||||
|
hr = IDxDiagContainerImpl_AddChildContainer(pSubCont, "" , pDiskSubCont);
|
||||||
|
*/
|
||||||
|
return hr;
|
||||||
|
}
|
||||||
|
HRESULT DXDiag_InitDXDiagDirectXFilesContainer(IDxDiagContainer* pSubCont) {
|
||||||
|
HRESULT hr = S_OK;
|
||||||
|
/*
|
||||||
|
static const WCHAR szName[] = {'s','z','N','a','m','e',0};
|
||||||
|
static const WCHAR szVersion[] = {'s','z','V','e','r','s','i','o','n',0};
|
||||||
|
VARIANT v;
|
||||||
|
*/
|
||||||
|
return hr;
|
||||||
|
}
|
||||||
|
|
||||||
|
HRESULT DXDiag_InitDXDiagDirectSoundContainer(IDxDiagContainer* pSubCont) {
|
||||||
|
HRESULT hr = S_OK;
|
||||||
|
static const WCHAR DxDiag_SoundDevices[] = {'D','x','D','i','a','g','_','S','o','u','n','d','D','e','v','i','c','e','s',0};
|
||||||
|
static const WCHAR DxDiag_SoundCaptureDevices[] = {'D','x','D','i','a','g','_','S','o','u','n','d','C','a','p','t','u','r','e','D','e','v','i','c','e','s',0};
|
||||||
|
IDxDiagContainer* pSubSubCont = NULL;
|
||||||
|
|
||||||
|
hr = DXDiag_CreateDXDiagContainer(&IID_IDxDiagContainer, (void**) &pSubSubCont);
|
||||||
|
if (FAILED(hr)) { return hr; }
|
||||||
|
hr = IDxDiagContainerImpl_AddChildContainer(pSubCont, DxDiag_SoundDevices, pSubSubCont);
|
||||||
|
|
||||||
|
hr = DXDiag_CreateDXDiagContainer(&IID_IDxDiagContainer, (void**) &pSubSubCont);
|
||||||
|
if (FAILED(hr)) { return hr; }
|
||||||
|
hr = IDxDiagContainerImpl_AddChildContainer(pSubCont, DxDiag_SoundCaptureDevices, pSubSubCont);
|
||||||
|
|
||||||
|
return hr;
|
||||||
|
}
|
||||||
|
HRESULT DXDiag_InitRootDXDiagContainer(IDxDiagContainer* pRootCont) {
|
||||||
|
HRESULT hr = S_OK;
|
||||||
|
static const WCHAR DxDiag_SystemInfo[] = {'D','x','D','i','a','g','_','S','y','s','t','e','m','I','n','f','o',0};
|
||||||
|
static const WCHAR DxDiag_SystemDevices[] = {'D','x','D','i','a','g','_','S','y','s','t','e','m','D','e','v','i','c','e','s',0};
|
||||||
|
static const WCHAR DxDiag_LogicalDisks[] = {'D','x','D','i','a','g','_','L','o','g','i','c','a','l','D','i','s','k','s',0};
|
||||||
|
static const WCHAR DxDiag_DirectXFiles[] = {'D','x','D','i','a','g','_','D','i','r','e','c','t','X','F','i','l','e','s',0};
|
||||||
|
static const WCHAR DxDiag_DisplayDevices[] = {'D','x','D','i','a','g','_','D','i','s','p','l','a','y','D','e','v','i','c','e','s',0};
|
||||||
|
static const WCHAR DxDiag_DirectSound[] = {'D','x','D','i','a','g','_','D','i','r','e','c','t','S','o','u','n','d',0};
|
||||||
|
static const WCHAR DxDiag_DirectMusic[] = {'D','x','D','i','a','g','_','D','i','r','e','c','t','M','u','s','i','c',0};
|
||||||
|
static const WCHAR DxDiag_DirectInput[] = {'D','x','D','i','a','g','_','D','i','r','e','c','t','I','n','p','u','t',0};
|
||||||
|
static const WCHAR DxDiag_DirectPlay[] = {'D','x','D','i','a','g','_','D','i','r','e','c','t','P','l','a','y',0};
|
||||||
|
static const WCHAR DxDiag_DirectShowFilters[] = {'D','x','D','i','a','g','_','D','i','r','e','c','t','S','h','o','w','F','i','l','t','e','r','s',0};
|
||||||
|
IDxDiagContainer* pSubCont = NULL;
|
||||||
|
|
||||||
|
TRACE("(%p)\n", pRootCont);
|
||||||
|
|
||||||
|
hr = DXDiag_CreateDXDiagContainer(&IID_IDxDiagContainer, (void**) &pSubCont);
|
||||||
|
if (FAILED(hr)) { return hr; }
|
||||||
|
hr = DXDiag_InitDXDiagSystemInfoContainer(pSubCont);
|
||||||
|
hr = IDxDiagContainerImpl_AddChildContainer(pRootCont, DxDiag_SystemInfo, pSubCont);
|
||||||
|
|
||||||
|
hr = DXDiag_CreateDXDiagContainer(&IID_IDxDiagContainer, (void**) &pSubCont);
|
||||||
|
if (FAILED(hr)) { return hr; }
|
||||||
|
hr = DXDiag_InitDXDiagSystemDevicesContainer(pSubCont);
|
||||||
|
hr = IDxDiagContainerImpl_AddChildContainer(pRootCont, DxDiag_SystemDevices, pSubCont);
|
||||||
|
|
||||||
|
hr = DXDiag_CreateDXDiagContainer(&IID_IDxDiagContainer, (void**) &pSubCont);
|
||||||
|
if (FAILED(hr)) { return hr; }
|
||||||
|
hr = DXDiag_InitDXDiagLogicalDisksContainer(pSubCont);
|
||||||
|
hr = IDxDiagContainerImpl_AddChildContainer(pRootCont, DxDiag_LogicalDisks, pSubCont);
|
||||||
|
|
||||||
|
hr = DXDiag_CreateDXDiagContainer(&IID_IDxDiagContainer, (void**) &pSubCont);
|
||||||
|
if (FAILED(hr)) { return hr; }
|
||||||
|
hr = DXDiag_InitDXDiagDirectXFilesContainer(pSubCont);
|
||||||
|
hr = IDxDiagContainerImpl_AddChildContainer(pRootCont, DxDiag_DirectXFiles, pSubCont);
|
||||||
|
|
||||||
|
hr = DXDiag_CreateDXDiagContainer(&IID_IDxDiagContainer, (void**) &pSubCont);
|
||||||
|
if (FAILED(hr)) { return hr; }
|
||||||
|
hr = IDxDiagContainerImpl_AddChildContainer(pRootCont, DxDiag_DisplayDevices, pSubCont);
|
||||||
|
|
||||||
|
hr = DXDiag_CreateDXDiagContainer(&IID_IDxDiagContainer, (void**) &pSubCont);
|
||||||
|
if (FAILED(hr)) { return hr; }
|
||||||
|
hr = DXDiag_InitDXDiagDirectSoundContainer(pSubCont);
|
||||||
|
hr = IDxDiagContainerImpl_AddChildContainer(pRootCont, DxDiag_DirectSound, pSubCont);
|
||||||
|
|
||||||
|
hr = DXDiag_CreateDXDiagContainer(&IID_IDxDiagContainer, (void**) &pSubCont);
|
||||||
|
if (FAILED(hr)) { return hr; }
|
||||||
|
hr = IDxDiagContainerImpl_AddChildContainer(pRootCont, DxDiag_DirectMusic, pSubCont);
|
||||||
|
|
||||||
|
hr = DXDiag_CreateDXDiagContainer(&IID_IDxDiagContainer, (void**) &pSubCont);
|
||||||
|
if (FAILED(hr)) { return hr; }
|
||||||
|
hr = IDxDiagContainerImpl_AddChildContainer(pRootCont, DxDiag_DirectInput, pSubCont);
|
||||||
|
|
||||||
|
hr = DXDiag_CreateDXDiagContainer(&IID_IDxDiagContainer, (void**) &pSubCont);
|
||||||
|
if (FAILED(hr)) { return hr; }
|
||||||
|
hr = IDxDiagContainerImpl_AddChildContainer(pRootCont, DxDiag_DirectPlay, pSubCont);
|
||||||
|
|
||||||
|
hr = DXDiag_CreateDXDiagContainer(&IID_IDxDiagContainer, (void**) &pSubCont);
|
||||||
|
if (FAILED(hr)) { return hr; }
|
||||||
|
hr = IDxDiagContainerImpl_AddChildContainer(pRootCont, DxDiag_DirectShowFilters, pSubCont);
|
||||||
|
|
||||||
hr = IDxDiagContainerImpl_AddChildContainer(pRootCont, DxDiag_SystemInfo, pSubCont);
|
|
||||||
return hr;
|
return hr;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue