IVdsSubSystem2::CreateLun2-Methode (vds.h)
[Ab Windows 8 und Windows Server 2012 wird die COM-Schnittstelle des Virtuellen Datenträgerdiensts durch die Windows Storage Management-API ersetzt.]
Erstellt eine LUN. Diese Methode ist identisch mit der IVdsSubSystem::CreateLun-Methode , mit der Ausnahme, dass automagische Hinweise mithilfe einer VDS_HINTS2-Struktur anstelle einer VDS_HINTS-Struktur bereitgestellt werden.
Syntax
HRESULT CreateLun2(
[in] VDS_LUN_TYPE type,
[in] ULONGLONG ullSizeInBytes,
[in] VDS_OBJECT_ID *pDriveIdArray,
[in] LONG lNumberOfDrives,
[in] LPWSTR pwszUnmaskingList,
[in] VDS_HINTS2 *pHints2,
[out] IVdsAsync **ppAsync
);
Parameter
[in] type
Ein VDS_LUN_TYPE Enumerationswert, der den LUN-Typ angibt. Die neue LUN kann ein Automagic-Typ oder ein bestimmter RAID-Typ sein, aber nicht beides. Wenn der Aufrufer einen automagic-Typ angibt, sollten mindestens ein Automagic-Hinweis im pHints-Parameter angegeben werden.
Der Schnittstellenzeiger für das neue LUN-Objekt kann abgerufen werden, indem die IVdsAsync::Wait-Methode für den im ppAsync-Parameter zurückgegebenen Schnittstellenzeiger aufgerufen wird. Die vonWait zurückgegebene VDS_ASYNC_OUTPUT-Struktur enthält den LUN-Objektschnittstellenzeiger im cl.pLunUnk-Element .
[in] ullSizeInBytes
Die Größe der neuen LUN in Bytes. Der Anbieter kann die Größe auf- oder herunterrunden, um Ausrichtungsanforderungen oder andere Einschränkungen zu erfüllen. (In den meisten Fällen rundet der Anbieter auf und stellt sicher, dass die LUN mit seltenen Ausnahmen mindestens so groß ist wie angefordert.)
Nachdem die LUN erstellt wurde, kann der Aufrufer die tatsächliche Größe der LUN ermitteln, indem er die IVdsLun::GetProperties-Methode aufruft .
[in] pDriveIdArray
Ein Zeiger auf ein Array, das eine VDS_OBJECT_ID für jedes der Laufwerke enthält, die zum Erstellen der LUN verwendet werden sollen. Durch Angabe eines Nicht-NULL-Werts für diesen Parameter fordert der Aufrufer an, dass der Anbieter alle Laufwerke in der angegebenen Reihenfolge verwendet, alle Erweiterungen auf einem Laufwerk verwendet, bevor er zum nächsten wechselt, und beendet, wenn die LUN die angeforderte Größe erreicht hat.
Alternativ kann der Aufrufer den Anbieter anweisen, die Laufwerke automatisch auszuwählen, indem er NULL in diesem Parameter und 0 in lNumberOfDrives übergibt. (Übergeben Sie NULL , wenn und nur , wenn lNumberOfDrives 0 ist.)
Wenn der Type-Parameter einen automagischen Typ angibt, sollte dieser Parameter NULL sein.
[in] lNumberOfDrives
Die Anzahl der in pDriveIdArray angegebenen Laufwerke. Wenn der Aufrufer 0 übergibt, wählt der Anbieter die Laufwerke aus.
Wenn der Type-Parameter einen automagischen Typ angibt, sollte dieser Parameter 0 sein.
Nachdem die LUN erstellt wurde, kann der Aufrufer ermitteln, welche Laufwerke verwendet werden, indem er die IVdsLunPlex::QueryExtents-Methode aufruft .
[in] pwszUnmaskingList
Eine Liste, die die Computer angibt, denen der Zugriff auf die LUN gewährt werden soll. Die Liste ist eine semikolontrennende, NULL-beendete, für Menschen lesbare Zeichenfolge.
Wenn der Wert "" ist, soll allen Computern, die über einen HBA-Port verfügen, der an das Speichersubsystem angefügt ist, Zugriff auf die LUN gewährt werden. Wenn der Wert "" ist, soll keinem Computer Zugriff auf die LUN gewährt werden.
Wenn "*" oder "" angegeben ist, kann kein anderer Wert angegeben werden.
Für Fibre Channel-Netzwerke und sas-Netzwerke (Serial Attached SCSI) ist jeder Eintrag ein 64-Bit World Wide Name (WWN) jedes Ports, an den die LUN entmasket ist, und formatiert als hexadezimale Zeichenfolge (16 Zeichen lang), wobei das wichtigste Byte zuerst ist. Beispielsweise wird eine WWN-Adresse von 01:23:45:67:89:AB:CD:EF als "0123456789ABCDEF" dargestellt. Weitere Informationen finden Sie in den T10-Spezifikationen für Fibre Channel und SAS.
Bei iSCSI-Netzwerken ist jeder Eintrag ein iSCSI-qualifizierter Name (IQN) jedes Initiators, für den die LUN enttarnt wird. Eine LUN, die einem bestimmten Initiator enttarnt wurde, gilt als mit diesem Initiator verknüpft.
[in] pHints2
Zeiger auf eine VDS_HINTS2-Struktur , die die Hinweise angibt, die beim Erstellen der LUN verwendet werden sollen. Der Anbieter muss die Hinweise nicht auf die LUN anwenden. Die in der VDS_HINTS2-Struktur angegebenen Hinweise sind nur eine Anforderung an den Anbieter.
Nachdem die LUN erstellt wurde, kann der Aufrufer die Vom Anbieter angewendeten Hinweise ermitteln, indem er die IVdsLun2::QueryHints2-Methode aufruft .
Wenn der Type-Parameter einen nicht automatischmagischen Typ angibt, sollte dieser Parameter NULL sein.
[out] ppAsync
Die Adresse eines IVdsAsync-Schnittstellenzeigers , der von VDS bei der Rückgabe initialisiert wird. Aufrufer müssen die Schnittstelle freigeben. Verwenden Sie diese Schnittstelle, um den status des Vorgangs abzubrechen, abzuwarten oder abzufragen.
Wenn IVdsAsync::Wait für den zurückgegebenen Schnittstellenzeiger aufgerufen wird und ein erfolgreicher HRESULT-Wert zurückgegeben wird, müssen die in der VDS_ASYNC_OUTPUT-Struktur zurückgegebenen Schnittstellen durch Aufrufen der IUnknown::Release-Methode für jeden Schnittstellenzeiger freigegeben werden. Wenn Wait jedoch einen Fehler-HRESULT-Wert zurückgibt oder wenn der pHrResult-Parameter von Wait einen Fehler-HRESULT-Wert empfängt, sind die Schnittstellenzeiger in der VDS_ASYNC_OUTPUT Struktur NULL und müssen nicht freigegeben werden. Sie können mit den in Winerror.h definierten Makros SUCCEEDED und FAILED auf Erfolg oder Fehler HRESULT-Werte testen.
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 HRESULT_FROM_WIN32-Makros 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 |
---|---|
|
Es gibt ein Software- oder Kommunikationsproblem innerhalb eines Anbieters, der Informationen zum Array zwischenspeichert. Verwenden Sie die IVdsHwProvider::Reenumerate-Methode gefolgt von der IVdsHwProvider::Refresh-Methode , um den Cache wiederherzustellen. |
|
Das Subsystemobjekt ist nicht mehr vorhanden. |
|
Das Subsystem ist fehlerhaft und kann den angeforderten Vorgang nicht ausführen. |
|
Ein weiterer Vorgang wird ausgeführt. Dieser Vorgang kann erst fortgesetzt werden, wenn der vorherige Vorgang oder die vorherigen Vorgänge abgeschlossen sind. |
|
Der Bezeichner verweist nicht auf ein vorhandenes Objekt. Dieser Wert kann von jeder Methode zurückgegeben werden, die eine VDS_OBJECT_ID Konstante verwendet. |
|
Dieser Vorgang oder diese Kombination von Parametern wird von diesem Anbieter nicht unterstützt. |
|
Für diesen Vorgang ist nicht genügend Nutzbarer Speicherplatz vorhanden. |
|
Für diesen Vorgang sind zu wenige freie Laufwerke im Subsystem vorhanden. |
Hinweise
Durch Die Auswahl geeigneter Werte für den Typ und pHints2-Parameter kann der Aufrufer die Attribute des LUN vollständig, teilweise oder minimal angeben. Der Anbieter kann automatisch nicht spezifizierte Attribute basierend auf den automagischen Hinweisen einschließen, die in der VDS_HINTS2-Struktur angegeben sind, auf die der pHints-Parameter verweist.
Hinweise für Implementierer: Der Anbieter muss einen IVdsAsync-Schnittstellenzeiger im ppAsync-Parameter zurückgeben, auch wenn der Aufruf dieser Methode keinen asynchronen Vorgang initiiert.
Die Liste der WWNs und IQNs im Parameter pwszUnmaskingList kann doppelte Namen enthalten. Es liegt in der Verantwortung des Anbieters, alle Namen in der Liste zu überprüfen und bei Bedarf Duplikate zu entfernen.
Als Reaktion auf die CreateLun2-Methode und vor dem Entlarmen der neuen LUN auf einem beliebigen Host sollte der Anbieter die ersten und letzten Megabytes mit Nullen füllen, sodass die LUN nicht initialisiert wird.
Es gibt einen subtilen Unterschied zwischen den E_INVALIDARG und VDS_E_NOT_SUPPORTED Rückgabewerten. Von Anbietern wird nicht erwartet, dass sie jedes Feature implementieren, das die VDS-API einem Client präsentieren kann. Die CreateLun2-Methode macht beispielsweise die Möglichkeit verfügbar, viele verschiedene Typen von LUNs zu erstellen (z. B. einfache, Spiegel, Striped und Parität). Anbieter müssen jedoch nicht alle Arten von LUNs unterstützen. Wenn der Aufrufer einen Wert für den Typparameter angibt, der kein gültiger VDS_LUN_TYPE Enumerationswert ist, sollte der Anbieter E_INVALIDARG zurückgeben. Wenn der Aufrufer einen gültigen Typwert angibt, den der Anbieter nicht unterstützt, sollte der Anbieter VDS_E_NOT_SUPPORTED zurückgeben.
Anforderungen
Anforderung | Wert |
---|---|
Unterstützte Mindestversion (Client) | Windows 7 [nur Desktop-Apps] |
Unterstützte Mindestversion (Server) | Windows Server 2008 R2 [nur Desktop-Apps] |
Zielplattform | Windows |
Kopfzeile | vds.h |
Bibliothek | Uuid.lib |