Freigeben über


IVdsPack::CreateVolume-Methode (vds.h)

[Ab Windows 8 und Windows Server 2012 wird die COM-Schnittstelle des Virtuellen Datenträgerdiensts durch die Windows Storage Management-API abgelöst.]

Erstellt ein Volume innerhalb des Pakets. Der Schnittstellenzeiger für das neue Volumeobjekt kann durch Aufrufen von IVdsAsync::Wait über den ppAsync-Parameter abgerufen werden. Die zurückgegebene VDS_ASYNC_OUTPUT-Struktur enthält den Zeiger der Volumeobjektschnittstelle im cv.pVolumeUnk-Element .

Syntax

HRESULT CreateVolume(
  [in]  VDS_VOLUME_TYPE type,
  [in]  VDS_INPUT_DISK  *pInputDiskArray,
  [in]  LONG            lNumberOfDisks,
  [in]  ULONG           ulStripeSize,
  [out] IVdsAsync       **ppAsync
);

Parameter

[in] type

Ein von VDS_VOLUME_TYPE aufgezählter Volumetyp. Volumes auf Basisdatenträgern können nur einen Umfang aufweisen, und nur das flag VDS_VT_SIMPLE ist gültig.

[in] pInputDiskArray

Zeiger auf ein Array von VDS_INPUT_DISK Strukturen; Eine Struktur für jeden Datenträger. Ein Datenträger kann nur einmal in das Array eingeschlossen werden. Alle Datenträger im Array müssen verwendet werden, andernfalls schlägt die Methode fehl. Aufrufer müssen das Array zuordnen und initialisieren und den Arbeitsspeicher freigeben, wenn der Aufruf zurückgibt.

[in] lNumberOfDisks

Die Gesamtzahl der Datenträger, die zum Volume beitragen.

Hinweis VDS erzwingt einen Grenzwert von 32 Datenträgern für übergreifende, Stripeset- und Stripesetvolumes mit Parität (RAID-5).
 

[in] ulStripeSize

Wenn das Volume mit Stripeset versehen ist, die Größe jedes Stripes in Bytes. Übergeben Sie null Bytes für VDS_VT_SIMPLE, VDS_VT_SPAN und VDS_VT_MIRROR. 64 KB für VDS_VT_STRIPE und VDS_VT_PARITY.

[out] ppAsync

Die Adresse eines IVdsAsync-Schnittstellenzeigers , der von VDS bei der Rückgabe initialisiert wird. Aufrufer müssen die Schnittstelle freigeben. Verwenden Sie diesen Zeiger, um den status des Vorgangs abzubrechen, abzuwarten oder abzufragen.

Wenn Sie IVdsAsync::Wait für diese Methode aufrufen und ein erfolgreicher HRESULT-Wert zurückgegeben wird, müssen Sie die in der VDS_ASYNC_OUTPUT-Struktur zurückgegebenen Schnittstellen freigeben, indem Sie die IUnknown::Release-Methode für jeden Schnittstellenzeiger aufrufen. Wenn Wait jedoch einen HRESULT-Fehlerwert zurückgibt oder der pHrResult-Parameter von Wait einen HRESULT-Fehlerwert empfängt, sind die Schnittstellenzeiger in der VDS_ASYNC_OUTPUT-StrukturNULL und müssen nicht freigegeben werden. Sie können HRESULT-Werte für Erfolg oder Fehler testen, indem Sie die in Winerror.h definierten Makros SUCCEEDED und FAILED verwenden.

Rückgabewert

Diese Methode kann HRESULT-Standardwerte wie E_INVALIDARG oder E_OUTOFMEMORY und VDS-spezifische Rückgabewerte zurückgeben. Es kann auch konvertierte Systemfehlercodes mithilfe des makros HRESULT_FROM_WIN32 zurückgeben. Fehler können vom VDS selbst oder vom zugrunde liegenden VDS-Anbieter stammen, der verwendet wird. Folgende Rückgabewerte sind möglich.

Rückgabecode/-wert BESCHREIBUNG
S_OK
Das Volume wurde erfolgreich erstellt.
VDS_S_NO_NOTIFICATION
0x00042517L
Es wurde keine Volume-Eingangsbenachrichtigung empfangen. Möglicherweise müssen Sie IVdsService::Refresh aufrufen.
VDS_S_UPDATE_BOOTFILE_FAILED
0x00042434L
Das Volume wurde erfolgreich erstellt, aber VDS konnte die Startoptionen im BCD-Speicher (Boot Configuration Data) nicht aktualisieren.

Windows Server 2003: Startoptionen werden in der boot.ini-Datei auf einem x86- oder x64-System oder NVRAM auf einem Itanium-System gespeichert.

VDS_E_DISK_NOT_FOUND_IN_PACK
0x8004252DL
Die angegebenen Datenträger gehören nicht zum gleichen Paket.
VDS_E_DMADMIN_METHOD_CALL_FAILED
0x80042420L
Fehler beim LDM-Dienst bei einer Methode.
VDS_E_EXTENT_SIZE_LESS_THAN_MIN
0x80042433L
Die übergebene Blöckegröße ist zu klein.
VDS_E_INVALID_DISK_COUNT
0x80042526L
Die angegebene Anzahl von Datenträgern ist für diesen Vorgang ungültig.
VDS_E_INVALID_MEMBER_COUNT
0x80042522L
Die Memberanzahl für das Volume muss größer als 0 sein.
VDS_E_INVALID_MEMBER_ORDER
0x80042524L
Die Memberindizes müssen monoton ansteigen und mit 0 beginnen.
VDS_E_INVALID_OPERATION
0x80042415L
Der übergebene Datenträger ist ein CD-ROM- oder DVD-Gerät.
VDS_E_INVALID_PACK
0x8004251AL
Dieser Vorgang ist für dieses Datenträgerpaket nicht zulässig.
VDS_E_INVALID_PLEX_COUNT
0x80042521L
Die Plexanzahl für das Volume muss größer als 0 sein.
VDS_E_INVALID_PLEX_ORDER
0x80042523L
Die Plexindizes müssen monoton ansteigen und mit 0 beginnen.
VDS_E_INVALID_STRIPE_SIZE
0x80042525L
Die Stripegröße in Bytes muss eine Leistung von 2 für Striped- und RAID-5-Volumetypen und für alle anderen Volumetypen null sein.
VDS_E_MISSING_DISK
0x80042454L
Der angegebene Datenträger fehlt.
VDS_E_NO_MEDIA
0x80042412L
Ein Wechseldatenträger enthält keine Medien, die über das Datenträgerarray übergeben werden.
VDS_E_NOT_ENOUGH_SPACE
0x8004240FL
Auf einem der Datenträger ist nicht genügend Speicherplatz vorhanden.
VDS_E_NOT_SUPPORTED
0x80042400L
Der Volumetyp wird nicht unterstützt, oder auf dem An die -Methode übergebenen Wechseldatenträger ist bereits ein Volume vorhanden. Ein Wechseldatenträger kann nur über ein Volume verfügen.
VDS_E_OBJECT_NOT_FOUND
0x80042405L
Mindestens einer der übergebenen Datenträger wurde nicht gefunden.
VDS_E_ONE_EXTENT_PER_DISK
0x80042531L
Ein einzelner Datenträger kann nicht zu mehreren Membern oder mehreren Plexes desselben Volumes beitragen.
VDS_E_PACK_OFFLINE
0x80042444L
Auf das Zielpaket kann nicht zugegriffen werden.
VDS_E_PARTITION_LIMIT_REACHED
0x80042407L
Die maximale Anzahl von Partitionen (primäre Partitionen oder primäre Partitionen mit einer erweiterten Partition) ist bereits vorhanden, wenn der Aufrufer versucht, eine zusätzliche primäre Partition oder erweiterte Partition zu erstellen.
VDS_E_PROVIDER_CACHE_CORRUPT
0x8004241FL
Der Cache des dynamischen Anbieters ist beschädigt.
VDS_E_VOLUME_DISK_COUNT_MAX_EXCEEDED
0x80042529L
Pro Volume sind nicht mehr als 32 Datenträger zulässig.
VDS_E_VOLUME_TOO_SMALL
0x8004242CL
Die Volumegröße ist zu klein.

Hinweise

Hinweis Diese Methode kann nicht verwendet werden, um ein Volume auf einem Wechseldatenträger zu erstellen.
 
Aufrufer verwenden diese Methode, um ein neues einfaches, überspanntes, gestreiftes, gespiegeltes oder gestreiftes Volume mit Parität (RAID-5) im aktuellen Pack zu erstellen. Einfache und übergreifende Volumes haben genau ein Plex und ein Element. Striped- und RAID-5-Volumes verfügen über mehrere Spalten und Member. Gespiegelte Volumes bestehen aus mehreren Plexes.

Basisdatenträger dürfen nur einfache Volumes enthalten. Dynamische Datenträger können Volumes aller Typen enthalten, solange das Betriebssystem den Bindungsvorgang unterstützt. Nicht-Serverplattformen unterstützen keine fehlertoleranten Bindungsvorgänge. Allen neu erstellten Volumes fehlt ein Laufwerkbuchstabe.

Auf einem einfachen Datenträger erstellt diese Methode eine primäre Partition. Wenn bereits drei primäre Partitionen auf dem Datenträger vorhanden sind, wird eine erweiterte Partition erstellt, um den größten zusammenhängenden freien Speicherplatz abzudecken, der auf dem Datenträger übrig ist, und erstellt dann ein logisches Laufwerk innerhalb der erweiterten Partition.

Ein Datenträger kann nicht zu mehr als einem Plex desselben Volumes beitragen. Ein einzelner Datenträger kann jedoch zu mehreren Volumes beitragen. Ein einfaches Volume verfügt nur über eine VDS_INPUT_DISK-Struktur , während übergreifende, gestreifte, gespiegelte und RAID-5-Volumes eine Struktur für jeden mitwirkenden Datenträger aufweisen.

Die Größe des in der VDS_INPUT_DISK-Struktur angegebenen Datenträgers kann der vollständige Datenträger oder ein Teil des Datenträgers sein. Wenn zwei Datenträger ein gespiegeltes Volume bilden, verwendet VDS den kleinsten Datenträger, um die Größe des Spiegel zu berechnen. (Die Anbieterrichtlinie bestimmt den tatsächlichen Offset, die Länge und die Anzahl der Datenträgerausdehnungen, die einem bestimmten Eingabedatenträger zugeordnet sind.) Verwenden Sie die IVdsPack::QueryVolumes-Methode , um die genaue Größe des erstellten Volumes zu bestimmen.

Um ein logisches Volume mit einem optionalen Ausrichtungsparameter zu erstellen, verwenden Sie die IVdsPack2::CreateVolume2-Methode , oder verwenden Sie den HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\vds\Alignment Registrierungsschlüssel, um den Ausrichtungswert in Bytes anzugeben.

Windows 7, Windows Server 2008 R2, Windows Vista und Windows Server 2008: Auf einem einfachen Datenträger ignoriert die CreateVolume-Methode den HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\vds\Alignment Registrierungsschlüssel. Dies ist ein bekanntes Problem und wird behoben. Verwenden Sie als Problemumgehung die IVdsAdvancedDisk::CreatePartition - oder IVdsCreatePartitionEx::CreatePartitionEx-Methode , um Partitionen auf dem Basisdatenträger zu erstellen, damit sie ordnungsgemäß ausgerichtet sind.

Dynamische Partitionen und Volumes werden mithilfe der Werte unter dem folgenden Registrierungsschlüssel ausgerichtet:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\vds\Alignment

Die Standardausrichtung beträgt 1 MB, wenn der Datenträger 4 GB oder größer ist, oder 64 KB, wenn der Datenträger kleiner als 4 GB ist.

Implementer müssen einen Zeiger auf die IVdsAsync-Schnittstelle für diese Methode zurückgeben, unabhängig davon, ob der Aufruf einen asynchronen Vorgang initiiert.

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Windows Vista [nur Desktop-Apps]
Unterstützte Mindestversion (Server) Windows Server 2003 [nur Desktop-Apps]
Zielplattform Windows
Kopfzeile vds.h
Bibliothek Uuid.lib

Weitere Informationen

IVdsAsync

IVdsAsync::Wait

IVdsPack

IVdsPack2::CreateVolume2

IVdsPack::QueryVolumes

VDS_ASYNC_OUTPUT

VDS_INPUT_DISK

VDS_VOLUME_TYPE