Fix access rights when opening registry keys

Better traces

svn path=/trunk/; revision=19519
This commit is contained in:
Hervé Poussineau 2005-11-24 09:11:44 +00:00
parent 1361420584
commit c4cc828696

View file

@ -149,13 +149,14 @@ BOOL WINAPI SetupDiBuildClassInfoListExW(
LONG lError; LONG lError;
DWORD dwGuidListIndex = 0; DWORD dwGuidListIndex = 0;
TRACE("\n"); TRACE("0x%lx %p %lu %p %s %p\n", Flags, ClassGuidList,
ClassGuidListSize, RequiredSize, debugstr_w(MachineName), Reserved);
if (RequiredSize != NULL) if (RequiredSize != NULL)
*RequiredSize = 0; *RequiredSize = 0;
hClassesKey = SetupDiOpenClassRegKeyExW(NULL, hClassesKey = SetupDiOpenClassRegKeyExW(NULL,
KEY_ALL_ACCESS, KEY_ENUMERATE_SUB_KEYS,
DIOCR_INSTALLER, DIOCR_INSTALLER,
MachineName, MachineName,
Reserved); Reserved);
@ -178,12 +179,12 @@ BOOL WINAPI SetupDiBuildClassInfoListExW(
TRACE("RegEnumKeyExW() returns %ld\n", lError); TRACE("RegEnumKeyExW() returns %ld\n", lError);
if (lError == ERROR_SUCCESS || lError == ERROR_MORE_DATA) if (lError == ERROR_SUCCESS || lError == ERROR_MORE_DATA)
{ {
TRACE("Key name: %p\n", szKeyName); TRACE("Key name: %s\n", debugstr_w(szKeyName));
if (RegOpenKeyExW(hClassesKey, if (RegOpenKeyExW(hClassesKey,
szKeyName, szKeyName,
0, 0,
KEY_ALL_ACCESS, KEY_QUERY_VALUE,
&hClassKey)) &hClassKey))
{ {
RegCloseKey(hClassesKey); RegCloseKey(hClassesKey);
@ -230,14 +231,14 @@ BOOL WINAPI SetupDiBuildClassInfoListExW(
RegCloseKey(hClassKey); RegCloseKey(hClassKey);
TRACE("Guid: %p\n", szKeyName); TRACE("Guid: %s\n", debugstr_w(szKeyName));
if (dwGuidListIndex < ClassGuidListSize) if (dwGuidListIndex < ClassGuidListSize)
{ {
if (szKeyName[0] == L'{' && szKeyName[37] == L'}') if (szKeyName[0] == L'{' && szKeyName[37] == L'}')
{ {
szKeyName[37] = 0; szKeyName[37] = 0;
} }
TRACE("Guid: %p\n", &szKeyName[1]); TRACE("Guid: %s\n", debugstr_w(&szKeyName[1]));
UuidFromStringW(&szKeyName[1], UuidFromStringW(&szKeyName[1],
&ClassGuidList[dwGuidListIndex]); &ClassGuidList[dwGuidListIndex]);
@ -355,6 +356,9 @@ BOOL WINAPI SetupDiClassGuidsFromNameExW(
LONG lError; LONG lError;
DWORD dwGuidListIndex = 0; DWORD dwGuidListIndex = 0;
TRACE("%s %p %lu %p %s %p\n", debugstr_w(ClassName), ClassGuidList,
ClassGuidListSize, RequiredSize, debugstr_w(MachineName), Reserved);
if (RequiredSize != NULL) if (RequiredSize != NULL)
*RequiredSize = 0; *RequiredSize = 0;
@ -382,7 +386,7 @@ BOOL WINAPI SetupDiClassGuidsFromNameExW(
TRACE("RegEnumKeyExW() returns %ld\n", lError); TRACE("RegEnumKeyExW() returns %ld\n", lError);
if (lError == ERROR_SUCCESS || lError == ERROR_MORE_DATA) if (lError == ERROR_SUCCESS || lError == ERROR_MORE_DATA)
{ {
TRACE("Key name: %p\n", szKeyName); TRACE("Key name: %s\n", debugstr_w(szKeyName));
if (RegOpenKeyExW(hClassesKey, if (RegOpenKeyExW(hClassesKey,
szKeyName, szKeyName,
@ -402,20 +406,20 @@ BOOL WINAPI SetupDiClassGuidsFromNameExW(
(LPBYTE)szClassName, (LPBYTE)szClassName,
&dwLength)) &dwLength))
{ {
TRACE("Class name: %p\n", szClassName); TRACE("Class name: %s\n", debugstr_w(szClassName));
if (strcmpiW(szClassName, ClassName) == 0) if (strcmpiW(szClassName, ClassName) == 0)
{ {
TRACE("Found matching class name\n"); TRACE("Found matching class name\n");
TRACE("Guid: %p\n", szKeyName); TRACE("Guid: %s\n", debugstr_w(szKeyName));
if (dwGuidListIndex < ClassGuidListSize) if (dwGuidListIndex < ClassGuidListSize)
{ {
if (szKeyName[0] == L'{' && szKeyName[37] == L'}') if (szKeyName[0] == L'{' && szKeyName[37] == L'}')
{ {
szKeyName[37] = 0; szKeyName[37] = 0;
} }
TRACE("Guid: %p\n", &szKeyName[1]); TRACE("Guid: %s\n", debugstr_w(&szKeyName[1]));
UuidFromStringW(&szKeyName[1], UuidFromStringW(&szKeyName[1],
&ClassGuidList[dwGuidListIndex]); &ClassGuidList[dwGuidListIndex]);
@ -520,6 +524,9 @@ BOOL WINAPI SetupDiClassNameFromGuidExW(
DWORD dwLength; DWORD dwLength;
LONG rc; LONG rc;
TRACE("%s %p %lu %p %s %p\n", debugstr_guid(ClassGuid), ClassName,
ClassNameSize, RequiredSize, debugstr_w(MachineName), Reserved);
hKey = SetupDiOpenClassRegKeyExW(ClassGuid, hKey = SetupDiOpenClassRegKeyExW(ClassGuid,
KEY_QUERY_VALUE, KEY_QUERY_VALUE,
DIOCR_INSTALLER, DIOCR_INSTALLER,
@ -590,7 +597,8 @@ SetupDiCreateDeviceInfoListExA(const GUID *ClassGuid,
LPWSTR MachineNameW = NULL; LPWSTR MachineNameW = NULL;
HDEVINFO hDevInfo; HDEVINFO hDevInfo;
TRACE("%p %p %s %p\n", ClassGuid, hwndParent, MachineName, Reserved); TRACE("%s %p %s %p\n", debugstr_guid(ClassGuid), hwndParent,
debugstr_a(MachineName), Reserved);
if (MachineName) if (MachineName)
{ {
@ -623,7 +631,8 @@ SetupDiCreateDeviceInfoListExW(const GUID *ClassGuid,
//CONFIGRET cr; //CONFIGRET cr;
HDEVINFO ret = (HDEVINFO)INVALID_HANDLE_VALUE;; HDEVINFO ret = (HDEVINFO)INVALID_HANDLE_VALUE;;
TRACE("%p %p %S %p\n", ClassGuid, hwndParent, MachineName, Reserved); TRACE("%s %p %s %p\n", debugstr_guid(ClassGuid), hwndParent,
debugstr_w(MachineName), Reserved);
list = HeapAlloc(GetProcessHeap(), 0, sizeof(struct DeviceInfoSet)); list = HeapAlloc(GetProcessHeap(), 0, sizeof(struct DeviceInfoSet));
if (!list) if (!list)
@ -817,6 +826,9 @@ BOOL WINAPI SetupDiGetActualSectionToInstallW(
DWORD dwFullLength; DWORD dwFullLength;
LONG lLineCount = -1; LONG lLineCount = -1;
TRACE("%p %s %p %lu %p %p\n", InfHandle, debugstr_w(InfSectionName),
InfSectionWithExt, InfSectionWithExtSize, RequiredSize, Extension);
lstrcpyW(szBuffer, InfSectionName); lstrcpyW(szBuffer, InfSectionName);
dwLength = lstrlenW(szBuffer); dwLength = lstrlenW(szBuffer);
@ -977,8 +989,11 @@ BOOL WINAPI SetupDiGetClassDescriptionExW(
HKEY hKey; HKEY hKey;
DWORD dwLength; DWORD dwLength;
TRACE("%s %p %lu %p %s %p\n", debugstr_guid(ClassGuid), ClassDescription,
ClassDescriptionSize, RequiredSize, debugstr_w(MachineName), Reserved);
hKey = SetupDiOpenClassRegKeyExW(ClassGuid, hKey = SetupDiOpenClassRegKeyExW(ClassGuid,
KEY_ALL_ACCESS, KEY_QUERY_VALUE,
DIOCR_INSTALLER, DIOCR_INSTALLER,
MachineName, MachineName,
Reserved); Reserved);
@ -1967,7 +1982,7 @@ BOOL WINAPI SetupDiGetDeviceInterfaceDetailA(
DWORD sizeW = 0, sizeA; DWORD sizeW = 0, sizeA;
BOOL ret = FALSE; BOOL ret = FALSE;
TRACE("(%p, %p, %p, %ld, %p, %p)\n", DeviceInfoSet, TRACE("%p %p %p %lu %p %p\n", DeviceInfoSet,
DeviceInterfaceData, DeviceInterfaceDetailData, DeviceInterfaceData, DeviceInterfaceDetailData,
DeviceInterfaceDetailDataSize, RequiredSize, DeviceInfoData); DeviceInterfaceDetailDataSize, RequiredSize, DeviceInfoData);
@ -2036,7 +2051,7 @@ BOOL WINAPI SetupDiGetDeviceInterfaceDetailW(
struct DeviceInfoSet *list; struct DeviceInfoSet *list;
BOOL ret = FALSE; BOOL ret = FALSE;
TRACE("(%p, %p, %p, %ld, %p, %p): stub\n", DeviceInfoSet, TRACE("%p %p %p %lu %p %p\n", DeviceInfoSet,
DeviceInterfaceData, DeviceInterfaceDetailData, DeviceInterfaceData, DeviceInterfaceDetailData,
DeviceInterfaceDetailDataSize, RequiredSize, DeviceInfoData); DeviceInterfaceDetailDataSize, RequiredSize, DeviceInfoData);
@ -2579,7 +2594,7 @@ static HKEY CreateClassKey(HINF hInf)
0, 0,
NULL, NULL,
REG_OPTION_NON_VOLATILE, REG_OPTION_NON_VOLATILE,
KEY_ALL_ACCESS, KEY_SET_VALUE,
NULL, NULL,
&hClassKey, &hClassKey,
NULL)) NULL))
@ -2618,6 +2633,9 @@ BOOL WINAPI SetupDiInstallClassW(
BOOL bFileQueueCreated = FALSE; BOOL bFileQueueCreated = FALSE;
HKEY hClassKey; HKEY hClassKey;
TRACE("%p %s 0x%lx %p\n", hwndParent, debugstr_w(InfFileName),
Flags, FileQueue);
FIXME("not fully implemented\n"); FIXME("not fully implemented\n");
if ((Flags & DI_NOVCP) && (FileQueue == NULL || FileQueue == INVALID_HANDLE_VALUE)) if ((Flags & DI_NOVCP) && (FileQueue == NULL || FileQueue == INVALID_HANDLE_VALUE))
@ -2763,6 +2781,9 @@ HKEY WINAPI SetupDiOpenClassRegKeyExW(
DWORD rc; DWORD rc;
LPCWSTR lpKeyName; LPCWSTR lpKeyName;
TRACE("%s 0x%lx 0x%lx %s %p\n", debugstr_guid(ClassGuid), samDesired,
Flags, debugstr_w(MachineName), Reserved);
if (Flags == DIOCR_INSTALLER) if (Flags == DIOCR_INSTALLER)
{ {
lpKeyName = ControlClass; lpKeyName = ControlClass;
@ -2793,7 +2814,7 @@ HKEY WINAPI SetupDiOpenClassRegKeyExW(
rc = RegOpenKeyExW(HKLM, rc = RegOpenKeyExW(HKLM,
lpKeyName, lpKeyName,
0, 0,
KEY_ALL_ACCESS, ClassGuid ? KEY_ENUMERATE_SUB_KEYS : samDesired,
&hClassesKey); &hClassesKey);
if (MachineName != NULL) RegCloseKey(HKLM); if (MachineName != NULL) RegCloseKey(HKLM);
if (rc != ERROR_SUCCESS) if (rc != ERROR_SUCCESS)
@ -2829,7 +2850,7 @@ HKEY WINAPI SetupDiOpenClassRegKeyExW(
rc = RegOpenKeyExW(hClassesKey, rc = RegOpenKeyExW(hClassesKey,
lpFullGuidString, lpFullGuidString,
0, 0,
KEY_ALL_ACCESS, samDesired,
&hClassKey); &hClassKey);
if (rc != ERROR_SUCCESS) if (rc != ERROR_SUCCESS)
{ {