bool MyGetLogicalDriveStrings(CSysStringVector &driveStrings) { driveStrings.Clear(); UINT32 size = GetLogicalDriveStrings(0, NULL); if (size == 0) return false; CSysString buffer; UINT32 newSize = GetLogicalDriveStrings(size, buffer.GetBuffer(size)); if (newSize == 0) return false; if (newSize > size) return false; CSysString string; for (UINT32 i = 0; i < newSize; i++) { TCHAR c = buffer[i]; if (c == TEXT('\0')) { driveStrings.Add(string); string.Empty(); } else string += c; } if (!string.IsEmpty()) return false; return true; }
LONG CKey::EnumKeys(CSysStringVector &keyNames) { keyNames.Clear(); CSysString keyName; for (UInt32 index = 0; ; index++) { const UInt32 kBufferSize = MAX_PATH + 1; // 256 in ATL FILETIME lastWriteTime; UInt32 nameSize = kBufferSize; LONG result = ::RegEnumKeyEx(_object, index, keyName.GetBuffer(kBufferSize), (DWORD *)&nameSize, NULL, NULL, NULL, &lastWriteTime); keyName.ReleaseBuffer(); if (result == ERROR_NO_MORE_ITEMS) break; if (result != ERROR_SUCCESS) return result; keyNames.Add(keyName); } return ERROR_SUCCESS; }