IVdsSubSystem::CreateLun メソッド (vdshwprv.h)

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

Create Lun メソッドは、論理ユニット番号 (LUN) を作成します。

構文

HRESULT CreateLun(
  [in]  VDS_LUN_TYPE  type,
  [in]  ULONGLONG     ullSizeInBytes,
  [in]  VDS_OBJECT_ID *pDriveIdArray,
  [in]  LONG          lNumberOfDrives,
  [in]  LPWSTR        pwszUnmaskingList,
  [in]  VDS_HINTS     *pHints,
  [out] IVdsAsync     **ppAsync
);

パラメーター

[in] type

LUN の種類を指定する VDS_LUN_TYPE 列挙値。 新しい LUN には、自動マジック タイプまたは特定の RAID タイプを指定できますが、両方を使用することはできません。 呼び出し元が自動マジック型を指定する場合は、 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] pHints

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

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

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

[out] ppAsync

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

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

戻り値

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

リターン コード/値 説明
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
サブシステムに存在する空きドライブが少なすぎて、この操作を完了できません。

解説

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

VDS プロバイダーが単純なターゲット構成のみをサポートしている場合、サブシステムは、新しく作成された LUN オブジェクトを iSCSI ターゲット オブジェクトに自動的に関連付ける必要があります。 VDS_SUB_SYSTEM_FLAG 列挙体のVDS_SF_SUPPORTS_SIMPLE_TARGET_CONFIG値を確認します。

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

ハードウェア プロバイダーは、LUN を再利用できるように LUN のパーティション情報を削除する役割を担います。 LUN が MBR ディスクの場合、これはディスクの最初と最後の 1 MB にゼロを書き込むことで実現されます。 GPT ディスクの場合は、ディスクの最初と最後の 16 KB にゼロを書き込む必要があります。

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

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

要件

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

関連項目

IVdsAsync

IVdsAsync::Wait

IVdsHwProvider::Reenumerate

IVdsHwProvider::Refresh

IVdsLun

IVdsLun::GetProperties

IVdsLun::QueryHints

IVdsLunPlex::QueryExtents

IVdsLunPlex::QueryHints

IVdsSubSystem

IVdsSubSystem::QueryLuns

VDS_ASYNC_OUTPUT

VDS_HINTS

VDS_LUN_TYPE