public void Initialize(IntPtr hRegKey, [MarshalAs(UnmanagedType.LPWStr)] string volume, out IntPtr pwszDisplayName,
                        out IntPtr pwszDescription, ref EmptyVolumeCacheFlags flags)
 {
     // Deliberately not implemented; this should never be called by Windows, as InitializeEx() is preferred.
     throw new NotImplementedException();
 }
 public void Deactivate(out EmptyVolumeCacheFlags flags)
 {
     flags = 0;
 }
        public void InitializeEx(IntPtr hRegKey, [MarshalAs(UnmanagedType.LPWStr)] string volume, [MarshalAs(UnmanagedType.LPWStr)] string keyName,
                                 out IntPtr pwszDisplayName, out IntPtr pwszDescription, out IntPtr pwszButtonText, ref EmptyVolumeCacheFlags flags)
        {
            VolumeName        = volume;
            DiskSpaceCritical = flags.HasFlag(EmptyVolumeCacheFlags.EVCF_OUTOFDISKSPACE);

            ProviderSettings settings = Initialize();

            pwszButtonText  = Marshal.StringToCoTaskMemUni(settings.ButtonText);
            pwszDescription = Marshal.StringToCoTaskMemUni(settings.Description);
            pwszDisplayName = Marshal.StringToCoTaskMemUni(settings.DisplayName);

            if (settings.DisplayButton)
            {
                flags |= EmptyVolumeCacheFlags.EVCF_HASSETTINGS;
            }
            if (settings.EnableByDefault)
            {
                flags |= EmptyVolumeCacheFlags.EVCF_ENABLEBYDEFAULT | EmptyVolumeCacheFlags.EVCF_ENABLEBYDEFAULT_AUTO;
            }
            if (settings.NoShowIfSpaceZero)
            {
                flags |= EmptyVolumeCacheFlags.EVCF_DONTSHOWIFZERO;
            }
        }