Hi,
I thought I understood this thing, but I don't. I'm trying to get this working so that I can work towards getting Rocksmith going.
I've added:
diff --git a/dlls/wbemprox/builtin.c b/dlls/wbemprox/builtin.c index 4b02ea2..0051837 100644 --- a/dlls/wbemprox/builtin.c +++ b/dlls/wbemprox/builtin.c @@ -75,6 +75,8 @@ static const WCHAR class_paramsW[] = {'_','_','P','A','R','A','M','E','T','E','R','S',0}; static const WCHAR class_physicalmediaW[] =
{'W','i','n','3','2','_','P','h','y','s','i','c','a','l','M','e','d','i','a',0}; +static const WCHAR class_pnpentityW[] = + {'W','i','n','3','2','_','P','N','P','E','n','t','i','t','y',0}; static const WCHAR class_qualifiersW[] = {'_','_','Q','U','A','L','I','F','I','E','R','S',0}; static const WCHAR class_process_getowner_outW[] = @@ -394,6 +396,10 @@ static const struct column col_physicalmedia[] = { { prop_serialnumberW, CIM_STRING } }; +static const struct column col_pnpentity[] = +{ + { prop_deviceidW, CIM_STRING|COL_FLAG_KEY } +}; static const struct column col_process[] = { { prop_captionW, CIM_STRING|COL_FLAG_DYNAMIC }, @@ -513,6 +519,8 @@ static const WCHAR diskdrive_manufacturerW[] = {'(','S','t','a','n','d','a','r','d',' ','d','i','s','k',' ','d','r','i','v','e','s',')',0}; static const WCHAR diskdrive_serialW[] = {'W','I','N','E','H','D','I','S','K',0}; +static const WCHAR pnpentity_rscableW[] = + {'U','S','B','\ ','V','I','D','_','1','2','B','A','&','P','I','D','_','0','0','F','F','&','R','E','V','_','0','1','0','0',0}; static const WCHAR networkadapter_pnpdeviceidW[]= {'P','C','I','\ ','V','E','N','_','8','0','8','6','&','D','E','V','_','1','0','0','E','&',
'S','U','B','S','Y','S','_','0','0','1','E','8','0','8','6','&','R','E','V','_','0','2','\', @@ -796,6 +804,10 @@ static const struct record_physicalmedia data_physicalmedia[] = { { diskdrive_serialW } }; +static const struct record_physicalmedia data_pnpentity[] = +{ + { pnpentity_rscableW } +}; static const struct record_qualifier data_qualifier[] = { { class_process_getowner_outW, param_userW, CIM_SINT32, FLAVOR_ID, prop_idW, 0 }, @@ -2241,6 +2253,7 @@ static struct table builtin_classes[] = { class_osW, SIZEOF(col_os), col_os, 0, 0, NULL, fill_os }, { class_paramsW, SIZEOF(col_param), col_param, SIZEOF(data_param), 0, (BYTE *)data_param }, { class_physicalmediaW, SIZEOF(col_physicalmedia), col_physicalmedia, SIZEOF(data_physicalmedia), 0, (BYTE *)data_physicalmedia }, + { class_pnpentityW, SIZEOF(col_pnpentity), col_pnpentity, SIZEOF(data_pnpentity), 0, (BYTE *)data_pnpentity }, { class_processW, SIZEOF(col_process), col_process, 0, 0, NULL, fill_process }, { class_processorW, SIZEOF(col_processor), col_processor, 0, 0, NULL, fill_processor }, { class_qualifiersW, SIZEOF(col_qualifier), col_qualifier, SIZEOF(data_qualifier), 0, (BYTE *)data_qualifier },
With the *_pnpentity* elements being mine. I've hardcoded the USB device hardware ID in for now. I also added a TRACE to get_propval, but that's not being called.
Here's the relevant part of the log:
0009:trace:wbemprox:wbem_services_CreateInstanceEnum 0x3cd6b58, L"Win32_PNPEntity", 000000000, (nil), 0x32f858 0009:trace:wbemprox:parse_query parse_query: L"SELECT * FROM Win32_PNPEntity" 0009:trace:wbemprox:parse_query wql_parse returned 0 0009:trace:wbemprox:EnumWbemClassObject_create 0x32f858 0009:trace:wbemprox:EnumWbemClassObject_create returning iface 0x3cd6ea8 0009:trace:wbemprox:enum_class_object_Next 0x3cd6ea8, 10000, 20, 0x32f888, 0x32f864 0009:fixme:wbemprox:enum_class_object_Next timeout not supported 0009:trace:wbemprox:enum_class_object_Release destroying 0x3cd6ea8 0009:trace:wbemprox:wbem_locator_Release destroying 0x3cd6cc8 0009:trace:wbemprox:wbem_services_Release destroying 0x3cd6b58 0009:trace:wbemprox:DllGetClassObject {4590f811-1d3a-11d0-891f-00aa004b2e24} {00000001-0000-0000-c000-000000000046} 0x32f80c 0009:trace:wbemprox:wbemprox_cf_CreateInstance (nil) {dc12a687-737f-11cf-884d-00aa004b2e24} 0x32f85c 0009:trace:wbemprox:WbemLocator_create (0x32f78c) 0009:trace:wbemprox:WbemLocator_create returning iface 0x3cd6b78 0009:trace:wbemprox:wbem_locator_QueryInterface 0x3cd6b78 {dc12a687-737f-11cf-884d-00aa004b2e24} 0x32f85c 0009:trace:wbemprox:wbem_locator_ConnectServer 0x3cd6b78, L"\\.\root\ \cimv2", (null), (null), (null), 0x00000000, (null), (nil), 0x32f860) 0009:trace:wbemprox:WbemServices_create (0x32f860) 0009:trace:wbemprox:WbemServices_create returning iface 0x3cd6f10
Have I missed something here?
Thanks, Luke.
On Mon, 2014-03-03 at 01:37 +0000, Luke A. Guest wrote: ...
With the *_pnpentity* elements being mine. I've hardcoded the USB device hardware ID in for now. I also added a TRACE to get_propval, but that's not being called.
Here's the relevant part of the log:
0009:trace:wbemprox:wbem_services_CreateInstanceEnum 0x3cd6b58, L"Win32_PNPEntity", 000000000, (nil), 0x32f858 0009:trace:wbemprox:parse_query parse_query: L"SELECT * FROM Win32_PNPEntity" 0009:trace:wbemprox:parse_query wql_parse returned 0 0009:trace:wbemprox:EnumWbemClassObject_create 0x32f858 0009:trace:wbemprox:EnumWbemClassObject_create returning iface 0x3cd6ea8 0009:trace:wbemprox:enum_class_object_Next 0x3cd6ea8, 10000, 20, 0x32f888, 0x32f864
...
Have I missed something here?
It's asking for 20 objects. The return value of EnumWbemClassObject::Next depends on whether the enumeration has ended but the first call will probably always return WBEM_S_NO_ERROR on Windows.
On Mon, 2014-03-03 at 09:15 +0100, Hans Leidekker wrote:
0009:trace:wbemprox:parse_query wql_parse returned 0 0009:trace:wbemprox:EnumWbemClassObject_create 0x32f858 0009:trace:wbemprox:EnumWbemClassObject_create returning iface 0x3cd6ea8 0009:trace:wbemprox:enum_class_object_Next 0x3cd6ea8, 10000, 20, 0x32f888, 0x32f864
...
Have I missed something here?
It's asking for 20 objects. The return value of EnumWbemClassObject::Next depends on whether the enumeration has ended but the first call will probably always return WBEM_S_NO_ERROR on Windows.
My understanding of that code was that it always returned 1 object no matter what the client was asking for as the api can always return less than what was asked for. If this is not right, then the wine code needs to return as many objects as possible, right?
Luke.
On Mon, 2014-03-03 at 17:37 +0000, Luke A. Guest wrote:
On Mon, 2014-03-03 at 09:15 +0100, Hans Leidekker wrote:
0009:trace:wbemprox:parse_query wql_parse returned 0 0009:trace:wbemprox:EnumWbemClassObject_create 0x32f858 0009:trace:wbemprox:EnumWbemClassObject_create returning iface 0x3cd6ea8 0009:trace:wbemprox:enum_class_object_Next 0x3cd6ea8, 10000, 20, 0x32f888, 0x32f864
...
Have I missed something here?
It's asking for 20 objects. The return value of EnumWbemClassObject::Next depends on whether the enumeration has ended but the first call will probably always return WBEM_S_NO_ERROR on Windows.
My understanding of that code was that it always returned 1 object no matter what the client was asking for as the api can always return less than what was asked for. If this is not right, then the wine code needs to return as many objects as possible, right?
Right, and if the client really expects WBEM_S_NO_ERROR then we'd need at least 20 instances of Win32_PNPEntity.
On Mon, 2014-03-03 at 20:07 +0100, Hans Leidekker wrote:
My understanding of that code was that it always returned 1 object no matter what the client was asking for as the api can always return less than what was asked for. If this is not right, then the wine code needs to return as many objects as possible, right?
Right, and if the client really expects WBEM_S_NO_ERROR then we'd need at least 20 instances of Win32_PNPEntity.
No, you should still be able to return less if that is available. You should not have to have at least 20 or whatever to get it to work.
Also, does the timeout not handled FIXME really go into a busy loop or am I reading that macro wrong?
Luke.