windows_snapshot/operating_system/
storage.rs

1//! The Users subcategory groups classes that represent storage information.
2//! 
3//! | Class                                                                   | Description                                                                                                                                  |
4//! |-------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------|
5//! | [**Win32\_ShadowBy**](/previous-versions/windows/desktop/vsswmi/win32-shadowby)                               | Association class<br/> Represents the association between a shadow copy and the provider that creates the shadow copy.<br/>      |
6//! | [**Win32\_ShadowContext**](/previous-versions/windows/desktop/vsswmi/win32-shadowcontext)                     | Association class<br/> Specifies how a shadow copy is to be created, queried, or deleted.<br/>                                   |
7//! | [**Win32\_ShadowCopy**](/previous-versions/windows/desktop/legacy/aa394428(v=vs.85))                           | Instance class<br/> Represents a duplicate copy of the original volume at a previous time.<br/>                                  |
8//! | [**Win32\_ShadowDiffVolumeSupport**](/previous-versions/windows/desktop/vsswmi/win32-shadowdiffvolumesupport) | Association class<br/> Represents an association between a shadow copy provider and a storage volume.<br/>                       |
9//! | [**Win32\_ShadowFor**](/previous-versions/windows/desktop/vsswmi/win32-shadowfor)                             | Association class<br/> Represents an association between a shadow copy and the volume for which the shadow copy is created.<br/> |
10//! | [**Win32\_ShadowOn**](/previous-versions/windows/desktop/vsswmi/win32-shadowon)                               | Association class<br/> Represents an association between a shadow copy and where the differential data is written.<br/>          |
11//! | [**Win32\_ShadowProvider**](/previous-versions/windows/desktop/vsswmi/win32-shadowprovider)                   | Association class<br/> Represents a component that creates and represents volume shadow copies.<br/>                             |
12//! | [**Win32\_ShadowStorage**](/previous-versions/windows/desktop/legacy/aa394433(v=vs.85))                     | Association class<br/> Represents an association between a shadow copy and where the differential data is written.<br/>          |
13//! | [**Win32\_ShadowVolumeSupport**](/previous-versions/windows/desktop/vsswmi/win32-shadowvolumesupport)         | Association class<br/> Represents an association between a shadow copy provider with a supported volume.<br/>                    |
14//! | [**Win32\_Volume**](/previous-versions/windows/desktop/legacy/aa394515(v=vs.85))                                   | Instance class<br/> Represents an area of storage on a hard disk.<br/>                                                           |
15//! | [**Win32\_VolumeUserQuota**](/previous-versions/windows/desktop/vdswmi/win32-volumeuserquota)                 | Association class<br/> Represents a volume to the per volume quota settings.<br/>                                                |
16
17use crate::update;
18use serde::{Deserialize, Serialize};
19use std::time::SystemTime;
20use wmi::{COMLibrary, WMIConnection, WMIDateTime};
21
22/// Represents the state of Windows ShadowCopys
23#[derive(Deserialize, Serialize, Debug, Clone)]
24pub struct ShadowCopys {
25    /// Represents sequence of `ShadowCopys`
26    pub shadow_copys: Vec<Win32_ShadowCopy>,
27    /// When was the record last updated
28    pub last_updated: SystemTime,
29}
30
31update!(ShadowCopys, shadow_copys);
32
33/// Represents the state of Windows Volumes
34#[derive(Deserialize, Serialize, Debug, Clone)]
35pub struct Volumes {
36    /// Represents sequence of `Volumes`
37    pub volumes: Vec<Win32_Volume>,
38    /// When was the record last updated
39    pub last_updated: SystemTime,
40}
41
42update!(Volumes, volumes);
43
44/// Represents the state of Windows ShadowContexts
45#[derive(Deserialize, Serialize, Debug, Clone)]
46pub struct ShadowContexts {
47    /// Represents sequence of `ShadowContexts`
48    pub shadow_contexts: Vec<Win32_ShadowContext>,
49    /// When was the record last updated
50    pub last_updated: SystemTime,
51}
52
53update!(ShadowContexts, shadow_contexts);
54
55/// Represents the state of Windows ShadowProviders
56#[derive(Deserialize, Serialize, Debug, Clone)]
57pub struct ShadowProviders {
58    /// Represents sequence of `ShadowProviders`
59    pub shadow_providers: Vec<Win32_ShadowProvider>,
60    /// When was the record last updated
61    pub last_updated: SystemTime,
62}
63
64update!(ShadowProviders, shadow_providers);
65
66/// The `Win32_ShadowCopy` class is a storage extent that represents a duplicate copy of the 
67/// original volume at a previous time.
68/// 
69/// <https://learn.microsoft.com/en-us/previous-versions/windows/desktop/legacy/aa394428(v=vs.85)>
70#[derive(Default, Deserialize, Serialize, Debug, Clone)]
71#[allow(non_snake_case)]
72#[allow(non_camel_case_types)]
73pub struct Win32_ShadowCopy {
74    /// Short textual description of the object. 
75    pub Caption: Option<String>,
76    /// Textual description of the object. 
77    pub Description: Option<String>,
78    /// Unique identifier for a shadow copy on the system.
79    pub ID: Option<String>,
80    /// Date and time the object was installed. This property does not need a value to indicate that 
81    /// the object is installed. 
82    pub InstallDate: Option<WMIDateTime>,
83    /// Label by which the object is known. When subclassed, this property can be overridden to be a 
84    /// key property. 
85    pub Name: Option<String>,
86    /// Unique identifier for a shadow copy set to which the shadow belongs.
87    pub SetID: Option<String>,
88    /// Unique identifier for a shadow provider that creates a shadow.
89    pub ProviderID: Option<String>,
90    /// Current status of the object. 
91    /// 
92    /// Values include the following:
93    /// - "OK"
94    /// - "Error"
95    /// - "Degraded"
96    /// - "Unknown"
97    /// - "Pred Fail"
98    /// - "Starting"
99    /// - "Stopping"
100    /// - "Service"
101    /// - "Stressed"
102    /// - "NonRecover"
103    /// - "No Contact"
104    /// - "Lost Comm"
105    pub Status: Option<String>,
106    /// Number of shadow copies in a shadow copy set to which a shadow copy belongs.
107    pub Count: Option<u32>,
108    /// Windows object manager name for an underlying storage device that supports the 
109    /// original volume.
110    pub DeviceObject: Option<String>,
111    /// Name of the original volume for which a shadow copy is made.
112    pub VolumeName: Option<String>,
113    /// Name of the computer that hosts the original volume.
114    pub OriginatingMachine: Option<String>,
115    /// Name of the computer that services the shadow copy.
116    pub ServiceMachine: Option<String>,
117    /// File system name of a shadow copy when it is exposed. The `ExposedName` property might 
118    /// contain a drive letter or mount point. The `ExposedName` property is `NULL` when a shadow 
119    /// copy is hidden or otherwise not exposed.
120    pub ExposedName: Option<String>,
121    /// Current state of a shadow copy.
122    /// 
123    /// Value: Meaning
124    /// - 0: Unknown
125    /// - 1: Preparing
126    /// - 2: ProcessingPrepare
127    /// - 3: Prepared
128    /// - 4: ProcessingPrecommit
129    /// - 5: Precommitted
130    /// - 6: ProcessingCommit
131    /// - 7: Committed
132    /// - 8: ProcessingPostcommit
133    /// - 9: Created
134    /// - 10: Aborted
135    /// - 11: Deleted
136    /// - 12: Count
137    pub State: Option<u32>,
138    /// If `true`, the shadow copy is persistent across reboots.
139    pub Persistent: Option<bool>,
140    /// If `true`, the shadow copy is created by the Windows Previous Versions component.
141    pub ClientAccessible: Option<bool>,
142    /// If `true`, the shadow copy is retained after the requestor process ends. If `false`, the shadow 
143    /// copy is automatically deleted when the requestor process ends.
144    pub NoAutoRelease: Option<bool>,
145    /// If `true`, the shadow copy is created with the involvement of the shadow copy writer components.
146    pub NoWriters: Option<bool>,
147    /// If `true`, the shadow copy can be surfaced on another computer. If `false`, and the volumes are 
148    /// surfaced locally, it may not be possible to surface them later on a different computer.
149    pub Transportable: Option<bool>,
150    /// If `true`, the shadow copy is not currently in the device namespace of a local computer.
151    pub NotSurfaced: Option<bool>,
152    /// If `true`, the shadow copy is created by a hardware shadow copy provider.
153    pub HardwareAssisted: Option<bool>,
154    /// If `true`, the shadow copy is created by a differential shadow copy provider. The provider 
155    /// can be implemented in hardware or software.
156    pub Differential: Option<bool>,
157    /// If `true`, the shadow copy is created by a split mirror shadow copy provider. The provider 
158    /// can be implemented in hardware or software.
159    pub Plex: Option<bool>,
160    /// If `true`, the shadow copy is imported to a computer by using the `Import` method and is not 
161    /// created by using the `Create` method.
162    pub Imported: Option<bool>,
163    /// If `true`, the shadow copy is exposed on a remote computer with a network share. If `ExposedRemotely` 
164    /// and `ExposedLocally` are not set, the shadow copy is hidden.
165    pub ExposedRemotely: Option<bool>,
166    /// If `true`, the shadow copy is exposed on the local computer with a drive letter or mount point. 
167    /// If `ExposedLocally` and `ExposedRemotely` are not set, the shadow copy is hidden.
168    pub ExposedLocally: Option<bool>,
169}
170
171/// The `Win32_Volume` class represents an area of storage on a hard disk. The class returns local volumes 
172/// that are formatted, unformatted, mounted, or offline. A volume is formatted by using a file system, 
173/// such as FAT or NTFS, and might have a drive letter assigned to it. One hard disk can have multiple 
174/// volumes, and volumes can span multiple physical disks. The `Win32_Volume` class does not support disk 
175/// drive management.
176///
177/// Windows XP and earlier: This class is not available.
178/// 
179/// Note: This class has been repeated in File System as well. 
180/// 
181/// <https://learn.microsoft.com/en-us/previous-versions/windows/desktop/legacy/aa394515(v=vs.85)>
182#[derive(Default, Deserialize, Serialize, Debug, Clone)]
183#[allow(non_snake_case)]
184#[allow(non_camel_case_types)]
185pub struct Win32_Volume {
186    /// Describes whether the media is readable.
187    /// 
188    /// This can be one of the following values.
189    /// 
190    /// Value: Meaning
191    /// - 0 (0x0): Unknown media.
192    /// - 1 (0x1): The media is readable.
193    /// - 2 (0x2): The media is writable.
194    /// - 3 (0x3): The media is readable and writable.
195    /// - 4 (0x4): "Write once" media.
196    pub Access: Option<u16>,
197    /// If true, the volume is mounted to the file system automatically when the first I/O is issued. 
198    /// If false, the volume is not mounted until explicitly mounted by using the `Mount` method, or 
199    /// by adding a drive letter or mount point.
200    pub Automount: Option<bool>,
201    /// Describes the availability and status of the device. Inherited from CIM_LogicalDevice. 
202    /// 
203    /// This can be one of the following values.
204    /// 
205    /// Value: Meaning
206    /// - 1 (0x1): Other
207    /// - 2 (0x2): Unknown
208    /// - 3 (0x3): Running or Full Power
209    /// - 4 (0x4): Warning
210    /// - 5 (0x5): In Test
211    /// - 6 (0x6): Not Applicable
212    /// - 7 (0x7): Power Off
213    /// - 8 (0x8): Offline
214    /// - 9 (0x9): Off Duty
215    /// - 10 (0xA): Degraded
216    /// - 11 (0xB): Not Installed
217    /// - 12 (0xC): Install Error
218    /// - 13 (0xD): Power Save - Unknown [The device is known to be in a power save mode, but its exact status is unknown]
219    /// - 14 (0xE): Power Save - Low Power Mode [The device is in a power save state, but still functioning, and may exhibit degraded performance]
220    /// - 15 (0xF):	Power Save - Standby [The device is not functioning, but could be brought to full power quickly]
221    /// - 16 (0x10): Power Cycle
222    /// - 17 (0x11): Power Save - Warning [The device is in a warning state, but also in a power save mode]
223    /// - 18 (0x12): Paused
224    /// - 19 (0x13): Not Ready
225    /// - 20 (0x14): Not Configured
226    /// - 21 (0x15): Quiesced
227    pub Availability: Option<u16>,
228    /// Size in bytes of the blocks in this storage extent. If there is a variable block size, then 
229    /// the maximum block size in bytes is specified. If the block size is unknown or if a block 
230    /// concept is not valid (for example, for Aggregate Extents, Memory, or LogicalDisks), the value 
231    /// is 1 (one). 
232    pub BlockSize: Option<u64>,
233    /// Size of the volume in bytes.
234    pub Capacity: Option<u64>,
235    /// A short description of the area of storage. 
236    pub Caption: Option<String>,
237    /// If `true`, the volume exists as one compressed entity, such as a DoubleSpace volume. If file-based 
238    /// compression is supported, such as the NTFS file system, this property is `false`.
239    pub Compressed: Option<bool>,
240    /// Indicates the Win32 Configuration Manager error code. This can be one of the following values.
241    /// 
242    /// Value: Meaning
243    /// - 0 (0x0): This device is working properly.
244    /// - 1 (0x1): This device is not configured correctly.
245    /// - 2 (0x2): Windows cannot load the driver for this device.
246    /// - 3 (0x3): The driver for this device might be corrupted, or your system may be running low on memory or other resources.
247    /// - 4 (0x4): This device is not working properly. One of its drivers or your registry might be corrupted.
248    /// - 5 (0x5): The driver for this device needs a resource that Windows cannot manage.
249    /// - 6 (0x6): The boot configuration for this device conflicts with other devices.
250    /// - 7 (0x7): Cannot filter.
251    /// - 8 (0x8): The driver loader for the device is missing.
252    /// - 9 (0x9): This device is not working properly because the controlling firmware is reporting the resources for the device incorrectly.
253    /// - 10 (0xA): This device cannot start.
254    /// - 11 (0xB): This device failed.
255    /// - 12 (0xC): This device cannot find enough free resources that it can use.
256    /// - 13 (0xD): Windows cannot verify this device's resources.
257    /// - 14 (0xE): This device cannot work properly until you restart your computer.
258    /// - 15 (0xF): This device is not working properly because there is probably a re-enumeration problem.
259    /// - 16 (0x10): Windows cannot identify all the resources this device uses.
260    /// - 17 (0x11): This device is asking for an unknown resource type.
261    /// - 18 (0x12): Reinstall the drivers for this device.
262    /// - 19 (0x13): Failure using the VxD loader.
263    /// - 20 (0x14): Your registry might be corrupted.
264    /// - 21 (0x15): System failure. Try changing the driver for this device. If that does not work, see your hardware documentation. Windows is removing this device.
265    /// - 22 (0x16): This device is disabled.
266    /// - 23 (0x17): System failure. Try changing the driver for this device. If that does not work, see your hardware documentation.
267    /// - 24 (0x18): This device is not present, is not working properly, or does not have all of its drivers installed.
268    /// - 25 (0x19): Windows is still setting up this device.
269    /// - 26 (0x1A): Windows is still setting up this device.
270    /// - 27 (0x1B): This device does not have a valid log configuration.
271    /// - 28 (0x1C): The drivers for this device are not installed.
272    /// - 29 (0x1D): This device is disabled because the firmware of the device did not give it the required resources.
273    /// - 30 (0x1E): This device is using an Interrupt Request resource that another device is using.
274    /// - 31 (0x1F): This device is not working properly because Windows cannot load the drivers required for this device.
275    pub ConfigManagerErrorCode: Option<u32>,
276    /// If `True`, the device is using a user-defined configuration. Otherwise, `False`.
277    pub ConfigManagerUserConfig: Option<bool>,
278    /// Indicates the name of the class or the subclass used in the creation of an instance of this class. 
279    /// When used with the other key properties of this class, this property allows all instances of this 
280    /// class and its subclasses to be uniquely identified.
281    pub CreationClassName: Option<String>,
282    /// A description of the object. 
283    pub Description: Option<String>,
284    /// Unique identifier for the volume on this system.
285    pub DeviceID: Option<String>,
286    /// If `true`, the Chkdsk method is automatically run by the system at the next restart.
287    pub DirtyBitSet: Option<bool>,
288    /// Drive letter assigned to a volume. This property is `NULL` for volumes without drive letters.
289    pub DriveLetter: Option<String>,
290    /// Numeric value that corresponds to the type of disk drive that this logical disk represents.
291    /// 
292    /// The values are:
293    /// 
294    /// Value: Meaning
295    /// - 0 (0x0): Unknown
296    /// - 1 (0x1): No Root Directory
297    /// - 2 (0x2): Removable Disk
298    /// - 3 (0x3): Local Disk
299    /// - 4 (0x4): Network Drive
300    /// - 5 (0x5): Compact Disk
301    /// - 6 (0x6): RAM Disk
302    pub DriveType: Option<u32>,
303    /// If `True`, the error reported in `LastErrorCode` is now cleared. 
304    pub ErrorCleared: Option<bool>,
305    /// More information about the error recorded in `LastErrorCode`, and information on any corrective 
306    /// actions that may be taken. 
307    pub ErrorDescription: Option<String>,
308    /// Type of error detection and correction supported by this storage extent. 
309    pub ErrorMethodology: Option<String>,
310    /// File system on the logical disk.
311    /// 
312    /// Example: NTFS
313    pub FileSystem: Option<String>,
314    /// Space, in bytes, available on the logical disk. 
315    pub FreeSpace: Option<u64>,
316    /// If `true`, context indexing is enabled.
317    pub IndexingEnabled: Option<bool>,
318    /// Date and time the object was installed. This property does not require a value to indicate that 
319    /// the object is installed.
320    pub InstallDate: Option<WMIDateTime>,
321    /// Volume name of the logical disk. This property is `null` for volumes without a label. For FAT 
322    /// and FAT32 systems, the maximum length is 11 characters. For NTFS file systems, the maximum 
323    /// length is 32 characters.
324    pub Label: Option<String>,
325    /// Last error code reported by the logical device.
326    pub LastErrorCode: Option<u32>,
327    /// Maximum length, in characters, of a filename component supported by a Windows drive. A filename 
328    /// component is the portion of a filename between backslashes. This value can be used to indicate 
329    /// that long names are supported by the file system. For example, for a FAT file system that supports 
330    /// long names, the property stores the value 255—not the previous 8.3 indicator. Long names can be 
331    /// supported on systems that use the NTFS file system.
332    /// 
333    /// Example: 255
334    pub MaximumFileNameLength: Option<u32>,
335    /// Label by which the object is known. When subclassed, this property can be overridden to be a key 
336    /// property.
337    pub Name: Option<String>,
338    /// Total number of consecutive blocks, each block the size of the value contained in the `BlockSize` 
339    /// property, which form this storage extent. Total size of the storage extent can be calculated by 
340    /// multiplying the value of the `BlockSize` property by the value of this property. If the value of 
341    /// `BlockSize` is 1, this property is the total size of the storage extent.
342    pub NumberOfBlocks: Option<u64>,
343    /// Indicates the Win32 Plug and Play device ID of the logical device. Example: *PNP030b.
344    pub PNPDeviceID: Option<String>,
345    /// Indicates the specific power-related capabilities of the logical device. This can be one of the 
346    /// following values.
347    /// 
348    /// Value: Meaning
349    /// - 0 (0x0): Unknown
350    /// - 1 (0x1): Not Supported
351    /// - 2 (0x2): Disabled
352    /// - 3 (0x3): Enabled [The power management features are currently enabled but the exact feature set is unknown or the information is unavailable]
353    /// - 4 (0x4): Power Saving Modes Entered Automatically [The device can change its power state based on usage or other criteria]
354    /// - 5 (0x5): Power State Settable [The SetPowerState method is supported. This method is found on the parent CIM_LogicalDevice class and can be implemented. For more information, see Designing Managed Object Format (MOF) Classes]
355    /// - 6 (0x6): Power Cycling Supported [The SetPowerState method can be invoked with the PowerState parameter set to 5 (Power Cycle)]
356    /// - 7 (0x7): Timed Power-On Supported [The SetPowerState method can be invoked with the PowerState parameter set to 5 (Power Cycle) and Time set to a specific date and time, or interval, for power-on]
357    pub PowerManagementCapabilities: Option<Vec<u16>>,
358    /// `True`, if the device can be power managed (put into a power save state), otherwise `False`. This 
359    /// boolean does not indicate that power management features are currently enabled, or if enabled, 
360    /// what features are supported. Refer to the PowerManagementCapabilities array for this information. 
361    /// If this boolean is false, the integer value 1, for the string, "Not Supported", should be the only 
362    /// entry in the PowerManagementCapabilities array. 
363    pub PowerManagementSupported: Option<bool>,
364    /// Describes the media and its use.
365    pub Purpose: Option<String>,
366    /// If `true`, quota management is enabled for this volume.
367    pub QuotasEnabled: Option<bool>,
368    /// If `true`, quota management was used but is disabled. Incomplete refers to the information left in 
369    /// the file system after quota management is disabled.
370    pub QuotasIncomplete: Option<bool>,
371    /// If `true`, the file system is in the process of compiling information and setting the disk up for 
372    /// quota management.
373    pub QuotasRebuilding: Option<bool>,
374    /// Current status of the object. Various operational and nonoperational statuses can be defined. 
375    /// Operational statuses include: "OK", "Degraded", and "Pred Fail" (an element, such as a SMART-enabled 
376    /// hard disk drive, may be functioning properly but predicting a failure in the near future). 
377    /// Nonoperational statuses include: "Error", "Starting", "Stopping", and "Service". The latter, "Service", 
378    /// could apply during mirror-resilvering of a disk, reload of a user permissions list, or other 
379    /// administrative work. Not all such work is online, yet the managed element is neither "OK" nor in 
380    /// one of the other states. 
381    /// 
382    /// The values are:
383    /// - "OK"
384    /// - "Error"
385    /// - "Degraded"
386    /// - "Unknown"
387    /// - "Pred Fail"
388    /// - "Starting"
389    /// - "Stopping"
390    /// - "Service"
391    /// - "Stressed"
392    /// - "NonRecover"
393    /// - "No Contact"
394    /// - "Lost Comm"
395    pub Status: Option<String>,
396    /// Indicates the state of the logical device. This can be one of the following values.
397    /// 
398    /// Value	Meaning
399    /// - 1 (0x1): Other
400    /// - 2 (0x2): Unknown
401    /// - 3 (0x3): Enabled
402    /// - 4 (0x4): Disabled
403    /// - 5 (0x5): Not Applicable
404    pub StatusInfo: Option<u16>,
405    /// Indicates the system's creation class name.
406    pub SystemCreationClassName: Option<String>,
407    /// Indicates the system's name.
408    pub SystemName: Option<String>,
409    /// Serial number of the volume.
410    /// 
411    /// Example: A8C3D032
412    pub SerialNumber: Option<u32>,
413    /// If `true`, the volume supports disk quotas.
414    pub SupportsDiskQuotas: Option<bool>,
415    /// If `True`, the logical disk partition supports file-based compression, such as is the case 
416    /// with the NTFS file system. This property is `False` when the `Compressed` property is `True`.
417    pub SupportsFileBasedCompression: Option<bool>,
418}
419
420/// The `Win32_ShadowContext` class specifies how a shadow copy is to be created, queried, or deleted, 
421/// and the degree of writer involvement.
422/// 
423/// <https://learn.microsoft.com/en-us/previous-versions/windows/desktop/vsswmi/win32-shadowcontext>
424#[derive(Default, Deserialize, Serialize, Debug, Clone)]
425#[allow(non_snake_case)]
426#[allow(non_camel_case_types)]
427pub struct Win32_ShadowContext {
428    /// Name of the context.
429    pub Name: Option<String>,
430    /// If `true`, the shadow copy persists across restarts.
431    pub Persistent: Option<bool>,
432    /// If `true`, the shadow copy is created by the Windows Previous Versions component.
433    pub ClientAccessible: Option<bool>,
434    /// If `true`, the shadow copy is retained after the requestor process ends. If `false`, the shadow 
435    /// copy is automatically deleted when the shadow copy requestor process ends.
436    pub NoAutoRelease: Option<bool>,
437    /// If `true`, the shadow copy is created without involvement of shadow copy writer components.
438    pub NoWriters: Option<bool>,
439    /// If `true`, the shadow copy can be surfaced on another computer. If `false`, and the volumes are 
440    /// surfaced locally, it may not be possible to surface them later on a different computer.
441    pub Transportable: Option<bool>,
442    /// If `true`, the shadow copy is not currently in the device namespace of the local computer.
443    pub NotSurfaced: Option<bool>,
444    /// If `true`, the shadow copy is created by a hardware shadow copy provider.
445    pub HardwareAssisted: Option<bool>,
446    /// If `true`, the shadow copy is created by a differential shadow copy provider. The provider can be 
447    /// implemented in hardware or software.
448    pub Differential: Option<bool>,
449    /// If `true`, the shadow copy is created by a split-mirror shadow copy provider.
450    pub Plex: Option<bool>,
451    /// If `true`, the shadow copy is imported to a computer by using the `Import` method and is not created 
452    /// by using the `Create` method.
453    pub Imported: Option<bool>,
454    /// If `true`, the shadow copy is exposed on a remote computer with a network share. If both 
455    /// `ExposedRemotely` and `ExposedLocally` are `false`, the shadow copy is hidden.
456    pub ExposedRemotely: Option<bool>,
457    /// If `true`, the shadow copy is exposed on a remote computer with a network share. If both 
458    /// `ExposedLocally` and `ExposedRemotely` are `false`, the shadow copy is hidden.
459    pub ExposedLocally: Option<bool>,
460}
461
462/// Typically, the `Win32_ShadowProvider` class represents a component that is a combination of user-mode 
463/// and kernel or firmware implementation, that creates and represents volume shadow copies.
464/// 
465/// <https://learn.microsoft.com/en-us/previous-versions/windows/desktop/vsswmi/win32-shadowprovider>
466#[derive(Default, Deserialize, Serialize, Debug, Clone)]
467#[allow(non_snake_case)]
468#[allow(non_camel_case_types)]
469pub struct Win32_ShadowProvider {
470    /// Uniquely identifies the shadow provider on a system.
471    pub ID: Option<String>,
472    /// Descriptive name of a provider.
473    pub Name: Option<String>,
474    /// Common Object Model (COM) class ID registered for a shadow provider.
475    pub CLSID: Option<String>,
476    /// Specifies the class to which a shadow provider belongs.
477    /// 
478    /// Possible values:
479    /// 
480    /// Value: Meaning
481    /// - 0: Unknown
482    /// - 1: System
483    /// - 2: Software
484    /// - 3: Hardware
485    pub Type: Option<u32>,
486    /// Text representation of a shadow provider version.
487    pub Version: Option<String>,
488    /// Numeric representation of a shadow provider version.
489    pub VersionID: Option<String>,
490}