Disponibilidad de Win32_MountPoint y Win32_Volume en Windows XP?

De los artículos de MSDN que he encontrado:http://msdn.microsoft.com/en-us/library/aa394515(v=VS.85).aspx - Win32_Volume y Win32_MountPoint no están disponibles en Windows XP.

Sin embargo, estoy desarrollando una aplicación C # en Windows XP (64 bits), y puedo llegar a esas clases de WMI muy bien. Los usuarios de mi aplicación estarán en Windows XP sp2 con .Net 3.5 sp1.

Buscando en Google, no puedo determinar si puedo contar con esto o no. ¿Tengo éxito en mi sistema debido a uno o más de los siguientes: - Windows XP Service Pack 2? - Visual Studio 2008 SP1 fue instalado? - .Net 3.5 sp1?

¿Debo usar algo que no sea WMI para obtener la información de volumen / punto de montaje?

A continuación se muestra el código de muestra que está funcionando ...

    public static Dictionary<string, NameValueCollection> GetAllVolumeDeviceIDs()
    {
        Dictionary<string, NameValueCollection> ret = new Dictionary<string, NameValueCollection>();

        // retrieve information from Win32_Volume
        try
        {
            using (ManagementClass volClass = new ManagementClass("Win32_Volume"))
            {
                using (ManagementObjectCollection mocVols = volClass.GetInstances())
                {
                    // iterate over every volume
                    foreach (ManagementObject moVol in mocVols)
                    {
                        // get the volume's device ID (will be key into our dictionary)                            
                        string devId = moVol.GetPropertyValue("DeviceID").ToString();

                        ret.Add(devId,  new NameValueCollection());

                        //Console.WriteLine("Vol: {0}", devId);

                        // for each non-null property on the Volume, add it to our NameValueCollection
                        foreach (PropertyData p in moVol.Properties)
                        {
                            if (p.Value == null)
                                continue;
                            ret[devId].Add(p.Name, p.Value.ToString());
                            //Console.WriteLine("\t{0}: {1}", p.Name, p.Value);
                        }

                        // find the mountpoints of this volume
                        using (ManagementObjectCollection mocMPs = moVol.GetRelationships("Win32_MountPoint"))
                        {
                            foreach (ManagementObject moMP in mocMPs)
                            {
                                // only care about adding directory
                                // Directory prop will be something like "Win32_Directory.Name=\"C:\\\\\""
                                string dir = moMP["Directory"].ToString();

                                // find opening/closing quotes in order to get the substring we want
                                int first = dir.IndexOf('"') + 1;
                                int last = dir.LastIndexOf('"');
                                string dirSubstr = dir.Substring(first , last - first);

                                // use GetFullPath to normalize/unescape any extra backslashes
                                string fullpath = Path.GetFullPath(dirSubstr);

                                ret[devId].Add(MOUNTPOINT_DIRS_KEY, fullpath);

                            }
                        }
                    }
                }
            }
        }
        catch (Exception ex)
        {
            Console.WriteLine("Problem retrieving Volume information from WMI. {0} - \n{1}",ex.Message,ex.StackTrace);
            return ret;
        }

        return ret;

    }

Respuestas a la pregunta(2)

Su respuesta a la pregunta