IVdsLun::SetMask メソッド (vdshwprv.h)

[Windows 8とWindows Server 2012以降、Virtual Disk Service COM インターフェイスは Windows Storage Management API に置き換えられます。

LUN へのアクセスを許可するコンピューターの一覧であるマスク解除リストを指定します。

構文

HRESULT SetMask(
  [in] LPWSTR pwszUnmaskingList
);

パラメーター

[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 または iSCSI 名の形式を検証したりすることは想定されていません。 また、アクセスは累積的ではありません。 つまり、このメソッドを 2 回連続して呼び出すと、2 回目の呼び出しで指定されたコンピューターにのみアクセス権が付与されます。
 

戻り値

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

リターン コード/値 Description
VDS_E_PROVIDER_CACHE_CORRUPT
0x8004241FL
この戻り値は、配列に関する情報をキャッシュするプロバイダー内のソフトウェアまたは通信の問題を通知します。 キャッシュを復元するには、 IVdsHwProvider::Reenumerate メソッドの後に IVdsHwProvider::Refresh メソッドを使用します。
VDS_E_OBJECT_DELETED
0x8004240BL
LUN オブジェクトが存在しなくなりました。
VDS_E_OBJECT_STATUS_FAILED
0x80042431L
LUN が失敗状態であり、要求された操作を実行できません。
VDS_E_ANOTHER_CALL_IN_PROGRESS
0x80042404L
別の操作が進行中です。この操作は、前の操作または操作が完了するまで続行できません。

注釈

SETMask メソッドを呼び出して LUN をマスクする前に、呼び出し元は対応するディスクを次のようにアンインストールする必要があります。 まず、 IVdsServiceUninstallDisk::GetDiskIdFrom LunInfo を呼び出して、マスクされている LUN に対応するディスクの VDS オブジェクト ID を取得します。 次に、ディスクの VDS オブジェクト ID を使用して IVdsServiceUninstallDisk::UninstallDisks を呼び出します。

Windows Server 2003 および Windows Server 2003 SP1: 対応するディスクをアンインストールするには、次の手順を実行します。 これらの手順は、Windows Server 2003 R2 で廃止されました。

  1. マスクするディスク上のボリュームを次のように見つけます。
    1. ディスクごとに IVdsDisk::QueryExtents メソッドを呼び出して、ディスクエクステントを列挙します。 このメソッドは、 VDS_DISK_EXTENT 構造体の一覧を返します。 この構造体の volumeId メンバーには、ボリューム GUID が含まれています。
    2. ソフトウェア プロバイダーによって管理されるボリュームを列挙するには、 IVdsSwProvider::QueryPacks メソッドを呼び出してパックを列挙し、 IVdsPack::QueryVolumes を呼び出して各パック内のボリュームを列挙します。 IVdsVolume::GetProperties を呼び出して、各ボリュームのVDS_VOLUME_PROP構造を取得します。 この構造体の id メンバーには、ボリューム GUID が含まれています。 pwszName メンバーには、ボリューム ハンドルを取得するために CreateFile に渡されるボリューム名が含まれています。
    3. IVdsDisk::QueryExtents を呼び出して取得したボリューム GUID を使用して、列挙ボリュームの一覧から必要なボリューム名を決定します。
  2. FSCTL_LOCK_VOLUME制御コードを使用して各ボリューム ロックします。 LUN が無傷のボリュームとして別のマシンに移動され、別のアプリケーションがボリューム ロックを保持している場合は、可能であれば 、次 の手順に進む前に、FSCTL_LOCK_VOLUME操作を再試行する必要があります。 ただし、ボリュームが削除されているためにロックされ、マウント解除されている場合は、 FSCTL_LOCK_VOLUME 操作を再試行する必要はありません。
    メモ この手順は省略可能です。 この手順の目的は、ロックを保持している可能性がある他のアプリケーションがそれらを解放できるようにすることです。 ロック操作が失敗した場合でも、次の手順に進む必要があります。
     
  3. FSCTL_DISMOUNT_VOLUME制御コードを使用して、各ボリュームのマウントを解除します。
  4. ボリュームがベーシック ディスク上にある場合は、 IOCTL_VOLUME_OFFLINE コントロール コードを使用してボリュームをオフラインにします。
  5. InstallFunction パラメーターにDIF_REMOVEを渡して、SetupDiCallClassInstaller 関数を使用して各ボリュームをアンインストールします。
  6. InstallFunction パラメーターのDIF_REMOVEを渡して、SetupDiCallClassInstaller 関数を使用して各ディスクをアンインストールします。
  7. IVdsService::CleanupObsoleteMountPoints メソッドを呼び出して、マウントされたフォルダーやドライブ文字の割り当てなどのユーザー モード パスをレジストリから削除します。

LUN がターゲット マシンにマスク解除されるか、ターゲット マシンからマスクされた後、バスの再スキャンが実行されるまで、そのマシンでの LUN の可視性が変わる可能性があります。 ターゲット マシン上の VDS アプリケーションは、 IVdsService::Reenumerate を呼び出してバスの再スキャンを開始します。 バスの再スキャンの開始は、ハードウェア プロバイダーではなく、VDS アプリケーションの責任です。

要件

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

こちらもご覧ください

IVdsHwProvider::Reenumerate

IVdsHwProvider::Refresh

IVdsLun