次の方法で共有


IVdsSubSystem2::CreateLun2 メソッド (vds.h)

[Windows 8とWindows Server 2012以降、仮想ディスク サービス COM インターフェイスは Windows Storage Management API に置き換えられます。

LUN を作成します。 このメソッドは IVdsSubSystem::CreateLun メソッドと同じですが、オートマジック ヒントは 、VDS_HINTS 構造体ではなくVDS_HINTS2 構造を使用 して提供されます。

構文

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
);

パラメーター

[in] type

LUN の種類を指定する VDS_LUN_TYPE 列挙値。 新しい LUN には、自動マジックタイプまたは特定の RAID タイプを指定できますが、両方を指定することはできません。 呼び出し元が automagic 型を指定する場合は、 pHints パラメーターに 1 つ以上の自動マジック ヒントを指定する必要があります。

新しい LUN オブジェクトのインターフェイス ポインターは、ppAsync パラメーターで返されるインターフェイス ポインターで IVdsAsync::Wait メソッドを呼び出すことによって取得できます。 Wait によって返されるVDS_ASYNC_OUTPUT構造体には、cl.p LunUnk メンバー内の LUN オブジェクト インターフェイス ポインターが含まれています。

[in] ullSizeInBytes

新しい LUN のサイズ (バイト単位)。 プロバイダーは、アラインメント要件やその他の制限を満たすために、サイズを切り上げたり下げたりできます。 (ほとんどの場合、プロバイダーは切り上げ、まれな例外を除き、LUN が少なくとも要求された大きさであることを確認します)。

LUN が作成されたら、呼び出し元は IVds Lun::GetProperties メソッドを呼び出すことによって、LUN の実際のサイズを決定できます。

[in] pDriveIdArray

LUN の作成に使用する各ドライブの VDS_OBJECT_ID を含む配列へのポインター。 このパラメーターに NULL 以外の値を指定することで、呼び出し元は、プロバイダーが指定された順序ですべてのドライブを使用し、次のドライブに移動する前に 1 つのドライブ上のすべてのエクステントを使用し、LUN が要求されたサイズに達したときに停止することを要求します。

または、呼び出し元は、このパラメーターに NULL を渡し、lNumberOfDrives で 0 渡すことによって、ドライブを自動的に選択するようにプロバイダーに指示することもできます。 (lNumberOfDrives が 0 の場合にのみ NULL を渡します)。

型パラメーターで自動マジック を指定する場合、このパラメーターは NULL である必要があります。

[in] lNumberOfDrives

pDriveIdArray で指定されたドライブの数。 呼び出し元が 0 を渡した場合、プロバイダーはドライブを選択します。

型パラメーターで自動マジック を指定する場合、このパラメーターは 0 である必要があります。

LUN が作成された後、呼び出し元は IVds LunPlex::QueryExtents メソッドを呼び出すことによって、使用中のドライブを特定できます。

[in] pwszUnmaskingList

LUN へのアクセスを許可するコンピューターを指定する一覧。 リストは、セミコロンで区切られた NULL で終わる、人間が読み取り可能な文字列です。

値が "" の場合、ストレージ サブシステムに接続されている HBA ポートを持つすべてのコンピューターに LUN へのアクセス権が付与されます。 値が "" の場合、LUN へのアクセス権を付与するコンピューターはありません。

メモ 実際には、値が "" の場合、ほとんどのハードウェア プロバイダーは、ローカル コンピューター上のポートとイニシエーターにのみ LUN へのアクセスを許可します。

 

"*" または "" が指定されている場合、他の値を指定することはできません。

ファイバー チャネル ネットワークとシリアル接続 SCSI (SAS) ネットワークの場合、各エントリは、LUN がマスク解除される各ポートの 64 ビットのワールドワイド名 (WWN) で、16 進数の文字列 (16 文字の長さ)、最上位バイトの先頭に書式設定されます。 たとえば、WWN アドレス 01:23:45:67:89:AB:CD:EF は "0123456789ABCDEF" として表されます。 詳細については、 ファイバー チャネルSAS の T10 仕様に関するページを参照してください。

iSCSI ネットワークの場合、各エントリは、LUN がマスク解除される各イニシエーターの iSCSI 修飾名 (IQN) です。 特定のイニシエーターにマスクされていない LUN は、そのイニシエーターに関連付けられていると見なされます。

メモ マスク解除リストには、同じ WWN または IQN を複数回含めることができます。 呼び出し元は、リストから重複を削除したり、WWN または IQN の形式を検証したりすることは想定されていません。
 
LUN が作成されると、呼び出し元は IVds Lun::GetProperties メソッドを呼び出すことによって、実際のマスク解除リストを特定できます。

[in] pHints2

LUN の作成に使用するヒントを指定する VDS_HINTS2 構造体へのポインター。 プロバイダーは、LUN にヒントを適用する必要はありません。 VDS_HINTS2構造体で指定されたヒントは、プロバイダーへの要求のみです。

LUN が作成されると、呼び出し元は IVds Lun2::QueryHints2 メソッドを呼び出すことによって、プロバイダーが適用したヒントを特定できます。

型パラメーターで自動マジック以外の を指定する場合、このパラメーターは NULL である必要があります。

[out] ppAsync

戻り時に VDS が初期化する IVdsAsync インターフェイス ポインターのアドレス。 呼び出し元はインターフェイスを解放する必要があります。 このインターフェイスを使用して、操作の状態を取り消す、待機する、またはクエリを実行します。

返されたインターフェイス ポインターで IVdsAsync::Wait が呼び出され、成功した HRESULT 値が返された場合、 VDS_ASYNC_OUTPUT 構造体で返されるインターフェイスは、各インターフェイス ポインターで IUnknown::Release メソッドを呼び出して解放する必要があります。 ただし、Wait がエラー HRESULT 値を返す場合、または WaitpHrResult パラメーターがエラー HRESULT 値を受け取る場合、VDS_ASYNC_OUTPUT構造体のインターフェイス ポインターは NULL であり、解放する必要はありません。 成功または失敗の HRESULT 値をテストするには、Winerror.h で定義 されている SUCCEEDED マクロと FAILED マクロを使用します。

戻り値

このメソッドは、E_INVALIDARGやE_OUTOFMEMORYなどの標準の HRESULT 値と、 VDS 固有の戻り値を返すことができます。 また、HRESULT_FROM_WIN32 マクロを使用して、変換されたシステム エラー コードを返すこともできます。 エラーは、VDS 自体または使用されている基になる VDS プロバイダー から発生する可能性があります。 可能な戻り値は次のとおりです。

リターン コード/値 Description
VDS_E_PROVIDER_CACHE_CORRUPT
0x8004241FL
プロバイダー内に、配列に関する情報をキャッシュするソフトウェアまたは通信の問題があります。 キャッシュを復元するには、 IVdsHwProvider::Reenumerate メソッドの後に IVdsHwProvider::Refresh メソッドを使用します。
VDS_E_OBJECT_DELETED
0x8004240BL
サブシステム オブジェクトが存在しなくなりました。
VDS_E_OBJECT_STATUS_FAILED
0x80042431L
サブシステムが失敗状態であり、要求された操作を実行できません。
VDS_E_ANOTHER_CALL_IN_PROGRESS
0x80042404L
別の操作が進行中です。この操作は、前の操作または操作が完了するまで続行できません。
VDS_E_OBJECT_NOT_FOUND
0x80042405L
識別子は既存のオブジェクトを参照しません。 この値は、 VDS_OBJECT_ID 定数を受け取る任意のメソッドから返すことができます。
VDS_E_NOT_SUPPORTED
0x80042400L
この操作またはパラメーターの組み合わせは、このプロバイダーではサポートされていません。
VDS_E_NOT_ENOUGH_SPACE
0x8004240FL
この操作に使用できる領域が不足しています。
VDS_E_NOT_ENOUGH_DRIVE
0x80042410L
この操作を完了するには、サブシステムに存在する空きドライブが少なすぎます。

注釈

パラメーターと pHints2 パラメーターに適切な値を選択することで、呼び出し元は LUN の属性を完全、部分的、または最小限に指定できます。 プロバイダーは、pHints パラメーターが指すVDS_HINTS2構造で指定された自動マジック ヒントに基づいて、指定されていない属性を自動的に含めることができます。

実装者へのメモ: プロバイダーは、このメソッドの呼び出しで非同期操作が開始されない場合でも、ppAsync パラメーターで IVdsAsync インターフェイス ポインターを返す必要があります。

pwszUnmaskingList パラメーターの WWN と IQN の一覧には、重複する名前が含まれている可能性があります。 リスト内のすべての名前を検証し、必要に応じて重複を削除するのはプロバイダーの責任です。

Create Lun2 メソッドに応答し、新しい LUN を任意のホストにマスク解除する前に、プロバイダーは最初と最後のメガバイトにゼロを入力し、LUN は初期化されません。

E_INVALIDARGとVDS_E_NOT_SUPPORTED戻り値には微妙な違いがあります。 プロバイダーは、VDS API がクライアントに提供できるすべての機能を実装するとは思われません。 たとえば、Create Lun2 メソッドは、さまざまな種類の LUN (単純、ミラー、ストライプ、パリティなど) を作成する機能を公開します。 ただし、プロバイダーはすべての種類の LUN をサポートする必要はありません。 呼び出し元が有効なVDS_LUN_TYPE列挙値ではないパラメーターの値を指定した場合、プロバイダーはE_INVALIDARGを返す必要があります。 呼び出し元がプロバイダーがサポートしていない有効な の値を指定した場合、プロバイダーはVDS_E_NOT_SUPPORTEDを返す必要があります。

要件

要件
サポートされている最小のクライアント Windows 7 [デスクトップ アプリのみ]
サポートされている最小のサーバー Windows Server 2008 R2 [デスクトップ アプリのみ]
対象プラットフォーム Windows
ヘッダー vds.h
Library Uuid.lib

こちらもご覧ください

IVdsAsync

IVdsAsync::Wait

IVdsHwProvider::Reenumerate

IVdsHwProvider::Refresh

IVdsLun

IVdsLun2::QueryHints2

IVdsLun::GetProperties

IVdsLunPlex::QueryExtents

IVdsSubSystem2

IVdsSubSystem::CreateLun

IVdsSubSystem::QueryLuns

VDS_ASYNC_OUTPUT

VDS_HINTS2

VDS_LUN_TYPE