Fix GUID->String conversion. Implement CM_Get_Class[_Ex]A/W. Modified: trunk/reactos/include/wine/cfgmgr32.h Modified: trunk/reactos/lib/setupapi/cfgmgr.c Modified: trunk/reactos/lib/setupapi/setupapi.spec Modified: trunk/reactos/w32api/include/ddk/cfgmgr32.h _____
Modified: trunk/reactos/include/wine/cfgmgr32.h --- trunk/reactos/include/wine/cfgmgr32.h 2005-09-03 18:05:33 UTC (rev 17623) +++ trunk/reactos/include/wine/cfgmgr32.h 2005-09-03 19:44:47 UTC (rev 17624) @@ -139,6 +139,12 @@
CONFIGRET WINAPI CM_Get_Class_Key_Name_ExA( LPGUID, LPSTR, PULONG, ULONG, HMACHINE ); CONFIGRET WINAPI CM_Get_Class_Key_Name_ExW( LPGUID, LPWSTR, PULONG, ULONG, HMACHINE ); #define CM_Get_Class_Key_Name_Ex WINELIB_NAME_AW(CM_Get_Class_Key_Name_Ex) +CONFIGRET WINAPI CM_Get_Class_NameA( LPGUID, PCHAR, PULONG, ULONG ); +CONFIGRET WINAPI CM_Get_Class_NameW( LPGUID, PWCHAR, PULONG, ULONG); +#define CM_Get_Class_Name WINELIB_NAME_AW(CM_Get_Class_Name) +CONFIGRET WINAPI CM_Get_Class_Name_ExA( LPGUID, PCHAR, PULONG, ULONG, HMACHINE ); +CONFIGRET WINAPI CM_Get_Class_Name_ExW( LPGUID, PWCHAR, PULONG, ULONG, HMACHINE ); +#define CM_Get_Class_Name_Ex WINELIB_NAME_AW(CM_Get_Class_Name_Ex) CONFIGRET WINAPI CM_Get_Depth( PULONG, DEVINST, ULONG ); CONFIGRET WINAPI CM_Get_Depth_Ex( PULONG, DEVINST, ULONG, HMACHINE ); CONFIGRET WINAPI CM_Get_DevNode_Registry_PropertyA( DEVINST, ULONG, PULONG, PVOID, PULONG, ULONG ); _____
Modified: trunk/reactos/lib/setupapi/cfgmgr.c --- trunk/reactos/lib/setupapi/cfgmgr.c 2005-09-03 18:05:33 UTC (rev 17623) +++ trunk/reactos/lib/setupapi/cfgmgr.c 2005-09-03 19:44:47 UTC (rev 17624) @@ -363,6 +363,21 @@
}
+static BOOL GuidToString(LPGUID Guid, LPWSTR String) +{ + LPWSTR lpString; + + if (UuidToStringW(Guid, &lpString) != RPC_S_OK) + return FALSE; + + lstrcpyW(String, lpString); + + RpcStringFree(&lpString); + + return TRUE; +} + +
/*********************************************************************** * CM_Get_Class_Key_Name_ExW [SETUPAPI.@] */ @@ -370,7 +385,7 @@ LPGUID ClassGuid, LPWSTR pszKeyName, PULONG pulLength, ULONG ulFlags, HMACHINE hMachine) { - FIXME("%p %p %p %lx %lx\n", + TRACE("%p %p %p %lx %lx\n", ClassGuid, pszKeyName, pulLength, ulFlags, hMachine);
if (ClassGuid == NULL || pszKeyName == NULL || pulLength == NULL) @@ -385,7 +400,7 @@ return CR_BUFFER_SMALL; }
- if (UuidToStringW(ClassGuid, &pszKeyName) != RPC_S_OK) + if (!GuidToString(ClassGuid, pszKeyName)) return CR_INVALID_DATA;
*pulLength = MAX_GUID_STRING_LEN; @@ -395,6 +410,88 @@
/*********************************************************************** + * CM_Get_Class_NameA [SETUPAPI.@] + */ +CONFIGRET WINAPI CM_Get_Class_NameA( + LPGUID ClassGuid, PCHAR Buffer, PULONG pulLength, ULONG ulFlags) +{ + TRACE("%p %p %p %lx\n", ClassGuid, Buffer, pulLength, ulFlags); + return CM_Get_Class_Name_ExA(ClassGuid, Buffer, pulLength, ulFlags, + NULL); +} + + +/********************************************************************** * + * CM_Get_Class_NameW [SETUPAPI.@] + */ +CONFIGRET WINAPI CM_Get_Class_NameW( + LPGUID ClassGuid, PWCHAR Buffer, PULONG pulLength, ULONG ulFlags) +{ + TRACE("%p %p %p %lx\n", ClassGuid, Buffer, pulLength, ulFlags); + return CM_Get_Class_Name_ExW(ClassGuid, Buffer, pulLength, ulFlags, + NULL); +} + + +/********************************************************************** * + * CM_Get_Class_Name_ExA [SETUPAPI.@] + */ +CONFIGRET WINAPI CM_Get_Class_Name_ExA( + LPGUID ClassGuid, PCHAR Buffer, PULONG pulLength, ULONG ulFlags, + HMACHINE hMachine) +{ + FIXME("%p %p %p %lx %lx\n", + ClassGuid, Buffer, pulLength, ulFlags, hMachine); + return CR_FAILURE; +} + + +/********************************************************************** * + * CM_Get_Class_Name_ExW [SETUPAPI.@] + */ +CONFIGRET WINAPI +CM_Get_Class_Name_ExW( + LPGUID ClassGuid, PWCHAR Buffer, PULONG pulLength, ULONG ulFlags, + HMACHINE hMachine) +{ + WCHAR szGuidString[MAX_GUID_STRING_LEN]; + RPC_BINDING_HANDLE BindingHandle = NULL; + + TRACE("%p %p %p %lx %lx\n", + ClassGuid, Buffer, pulLength, ulFlags, hMachine); + + if (ClassGuid == NULL || Buffer == NULL || pulLength == NULL) + return CR_INVALID_POINTER; + + if (ulFlags != 0) + return CR_INVALID_FLAG; + + if (!GuidToString(ClassGuid, szGuidString)) + return CR_INVALID_DATA; + + TRACE("Guid %s\n", debugstr_w(szGuidString)); + + if (hMachine != NULL) + { + BindingHandle = ((PMACHINE_INFO)hMachine)->BindingHandle; + if (BindingHandle == NULL) + return CR_FAILURE; + } + else + { + if (!PnpGetLocalHandles(&BindingHandle, NULL)) + return CR_FAILURE; + } + + return PNP_GetClassName(BindingHandle, + szGuidString, + Buffer, + pulLength, + ulFlags); +} + + +/********************************************************************** * * CM_Get_Depth [SETUPAPI.@] */ CONFIGRET WINAPI CM_Get_Depth( _____
Modified: trunk/reactos/lib/setupapi/setupapi.spec --- trunk/reactos/lib/setupapi/setupapi.spec 2005-09-03 18:05:33 UTC (rev 17623) +++ trunk/reactos/lib/setupapi/setupapi.spec 2005-09-03 19:44:47 UTC (rev 17624) @@ -59,10 +59,10 @@
@ stdcall CM_Get_Class_Key_NameW(ptr wstr ptr long) @ stdcall CM_Get_Class_Key_Name_ExA(ptr str ptr long long) @ stdcall CM_Get_Class_Key_Name_ExW(ptr wstr ptr long long) -@ stub CM_Get_Class_NameA -@ stub CM_Get_Class_NameW -@ stub CM_Get_Class_Name_ExA -@ stub CM_Get_Class_Name_ExW +@ stdcall CM_Get_Class_NameA(ptr str ptr long) +@ stdcall CM_Get_Class_NameW(ptr wstr ptr long) +@ stdcall CM_Get_Class_Name_ExA(ptr str ptr long long) +@ stdcall CM_Get_Class_Name_ExW(ptr wstr ptr long long) @ stdcall CM_Get_Depth(ptr long long) @ stdcall CM_Get_Depth_Ex(ptr long long long) @ stdcall CM_Get_DevNode_Registry_PropertyA(long long ptr ptr ptr long) @@ -166,6 +166,7 @@ @ stub CM_Request_Device_EjectA @ stub CM_Request_Device_EjectW @ stub CM_Request_Eject_PC +@ stub CM_Request_Eject_PC_Ex @ stub CM_Reset_Children_Marks @ stub CM_Reset_Children_Marks_Ex @ stub CM_Run_Detection _____
Modified: trunk/reactos/w32api/include/ddk/cfgmgr32.h --- trunk/reactos/w32api/include/ddk/cfgmgr32.h 2005-09-03 18:05:33 UTC (rev 17623) +++ trunk/reactos/w32api/include/ddk/cfgmgr32.h 2005-09-03 19:44:47 UTC (rev 17624) @@ -862,12 +862,55 @@
IN ULONG ulFlags, IN HMACHINE hMachine);
-/* FIXME: Obsolete CM_Get_Class_Name */ -/* FIXME: Obsolete CM_Get_Class_Name_Ex */ +CMAPI +CONFIGRET +WINAPI +CM_Get_Class_NameA( + IN LPGUID ClassGuid, + OUT PCHAR Buffer, + IN OUT PULONG pulLength, + IN ULONG ulFlags);
CMAPI CONFIGRET WINAPI +CM_Get_Class_NameW( + IN LPGUID ClassGuid, + OUT PWCHAR Buffer, + IN OUT PULONG pulLength, + IN ULONG ulFlags); + +CMAPI +CONFIGRET +WINAPI +CM_Get_Class_Name_ExA( + IN LPGUID ClassGuid, + OUT PCHAR Buffer, + IN OUT PULONG pulLength, + IN ULONG ulFlags, + IN HMACHINE hMachine); + +CMAPI +CONFIGRET +WINAPI +CM_Get_Class_Name_ExW( + IN LPGUID ClassGuid, + OUT PWCHAR Buffer, + IN OUT PULONG pulLength, + IN ULONG ulFlags, + IN HMACHINE hMachine); + +#ifdef UNICODE +#define CM_Get_Class_Name CM_Get_Class_NameW +#define CM_Get_Class_Name_Ex CM_Get_Class_Name_ExW +#else +#define CM_Get_Class_Name CM_Get_Class_NameA +#define CM_Get_Class_Name_Ex CM_Get_Class_Name_ExA +#endif /* UNICODE */ + +CMAPI +CONFIGRET +WINAPI CM_Get_Class_Key_NameA( IN LPGUID ClassGuid, OUT LPSTR pszKeyName,